Skip to content

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

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.