# Lean feasibility — source review, 2026-09-15

## Outcome

**Repeatability and paired utility remain unvalidated.** The user subsequently directed implementation to proceed with best-guess lines on the photos, editable in the app, and explicitly requested an editable proxy horizon. This replaces the requirement to obtain a second blind annotation pass before building the editor. It does not establish measurement accuracy or comparison utility.

Source-only inspection covered the four manifest-selected full panels in P05/P06. A provisional first annotation pass is stored under ignored `artifacts/lean-feasibility/pass-1.json`, with source hashes, panel bounds, cue notes, uncertainty, intended-bike identity, and reference limitations. No detector proposals or computed rider ordering were inspected for that first pass. The local `lean-proposals.json` now supplies draft wheel and road-edge reference lines to the app; these are authored guesses, not output from a validated automatic wheel detector.

| Gate | P05 | P06 |
|---|---|---|
| Intended motorcycle / visible candidate cue | Identified; provisional tire-axis endpoints | Identified; white-helmet rider on silver bike at image right, excluding foreground red bike |
| Independent annotation repeatability | Pending second blind pass | Pending second blind pass |
| Shared stationary reference | No exact two-point correspondence approved; curved road edges need matched-segment review | Distant structures are blurred and partly occluded; no exact two-point correspondence approved |
| Useful paired comparison | Not established | Not established |
| Automatic proposals | Experiment pending independent annotations | Experiment pending independent annotations |
| Physical lean accuracy / coaching validity | Unvalidated | Unvalidated |

Implementation proceeds under that user-directed editable-proposal workflow. Draft lines show an apparent angle and annotation sensitivity, with paired differences withheld until both axes and comparability are reviewed. A lack of a calibrated horizon does not itself disqualify a shared stationary feature. No physical lean or causal coaching claim is validated.

## Optional independent evaluation protocol: `lean-source-v1`

Use the manifest-selected original full panels, with original watermarks intact. Hide joint overlays, automatic proposals, earlier annotation values, and all computed angles/deltas from each annotation pass. A second pass in the same agent context cannot be called independent merely because it has a new pass ID. Use a reviewer or isolated review context without the first-pass coordinates. These annotations are visible-image evidence, not anatomical or physical-angle ground truth.

1. Identify the intended motorcycle independently in each photo. Record the visual identity and exclusions. Do not let the old human detection crop constrain wheel endpoints.
2. For the provisional `visible-front-tire-long-axis` cue, place two endpoints along the apparent long orientation of the front tire/rim, near its visible upper and lower extent. Record ambiguity from the fender, tire thickness, and partially hidden rim. Do not substitute fork rake, a short contour tangent, a shadow, or a watermark edge. Record plausible alternatives and reject the cue if its long orientation cannot be placed repeatably.
3. Assign a positive endpoint uncertainty radius in source pixels before calculating any ordering. The first pass uses a conservative provisional radius; it is not a statistical confidence interval. An independent pass supplies its own radius. Freeze both original passes. If they disagree beyond those bounds, retain the disagreement and either justify wider bounds from source evidence or mark the cue unavailable; do not tune to a preferred rider ordering.
4. Review reference candidates separately: image vertical, explicitly assumed level, or the same two identifiable stationary points in both images. Unknown true slope is acceptable for the shared-feature trial. Require exact correspondence and review camera/view/heading differences. Different portions of a curved road edge, unrelated similar structures, watermarks, screenshot borders, and moving objects are ineligible. A tree silhouette alone does not establish a local road normal.
5. Before evaluating deltas, freeze the comparison protocol: acute undirected angles for upright references; signed modulo-180 wheel-minus-feature orientations for a shared reference. Endpoint reversal must not matter. Bound each segment's orientation perturbation by `asin(2r / length)` only when `length > 2r`; conservatively propagate bounds through the chosen angle/difference, rejecting ambiguous branch wrapping. Report annotation sensitivity separately from unknown perspective error. `LeanAnalysisTests` and `LeanReviewTests` verify the implemented arithmetic and eligibility using synthetic inputs.
6. Require reviewed cue, wheel heading, view, and reference compatibility. Independent image-vertical comparisons also need comparable camera roll. Report Rider minus Reference rider. An interval crossing zero leaves ordering unresolved. Shared-feature differences describe relative image rotation, never physical more/less lean. Similar speed is user-reported context and cannot enable a comparison.
7. After the independent annotations exist, assess a bounded offline edge/line proposal experiment against the frozen annotations, including wrong-motorcycle and watermark candidates. Do not promote it to production automatic detection.

## Verification and recovery

The opt-in `LeanFeasibilityTests` check full-panel/source bindings and endpoint disk agreement. They do not prove reviewer independence, reference correspondence, angular sensitivity, perspective compatibility, or usefulness. Each of those still needs the protocol review. Absent private inputs produce explicit skips rather than a fabricated feasibility pass.

```sh
POSE_PRIVATE_MANIFEST=data/2026-09-07-HarrisHillCCW-better/session.json \
POSE_LEAN_PASS_1=artifacts/lean-feasibility/pass-1.json \
scripts/swift.sh test --disable-sandbox --filter LeanFeasibilityTests
```

For the second reviewer, provide this protocol and the source manifest only. Do **not** provide `pass-1.json` until the second pass is frozen. Store the independent pass under ignored local storage with the same JSON fields, a distinct `passID`, honest provenance and hidden-input declarations, source/manifest hashes, and four frame annotations. Set `POSE_LEAN_PASS_2` to that file to run the endpoint-agreement check. File names, hashes, coordinates, images, and computed photo results remain private.

The initial private run passed source binding checks and explicitly skipped independent agreement. A deliberately tampered source hash failed the binding check as expected; that negative-check input and log remain under ignored storage. All four original source hashes were verified unchanged after native review. Draft angle display and user correction are now available; no reviewed paired utility outcome is claimed. Independent annotations can later evaluate repeatability, references, proposal usefulness, and paired utility separately. Do not equate green package tests with passing the measurement gate.
