# Joint reviewer verification — 2026-09-14

Implemented the requested correction workflow as a SwiftUI macOS executable with an AppKit image canvas over PoseCore. This is a bounded slice of U2/U3/U7: source-safe review persistence, 2D joint correction, visibility states, and a native review UI. It does not claim the complete plan or coaching workflow is done.

The app supports paired and unpaired sessions, raw 2D/3D switching, a fixed numbered legend, drag correction, manual click placement for missing detections, keyboard adjustment, zoom, visibility/uncertainty decisions, undo, autosave, and reopen. Corrections and append-only history are stored separately from immutable raw detections. Reviewed-point access excludes raw, uncertain, and obscured points. No corrected 3D result is produced. Revisions mark downstream evidence stale; downstream computation is not yet implemented.

Evidence:

- Twelve synthetic package tests pass using `scripts/swift.sh test --disable-sandbox`; the native executable builds and the local app bundle is ad-hoc signed.
- New correction/coordinate/persistence tests were run before implementation and failed because the APIs were absent. The single-subject manifest test failed against the old required-pair rule before that rule changed.
- Tests cover drag mapping at a nonzero panel origin and zoom, rejecting outside/nonfinite positions, raw-coordinate preservation, occlusion exclusion, undo restoring an unreviewed raw point, atomic save/reload, stale-save rejection, preservation of future-schema files, and a single subject without a fabricated reference. The raw preservation comparison uses sorted JSON keys to avoid testing irrelevant serialization order.
- Live native smoke: dragged P01 left elbow, nudged one pixel by keyboard, marked it obscured, and undid all three. Each action saved, moving through revisions 1–6. P04 with no detected pose accepted a manually placed elbow and undo, revisions 7–8. All test edits were undone; audit history remains, and every current edit dictionary is empty.
- Compared the saved raw2D/raw3D objects against the original report after the smoke test: all unchanged. Reopened the app and observed saved revision 8.
- Native accessibility row selection initially selected the List row without invoking its nested button. Replaced those nested buttons with a selection binding and verified P04 selection through accessibility. Session switching to the three 2025 originals and zoom/Fit also passed live checks.
- High-resolution inputs were run separately; all three original hashes match their inventory and report. Existing sources, reference notes, raw results, and earlier output directories were preserved.

Scoped simplification and manual review focused on coordinate conversion, state transitions, image/source identity, stale saves, accessibility selection, and avoiding unsupported 3D claims. No separate linter is configured. Code review: skipped (ce-code-review unavailable): the dedicated review scope cannot resolve a base in this still-uncommitted repository and excludes unstaged untracked files. No dedicated-review receipt is claimed; all code remains local and uncommitted. Photos and review artifacts are ignored and were not published.

Limitations: corrections are saved as JSON and shown in the native reviewer, not written into the old raw PNGs. Undo is per open session; audit history persists. Original JPEGs make visual review easier but do not guarantee correct joint inference. No imported photos have yet received James's complete anatomical review.

## Retry and autosave update

- 13 package tests pass, including a failing-first retry preservation test: correction and occlusion precedence, raw evidence preservation, empty-retry fallback, retry serialization, and legacy files without retry fields.
- Built and reopened the signed local app; revision 165 loaded without migration or label changes.
- Native UI full-panel retry on P04-subject produced an unreviewed 3D skeleton and saved revision 166. This verifies the retry workflow, not anatomical accuracy.
- Native drag saved revision 167 without Save; Undo saved revision 168 and restored the original current labels. All 121 user decisions compared equal to the pre-update snapshot afterward.
- Inference executes in a subprocess. Timeout/crash branches were inspected but not forced in native UI.
- Code review: skipped (ce-code-review unavailable): repository has no initial commit/base; untracked files are outside the skill's supported diff scope. Changes remain local and uncommitted.
