# Method: a coordinate-level facial symmetry audit

Version: 2026-10-08-v1. Author: AttractivenessTest team. Synthetic data only.

This audit calls the pinned site's normalizeFace and measureFace functions, engine 0.2.0. It measures one asymmetry index, not the site's calibrated attractiveness score. No detector, image, human subject or clinical reference is evaluated.

1. Start with the site's hand-constructed 478-slot frontal test fixture. Unused slots are filler, not anatomical observations. Publish only coordinates the symmetry calculation reads.
2. Convert normalized coordinates to image pixels after rounding x/y to six decimals, matching the engine.
3. Put the origin at the pupil midpoint and rotate coordinates so the pupil line is horizontal. A second, unrounded path isolates input quantization.
4. Average x over eight midline points. This is a vertical mirror axis after roll correction, not a least-squares best-fit anatomical midline.
5. Mirror the left point of each of 12 bilateral pairs across that axis, then measure its Euclidean distance to the right point.
6. Divide the mean gap by the distance between cheek points 234 and 454. Lower means a smaller landmark mismatch. The index is not a percentage of beauty or a fraction of asymmetric tissue.

Formula: A = sum(sqrt((x_r - (2*m - x_l))^2 + (y_r - y_l)^2)) / (12*W), where m is the mean midline x and W is cheek-to-cheek width.

The 52 cases are two baselines, five translations, five uniform scales, six rolls, four canvas changes, ten horizontal and ten vertical mouth-point displacements, and ten nose-midline displacements. The nonzero baseline moves the left mouth point four pixels to the right; W=290 pixels.

Changing the canvas is a coordinate re-encoding test, not raster resampling. Uniform scale is a transform of fixed coordinates, not moving a camera. Roll is an in-plane rotation, not yaw or pitch. The mouth and midline displacements are independent artificial perturbations, not realistic detector noise models.

An independently written Python implementation verifies every published result, 30 analytic expectations and the unrounded path to 1e-12. Execute python3 reproduce.py beside dataset.json and results.json. The maximum observed Python/engine difference in the initial run is 1.11e-17; this is arithmetic agreement, not accuracy on photos.

For the tested unrounded transforms the maximum baseline difference is below 1e-14. The real quantized path changes by at most 0.0000020480800190911166 in these 20 transformations. This observed maximum is not a universal error bound.

Correction contact: support@attractivenesstest.dev. Preserve this frozen version and publish a new dated version when inputs or the method change.
