AF2 and stage-review remaining delivery¶
The minimum usable release completes the existing branch tabs, restores AF1 action/category behaviour, and corrects controls and navigation in the redesigned workspace. It preserves saved answers, incomplete drafts, permissions, and the legacy rollback path. Personalisation follows in independently shipped slices; it remains required programme scope.
Sequence and observable acceptance¶
| Slice | Dependencies | Acceptance and evidence |
|---|---|---|
| Branch tabs, #2810 | Merged isolation repair #3207 | Current-head AF2/stage-review tests, review and CI pass; switching tabs preserves drafts and control identity; nested errors reveal ancestors; keyboard navigation and deletion preserve focus and selection. |
| Status cues and action/category/order parity, #3084 | #2810 | Distinct shapes identify all branch states without colour; invalid forms cannot Complete; dirty partial work can Save subject to permission and saving guards; category icons and visited validity match AF1; adding/deleting/reloading units preserves identity and creation order. |
| Controls and comments, 3A | #3084 | Every supported control presents prompt, helper, input and errors in that order; long prompts wrap; accessible names and descriptions stay associated; comment add/edit/cancel/save and quote insertion retain their semantics without hover/focus layout shifts. Unit regressions plus gallery browser screenshots. |
| Panels and navigation, 3B | #3084; PDF-host owner integration | Header buttons have unclipped focus surfaces; entity dialog Escape/backdrop/close preserve drafts and restore focus; My Studies design footnote removed while project permission and dirty navigation guards remain; Skip occupies a consistent header location across all stage types with unchanged behaviour. |
| Release baseline, 4 | 3A, 3B | Annotation-only, screening-only, combined; narrow/wide; light/dark; pristine/dirty/invalid/completed; navigator on/off. Include nested branches, many entities, quote-to-comment and save failure. Required final-head CI and preview/staging journeys pass; deployed versions verified; user guide and rollback recorded. |
| Entity reordering, 5A | Baseline; review-data ordering contract | Drag and keyboard move actions persist order without changing entity identity, labels, answers or completion; reload, deletion, selection, failure and read-only paths covered. |
| Reviewer layouts, 5B | Baseline; reviewed interaction and storage contract | Per-reviewer versioned layouts for each capability combination; movable Source/Screening/Annotation panels; usable narrow-screen fallback, reset, schema/capability migration and failed persistence recovery. |
| Source modes, 5C | 5B; PDF viewer lifecycle/host integration | Embedded, floating and detached modes share authoritative study selection and preserve quotes; keyboard movement, viewport recovery, blocked-popup fallback, window close, study change and sign-out verified. |
| Backlog and cleanup, 6 | Stable accepted default rollout | Reconcile every #3067 entry with evidence or explicit follow-up; >8 branches usable; remove only unreferenced legacy components after rollback is no longer needed; preserve the original untracked notes and commit completion evidence. |
The shortest critical path is #2810 → #3084 → 3A/3B → baseline acceptance. Shared shell files
must be integrated after the active PDF-host changes; independent form work can proceed in
parallel. Every implementation uses a sole-writer worktree under the repository’s .worktrees/ directory.
Flags and release gates¶
Existing annotationFormV2 and stageReviewRedesign gates remain in force. No production
activation is implied by merging implementation. Wider/default enablement requires acceptance
and a release decision, followed by a stability interval before legacy removal.
Entity order belongs to each reviewer’s review and must persist in that review’s database data. It must preserve entity names, identity and answer ownership. Preserve record-and-stay versus advance behaviour pending its separate decision. Reviewer-layout storage and mode/position persistence need a concrete reviewed contract. Credentials and production activation remain operator-controlled.
Infrastructure hardening, preview race repairs and unrelated colour/selector defects are only baseline blockers when current evidence proves an intrinsic correctness, regression or major security issue. Coordinate existing repair owners rather than duplicating them.
Recovery evidence¶
On 2026-09-05, #2810 remained open at 7d20971d1 with failed historical Angular checks;
3084 remained stacked on it at 932cba73c3. #3207 and #3174 are merged. Both branches merge¶
cleanly into the refreshed stack locally. Original pr/ worktrees have untracked status notes
and are preserved. The main checkout also has unrelated staged/unstaged work; validation uses
committed code in isolated worktrees.
Sources and implementation contracts¶
- AF2 delivery overview and feature brief.
- Annotation question extensibility decisions and delivery map.
- Accelerated stage-review requirements.
- Remaining-work tracking issue #3067.
- Reviewer-specific entity ordering, #3224.
- Reviewer layout persistence, #3225 and Study Source modes, #3230.
The acceptance criteria above govern delivery; prototypes illustrate interactions and do not replace these requirements.
Comment editing contract¶
Saved comment text appears in a compact chip with an edit action. Add/Edit opens a local comment transaction held in the shared form store, so pagination and the full-screen entity view do not lose it. Cancel drops that transaction; Save comment applies it to the review draft and closes the editor. Neither action writes to the server. Pending text participates in the existing unsaved-navigation guard.
Whole-session Save progress and Complete apply all pending comment edits before validation and submission. Revert, deletion and replacement by another session clear the relevant local editor state. Quotes inserted while editing remain in both the editor and its Cancel baseline: cancelling typed changes must not erase an independently inserted quote. Read-only sessions show comment text without edit controls.