# Paired review verification — 2026-09-14

Implemented the paired review and feedback plan locally. Functional verification and coaching utility are separate: the deterministic observation workflow is available; production suggestions and James/coach utility validation remain pending. This does not complete the parent plan's automatic coaching or reference-only composite.

## Feasibility boundary

Reviewed the parent U1 gates and `larger-source-feasibility.md` / `highres-feasibility.md` before implementation. The recorded no-pose cases, wrong-rider risk, occlusions, and lack of independent normalized accuracy evidence support a manually reviewed 2D path only. No new anatomical evaluation annotations or fresh Vision runs were needed for this feature. Existing source annotations were not changed to match results.

## Automated evidence

Run `scripts/swift.sh test --disable-sandbox` using the full Xcode toolchain. Final result: 31 tests passed (25 PoseCore, 6 PoseReview). The suite includes main-actor model and AppKit event tests; no private images are needed. No standalone linter is configured. Native bundling uses `scripts/build-review-app.sh`.

- U1: failing-first pairing/migration API tests, followed by passing role-order, missing-reference, duplicate-role, source-binding, baseline-identity, legacy decoding, context round-trip, and migration tests. The backup tests cover stale writers, future schemas, mismatching backups, symlinks, and retry after backup creation with the original destination still present. Current corrections/history survive legacy decoding.
- U2: frame/session/canvas target tests reject stale callbacks. Native-model tests load synthetic image/manifest/result fixtures and exercise both-rider editing, selection followed by Undo, missing reference failure, and unchanged opposite-pane edits. Existing geometry tests cover panel offsets and independent scaling.
- U3: failing-first known-angle and evidence-exclusion fixtures; 0°, 90°, 180°, translation/scaling/rotation, nonfinite/coincident geometry, reviewed-only extraction, withdrawal, identity/comparability gating, and synthetic rule behavior. Production rules remain empty.
- U4: deterministic revision/catalog tests; save/reopen/failed-save workflow; retry seeds never qualify. Main-actor tests verify document/report correspondence, presentation-only changes, stale retry rejection, and retry display settings staying with the original pane. A regression test first demonstrated direct session loading bypassing unsaved-edit protection; the load entry point now guards saving. AppKit canvas-event tests verify drag preview without recomputation, Escape cancellation, and mouse-up commit.
- U5: synthetic full save/reopen integration with corrections on both riders, evidence withdrawal, Undo, and conflict preservation. A native hosting-layout check covers the configured 1000 × 650 minimum with the inspector collapsed. The offscreen bitmap capture is not treated as a complete visual check because it does not reliably render all native text.

Initial tests failed before implementation because pairing, analysis, rule, or target APIs were absent. Later model integration tests used the real store and generated image fixtures, rather than mocking persistence. Compiler/test logs remain local under `/private/tmp/pair-*.log`.

## Native application checks

A separately identified QA app used copied sessions under ignored `artifacts/paired-review-qa/`; the user's running reviewer and original session files were not used for test mutations.

- Larger-source P01: James appeared left and Damien right, with independently fitted full panels and preserved watermarks. Dragging Damien's elbow from a subject-active selection changed only `P01-reference/left_elbow`. Selecting James and then Undo restored the reference correction. Reference-canvas keyboard nudge and Undo passed.
- Pane switching cancelled armed placement. Show markers, separate display controls, and collapsing/reopening the inspector worked without changing evidence. Normal 1400 × 900 and smaller native tiled layouts retained horizontal pairing and scrollable feedback; exact minimum-size layout also has the synthetic hosting check above.
- Context controls persisted with an explicit unknown corner direction. Test-only identity/comparability decisions on the QA copy enabled a reviewed elbow observation. Feature selection highlighted its joints. These test decisions are not coach approval or camera calibration.
- Marking a reference knee obscured removed its individual measurement and displayed missing-joint evidence; Undo restored it. Committed edits and context changes advanced the displayed report revision.
- Forced a competing disk revision in the QA copy, then changed visibility. The alert reported the conflict, the report showed the current in-memory revision as Unsaved, and the competitor's disk revision remained unchanged. Restored the controlled test fixture and undid the edit to continue QA.
- Temporarily withheld P02's copied reference file. Selection failed, retaining the complete P01 pair, report, and sidebar selection. Restored the copied image afterward. Source errors now identify the pair, role, and filename.
- Original two-panel P02: subject at source x=324 and reference at x=4 still displayed subject left and reference right.
- Clean larger-source P04: both original detectors had no pose and there were no corrections/retries in this test copy. Both photos opened. Manual elbow placement affected only the selected subject; Undo restored the empty edits. Missing evidence did not fabricate a measurement or focus.
- 2025 H01 reopened in Single mode with “No reference exists”; trying Compare retained Single mode without borrowing a 2026 reference.

Native live drag release and keyboard behavior were observed. The intermediate pending-drag label and Escape during a drag are additionally covered by direct AppKit event tests, since the UI automation drag operation completes as one atomic interaction. Rapid navigation and reopen use the model/store regression coverage as well as session switching above.

## Preservation and delivery

All 46 inventoried original session files retained their SHA-256 hashes after QA. The larger-source review's 169 existing current decisions matched the QA copy again after test Undos; raw 2D/3D records and retries also matched. The schema-1 backup matched the original review byte-for-byte. QA history and context changes remain confined to ignored copies. No private photos, screenshots, review documents, or derived per-pair measurements were published.

Implementation ran inline in accordance with the project's agent-tool mapping. The pre-work code was copied to `/private/tmp/paired-review-baseline` because the repository initially had no commit. James subsequently authorized including the existing project files in local commits. The initial project commit includes the implementation and provisional rule draft; private data and artifacts remain ignored, with no remote publication.

Simplification reviewed reuse, quality, and efficiency against the changed file set. Applied two efficiency findings (reuse grouped frame arrays; avoid redundant nil preview publications) and one quality finding (retain active selection by frame ID). The reuse pass found no additional consolidation worth applying. Source validation and evidence gates were retained. Manual review found and fixed direct-load save protection and retry display-setting ownership.

Code review: skipped (ce-code-review unavailable). The skill's scope stage cannot resolve HEAD or a base in this initially uncommitted repository, and its scope rules exclude unstaged untracked files. A complete manual review against the pre-work source copy was used for final validation; no dedicated-review receipt is claimed.

## Unmet utility gate

No production rule has reviewed thresholds/wording, and no coach or James utility assessment was supplied. Therefore no supported-focus usefulness demonstration or validated coaching result is claimed. Eligible individual reviewed measurements and conditionally enabled differences were exercised on a real copied pair, but that does not substitute for the plan's supported/actionable-focus review. See `feedback-rule-catalog.md` for what remains required.
