Skip to content

Acceptance criteria for every release

Temporary planning document; planning only. Chris asked on 3 October 2026 for well-defined acceptance criteria in the plan (AC1). This page is the authoritative list. This revision answers the round-2 reviews; the resolution record maps every finding to its outcome. The release sections of the integrated plan summarise these criteria. A release ships only when every row that applies to it has passed with recorded evidence on its release candidate, and no row whose status is pending, PROPOSAL or conditional has been counted as passed (§1.2).

Companion documents this page relies on: contracts (C1–C17; C18 and C19 are new), versioning model, consistency model, domain model, programme integration, delivery operating model, UX strategy, methodology coverage, PRISMA amendments and open questions. Questions for Chris use the Batch D IDs (D1-01 to D4-21) recorded with the round-2 resolution. Chris decided D1-01 on 3 October (keep

3964 over #3969); no criterion changes as a result. On the evening of 3 October he approved

D1-02 to D1-09 as recommended (decision register §1.13), so no D1 question is open: rows that waited only on a D1 answer are now confirmed. Late that evening he gave the G0 inputs (decision register §1.14): the tester names (D1-06; no external SyRF users named yet), the date for activating #3987's families (D1-03: from 5 October 2026, staging first, production the following week as a target), Q-03 as recommended, so rows that waited only on Q-03 are now confirmed, and D4-18 ("independent of funders"), whose recorded reading stays PROPOSAL until Chris confirms it in the G0 dossier, so AC-GA-08 stays pending until then. One part is still to come and is marked where it applies: F1a's confirmation of the D1-08 start thresholds from M0 evidence (an inline PROPOSAL until F1a).

1. How to read this document

1.1 Identifiers

Pattern Meaning
AC-<release>-<nn> A criterion for one release (AC-R2a-03). An r suffix (AC-R5a-02r) marks a replacement a reviewer proposed; the replaced ID is retired (§4.37) and never reused.
AC-<release>-CONF The release's conformance row: the contract tests (§7.5) that must pass in full on its release candidate.
AC-ALL-<nn> A criterion every release meets (§2), marked merge (M) or activation (A).
AC-UX-<nn> A UX metric (§2.3). The UX strategy owns the research plan and may refine wording; IDs stay.
AC-T-<nn> A claims and tracking prerequisite (§4.35).
UI-<n> The UI standard (§3).
PE-<nn>, PI-<release>-<nn> Pilot exit and pilot entry (§5).
FX-…, INV-<nn>, C<n>-T<nn>, RV-DS-<nn> Fixture data (§7.2–§7.3), invariant checks (§7.4), contract conformance tests (§7.5), benchmark datasets (§6.1).
Review IDs Round-2 finding IDs (review AC-nn, V2-nn, DC-nn, VA-nn, VB-nn, RT-nn, NS-nn, MS-nn, AP-nn, SR-nn, UX-nn, PH-nn, DS-nn) appear mainly in Source columns and the resolution record. "Review AC-nn" means a finding of the acceptance-criteria review, never a criterion; reviewer-proposed IDs that were renumbered (such as the DC review's AC-DC-nn) are listed as aliases there.

1.2 Columns and statuses

Every criterion row has a Source and a Status.

Source is one or more of: a ledger ID (SF1, RE2, …); a decision-register §1.11 ID (UI1, QD1, SEC1, Q-10, …); RECOVERED (an earlier design the ledger says not to reopen); RULE (a repository rule in CLAUDE.md that binds every PR); an approved specification (FEAT-011 or FEAT-012, DOC-APPROVED); a Q-xx or A-xx item; a Batch D ID; a research acceptance case (A1–A28 in the screening research); a contract, plan section or companion document of this package (for example "consistency model"); or a review finding.

Status Meaning Can it pass at a ship gate?
confirmed The behaviour is what a confirmed owner decision, recovered baseline, repository rule or approved specification requires. Yes
pending-Q-xx, pending-Dn-nn Written as the concrete recommended answer, so a test can fail it. At the release's freeze gate the row is re-confirmed from Chris's answer, rewritten, or the behaviour is descoped. No, until answered
assumption-A-xx Follows a provisional assumption. If the assumption changes, the row is rewritten. Yes, while the assumption stands
PROPOSAL A design choice or threshold of this plan. Confirmed at the release's freeze gate and recorded in its acceptance record. Inline PROPOSAL values inside any row follow the same rule. Only after confirmation
conditional-<join> Applies only once the named external join has landed. Recorded as N/A before that. Only after the join

A row with several statuses (comma-separated) passes only when all of them clear. A row whose verification method needs tooling that doesn't exist yet (§10) can't be marked passed.

1.3 Merge criteria, activation criteria and tiers

  • Merge criteria (M) apply to every PR in the programme, on its exact head, before merge (§2.1 and the M rows of §3).
  • Activation criteria (A) apply once per release, on a recorded release-candidate commit and image SHAs deployed to staging (or to a pinned preview where §8.3 allows it). Results go into the release's acceptance record (§9). When later merges touch the release's paths before activation, the affected automated rows run again.
  • Release criteria (§4) are activation criteria unless a row says M. Their tests are written and merged in the PRs that build the behaviour; activation re-runs them on the candidate.
  • Tiers (T1 heavy, T2 standard, T3 light; §8.3) decide which activation evidence a release needs: rehearsal, testers, benchmarks and review depth.

1.4 Verification methods

Code Method Evidence
U Unit test, architecture test or guard spec Test names in the PR; CI green on the exact head
I Integration test (API, MongoDB through Testcontainers; the replica-set fixture for transactions) As U
C Contract or conformance suite (shared JSON corpus, table-driven, run by xUnit and Vitest) Suite results on the exact head and on the release candidate
H Mixed-version harness: the recorded minimum image runs against canonical data written by the current image (new) Harness report with both image SHAs
E End-to-end journey in the hermetic local e2e stack, never against staging Per-spec run output tagged with criterion IDs
X Cross-browser smoke journey (Firefox and WebKit Playwright projects) (new) Per-project run output
B Benchmark on Bramble in a booked window (backend), or on the host where an AF2 client budget was measured Report with commit, dataset, host and main baseline
R Rehearsal on staging or an authorised non-production copy (rollback, floor step, restore, migration) Rehearsal record in the release ADR
M Monitor or telemetry evidence on a running environment (invariant monitor, dashboard) (new) Monitor and dashboard exports for the period
S Staging acceptance by humans on seeded or tester-created projects Signed acceptance note naming the candidate SHA
UT User-testing session against the tasks and rubrics in §5.3 Session notes and scores
V Visual and design review (screenshots, staging walkthrough) Screenshot set; Chris's acceptance
A Accessibility check (axe inside journeys, manual keyboard and screen reader) axe report; checklist
D Documentation review Changed /docs/ and /user-guide/ files
G Governance (approval, sign-off, recorded decision) Link to the record

Rules that make the methods able to fail:

  • Every row about persisted state has an I or C test; E is for behaviour seen in the UI (review AC-26).
  • Every concurrency row forces its interleaving with the barrier harness (§10, L17-05) and asserts that the interleaving happened: the losing command saw the typed conflict and kept its draft (review AC-12). Fixed seeded schedules make runs repeatable.
  • A negative assertion first proves the operation ran.
  • Each release's first PR lands its criteria as skipped tests tagged with their IDs, plus its fixture files, so progress is rows turning green (review AC §3.4).

1.5 What changed in this revision

The previous version (227 IDs) is revised in place. In summary: a Source and Status on every row; merge criteria separated from activation criteria; release tiers; a conformance row per release with contract test IDs; fixtures as versioned data with per-release assertions; invariant checks; a traceability file with generated views; the acceptance tooling as dated deliverables; a new S0 scaffolding release; and the criteria the reviews found missing. Placeholder rows ("as Q-xx decides") are now concrete provisional assertions that can't pass until Chris answers. Counts are in the resolution record.

2. Criteria every release meets

2.1 Merge criteria (every PR)

ID Criterion Verified by Source Status
AC-ALL-01 With every flag the release introduces turned off, the release's flags-off spec set (named in its brief, with the tracking mode each spec runs in) passes unchanged, and nothing new is reachable: new endpoints return the typed "feature unavailable" result or 404, and new routes are absent or redirect. E, I RULE (flag decision); review AC-03; RT-04 confirmed
AC-ALL-02 Legacy (non-admitted) projects behave as before. For the five existing seed projects and FX-LEGACY, export data files equal main's (generation metadata aside), except for changes the PR lists as deliberate, each behind a flag. I, E Q-07; A-04 confirmed
AC-ALL-03 Every new endpoint, view, SignalR message and notification kind has tests for an authorised user (allowed), an unauthorised user (refused, no data), a revoked user (canonical commands refused on the next request; page reads within the C18-T06 bound) and blinding (no hidden identity or answer). SyrfAdmin is used only for application-admin paths, and each blinded surface has one SyrfAdmin negative test. Every endpoint is in the permission catalogue and the catalogue coverage test passes. I PM1; C10; review AC-10; DC-12 confirmed
AC-ALL-05 New code has unit or integration tests; CI is green on the exact head; the conformance suites of every touched contract run and pass; there are no new lint suppressions or test exclusions; the web repository guard specs pass (src/services/web/src/global-styles/syrf-theme.spec.ts, src/services/web/src/app/shared/utils/hot-hook-zoneless-discipline.spec.ts, src/services/web/src/app/shared/pipes/user-guide-url/no-hardcoded-help-urls.spec.ts), and pnpm run check:theme-migration and pnpm run check:contrast pass when styles change. U, I, C RULE (all code changes need tests); review AC §3.2 confirmed
AC-ALL-06 /docs/ and /user-guide/ change in the same PR as the behaviour; the PR states its flag decision; user-guide pages for unreleased behaviour sit under target markers and are published at enablement. D RULE; delivery operating model confirmed
AC-ALL-10 New commands log structured events with actor, real actor, on-behalf-of identity, project and command ID. Expected conflicts return the C18 typed outcomes (stale base, retryable conflict, locked, fenced, outcome unknown, refused, publication in progress, size limit exceeded, conflicted legacy answer, command digest mismatch), never a 500. I C18 (consistency model); DC-11; VB improvement 6 PROPOSAL
AC-ALL-14 Every PR keeps AC-ALL-01 and AC-ALL-02 true. Unit and integration suites always run; when the PR touches a flow listed in the release brief, the release's flags-off e2e spec set runs (run:e2e-smoke for flows mapped to smoke specs, run:e2e-full otherwise). U, I, E review AC-03, AC-26 PROPOSAL
AC-ALL-15 No spec for a changed component, route or service is excluded from the web test run. A script checks the PR's changed paths against both exclusion lists: src/services/web/angular.json (45 entries on main at de3e98c59, including project-options/**, the Members & groups dialogs and data-export/screening) and src/services/web/vitest.config.ts (which also excludes the whole question-management/** folder). U RULE; review AC-15 confirmed
AC-ALL-16 Tests that evidence a criterion carry its ID ([Trait("AC", "AC-R2a-03")] in xUnit, an @AC-R2a-03 tag in Playwright, a describe('AC-R2a-03 …') prefix in Vitest); the PR body lists the IDs it advances; the traceability check (§9) passes. U, G AC1; review AC-01 PROPOSAL
AC-ALL-28 No debug component (app-debugger-group or equivalent) renders on a route a reviewer or reconciler can reach unless the debug flag is on (guard spec). U UX-20 PROPOSAL

2.2 Activation criteria (once per release, by tier)

ID Criterion Applies to Verified by Source Status
AC-ALL-04 Rollback by tier. (a) T1, and any T2 release that persists new data: the mixed-version harness runs the recorded minimum rollback image against canonical fixture data (reads, legacy flows, an unrelated-field replace round trip): nothing throws, no field is stripped, legacy writers still refuse canonical scopes. (b) T1 releases and every floor step: a staging image rollback in an agreed promotion-pause window, with canonical data present, passes (a). © If the release changed a FEAT-024 writer, family or protocol, the rehearsal follows FEAT-024's rollback order (fold disable and wait for Disabled, project gate, fleet gate, flags off through GitOps on both hosts, allowlist guard, then images) and records fold mode and stamp before and after. (d) If it added a notification kind, the rehearsal includes the delivery halt and an older binary running with the new kinds present. T1; T2 (a) only H, R C16; amendment I (Q-06a); review AC-23; DS-11; MS-16; NS-26 PROPOSAL
AC-ALL-07 Accessibility: axe checks inside the release's journey specs report no serious or critical violation on new or changed screens; the main tasks complete by keyboard alone with visible focus; controls have accessible names; polite live regions announce autosave state, conflicts and status changes; focus moves to error and conflict summaries; dialogs trap and return focus; forced colours work; layouts reflow at 200% zoom, at 400% (320 CSS px) and in short windows (600 px tall); touch targets are at least 44 px below 600 px wide; reduced motion is respected; a named person runs the screen-reader matrix (NVDA with Firefox and Chrome, VoiceOver with Safari) on the release's key surfaces at staging acceptance. Releases with UI A, E UI1; FEAT-023 validation matrix (docs/features/material-3-migration/technical-plan.md); review AC-19; UX-06, UX-15 PROPOSAL
AC-ALL-08 Every new or updated screen meets UI-1 to UI-11 (§3), with evidence on the release candidate. Releases with UI V, A, U UI1 confirmed
AC-ALL-09 Performance: the release's named hot paths (from the fixed suite: Save, Complete, autosave, publication phase 1, Next and pool selection, reconcile load, export start, plus any endpoint the brief adds) meet their budgets on the RV-DS tiers, with 20 warm-up and 200 recorded iterations, against a baseline run of main on the same host for the same candidate. Backend runs use Bramble in a booked window; AF2 client budgets use the host where they were measured. With no stated budget, p95 regresses by at most 10%. T1; T2 when a hot path changes B review AC-18; DS-12; PH-32 PROPOSAL
AC-ALL-11 The release's pilot entry rows (§5.2) held at pilot start, and PE-01 to PE-08 (§5.1) are met for its pilot projects with monitor and telemetry evidence. User-facing releases S, UT, M Q-07; review AC-16 PROPOSAL
AC-ALL-12 Before any production pilot, every external join the release depends on (plan §5.11 and programme integration, including X-CLAIMS, X-STATS-b1 to b7, X-AUTH-RESOLVER and G-NOTIF where they apply) has recorded go/no-go evidence. Production opt-in pilots before GA were approved under D1-07 (3 October). Production pilots G Q-25; D1-07; RT-02, RT-03; MS-01; AP-02; NS-04 confirmed
AC-ALL-13 Ship-gate verification: a fresh-context verifier maps every criterion ID that applies to the release (its own rows, its CONF row and the applicable AC-ALL, AC-UX and UI rows) to evidence on the candidate, checks invariants 1 to 12 across the release's PRs, and confirms that no pending, PROPOSAL or conditional row was counted as passed. Every PR in the release passed review on its exact head under its review tier with no unresolved thread. Chris's go/no-go is recorded in the acceptance record. All G DS-13; review AC-02, AC-03; D1-04 PROPOSAL
AC-ALL-17 Flag combinations fail closed: an admitted canonical project opened through any surface that can't write canonical data (AF1, the legacy grid or editor, AF2 not admitted, a release or prerequisite flag off) shows the typed "not available here" state before accepting input, and no legacy write is attempted. The release brief lists its supported-flag matrix (release flags × admission × annotationFormV2, stageReviewRedesign, stageReviewDockview, reviewEligibilityPolicy, activeReviewerTrackingEnabled, notification and FEAT-024 flags) and the cells its I and E tests cover. T1, T2 I, E Contracts stance 6; Q-25; review AC-22 PROPOSAL
AC-ALL-18 Read-only containment: with the release flag off or admission removed after canonical writes, every surface the release added is read-only with the copy-deck explanation; no edit control is enabled; owners can still open their drafts and versions and copy their content; canonical exports work; legacy writers still refuse. T1, and T2 that persist data E, R Migration §5; U28; review AC-23 PROPOSAL
AC-ALL-19 Disclosure probes: a table-driven suite over the F1b disclosure matrix (persona × surface × element) passes for every new endpoint, export column, SignalR message, notification channel (inbox, email, digest) and impersonation path, including SyrfAdmin, support edit mode and forged foreign IDs, which are refused before any mutation with the database unchanged. All C, I C10; research A5, A10, A26; review AC-24; RT-14 PROPOSAL
AC-ALL-20 Telemetry: pilot-exit signals (draft-save failures, stale conflicts by type, refused legacy writes, typed errors by code, projection mismatches, monitor findings, notification capture failures) are on a staging dashboard before pilot entry, with thresholds agreed at the freeze gate; events carry opaque IDs only and no content. User-facing releases M, G review AC-16 PROPOSAL
AC-ALL-21 Invariant monitor: the read-only checker (INV-01 to INV-12, §7.4) reports zero violations on every admitted project in the candidate environment, nightly and after every restore or adoption step; every finding is typed. From R2a I, M review AC-16, AC-30; DC §5; VB-11 PROPOSAL
AC-ALL-22 Notifications on: C15-T01 to C15-T09 pass (the NS review's AC-C15-01 to 09). With the kind's flag on there is one item per recipient per event occurrence, a second lifecycle event is captured, payloads are generic, detail is reshaped under fresh authority ("Related item unavailable" and no email after revocation), and email goes only to Mailpit outside production. Releases adding or changing a notification kind I, E C15; NS-01, NS-03, NS-11, NS-12; review AC-32 PROPOSAL
AC-ALL-23 Both tracking modes: the release's review-flow journeys pass with activeReviewerTrackingEnabled on and off, as a Playwright project matrix on one stack. R2a, R2b, R3a, R4a and any release touching claims, admission or the reviewer workspace E RT-04 PROPOSAL
AC-ALL-24 On every form host the release changes, input latency under autosave has p95 under 50 ms (AF2's edit-to-settle p95 under 16 ms stays its own gate), autosave never blocks input, and a visible "N required missing" count with jump-to-next exists. Releases changing a form host B, E UX-02; AC-UX-04 PROPOSAL
AC-ALL-25 Efficiency: on the pilot project, median time per title/abstract decision and per annotation form, and actions per decision, are no worse than the baseline study (AC-UX-03, AC-UX-04), measured in moderated sessions, or from privacy-safe timing events if D3-08 approves them. Releases changing a reviewer surface UT, S UX-01, UX-02; D3-08 PROPOSAL
AC-ALL-26 Canonical write gate: zero engine-caused exhausted submissions at 1, 2, 5 and 10 concurrent reviewers, same-study and different-study, with the fold worker (where enabled), claims and one background sweep running; absolute p95 budgets per RV-DS tier (start, applying now under D1-08: Save ≤ 150 ms and Complete ≤ 300 ms on a 200-question form; F1a confirms them and sets the per-tier budgets from M0 evidence, PROPOSAL until F1a); the commit shape pinned by a CanonicalCommitCommandBudgetTests suite. Releases adding or changing a canonical command B Consistency model; DC-16; PH-01; review AC-18; D1-08 confirmed
AC-ALL-27 Each reviewer-visible release ships a dismissible, per-user "What changed" entry keyed by release (the component lands in R2a), and every new screen links to its user-guide page through the userGuideUrl pipe. Reviewer-visible releases E, D UX-09 PROPOSAL
AC-ALL-29 Notification enablement (G-NOTIF): capture happens only for projects admitted for notifications; staging and preview flag overrides need Chris's recorded approval per release; email outside production goes to Mailpit; an operator delivery halt pauses dispatch within one worker cycle and resumes without loss or duplicates; no notice or email reaches a user outside the admitted pilot projects (checked against the inbox and Mailpit). Any environment enabling notifications I, R, G NS-04; C15-T07; D3-21 pending-D3-21
AC-ALL-30 Notification emails and digests carry at most a title, the project name and a link: never study titles, aliases, answers or free text. Releases adding email categories I NS (question N2); D3-22 pending-D3-22
AC-ALL-31 A per-project email mute exists before production email: a muted project sends no email while the inbox still records. Before production email I, E NS (question N4); D3-24 pending-D3-24

2.3 UX metrics

The baseline study (6–8 reviewers on today's screening and annotation, before R2a) and the research plan are in the UX strategy, which owns the measurement protocol; these rows use its wording and compare against the baseline.

ID Criterion Applies to Verified by Source Status
AC-UX-01 Task success: at least 80% of testers complete each user-testing task for the release (§5.3) without help. Every user-facing release UT UX-01; UX strategy PROPOSAL
AC-UX-02 Comprehension: at least 80% of testers answer each explain question correctly against its model answer and rubric (§5.3): which version counts; why a study is offered or locked; what an accepted answer rests on; what a publication will do; and the release's own questions. R2a, R2c, R3a, R3b, R4a, R5a, R5b and every release with an explain task UT UX-01; UX strategy PROPOSAL
AC-UX-03 Screening throughput: median time per title and abstract decision and median actions per decision on the realistic-content project are no worse than the baseline study; a keyboard-only path exists with at most two actions per decision beyond answering eligibility questions. R3a, R3b, then every release touching the screening card UT, E; telemetry if D3-08 approves UX-02 PROPOSAL
AC-UX-04 Annotation: time to complete the baseline 30-question form is at most the baseline plus 10%; keystroke-to-paint p95 is under 50 ms with autosave on at 200 and 1,000 questions. R2a, then every release touching the form UT, B UX-02, UX-04 PROPOSAL
AC-UX-05 Reconciliation: median time per three-candidate study is at most 1.5 × the two-candidate task on the same build. R4a, R4p, R4c UT UX-01 PROPOSAL
AC-UX-06 Error recovery: every tester recovers from a two-tab take-over, a stale base and a 60-second offline interval without losing an edit made before the event. R2a, R4a UT, E (network throttling) UX-04, UX-17 PROPOSAL
AC-UX-07 Setup: a new administrator reaches a screenable stage from templates in at most 20 minutes without help. R3d UT UX-19 PROPOSAL
AC-UX-08 Satisfaction: SEQ of at least 5.5 per task, or SUS of at least 70 per role per release. Every user-facing release UT UX-01 PROPOSAL
AC-UX-09 Accessibility: zero serious or critical axe findings on the release's routes and journey states; the main tasks complete by keyboard alone; the screen-reader checklist passes; forced colours and 400% reflow pass on the five key surfaces (evidence shared with AC-ALL-07). Every release with UI A, E UX-06; review AC-19 PROPOSAL

3. UI standard for new and updated screens (Material 3)

Chris, 3 October 2026: UI design must be consistent and modern, and every new and updated UI screen uses Material 3 (UI1). SyRF's Material 3 programme (FEAT-023, docs/features/material-3-migration/) moves the whole application to Material 3 component themes in one atomic cutover (its Wave 5) and forbids mixing component generations in a session. Until that cutover, the application emits Material 2 component themes with Material 3 system tokens alongside (src/services/web/src/global-styles/syrf-theme.scss). So UI1 means, for now, Material 3 roles and public component APIs over today's components, with no Material 3 component islands, and every new route registered for the cutover baselines. That reading is put to Chris as D3-01. themeToggle is off by default (src/charts/syrf-common/env-mapping.yaml) but on in staging (cluster-gitops/syrf/environments/staging/web/values.yaml, themeToggle: true), so dark-mode evidence is gathered on staging once per release. The UX strategy may refine the wording of these rows; their IDs stay.

ID Criterion Gate Verified by Source Status
UI-1 Colour, typography and shape come only from Material 3 system roles emitted by mat.theme() (--mat-sys-*) or documented --syrf-* brand or domain roles. No Material 2 Sass APIs, Bootstrap classes or private Angular Material internals; pnpm run check:theme-migration, pnpm run check:contrast and the theme guard spec pass. M U UI1 confirmed
UI-2 Screens use Angular Material components and SyRF's shared components through their supported theming: app-page-shell and app-page-state on every new admin page, StatusView chips for statuses, the section shell, navigation patterns and overlay scroll. A new pattern is specified once in the pattern inventory (states, tokens, keyboard model, narrow behaviour, copy keys) and built as a shared component; a new shared token goes through FEAT-023's serial theme-contract change. A V, U UI1; review AC-28; UX-07, UX-16 PROPOSAL
UI-3 New screens use only --mat-sys-* and --syrf-* roles and public component APIs and add no Material 3 component theme or component island, so a session never mixes component generations; check:theme-migration passes. Evidence is the path the preview environment renders plus the token checks, not a second rendering path. M U UI1; review AC-17; UX-12; D3-01 pending-D3-01
UI-4 Correct in light and dark: check:contrast passes for both compiled themes (WCAG AA text, 3:1 for meaningful control and graph boundaries); status is never shown by colour alone; dark screenshots of new screens are captured once per release on staging, where themeToggle is on. M (token checks); A (dark screenshots) U, V, A UI1; review AC-27; UX-12 PROPOSAL
UI-5 Consistent with the SyRF design system: the navigation drawer handoff (docs/features/material-3-migration/handoffs/project-navigation-drawer/README.md) and its Material 3 Expressive patterns, FEAT-023's adaptive section hierarchy, typography, density and spacing scale and its long-running-job visual language; one button and type language (Material 3 sentence case). A V UI1; review AC-28; UX-07; D3-04 pending-D3-04
UI-6 Works without page-level horizontal scrolling at every viewport in the width matrix (§3.1); wide tables and candidate comparisons use labelled contained scrolling or cards; touch targets are at least 44 px below 600 px; title and abstract screening works on a 390 px phone with the on-screen keyboard hidden (the phone clause is pending D3-05). A E, V UI1; review AC-19; V2-22; UX-15; D3-05 PROPOSAL, pending-D3-05
UI-7 Every new component has designed hover, focus-visible, pressed, selected, disabled, error, loading and empty states, listed in its pattern spec. The PR includes the screenshot matrix for each new or changed screen: light theme at the §3.1 widths and named states, captured by the L17 screenshot tool; dark follows UI-4 (token checks per PR, a staging dark set per release). M V UI1; UX-12; UX strategy PROPOSAL
UI-8 A prototype or UI validation passes its pass bar (§5.4) before the build. A screen is "materially changed" when it gains a new route, a new shared pattern, a changed layout or primary action, or changed copy for a core verb. Chris accepts once per release in a staging walkthrough; per-PR preview acceptance applies only to new shared patterns and five high-risk surfaces (the publication dialog, the reconciliation workspace, the stage designer, Members & groups, guided setup). A V, G UI1; A-24; review AC-28; UX-13; D3-02 pending-D3-02
UI-9 New and changed routes are added to FEAT-023's route matrix (one owner per route group) and to its visual baselines. M G, V UI1; review AC-17 PROPOSAL
UI-10 No literal colours and no var(--role, #fallback) in new feature styles or templates, enforced by a guard spec over the programme's folders modelled on the existing repository guard specs. M U UI1; review AC-27 PROPOSAL
UI-11 Copy comes from the copy deck as typed message constants per feature (guard spec), and the user-guide glossary changes in the same PR. Confirmed terms (Q-13): "Design", "question templates", "Library" only for Study Management. Recommended verbs (D3-03): "Save progress", "Complete", autosave "Changes kept, not yet saved", "Needs updating", "Outdated answers", "Fix", "Accepted answers (gold standard)", "Screening result". M U, D Q-13; C17; UX-05; D3-03 pending-D3-03

3.1 Width matrix

Widths come from src/services/web/src/app/shared/layout/break-points.ts (edges at 599.98, 904.98, 1239.98 and 1439.98 px), the smallest supported phone, the v10 reviewer-workspace check and FEAT-023's zoom rows. UI-6 and UI-7 use this list; the UX strategy owns it.

Viewport (CSS px) Why
320 Smallest supported width; the 400% reflow equivalent
390 Phone; title and abstract screening (pending D3-05)
599 and 600 lt_sm and sm edge (table-to-card threshold)
768 Tablet portrait
904 and 905 sm and md edge
925 The v10 and Review Prototype v4 narrow annotation-panel check
1239 and 1240 lt_lg and lg edge (rail compact threshold)
1439 and 1440 lg and xl edge; the design reference width
1280 at 200% and 400% zoom WCAG reflow (640 and 320 CSS px)
1280 × 600 Short height: action bars and summaries stay reachable

The reviewer and reconciler workspaces are also checked with the rail collapsed and with the source panel open, because their content threshold (980 px of remaining width) is content-driven.

4. Release criteria

Each section gives the release's tier (§8.3), its freeze gates, fixtures and seeds, then its criteria, its conformance row and a one-line change log against the previous version. Release names follow the integrated plan; S0 is new, and X1 (§4.36) applies only if Chris approves D4-09. Rows are activation criteria unless they say M. "C1-T01" style IDs are the conformance tests in §7.5; a CONF row also requires every earlier release's conformance tests to keep passing.

4.1 S0 Programme scaffolding (new release)

Tier T3 · no runtime behaviour, everything behind default-off programme flags · needed by M0, R0 and R1b · source: DS-08, DS-09, delivery operating model.

ID Criterion Verified by Source Status
AC-S0-01 Programme flags are registered once in env-mapping.yaml (default off) and the canonical module skeleton (new controllers, services and an explicit DI module, all in new files) builds; with the flags off the existing flags-off spec set passes unchanged. U, I, E DS-08, DS-09 PROPOSAL
AC-S0-02 The fixture corpus exists as versioned JSON under src/libs/testing/SyRF.Testing.Common/ with a schema check (§7.1); xUnit theories and Vitest describe.each read the same files; FX-PRISMA-01 to 08 inputs and their per-release assertion files exist (assertions for releases not yet built may be empty and are reported as empty). U, C review AC-04, AC-31; DS-08; E99 PROPOSAL
AC-S0-03 A baseline benchmark arm on FEAT-024's environment-gated pattern (src/libs/project-management/SyRF.ProjectManagement.Mongo.Data.Tests/ProjectStatistics/BenchmarkEnvironment.cs) measures today's session submit and screening save on RV-DS-01 to 03 on Bramble and stores the report with commit, dataset and host. B DS-08, DS-12; MS-12; review AC-18; E98 PROPOSAL
AC-S0-04 The traceability file and check (§9) run in docs CI: the check fails when a non-meta ledger or §1.11 ID has no criterion, a criterion row lacks a Source or Status, or a test tag names an unknown ID. U, G AC1; review AC-01; E94 PROPOSAL
AC-S0-05 The L17 tooling needed by M0, R0 and R1b passes its self-tests: the persona set (§6.2) in e2e/setup/auth.setup.ts and the seed constants; axe and screenshot helpers usable inside journey specs; the barrier-injection harness on MongoDbReplicaSetTestFixture; the mixed-version harness skeleton; the excluded-spec check script (AC-ALL-15). U, I, E review AC-09, AC-10, AC-12; UX-06; E95, E96 PROPOSAL
AC-S0-06 The seed-if-absent job is additive and idempotent, keyed by fixed GUIDs, and runs on preview (/reseed-db) and staging separately from ownership reconciliation; it never drops or edits an existing document, and a second run creates nothing. I, R review AC-11; V2-09; E97; D3-14 pending-D3-14
AC-S0-07 The STATUS ledger, the release-brief and slice-brief templates and a programme section in the PR template exist. D, G DS-07; delivery operating model PROPOSAL
AC-S0-CONF Not applicable: S0 has no contract code. The harness self-tests in AC-S0-02 and AC-S0-05 stand in. U review AC-01 PROPOSAL

Changes: new release; AC-S0-01 to 07 are new.

4.2 M0 Engine proof walking skeleton

Milestone, not a release; T1 evidence rules (supervised review, Bramble runs) with a go/no-go record instead of activation · gates F1a · fixtures FX-APPLIC, FX-DRAFT, RV-DS-01 to 03 and the max-form case.

ID Criterion Verified by Source Status
AC-M0-01 Research cases A1, A3, A7, A8, A11, A13, A14 and A20 to A23 pass on synthetic fixtures for both OrdinaryAnswer and ScreeningDecision, through one logical repository and commit engine (C1-T01 to T11); A13 and A14 run on synthetic claims here and again as journeys in R2a and R2b. C Research §7.4; DC-16; review AC-35; consistency model PROPOSAL
AC-M0-02 The storage ADR records measured document size, transaction duration, write conflicts and command counts on RV-DS-01 to 03 and the max-form case, and the go/no-go thresholds hold: the C18-T02 write gate (zero engine-caused exhausted submissions at 1, 2, 5 and 10 reviewers, same and different study); p95 per tier against the S0 baseline; transaction duration p99 ≤ 2 s and maximum ≤ 10 s (PROPOSAL); the Study document at most 50% of 16 MiB at the max tier (PROPOSAL). A Project-document contention arm (a grant change racing a running embedded bulk job) records conflicts and retries. B, G DC-16; PH-01; VB-12; DS-08; DD-16; D1-08 confirmed
AC-M0-03 The writer and reader inventory lists every path in migration §1 with a route, refuse or adapt decision reviewed by its owning programme, including tracking writers and readers, the #3945 and #3947 Study writers, every UpdateMany on pmStudy, and the bulk PDF, ADR-020 bulk-update and M5b risk-of-bias stores. G Research A27; RT-08; NS-08; VB-07; V2-15 PROPOSAL
AC-M0-04 The FEAT-024, presence and allocation owners' checklists pass for the C7 identity amendments, the membership-facts projection first (each run by a fresh-context agent; Chris rules on exceptions); the C10 catalogue audit is complete; the QM v2 harvest is executed with a harvest-and-avoid table that excludes destructive rollback, hand-back to legacy and unbounded embedded version arrays. Only the Q-08 decision (harvest the dormant QM v2 stack rather than revive it) is confirmed; the rest of this row is a PROPOSAL. G Q-08; AP-01; VB-17; delivery operating model §2.5 PROPOSAL
AC-M0-05 Walking skeleton: one form travels engine → CAS → Study.CanonicalSummary through FEAT-024's source-write seam (projection-only shape; the engine writes no statistics or pending entries) → draft → dark AF2 adapter → current and previous-version export, on synthetic data. The spike code may be discarded; its conformance suite, fakes and ADRs merge. C, I DS-08; MS-06; programme integration PROPOSAL
AC-M0-06 On the skeleton, C18-T01, T03 and T04 pass: fault injection at every write step leaves no readable partial state and a retry returns the original result; the command ledger resolves duplicates; a forced UnknownTransactionCommitResult and a primary failover produce no duplicate version or notice. I DC-16 (AC-DC-01, 03, 04) PROPOSAL
AC-M0-07 The F1a ADRs record, from M0 evidence: no per-project document in interactive commits, with ordering by Study version within a study and by hybrid logical clock across a project (E25); the transaction-admission rules (C18); and the choice between Study.CanonicalSummary and legacy-shaped stub sessions. G Consistency model; DC-01; MS-12 PROPOSAL
AC-M0-08 Architecture fitness tests run in the F1a conformance suite and fail the build on a violation: a reflection-based dependency test asserts the context map's allowed dependencies, no internal type used across bounded contexts, and the hosting rule (canonical command handlers only in ProjectManagement.Application; no policy service with a repository dependency); the source-scanning ownership test (AC-R0-08) and the append-only repository test (C1-T16) belong to the same suite. U DD-22; E58; domain model PROPOSAL
AC-M0-CONF C1-T01 to T14; C18-T01 to T04 and C18-T11. C review AC-01 PROPOSAL

Changes: AC-M0-01 to 04 rewritten; AC-M0-05 to 08 new.

4.3 R0 Compatibility floor and project admission

Tier T1 (staging rehearsal) · freeze F1a · fixtures FX-FLOOR, FX-LEGACY, FX-ELIG · seeds: none new.

ID Criterion Verified by Source Status
AC-R0-01 Given documents with canonical fields at Study, Project and SystematicSearch top level and on every embedded type the R0 ADR enumerates, when the recorded minimum rollback image (R0 or later) reads, updates and writes them through its normal paths, then nothing throws and no field is dropped; extended types capture unknown elements and never only ignore them. I, H, R VB-02; DC-18; review AC-13; V2-21 PROPOSAL
AC-R0-02 Given a CanonicalScopes marker for a scope on a Study or Project, every legacy writer in the inventory refuses writes to that scope with a typed conflict and leaves the document unchanged, with one test per writer. The writers include tracking writers (hub join, leave, dirty, disconnect and prior-study release; the PM idle, suspension and liveness consumers; claim pipelines; typed admission; the direct-navigation claim; screened-reservation release; "Apply anyway" revocation; reservation restore), #3944 conversations, the #3945 bibliographic and #3947 PDF writers, the inclusion recalculation, bulk PDF finalisation, preview seeding and import-failure compensation. I DC-04; VB-07; DS-10; RT-08; NS-08; consistency model PROPOSAL
AC-R0-03 Removing a project from admission, or reverting configuration, changes neither its CanonicalScopes markers nor its pmCanonicalOwnership record; legacy writers still refuse; the registry reconciliation check reports agreement. I C16; A-22 assumption-A-22
AC-R0-04 The admission service gives the API and the web the same answer for the same project; an audited admin action admits or removes a project; new projects follow the configured rule (creator opt-in in production until GA). I, E C16; A-23 assumption-A-23
AC-R0-05 A staging image rollback to the recorded minimum image, in a promotion-pause window with canonical fixture data present, passes AC-R0-01, 02, 03, 06 and 09. R C16; DS-11 PROPOSAL
AC-R0-06 The minimum rollback image loads a Study, Project or SystematicSearch carrying unknown elements on each type the ADR enumerates, including schema-conditional branches (ADR-011's RandomId and GraphId), edits an unrelated field, writes through its normal replace path, and every unknown element survives. I, H review AC-13; VB-02 PROPOSAL
AC-R0-07 Floor steps before R2b (form claims counted per bound stage), R3a (screening aggregates), P1 (Study root fields) and C1 or O1 (if they add embedded fields) rerun AC-R0-01, 05, 06 and 09 for their newly extended types; each release ADR records its floor step and minimum image. I, H, R review AC-13; DC-02 PROPOSAL
AC-R0-08 Writer census: an architecture test extending StudyWriteLockArchitectureTests fails the build when any path writes pmStudy or pmProject without the registered ownership guard in its write filter, and every UpdateMany on pmStudy is in the inventory with a decision. U, I Research A27; review AC-13; DC-04; VB-07; DS-10 PROPOSAL
AC-R0-09 Behavioural floor: with R0 and R2a binaries alternating writes on one Study (legacy screening saves, claim writes, fold removals, canonical commits), every persisted computed field (ExtractionInfo.SessionTallies, the SessionTally totals, the ScreeningInfo inclusion and agreement fields) equals an authoritative recount that includes Study.CanonicalSummary; with no summary present, R0 behaves exactly as before. I, H, R DC-02; VB-01; RT-06, RT-07; AP-01; consistency model PROPOSAL
AC-R0-10 Through the IReviewMembershipFacts seam's embedded-data provider, every row of the eligibility truth table gives the same admission, pool, allocation-exemption and D8 slot answer as today's predicates. C AP-01; consistency model PROPOSAL
AC-R0-11 A legacy writer, transactional or not, racing a marker sweep or cutover never commits after the marker; the barrier harness forces the interleaving and the loser gets the typed conflict. I DC-04 (AC-DC-07) PROPOSAL
AC-R0-12 The admission service refuses to admit a project that runs FEAT-024 in transactional point mode, and refuses that mode for an admitted project. I DC-21; programme integration PROPOSAL
AC-R0-13 Project admission and FEAT-024's statistics allowlist stay independent: changing one never changes the other. I MS-24 PROPOSAL
AC-R0-14 No new pmStudy index is built at service start-up; each is built through the operator route with commit quorum and recorded per environment. I, G VB-18; consistency model (C18) PROPOSAL
AC-R0-15 Canonical commands refuse, before any write and with a typed read-only notice, while any registered API or PM instance runs an image below the canonical writer floor; the floor reuses the existing service version floor (src/libs/mongo/SyRF.Mongo.Common/ServiceVersionFloor.cs, which fails closed unless every instance is at the minimum) and ADR-019's storage-version tripwire; once every instance is at or above the floor, commands proceed without a restart. I, H PH-29; DS-10; consistency model PROPOSAL
AC-R0-16 PM can capture notification occurrences inline: an operation, sweep or time-driven transition hosted in PM that commits a notice-producing change captures the occurrence in the same transaction, reading the same notification flags or admission record as the API. I DD-04; E59; NS-01; domain model PROPOSAL
AC-R0-CONF C16-T01 to T08; C7-T01 (embedded provider). C review AC-01 PROPOSAL

Changes: AC-R0-01, 02, 03 and 05 rewritten; AC-R0-06 to 16 new.

4.4 R1a Question templates and import

Tier T2 · freeze G0 · fixtures FX-SETUP-02 to 04 · seeds: existing.

ID Criterion Verified by Source Status
AC-R1a-01 An import preview lists every question, parent remap and lookup remap exactly as the apply then produces them (preview and apply are equal on fixtures). I Plan R1a; FX-SETUP-03 PROPOSAL
AC-R1a-02 Cross-project references in a template are refused with a message naming them, and nothing is created. I Plan R1a; FX-SETUP-04 PROPOSAL
AC-R1a-03 A failure during apply leaves no partial questions. I Plan R1a PROPOSAL
AC-R1a-04 The import flow never deletes or edits existing questions. I Plan R1a PROPOSAL
AC-R1a-05 Question templates can be browsed, previewed and copied into a project; copies don't change when the template changes. I, E SET1; FX-SETUP-02 confirmed
AC-R1a-06 Filtered-options authoring in the new editor gives the same stored result as the legacy editor on fixtures. I, E Plan R1a PROPOSAL
AC-R1a-07 The 17 question-management specs excluded in angular.json and the question-management/** exclusion in vitest.config.ts are both removed; the specs run in CI and pass; the "Focused question" debug text is gone. U RULE; review AC-15 confirmed
AC-R1a-08 Template copies record their source template and version where older binaries keep it (a DefinitionTemplate record, or a Project top-level field preserved by Entity extra elements); an older binary that replaces the Project keeps it. I, H V2-16 PROPOSAL
AC-R1a-09 If approved, the template catalogue includes SYRCLE risk-of-bias, CAMARADES checklist and ARRIVE templates with per-outcome items, curated by CAMARADES methodologists; their copies stay independent. I, E SR (templates); D4-06 pending-D4-06
AC-R1a-10 Template ownership: a CAMARADES-curated system catalogue (application role) plus copying from projects the user administers; copies only, never links. I V2-16; D2-15 pending-D2-15
AC-R1a-11 If approved, the SYRCLE template binds items 6 to 8 to the outcome-assessment entity so they are answered per outcome, and the export gives a domain × study (and domain × outcome) judgement matrix. I, C SR-05; methodology coverage pending-D4-06
AC-R1a-12 Reordering in the question tree and editor uses pointer-based CDK drag with a keyboard alternative (no native HTML5 drag events, enforced by a guard spec); it works with touch on iPad Safari and passes the Firefox and WebKit smoke journeys. X, E, U PH-13; review AC-19; UX strategy (E85); D3-15 pending-D3-15
AC-R1a-CONF C4-T04 (question templates). C review AC-01 PROPOSAL

Changes: AC-R1a-07 rewritten; AC-R1a-08 to 12 new.

4.5 R1b Members and groups visibility and owner-only enforcement

Tier T2 (authorization: supervised review) · entry: the security fix (#3964, merged on 3 October 2026, merge commit 85e6facf7; kept under D1-01) · fixtures FX-PERM · seeds: personas owner and admin-not-owner.

ID Criterion Verified by Source Status
AC-R1b-01 A project administrator who isn't the owner gets 403 when trying to change the owner, and no field of that request is applied. I SEC1; PM1; D1-01 (decided: keep #3964) confirmed
AC-R1b-02 The current owner can still transfer ownership to another project member. I, E PM1 confirmed
AC-R1b-03 Project and stage permission updates that include ChangeOwner, AssignPermissions or Delete are refused with an error naming the activity, and nothing changes. I SEC1 confirmed
AC-R1b-04 The Members & groups page shows every group, member and project or stage grant exactly as the server enforces them (contract test against the active decision path). I, E PM1 confirmed
AC-R1b-05 Only the owner sees the transfer control; owner-reserved activities never appear as grantable; the component specs run (AC-ALL-15). U, E PM1; SEC1 confirmed
AC-R1b-06 The members route guard uses the correct permission key: a user without EditMemberships can't reach the editor route, and one with it can. U Plan R1b (authorization WP1d) PROPOSAL
AC-R1b-07 UI copy and the user guide describe ownership transfer as owner-only. D SEC1 confirmed
AC-R1b-08 Each "why can or can't I" explanation equals the enforcement decision. I PM1; X-AUTH-WP9; review AC-34 conditional-X-AUTH-WP9
AC-R1b-09 Transferring ownership to a non-member is refused, and the former owner loses owner-reserved activities on their next request. I SEC1; PM1; D1-01 confirmed
AC-R1b-CONF C10-T01, C10-T04, C10-T07. C review AC-01 PROPOSAL

Changes: AC-R1b-08 made conditional; AC-R1b-09 new.

4.6 R1c Configurable groups and the permissions dialog

Tier T2 (authorization: supervised) · entry: X-AUTH-SCHEMA, X-AUTH-ENFORCE or parity tests, X-AUTH-WP9, Q-03a, Q-09 · fixtures FX-PERM.

ID Criterion Verified by Source Status
AC-R1c-01 A user with EditMemberships can create, rename and delete a group and assign members; others are refused. I, E PM1; Q-03a confirmed
AC-R1c-02 An editor can't add themselves or anyone else to a group whose grants exceed what the editor may administer (matrix of editor and group grants in FX-PERM). I Q-03a confirmed
AC-R1c-03 ChangeOwner is never grantable to a group; AssignPermissions is grantable only through R1d's envelope. I Q-03a; PM1; PM2 confirmed
AC-R1c-04 Group edits that change effective Review or Reconcile grants produce access notices through the existing capture, reading grants through the active decision path (parity test), within bulk fan-out limits, and through no other path. I C15; NS-09 conditional-X-NOTIF
AC-R1c-05 Group grants decide identically in the legacy and evaluator paths (parity tests), or the enforced evaluator is active in that environment. I A-17 assumption-A-17
AC-R1c-06 Every change is audited in authorizationAudit with actor and before and after values. I C10 PROPOSAL
AC-R1c-07 The generalised dialog covers every project and stage activity except owner-reserved ones; the mock stage-permissions page and stagePermissionsConfigurable are gone. E Plan R1c (WP11) PROPOSAL
AC-R1c-08 Delete stays owner-only: it is never grantable to a group. I Q-03a ("Delete follows Q-03"); permission-matrix proposal; Q-03 (approved as recommended, 3 October) confirmed
AC-R1c-09 Holding a grant never lets a user assign it: across the FX-PERM matrix, a grant holder without AssignPermissions is refused when assigning that grant. I PM1 (invariant 10); V2-24 confirmed
AC-R1c-10 Revoking a reviewer's Review grant, directly or by a group change, releases their temporary claims through the claim-revocation outbox within one dispatcher cycle; drafts and saved work stay. I RT-20 PROPOSAL
AC-R1c-11 Study-issue and PDF-correction recipients and deciders are expanded by capability ("receive and resolve study issues", "approve PDF corrections"), so a custom group holding them receives reports. I NS-20 PROPOSAL
AC-R1c-12 #2224's API shape and tests are harvested into R1c, and #2224 is closed with a harvest note. G, I Q-09 confirmed
AC-R1c-CONF C10-T02, C10-T07, C10-T09. C review AC-01 PROPOSAL

Changes: AC-R1c-03 and 04 rewritten (Delete moved to AC-R1c-08); AC-R1c-08 to 12 new.

4.7 R1d Delegated permission administration

Tier T2 (supervised) · entry: R1c, Q-03 · fixtures FX-PERM.

ID Criterion Verified by Source Status
AC-R1d-01 The owner can grant permission administration to a group within an envelope listing the activities it may assign. I, E PM2 confirmed
AC-R1d-02 A delegated administrator can assign only activities inside the envelope, and never ChangeOwner. I PM1; PM2 confirmed
AC-R1d-03 Revoking the delegation stops further assignments at once; assignments already made remain and are listed for review. I PM2 PROPOSAL
AC-R1d-04 Every delegated assignment is audited with the delegating owner and the delegate. I PM2; C10 PROPOSAL
AC-R1d-05 Delegation is non-recursive: a delegate can't grant the delegation itself. I PM2 (recommendation); Q-03 (approved as recommended, 3 October); V2-05 confirmed
AC-R1d-CONF C10-T03. C review AC-01 PROPOSAL

Changes: AC-R1d-02 rewritten (non-recursion moved to AC-R1d-05); AC-R1d-05 new.

4.8 R2a Versioned forms and immutable sessions (one stage per form)

Tier T1 (staging rehearsal) · freezes F1a (engine), F1b (export disclosure), F1c (UI seams, copy, Dockview) · entry: R0's staging rehearsal passed (production pilots need R0's production soak); #3985 and #3973 merged (D1-02) · fixtures FX-PRISMA-02a, FX-PRISMA-04a, FX-APPLIC, FX-DRAFT-01 to 08, FX-CLAIMS, FX-LEGACY, FX-FLOOR, RV-DS-01 to 03 · seeds: Versioned forms, one stage; Realistic content.

ID Criterion Verified by Source Status
AC-R2a-01 Autosave keeps a draft and leaves the session's status, current explicit version and qualification unchanged. I SL1; SL3 confirmed
AC-R2a-02 Save creates an immutable incomplete version that becomes current; a Save after Complete removes the completed qualification. I, C SL2; SL3 confirmed
AC-R2a-03 Complete checks required applicable answers on the server and creates an immutable completed version that counts once; the shared applicability corpus FX-APPLIC passes in both the .NET validator and AF2. C, U SL2; UA1; E23 confirmed
AC-R2a-04 A question hidden by a condition is never required; a missing required applicable answer is refused with a typed error naming the question and its context. C, E UA1; SL2 confirmed
AC-R2a-05 Every earlier version stays readable in the history panel and in previous-version exports, with version identifiers. I, E SL2; EX1 confirmed
AC-R2a-06 Two tabs or devices on one session: the second is read-only with "Take over editing"; taking over moves the lease; the other tab's unsaved edits are kept as a bounded conflict copy the reviewer can open, copy or discard (discard audited); the lease uses a stable client tab ID and works with tracking off. I, E DC-07; VA-12; RT-10; V2-18; review AC-14; consistency model; D2-08 pending-D2-08
AC-R2a-07 Each canonical command writes exactly one command-bearing record with a unique (ProjectId, CommandId) and a request digest. A retry with the same ID and digest returns the original result and writes nothing, including with the fold on before the fold runs; a different digest returns the typed digest-mismatch 409; a stale base returns a typed conflict that keeps the draft; an indeterminate commit returns the typed "outcome unknown", the draft is kept, and a retry with the same ID resolves through the ledger. C, I Consistency model; DC-03; VB-04; MS-05 PROPOSAL
AC-R2a-08 Drafts are never shown to reconcilers or included in exports. I SL1; SF4 confirmed
AC-R2a-09 A canonical session can't be hard-deleted. "Remove all annotations" on a session with an explicit version creates a versioned clear (an incomplete version with no answers, history kept); on a draft-only session it discards the draft (audited). Withdrawal is append-only: the session stops counting and its revisions stay readable. I, E C5; review AC-34 PROPOSAL
AC-R2a-10 A question referenced by any published form or profile version can never be permanently deleted by any path, including the legacy delete cascade; it can be retired or left out of a later form version. I QD1; VA-15; VB-11 confirmed
AC-R2a-11 Legacy reconciliation, reconciled-answer writes, session removal and question deletion refuse canonical scopes and change nothing. I C16; GS1 PROPOSAL
AC-R2a-12 Legacy readers (pool filters, capacity guards, reconciliation readiness, statistics, exports) return correct values for canonical sessions through Study.CanonicalSummary (per-form membership facts with per-reviewer markers, per-bound-stage tallies); every study-scoped canonical command writes that Study in the same transaction (version bump and summary) and conflicts with a concurrent bulk-update lock. I Consistency model; DC-02; AP-01; RT-06; MS-13 PROPOSAL
AC-R2a-13 A support edit-mode write records the real actor, is flagged, and is excluded from independence statistics. I C1 PROPOSAL
AC-R2a-14 A form requirement version in use can't change. "In use" means referenced by any FormSession (including draft-only), any ReconciliationTask, or an Active stage settings version's binding; a draft-only session created against a version that is then edited gets a typed stale-definition conflict (research A16). A draft form can be edited until first use. I FV1; A-14; VA-07, VA-13 assumption-A-14
AC-R2a-15 Canonical forms refuse quantitative extraction until O1, with an explanation. I Plan R2a PROPOSAL
AC-R2a-16 Unmasking in exports follows the export disclosure contract: only authorised users can unmask, every unmasking is audited, and candidates and gold stay separate for exporters who aren't reconcilers. I, E C10; U26 PROPOSAL
AC-R2a-17 Legacy screening writes in admitted projects are captured inside the aggregate (a bounded capture entry on the Study in the same document write, moved idempotently to pmLegacyWriteLedger by a leased worker), with one test per writer: interactive submit (both paths), administrative screening, reference-file screening columns (both parsers), the bulk-update planner and seeding. Each committed change produces exactly one entry; overflow is recorded as a coverage gap. I E26; DC-14; VB-14 PROPOSAL
AC-R2a-18 FX-PRISMA-02a and FX-PRISMA-04a assertions pass: one qualifying contribution per reviewer per study per form; a Save after Complete removes it; autosave alone does not. C SF2; SL3; review AC-04; V2-07 confirmed
AC-R2a-19 The canonical write gate (AC-ALL-26) holds for Save and Complete at the typical, p99 and max tiers (50, 340 and 2,023 questions), with E28 expressed in pins and bytes. B D1-08; DC-16; PH-01; VB-12; review AC-18 confirmed
AC-R2a-20 Every canonical record carries a hybrid logical clock stamp and its per-aggregate version; within a study, commit order equals Study version order; no interactive commit writes a per-project document (architecture test). C, U Consistency model; DC-01, DC-13; MS-12; PH-01 PROPOSAL
AC-R2a-21 Natural-key aggregates get deterministic name-based IDs (FormSession, AnnotationHead through its key hash, ScreeningOutcome, StudyGold, ReconciliationTask, CanonicalOwnership); client-proposed IDs for revisions and entity instances are validated (unused, same project); a client ID that belongs to another scope is refused before any mutation. I E27; research A5; VB-16 PROPOSAL
AC-R2a-22 Publishing a form version or committing a session version above the E28 ceiling (pins per session version, changed revisions per commit, BSON bytes per commit) is refused before any write with the typed "size limit exceeded"; the ceiling starts below the largest project's 2,023 questions until benchmarks prove larger forms safe. I, B E28; VB-12; D2-16 pending-D2-16
AC-R2a-23 System questions are stored as versioned data with (GUID, SystemQuestionVersion) identity: a later code change doesn't alter a published form version's pinned snapshot (form, validation, export); the v0 and v1 structural variants pin different identities; deploying a new system version changes no published form and prompts no admin. C E24; VA-09; VB-11; D2-06 pending-D2-06
AC-R2a-24 Composed form versions include every ancestor automatically; removing an ancestor while a descendant remains is refused; composing a version whose pinned child has a condition or parent filter on an option absent from the pinned parent version is refused, naming the question. U, I QM-09; C4; VA-06 PROPOSAL
AC-R2a-25 Binding a form version to a second stage is refused with an explanation until R2b. I A-21 assumption-A-21
AC-R2a-26 Each revision records source stage, step, stage-settings version, question version and real actor, unchanged on reuse; each session version records route stage, form version and the revisions submitted together (C5-T09 checks that this is the full pin map). C PV1; VA-22 confirmed
AC-R2a-27 Presentation state such as entity order lives outside immutable versions: an order-only change creates no version, doesn't remove Complete, doesn't compare-and-set the session head and doesn't appear in exports. C C5; VB-08 PROPOSAL
AC-R2a-28 A draft edit persists within the debounce window (PROPOSAL 2 s) and survives reload, tab close and a second device; a draft-changes indicator over the current explicit version is shown and announced. E, A SL1; SL3; review AC-14 confirmed
AC-R2a-29 A point-in-time restore of the whole database into an isolated database passes the consistency checker (versions, drafts, ledger records, summaries agree), writes a history-discontinuity record for each affected project, and reconciles scheduled MassTransit and Quartz state from MongoDB state. R E31; DC-17; VB-20; D2-13 pending-D2-13
AC-R2a-30 Deleting a reviewer's account anonymises the Investigator record; revisions, drafts, exposure events, ledger records, presence and connection records and inbox items hold only opaque GUIDs (schema check); AC-ALL-21 still passes. I E32; VB-19; RT-21; NS-21; D2-14 pending-D2-14
AC-R2a-31 Canonical sufficiency uses the form target; the per-stage override (#3732) has no effect on canonical forms. I SF2 confirmed
AC-R2a-32 A committed question version that no published form or profile version references, and a never-published draft question, may be deleted; retiring a published question blocks new use. I VA-15; QD1 PROPOSAL
AC-R2a-33 Operational form settings (target, compare settings, gold completeness, guidance) change with audit history and never start a publication or impact flow. I VA-07; D2-05 pending-D2-05
AC-R2a-34 Two forms can't both use one entity category until R2d; the refusal explains why. I A-19 assumption-A-19
AC-R2a-35 A reviewer whose only session is canonical (a draft with a claim, saved incomplete, or completed) is always admitted to it by Next, direct access and join, even at target with enforcement on; another reviewer is refused AtCapacity. Runs in both tracking modes. I RT-05 PROPOSAL
AC-R2a-36 The first explicit Save or Complete releases the claim and replaces presence exactly once inside the canonical transaction; twelve concurrent first saves from two tabs leave one session, no claim and one post-save presence; autosave never writes Study (pinned command counts). I, C RT-05, RT-15 PROPOSAL
AC-R2a-37 A draft keeps the reviewer's place while they are active, under today's idle and disconnect timers counting draft activity; when the timers lapse the place is released and the draft kept; the reviewer can still Complete it as an extra contribution unless an optional capacity cap applies, in which case they are told so and may keep or discard the draft. I, E RT-09; PH-03; consistency model; D2-07 pending-D2-07
AC-R2a-38 Every published canonical form version passes AF2's structural guards at publication (server-side, shared fixtures); a version AF2 can't render is refused; canonical routes never fall back to AF1 and show a typed error visible to admins. C, E VB-08 PROPOSAL
AC-R2a-39 Entity instances: deleting a unit is a set of withdrawal revisions on its label head and descendants in one commit; renaming keeps its identity; duplicating mints new instance IDs with copiedFrom provenance. C VB-09 PROPOSAL
AC-R2a-40 #3944 conversations refuse canonical scopes through the ownership marker until R4a binds them to the task; existing legacy threads are unaffected. I NS-18; NS-05 PROPOSAL
AC-R2a-41 Enabling proportional allocation on a canonical stage is refused with an explanation, until AL1. I AP-06; D3-13 pending-D3-13
AC-R2a-42 AF2 and the redesigned stage-review shell can be admitted per project through R0's admission service: an admitted project gets them whatever the environment flag says, a non-admitted project follows the environment flag, and the web reads the same admission answer as the API. I, E Q-25; DS-04 confirmed
AC-R2a-43 Exports carry, per answer, the question ID, question version and option ID (values are display), and the compatibility class once D2-02 is answered; previous-version exports are generated per form version. I VA-17 PROPOSAL
AC-R2a-44 The integrity checker reports zero findings on the R2a seeds and fixtures and detects an injected dangling reference in a test. I VB-11 PROPOSAL
AC-R2a-45 Completed work of members who are later disabled keeps counting; an audited admin action can exclude it. I D4-20 pending-D4-20
AC-R2a-46 A network loss during a session loses no edit made before the loss (journey with network throttling); the save-status indicator follows the copy-deck state machine (Saving, Kept, Retrying, Offline (kept on this device), Failed) and never overwrites the server draft silently from a local copy. E UX-04; consistency model PROPOSAL
AC-R2a-CONF C1-T06 (claim release on first explicit save), C1-T13, T15, T16, T17, T19; C2-T01, T08; C3-T04; C4-T05, T09, T10, T12, T16, T17, T18; C5-T01, T02, T03, T05, T07, T08, T09, T12; C7-T01 (canonical provider), T07, T12; C8-T07; C10-T05, T06; C11-T06; C17-T01, T03, T04, T05; C18-T06, T09, T10; C19-T01, T03, T04. C review AC-01 PROPOSAL

Changes: AC-R2a-01, 03, 06, 07, 09, 10, 12, 14, 15, 17, 18 and 19 rewritten; AC-R2a-20 to 46 new (AC-R2a-20 replaces the reviewers' per-project commit sequence with the consistency model's ordering).

4.9 R2b Shared sessions across stages

Tier T2, with a staging rehearsal for its floor step (form claims counted per bound stage) · freeze F1a (claim contract v2, C7 identity) · entry: R2a shipped; target-aware classification (AC-R2b-13) · fixtures FX-PRISMA-02b, FX-CLAIMS, FX-ELIG · seeds: Shared forms, two stages · also applies: AC-T-08.

ID Criterion Verified by Source Status
AC-R2b-01 With form F (target 2) bound to stages A and B, a reviewer reaches one session from both stages and counts once in each stage's progress. E SF1; SF2 confirmed
AC-R2b-02 A session saved through stage A appears in stage B with no double counting in tallies, progress lists, statistics or exports. I, E SF1; SF2; OPS1 confirmed
AC-R2b-03 Two tabs through stages A and B hold one claim; closing either keeps it; closing both releases it once; a third reviewer is admitted only then; pool predicates and the D8 slot rule read form-keyed claims. I SF1; RT-16; AP §5 PROPOSAL
AC-R2b-04 Proportional shares are refused, with an explanation, for stages whose form is shared. I A-09 assumption-A-09
AC-R2b-05 My studies, incomplete studies and the no-work page agree across the bound stages. E SF1 confirmed
AC-R2b-06 FX-PRISMA-02b assertions pass: one form in two stages gives one qualifying contribution per reviewer, counted once in both stages' progress; repeated pool evaluations and personal batch grants add no screened units. C SF2; V2-07 confirmed
AC-R2b-07 Concurrent Complete through stages A and B on one session yields one completed version and one contribution; the loser gets a typed conflict and keeps its draft. C SF2; research A22 confirmed
AC-R2b-08 My studies, incomplete studies and the no-work page return identical counts through the API for the bound stages. I SF1 confirmed
AC-R2b-09 Twelve concurrent first joins through stages A and B create one claim, and the tallies both stages read are equal. C RT-11 PROPOSAL
AC-R2b-10 For a form bound to stages with different tracking settings: the most restrictive bound stage sets the capacity cap and the idle timeout; the stage in use sets the in-progress limit, counting a shared incomplete session once; the form is tracked if any bound stage is. I RT-12; D3-18 pending-D3-18
AC-R2b-11 Concurrent admissions through two bound stages never exceed the form's capacity cap, or its target when enforcement is on. I DC (AC-DC-06) PROPOSAL
AC-R2b-12 Claims follow the claim contract v2: typed {kind, scope ID, route stage, route step, reserved at, allocation regime}, unique per (study, kind, scope, reviewer) and keyed by form identity, not form version; new hub methods are added instead of new parameters until MinUiVersion moves; old command handlers stay for at least the suspension grace plus the idle timeout; the presence index migrates by create, read both, drop. I, R RT-11; programme integration PROPOSAL
AC-R2b-13 FEAT-024's target-aware annotation classification has landed with its reconciliation plan: the classifier and StudyStats use the form's effective target; after the change, a backfill republishes every family of the pilot project with zero stale scopes and the parity audit matches. I, R MS-07; AP-14; MS §7©; programme integration PROPOSAL
AC-R2b-14 Before any production pilot relies on R2b claim behaviour, X-CLAIMS evidence is recorded: #3876 reshaped into a binding-scope tracking setting enabled per admitted pilot project (or the route Chris chooses), API and PM switched together in one static configuration change, and AC-T-01 to AC-T-07 passed. G, R RT-02, RT-03; D3-16 pending-D3-16
AC-R2b-15 A stage binds the form and records which version it bound and when; the live route from any bound stage presents the session's resolved form version; a Completed stage's frozen binding governs only its historical display and readiness. I, E PV2; VA-08; D2-04 pending-D2-04
AC-R2b-16 An optional capacity cap, off by default and separate from the form's minimum target: when on it defaults to the target, never limits requested extra reviews and never evicts existing work; with it off, extra completed contributions keep counting. I RT-13; SF4; D3-17 pending-D3-17
AC-R2b-CONF C1-T06, T07; C3-T01; C5-T04; C7-T02, T03, T04, T05, T06, T08, T10. C review AC-01 PROPOSAL

Changes: AC-R2b-03 and 06 rewritten; AC-R2b-07 to 16 new.

4.10 R2c Publication with impact

Tier T1 (staging rehearsal) · freeze F2 · entry: R2a shipped; Q-31; FEAT-024's new-family onboarding contract (MS-14) · fixtures FX-PUB, FX-PUB-10K, FX-PRISMA-04b, RV-DS-02 and 03 · seeds: Shared forms, two stages; Versioned forms, one stage.

ID Criterion Verified by Source Status
AC-R2c-01 Publishing F v2 lists completed, saved-incomplete and draft-only sessions under every prior version and every bound stage, with counts that match authoritative records (draft-only sessions counted from pmSessionDraft at the fence). I, E FV2; MS-03 confirmed
AC-R2c-02 The admin's choices are recorded as a policy record. Publication writes no session version and no answer revision (only Q-34 option mapping, if approved, writes policy-derived revisions with provenance, excluded from outdated flags). Each session's effective state (qualifying, needs updating, pinned under an older version, not applicable) is derived on read from its latest explicit version, its pin map, the current published version, the recorded policies and per-answer validity: requireReanswer marks affected answers Needs updating; autoUpdate lets a pinned compatible valid answer satisfy the new requirement; doNothing leaves the session pinned, counting as the admin chose. I, C FV2; FV3; RECOVERED transitions; VA-03; versioning model; D2-01 pending-D2-01
AC-R2c-03 Needs updating stays visible beside its question with any reason and guidance and blocks Complete until a valid answer exists; a missing reason warns but doesn't block. E VU1–VU3 confirmed
AC-R2c-04 Publication requires current usage evidence at the protected boundary. "Current" means a FEAT-024 read at the fence whose result is Materialized-Fresh or pinned-Authoritative, with its identity (projection revision, source revision, digest) recorded on the operation; missing or stale evidence is never treated as zero; named pilots use Q-31(b) authoritative counting while FEAT-024 is dark. I PS1–PS3; Q-31; MS-04; D3-10 pending-D3-10
AC-R2c-05 Every session pinned to a prior version ends in the recorded policy's state: phase 2 is a predicate-driven sweep (pinned version below current, policy not yet applied) repeated until it matches nothing; a Save racing phase 1 (barrier-forced) and a late session whose ID sorts below the sweep cursor are both covered; a Save based on a superseded version is accepted pinned to the version its client declared and is never rebased. I, C PS3; DC-06; VB-06; VA-10; consistency model PROPOSAL
AC-R2c-06 Phase 1 is constant work: fence the form, drain (at least the transaction lifetime plus the sweep interval plus a margin), compare-and-set the AnnotationForm head and write the policy and operation records in one short transaction. Phase-1 time is flat across 1,000, 10,000 and 100,000 sessions; the preview digest is re-checked before phase 1 and the admin re-confirms if it changed; the drain pauses only the form being published (about 90 s at most) and keeps drafts. B, I DC-06; VB-06; D2-10 pending-D2-10
AC-R2c-07 Recipients are the affected owners derived from the publication under the chosen policy, with no notice for doNothing; there is one item per recipient per publication through recorded fan-out, with the SourceId derived from the publish operation; the publishing admin gets a completion or stall notice; with every notification flag off, reviewers still see Needs updating in the form. I, E C15; NS-01, NS-15; VU1 PROPOSAL
AC-R2c-08 Production publication happens only when X-STATS-b1 to b7 evidence is recorded (R2c production publication waits for FEAT-024 production readiness); for named pilot projects only, authoritative counting under the same protected boundary if gate (b) isn't reached when R2c is otherwise ready (Q-31(b)). Staging pilots need X-STATS-a (PROPOSAL, MS-10). G Q-31; MS-01, MS-10 confirmed, PROPOSAL
AC-R2c-09 FX-PRISMA-04b assertions pass: after a publication with sessions in all three categories, qualifying counts per version follow the recorded policy (the snapshot part waits for R5b). C FV3; V2-07 confirmed
AC-R2c-10 Killing phase 2 mid-run and resuming it (lease, generation, crash takeover) applies each transition exactly once; qualification follows the recorded policy throughout. I E22; VB-06; DC-06; review AC-34 PROPOSAL
AC-R2c-11 Qualifying-contribution counts per version match FX-PUB's expected table for every policy combination; a missing required answer is never declared answered by policy. C FV3; RECOVERED transitions confirmed
AC-R2c-12 "Why it changed" and "What reviewers need to do differently" are stored per version, shown beside affected questions and kept in history; missing guidance never blocks. I, E VU2 confirmed
AC-R2c-13 FX-PUB-10K (10,000 sessions across v1 to v3 and two stages, split 60/30/10 completed, saved-incomplete and draft-only, 5% with drafts over explicit versions): phase 1 enumerates nothing, the audit manifest is built after commit and paged, and with the fold on no family is left stale or quarantined after the fold drains (overflow is reported). B E22; VB-03; review AC-18 PROPOSAL
AC-R2c-14 One active publication per form (unique partial index): a second publish attempt returns the typed "publication in progress"; policy revisions compare-and-set the policy generation and every sweep batch asserts it. I VB-06; D2-11 pending-D2-11
AC-R2c-15 While phase 2 runs, new admissions and reconciliation-readiness transitions for that form pause; reviewers keep saving; the admin sees progress; past a limit (PROPOSAL 30 min) it stops and shows as pending; admission fails closed on a stale projection. I, E VB-06; DC-08; D2-10 pending-D2-10
AC-R2c-16 A session pinned to v1 renders v1 after v2 publishes, through the pinned data source; the Needs-updating presenter shows the prior value with v1's options and labels. E, C VB-08 PROPOSAL
AC-R2c-17 Preview pilots are exempt from PS1: on preview, publication uses authoritative counting at the protected boundary and the operation records that basis. I MS-10; D3-10 pending-D3-10
AC-R2c-18 Added and removed questions appear in the dialog with their own treatments: an added required question offers "count earlier Completes" or "require an answer before counting"; a removed question leaves the requirement while its answers stay in history. I, E VA-14; FV1–FV3 PROPOSAL
AC-R2c-19 Lowering a form's target, or switching capacity enforcement on, goes through D6's conflict flow: surplus claims are revoked most recent first through the outbox, and drafts stay. I RT-19 PROPOSAL
AC-R2c-20 A Save on a v1-pinned session after v2 is published pins the version its client declared; Upgrade is explicit (from the Needs-updating banner, from Fix, or offered on the next explicit Save), creates a new incomplete version pinned to the current version with the same revision pins, and shows the Needs-updating marks. I, E VA-10 PROPOSAL
AC-R2c-21 Compatibility is declared when a question version is committed (system-suggested, admin-confirmed) and is immutable once any answer pins that version; compatibility classes are transitive (three-version chain fixture); a policy revision never changes compatibility. C VA-01; versioning model; D2-02 pending-D2-02
AC-R2c-22 Renaming an option's label keeps answers valid; retiring an option, or giving a changed meaning a new option ID, makes affected answers invalid under the new version; conditions and parent filters reference option IDs. C VA-05 PROPOSAL
AC-R2c-23 Option mapping is allowed only as an explicit per-option mapping recorded in the policy, applied as policy-derived revisions with provenance (old revisions untouched), and only where an option's meaning is unchanged. I Q-34 pending-Q-34
AC-R2c-24 A Save or Complete during an open definition-rewrite or inclusion-recalculation fence is refused or deferred exactly as legacy saves are (typed 503); a publication under the fence never commits a Study write before the fence admits it. I MS §7(b) PROPOSAL
AC-R2c-25 The draft-only count at the fence equals the pmSessionDraft enumeration at the same snapshot, never a materialised row. I MS-03; MS §7(f) PROPOSAL
AC-R2c-26 Changing a question's data type or multiplicity creates an incompatible version of the same question identity; parent and owner scope stay part of identity; lineage and history survive. C VA-16; D2-03 pending-D2-03
AC-R2c-27 In the designer, an administrator can view a question's version history with a diff between any two versions, and each question card shows its current version number. E QM v2 QM-11, QM-14 (retained) PROPOSAL
AC-R2c-28 autoUpdate is offered only within a compatibility class and satisfies only answers valid under the new version; a many-to-one option mapping or a changed free-text meaning forces requireReanswer; the publication record stores the administrator's rationale; exports carry qualificationPolicy and answeredUnderVersion per answer. I, E SR-16; versioning model PROPOSAL, pending-D2-02
AC-R2c-CONF C4-T01, T02, T03, T06, T07, T08, T11, T13, T14, T19; C5-T10; C8-T01 to T06; C18-T05 (publication); C19-T05. C review AC-01 PROPOSAL

Changes: AC-R2c-01 to 09 rewritten except 03; AC-R2c-10 to 28 new.

4.11 R2d Overlapping forms, outdated flags, Fix and requirement revision

Tier T2 · freezes F1a (C2), F2 (policy revision) · entry: R2a, R2c · fixtures FX-SF5, FX-DRAFT · seeds: Shared forms, two stages.

ID Criterion Verified by Source Status
AC-R2d-01 The ledger's cross-form reuse list (FX-SF5) passes: compatible same-context answers are shared across forms, and each form keeps its own completion. C, E SF3; SF5 confirmed
AC-R2d-02 A reviewer sees their own prior answers and ancestor answers across forms, in the exact entity or branch context. E SF5 confirmed
AC-R2d-03 Changing a shared answer flags other sessions "contains outdated annotations" (derived on read, limited to the same reviewer's sessions on the same study); nothing adopts the new revision automatically. I SF5; consistency model (C19) confirmed
AC-R2d-04 Fix creates a current incomplete version and opens that session's form. E SF5 confirmed
AC-R2d-05 A warning alone keeps a current Complete counting; a reviewer's Fix (an explicit incomplete version) removes qualification until a valid Complete. C SF6 confirmed
AC-R2d-06 An admin revises an unnecessary update requirement as a superseding policy record (compare-and-set on the policy generation) that restores qualification by derivation; no version, transition history or work is rewritten or deleted. I FV4; VA-03 confirmed
AC-R2d-07 Two forms under one entity category share its label answer, with lineage shown. E SF3 confirmed
AC-R2d-08 Outdated annotations are flagged in-app on the session. Self-caused flags send no notice; when someone else caused the change (a support on-behalf-of write, an adoption remap, a shared-gold revision), each affected owner gets one in-app notice per cause, off by default. E, I SF5; NS-14; Q-20 pending-Q-20
AC-R2d-09 Before changing a shared answer, the reviewer is told that a new version will be created and which sessions will show "contains outdated annotations"; the same QuestionId under another entity or branch stays separate; conflicting legacy duplicates show a conflict marker. I, E SF5 confirmed
AC-R2d-10 Saving form G with a draft based on an older revision of a head changed through form F returns a typed stale-base conflict that shows both values and keeps G's draft. I VB-15 PROPOSAL
AC-R2d-11 Two forms pinning incompatible versions of one shared question never flag each other; a v2-only option never appears in a v1 session; Fix shows the current revision within the compatibility class. C VA-02; D2-02 pending-D2-02
AC-R2d-12 A recorded publication treatment removes qualification only by changing the session's derived effective status, without writing a version (SF6 read as the versioning model proposes). C SF6; VA-03; D2-01 pending-D2-01
AC-R2d-13 The six per-answer states (current; outdated own answer; needs updating for a new version; needs updating for an invalid value; pinned to an older version; not applicable) render with copy-deck text, and testers can explain them. E, UT VA-27 PROPOSAL
AC-R2d-14 Withdrawing an entity instance flags the same reviewer's sessions of other forms on that study as outdated. C VB-09 PROPOSAL
AC-R2d-15 No acknowledgement is needed to Complete with outdated answers: the non-blocking warning replaces FEAT-001's acknowledgement and enforcement levels. E D4-17 pending-D4-17
AC-R2d-CONF C2-T02, T03, T07; C4-T15; C5-T06, T11; C19-T02. C review AC-01 PROPOSAL

Changes: AC-R2d-03, 05, 06 and 08 rewritten; AC-R2d-09 to 15 new.

4.12 R3a Steps, routing and canonical screening decisions

Tier T1 (staging rehearsal, with the screening floor step) · freeze F3 · entry: R2a shipped; R0 screening floor step; AC-R2b-13; X-ELIG for production · fixtures FX-PRISMA-03a, FX-PRISMA-03b, FX-ACCESS-01 to 10, FX-ELIG, FX-LEGACY (thresholds), RV-DS-05 · seeds: Workflow routing; Realistic content.

ID Criterion Verified by Source Status
AC-R3a-01 The handoff's worked scenes, as corrected by DP6 and DP7, pass as journeys: title/abstract to combined full text; an independent decision that doesn't stop another form; facts → screening → outcomes; collective Exclude during extraction with EW1; a personal Exclude blocking that reviewer; two forms with targets 2 and 1; an extraction-only step that offers annotation or Skip. E DP6; DP7; EW1; review AC §5.7 confirmed
AC-R3a-02 The C6 evaluation table gives identical results for selection, reservation, direct access and submit (table-driven, shared corpus). C C6; DP6; DP7 PROPOSAL
AC-R3a-03 The browser follows the server's eligibility decision (the eligibility programme's S6b consumption is absorbed into R3a); #3551's universal screening-complete veto is gone. E Q-24; AP-09; D3-09 pending-D3-09
AC-R3a-04 Autosave never votes, and screening decisions are never overwritten: each submit is a new revision. I DP3; SL1 confirmed
AC-R3a-05 FX-PRISMA-03a assertions pass: own Include with collective Pending opens permitted within-stage dependent work and records no collective Included; cross-stage work stays blocked under the Collective Include default and opens under the advanced option; collective Exclude blocks new dependent work while EW1 governs saved work; a collective Excluded stays Excluded despite completed extraction (PR1); one current ScreeningOutcome per profile; StudyEnteredPool entries carry filter and profile versions. C DP6; DP7; PR1; EW1 confirmed
AC-R3a-06 Statistics count per profile and per form without double counting; the hard-coded "enough = 2" is replaced by targets through FEAT-024's target-aware classification (AC-R2b-13). I SF2; OPS1; MS-07; AP-14 PROPOSAL
AC-R3a-07 Migrated combined stages keep their Allow/Stop value, and a missing value migrates as Allow (eligibility D1); new combined steps default to Stop; newly unavailable activity is refused while drafts are kept (eligibility D4). I Q-24; A-16; review AC-34 pending-Q-24
AC-R3a-08 The stage designer rejects dependency cycles; display order never creates a dependency; the effective-policy preview matches real admission decisions. U, E C6 PROPOSAL
AC-R3a-09 "Who is offered what" needs the Monitor capability; holders may see personal votes, while reviewer-facing warnings and route messages never reveal votes; until X-AUTH-RESOLVER lands it shows pool-level counts by refusal reason, with no per-reviewer rows. I RECOVERED (OD5); C10; V2-08; AP-02; D3-13 pending-D3-13
AC-R3a-10 Pool-entry events are recorded, with filter and profile versions, by every writer that changes availability (decision submit, batch opening, personal grant, import into an available stage, binding and lifecycle changes, dedup reversal); pool entry is the first release to anyone; shared openings and personal grants are recorded separately. I Amendment A (Q-06a); DC-14; AP-05; D3-13 pending-D3-13
AC-R3a-11 Complete-and-Include commit together: an injected failure commits neither; a retry after an unknown commit returns the original result; navigation waits for acknowledgement. C, E Research A8 PROPOSAL
AC-R3a-12 The default profile's outcome equals the characterised legacy result for single, manual dual, automated dual and custom thresholds across missing, insufficient, conflict, included, excluded and corrected cases. C Research A2 PROPOSAL
AC-R3a-13 Skip records no decision, completion or PRISMA event. C, E Amendment A (Q-06a); RC6 confirmed
AC-R3a-14 The advanced own-Include option admits an own-Include reviewer while the collective decision is Pending and blocks them after a collective or personal Exclude; a self-cycle is rejected; a changed published policy is rechecked at transactional admission (FX-ACCESS-03, 07, 10). C, E DP7; access-policy fixtures confirmed
AC-R3a-15 VS1 is a step-level policy with a stage default, and BL1 is stage-owned; both are versioned with the stage settings and shown in the designer (display behaviour is AC-R4a-42). I VS1; BL1 confirmed
AC-R3a-16 The eligibility test-plan layers pass for legacy and migrated combined stages, or each changed expectation cites Q-24's answer. C, I, E Q-24 pending-Q-24
AC-R3a-17 Decisions captured since admission appear as canonical history with original times, authors and "captured legacy" provenance; none is lost or duplicated. I E26 PROPOSAL
AC-R3a-18 One current outcome per study and profile, with route provenance, an authority from the approved set (candidate agreement, reconciled, Admin with override audit, legacy-compatible or unknown) and a structured reason with coverage status; no single Study screening status; no free-text-only reason. C Amendment H (Q-06a); FEAT-011 phases 13 and 15 confirmed
AC-R3a-19 Pool entry for early-stopped and batched reviews matches FX-PRISMA-03b; re-evaluating the recorded filter and profile versions reproduces membership; pool membership is derivable from filter rules. C Amendment A (Q-06a); FEAT-011 phase 14 confirmed
AC-R3a-20 Partial combined-step reservations behave as the C7 contract says. C E5 PROPOSAL
AC-R3a-21 An unvoted reviewer proceeds once a study is collectively Included, with no vote invented; a personal Exclude blocks that reviewer across stages; the advanced option relaxes the default (own Include or collective Included admits). C A-06; A-18; Q-15 pending-Q-15
AC-R3a-22 AND/OR dependency groups follow their truth table; terminal-on-Exclude ends only its scope; a compulsory step blocks dependent work. C, E C6; plan R3a PROPOSAL
AC-R3a-23 VS1 and BL1 ship with provisional defaults, visibly marked: VS1 off; BL1 blinded with stable aliases. E Q-30 pending-Q-30
AC-R3a-24 Screening capacity follows the profile's collective rule, not the annotation target (eligibility D6). C RT-23; Q-24 pending-Q-24
AC-R3a-25 Opening a study claims only steps that are currently available; an own Include tries the dependent form claim atomically; if it is refused, that step shows the typed "enough reviewers" state and the screening decision stands. I RT §5.2; D3-19 pending-D3-19
AC-R3a-26 Next and pool selection have p95 ≤ 400 ms at 100,000 studies (RV-DS-05). B AP-17; PH-23 PROPOSAL
AC-R3a-27 Canonical admission writes no per-project document per save: it checks the bound StageSettings version in the Study filter; AC-ALL-26 passes with eligibility on. I, B DC-05; MS-19 PROPOSAL
AC-R3a-28 A keyboard screening path exists (decide Include or Exclude, next, skip) with at most two actions per decision. E, A UX-02 PROPOSAL
AC-R3a-29 On title/abstract steps, a tester screens 20 studies on a 390 px phone with the on-screen keyboard hidden; annotation stays tablet and desktop. E, X UX-15; D3-05 pending-D3-05
AC-R3a-30 Screening decisions imported from CSV columns mapped to members are recorded with authority Imported, independence unknown, source system and import job; they count toward sufficiency only if the importing admin records that they were independent; they are left out of the default inter-rater view and count as "screened in SyRF (imported record)", so amendment K's external counts are refused for those records. I SR-03; methodology coverage PROPOSAL
AC-R3a-31 Derived records carry the definition-version vector they were evaluated under: a decision racing a profile publication, and a threshold change racing a decision, leave no stale outcome undetected; admission fails closed on a stale ScreeningOutcome; predicate-driven sweeps repeat until nothing is stale. I DC-08; domain model PROPOSAL
AC-R3a-32 ScreeningOutcome has the facets candidate result, vote counts, rule version, final result, final source, adjudication reference and freshness; its only writer is the collective-outcome policy, invoked by submit and adjudication commands; it is rebuildable, and a parity fixture matches recomputation. C Domain model; VA-20 PROPOSAL
AC-R3a-33 X-ELIG evidence before production admission: S4-B, S4-C, S6a, S6b and the fixed-two correction each merged or extracted; reviewEligibilityPolicy and proportionalStudyAllocation delivered to API and PM with a cross-host agreement check. G, I AP-08, AP-09; D3-09 pending-D3-09
AC-R3a-34 The default profile's decisions are projected into legacy ScreeningInfo and InclusionInfo, so the ProjectScreening, MembershipScreening and ReviewerScreening families stay exact (parity audit). I MS-08 PROPOSAL
AC-R3a-35 EW1: the stage default Allow lets a reviewer finish previously saved work after collective exclusion; a step override to preserve-only keeps drafts but refuses completion; neither admits new work nor invents votes. I, E EW1; FX-ACCESS-09 confirmed
AC-R3a-36 Historical work pins the stage-settings version it was done under; publishing new stage settings never rewrites prior work; live access is re-evaluated under current settings. I PV2 confirmed
AC-R3a-37 Every existing per-stage setting (target enforcement, in-progress limit, hide excluded, excluded-progress grouping, self-reconciliation, search and partition filters, #3876 tracking) behaves as the F3 placement table says when stages bound to one form differ (table-driven fixture). C Domain model; PH-05 PROPOSAL
AC-R3a-38 Each reviewer's initial independent submission per profile context is marked: their first effective decision made before any collective outcome for that study and profile was visible to them. C SR-01; methodology coverage PROPOSAL
AC-R3a-39 An incomplete Save recomputes shared sufficiency and dependent-step applicability, shows affected steps as needing reassessment, preserves dependent work, and never changes gold or screening decisions as a side effect. I Q-27 pending-Q-27
AC-R3a-40 When stages reaching one session differ, EW1 and VS1 are evaluated for the route in use and never change the shared target. I Q-28 pending-Q-28
AC-R3a-41 Random serving is the default; explicit assignment is an audited exception. I D4-19 pending-D4-19
AC-R3a-CONF C1-T04 (journey part); C3-T06, T08; C6-T01 to T03 and T05 to T22; C10-T08; C12-T01 to T03; C17-T02. C review AC-01 PROPOSAL

Changes: AC-R3a-01, 03, 05, 06, 07, 09 and 10 rewritten; AC-R3a-11 to 41 new.

4.13 R3b Screening profiles

Tier T2 · freeze F5 · entry: R3a, R2c; U17 and U18 passed · fixtures FX-DP4, FX-PRISMA-02c, FX-PRISMA-04c · seeds: Workflow routing.

ID Criterion Verified by Source Status
AC-R3b-01 Eligibility questions are authored in the shared editor; templates are copied and stay independent of later template changes. I, E DP4; SET1 confirmed
AC-R3b-02 The same profile in two stages gives one decision per reviewer; different profiles never share answers. C DP4; research A4 confirmed
AC-R3b-03 A derived decision is shown with its reasoning (the triggering criteria and the reviewer's own answers, never other candidates' answers) and counts only after explicit submission; field changes and autosave never vote. E DP3 confirmed
AC-R3b-04 With DP5 on, applicable exclusion reasons need reconciliation under the profile's rules; with DP5 off there is no reason-reconciliation requirement, and recorded reasons and their history are kept. I, E DP5 confirmed
AC-R3b-05 Profile publication: a publish-time check finds decisions cast under prior criteria versions; the admin chooses keep pinned, require a new decision, or compatible carry-forward; collective outcomes are recomputed only under that choice; past PRISMA snapshots don't change. DP5, resolution routes and rationale settings are profile settings with audit history and no publication flow. I Q-26; VA-19; D2-05 pending-Q-26, pending-D2-05
AC-R3b-06 Each profile's PRISMA phase mapping is set and versioned. I C12 PROPOSAL
AC-R3b-07 Screening steps render eligibility questions through the screening renderer agreed at F5. E A-02 assumption-A-02
AC-R3b-08 FX-PRISMA-02c and FX-PRISMA-04c assertions pass: one effective decision per profile per reviewer across stages; profile publication applies each treatment; no snapshot changes. C DP4; V2-07 confirmed
AC-R3b-09 An ordinary study-fact question and a profile question with identical wording never share answers; two profiles copied from one template never share answers or history (FX-DP4). C DP4 confirmed
AC-R3b-10 With reason collection off and reason reconciliation on, no reason is invented and nothing blocks. C DP5; E11 confirmed
AC-R3b-11 A reviewer's deliberate correction of their own Exclude from history, while review is possible, creates a new revision, keeps the Exclude in history, re-evaluates eligibility and creates no invitation; a closed or restricted stage refuses it. I DP2 confirmed
AC-R3b-12 Multi-profile screening statistics are served live for R3b pilots; FEAT-024's screening families are declared unsupported for multi-profile projects until its profile-grain families land; the UI labels the basis. I MS-08; D3-10 pending-D3-10
AC-R3b-13 The primary exclusion reason is the first failing criterion in the configured order (on by default, overridable per profile). I D4-13 pending-D4-13
AC-R3b-14 A profile can offer Unsure (Maybe) at title/abstract, on by default in the title/abstract template. I, E D4-01 pending-D4-01
AC-R3b-15 Re-publishing a profile whose eligibility changed needs an amendment entry in the protocol record. I D4-05 pending-D4-05
AC-R3b-16 A new administrator sets up a title/abstract → full-text route with two profiles from templates in under 5 minutes without help. UT PH-23 (FEAT-007 metric) PROPOSAL
AC-R3b-17 A DP2 correction made after the collective outcome became visible to the reviewer is labelled "informed (collective)" and never changes the initial-observation set. C SR-01; methodology coverage PROPOSAL
AC-R3b-18 When the profile requires exclusion reasons, a missing reason blocks an effective Exclude; cancel or error keeps the draft and the previous vote; a valid Exclude commits its reason tree and the outcome together. C, I Research A6; DP5 PROPOSAL
AC-R3b-19 Screening-decision exports include each decision's exclusion reasons and the screening profile and version it was cast under. I QM v2 EXP-04 (retained) PROPOSAL
AC-R3b-20 With the profile's bibliographic-blinding option on (off by default), authors, journal and year are not shown during screening, and the decision's exposure provenance records that they were hidden. E, I SR-25; methodology coverage PROPOSAL
AC-R3b-CONF C2-T04; C3-T07; C4-T04 (profiles), C4-T20; C8-T08. C review AC-01 PROPOSAL

Changes: AC-R3b-03, 04, 05 and 08 rewritten (the DP2 part of 04 moved to AC-R3b-11); AC-R3b-09 to 20 new.

4.14 R3c Stage lifecycle and optional strict mode

Tier T2 · freeze F3 (lifecycle subset) · entry: R3a; X-BATCH if batches are used · fixtures FX-LIFE-01 to 10, FX-PRISMA-04d · seeds: Workflow routing.

ID Criterion Verified by Source Status
AC-R3c-01 In automatic mode a stage completes only when no unresolved applicable work remains, drafts and corrections included. I LC1 confirmed
AC-R3c-02 A change that would reopen a Completed stage isn't admitted until a project admin confirms it; until then the stage stays Completed and the change is held in "changes awaiting approval". E, I LC1 confirmed
AC-R3c-03 New arrivals to a Completed stage go through the same gate; manual mode needs an explicit Reopen. I LC1; RX2 confirmed
AC-R3c-04 Fix or a correction on a session pinned to a Completed stage creates a pending request, never a silent reopen. E LC1 confirmed
AC-R3c-05 Readiness uses the same completion-definition seam as #3939 and the shared fixtures; results differ only where SF2 or R3b semantics differ, and those cases are listed. C AP-04 PROPOSAL
AC-R3c-06 Everything above works with every notification flag off; status history records every transition with actor and reason. E, I RX2; A-07 confirmed
AC-R3c-07 Strict within-stage mode is an advanced stage setting, off by default, with a tighten-only step override; enabling it never admits anyone the default refuses. C DP7 (proposal only); Q-01 pending-Q-01
AC-R3c-08 A change affecting a shared form bound to two Completed stages needs approval for each and commits to both or neither; changed inputs (permission, approval expiry, source hashes, stage state) invalidate the approval; approval never grants the requester authority; approvals expire. I LC1; FX-LIFE; Q-02 pending-Q-02
AC-R3c-09 A Completed stage's bindings can't be edited outside the reopen flow. I RX2 (RECOVERED) confirmed
AC-R3c-10 A reviewer having no available work never marks a stage complete. I Research A14 PROPOSAL
AC-R3c-11 With every notification flag off, an admin with a pending request sees it in the global badge and the project-overview banner, and reaches it in one step from the project index. E NS-07; UX-08; D3-07 pending-D3-07
AC-R3c-12 With notification flags on, each approving admin gets one notice; once one admin decides, the others' notices show "decided" and leave the unread count, staying in history. I, E NS §5.3; D3-23 pending-D3-23
AC-R3c-13 Completion runs in two steps (Completing fence, drain, readiness verified from authoritative records in a pinned snapshot, then Completed or back to Active); at least 1,000 randomised interleavings of commits against completion never violate LC1; under Completing a readiness-relevant command is refused as retryable; under Completed it becomes a change request. I DC-09 (AC-DC-09); D2-10 pending-D2-10
AC-R3c-14 Completion withdraws that stage's claim references through the outbox; a claim survives if another bound stage still uses it; the client keeps unsaved changes. I RT-18 PROPOSAL
AC-R3c-15 FX-PRISMA-04d assertions pass: unresolved applicable work blocks automatic readiness; a protected correction or new arrival needs confirmation, then the automatic or manual transition follows. C LC1; V2-07 confirmed
AC-R3c-16 Drafts never expire: stale drafts are listed to admins because they block automatic completion, and are removed only by an audited discard. I, E VB-15; consistency model PROPOSAL
AC-R3c-17 Where batches are used, a shared batch opening and a personal grant are durable compare-and-set transitions that write a StudyEnteredPool ledger entry (FEAT-011's pool-entry event) in the same transaction; reading batch status never changes plan state; activation needs X-ELIG in the same environment and a Next p95 gate at 100,000 studies and 2,500 batches. I, B AP-05, AP-19; D3-13 PROPOSAL
AC-R3c-18 Calibration rounds run as a step kind that never votes, never qualifies and never counts for PRISMA. I, E D4-04 pending-D4-04
AC-R3c-19 Sufficiently excluded studies stay in a batch's denominator and count as finished; restored scope returns to its original membership. I AP-12; D3-13 pending-D3-13
AC-R3c-CONF C1-T07 (stage-completion part); C6-T04; C18-T05 (completion). C review AC-01 PROPOSAL

Changes: AC-R3c-02, 05 and 07 rewritten; AC-R3c-08 to 19 new.

4.15 R3d Guided setup and templates

Tier T2 with five testers (AC-UX-07) · entry: R3b, R2c, R1a · fixtures FX-SETUP-01 to 13 · seeds: none (testers create projects).

ID Criterion Verified by Source Status
AC-R3d-01 Every field and validation of today's CreateProjectWizard and ProjectSetup is available; the setup lane writes the parity checklist and Chris signs it. E, G SET2; review AC-34 confirmed
AC-R3d-02 The guided route creates profiles from templates, an initial form from question templates, a stage and step route with DP7 defaults and (once R1c exists) team and groups; preview and publish go through the impact gates. E SET1; DP7 confirmed
AC-R3d-03 A setup draft can be resumed, and manual routes stay available. E SET2; FX-SETUP-07, 11 PROPOSAL
AC-R3d-04 New projects are admitted by R0's rule. I A-23 assumption-A-23
AC-R3d-05 The Project setup checklist stays in the navigation footer, with readiness-based tasks. E RECOVERED (navigation decision, 21 September) confirmed
AC-R3d-06 With extraction off, setup adds no cohort, outcome or experiment types; templates use verified legacy identities (E14). I, E TC1 confirmed
AC-R3d-07 An empty project creates no PRISMA records; a double submit creates one project; the old create entry point uses the new flow without creating a duplicate; living-search and ML stay disabled. I, E FX-SETUP-06, 08, 09 PROPOSAL
AC-R3d-08 A new administrator reaches a screenable stage from templates in at most 20 minutes without help (AC-UX-07). UT UX-19 PROPOSAL
AC-R3d-09 The screening and form templates carry the methodology defaults: title/abstract with two independent screeners, unanimity and a blinded third screener on conflict; full text with two independent screeners, unanimity, adjudication, and reasons required under the primary-reason hierarchy; extraction with two reviewers plus reconciliation (or one plus verification if D4-03 is approved); a single-screener option that sets the methods caveat (AC-R5b-24). CAMARADES methodologists author the template content through the R1a template mechanism, and a project may change any default. I, E SR-21; SR improvement 9; methodology coverage PROPOSAL
AC-R3d-CONF C4-T04. C review AC-01 PROPOSAL

Changes: AC-R3d-01 rewritten; AC-R3d-06 to 09 new.

4.16 R4a Form reconciliation and gold

Tier T1 (staging rehearsal) · freeze F4 · entry: R2b shipped; Q-10, Q-29, Q-35, Q-36 and the Q-03 reconciliation subset answered; the editable reconcile host; the task editor claim (X-RECLAIM) in every environment · fixtures FX-SF4, FX-RE5, FX-CLAIMS, FX-ALLOC · seeds: Reconciliation, four candidates.

ID Criterion Verified by Source Status
AC-R4a-01 Three candidates are shown everywhere (answers, matching, comparisons); a fourth appears without truncation; a candidate selector never hides a disagreeing candidate (FX-SF4). E SF4/RE3 confirmed
AC-R4a-02 Match suggestions span all candidates; the reconciler confirms or adjusts them; original candidate entries and answers are preserved; a suggestion never establishes an authoritative match or publishes gold by itself. E, I MG1 confirmed
AC-R4a-03 Prefill happens only for choice agreement or an exact text match in the same question, version, entity and branch context. C, E RE2; RE5 confirmed
AC-R4a-04 Gold is an immutable snapshot; a new snapshot keeps unchanged references; concurrent publications are serialised by compare-and-set on the current-snapshot pointer (race forced by the barrier harness). I GS1 confirmed
AC-R4a-05 By default a reconciler is never offered a study × form task on which they hold a candidate session; QY4's audited self-review applies only to query review. I QY4 (boundary); RA1 confirmed
AC-R4a-06 A requested extra reviewer sees no candidate answers or identities; their result returns to the reconciler and never sets gold or changes the target. I, E RA5 confirmed
AC-R4a-07 Expiry applies only to explicit, unstarted assignments; started assignments never expire; every expiry, override and release is audited. I RA3 confirmed
AC-R4a-08 Aliases and blinding are consistent across candidate cards, conversations, history and exports. E BL1 confirmed
AC-R4a-09 The target is a minimum: every qualifying candidate takes part in the task. I SF4/RE3 confirmed
AC-R4a-10 Assigned work and requested reviews appear in their feature-owned queues with every notification flag off. E A-07; RA2–RA5 assumption-A-07
AC-R4a-11 Drag-pairing has a keyboard alternative. A, E U1 PROPOSAL
AC-R4a-12 A legacy reconciled answer exports as "legacy reconciled (authority unknown)", can't be queried, and R4a readiness treats its study as still needing canonical reconciliation; a canonical task supersedes it with explicit provenance. I Q-35; review AC-02 pending-Q-35
AC-R4a-13 The workspace with four candidates on a 200-question form meets AF2's performance gate extended with N-candidate fixtures (host to first interactive under 1,500 ms; edit-to-settle p95 under 16 ms; category switch under 250 ms; mounting caps per candidate column PROPOSAL), measured on the AF2 performance host. B PH-32; review AC-18; e2e/tests/perf/annotation-form-perf.spec.ts PROPOSAL
AC-R4a-14 Incompatible, saved-incomplete-current, withdrawn and ineligible sessions are never candidates and never count; agreeing candidates produce no gold until the reconciler completes. C SF4 delivery list; RE2 confirmed
AC-R4a-15 A study × form task is listed once, whether reached from stage A or B, and completing it satisfies only that form's reconciliation requirement in each stage. I, E RE4 confirmed
AC-R4a-16 Complete succeeds with no explanation even when gold differs from every candidate; a non-blocking reminder may show. I, E RE1 confirmed
AC-R4a-17 Candidate notes are unchanged by reconciliation; a copied note keeps its author and source. I, E NT1 confirmed
AC-R4a-18 Texts differing only in case or whitespace don't prefill; gold and the reconciler's saved draft survive changed candidate inputs (FX-RE5). C RE5 confirmed
AC-R4a-19 Rendering an accepted revision records one exposure per session version and revision, carried in the draft, Save and Complete payloads (never in hub calls), with late events keyed by draft etag accepted; a lost report leaves the contribution "informed or unknown", never independent; the class is derived on read. C, E VS2; C3; DC-20; RT-26 confirmed
AC-R4a-20 A new candidate, a Save after Complete or a Fix after gold puts the task into "inputs changed · re-check" and never retracts gold. I GS1; RE4 confirmed
AC-R4a-21 With conversations enabled on their own flag: threads are one-to-one; only completed sessions can be questioned, so a requested extra reviewer is excluded until they return their review; a reconciler with any session on that study × form can't start one; context links are read-only; threads bind to the task identity and stable stage-owned aliases; conversations refuse canonical scopes until rebound. I, E Q-10; NS-05; NS §5.3 confirmed
AC-R4a-22 Assigning to an ineligible reconciler is refused; an expiry and a first start racing have exactly one outcome (compare-and-set on assignment.started); changed defaults affect only new assignments; two reconcilers never hold one task. C, I RA1; RA2; E6; DC-15 confirmed
AC-R4a-23 Re-pairing keeps earlier pairings in history and re-evaluates only dependent answers. I Plan R4a (COMPARISON F7) PROPOSAL
AC-R4a-24 Autofilled answers are clearly marked and distinguished from entered ones, with candidate and source provenance kept. E RE2 confirmed
AC-R4a-25 Final Complete accepts the displayed valid answers, including prefill, with no per-field confirmation. I, E RE2 confirmed
AC-R4a-26 Before Complete, unseen relevant controls (exposure of the actual controls, not tab visits) produce a warning listing them with jump links; Complete anyway works; answer validity and affected-child requirements stay enforced. E, I RE2 confirmed
AC-R4a-27 Complete carries the base snapshot ID and the task input-set etag the reconciler saw; a transparent retry happens only when the recomputed snapshot equals what was displayed; otherwise the typed "gold changed" or "inputs changed" conflict returns, with Complete anyway still available. I DC-15 (AC-DC-14) PROPOSAL
AC-R4a-28 No project setting permits self-reconciliation; adjudication overrides need explicit grants; a gate never uses stale authority for new admissions (it shows "needs revalidation"); saved work stays. I Q-36 pending-Q-36
AC-R4a-29 An admin release of a started assignment keeps saved work, and the original reconciler must reacquire it before submitting again. I RA4 confirmed
AC-R4a-30 A task uses the most restrictive blinding of the stages that can reach it. I, E Q-28 pending-Q-28
AC-R4a-31 Target-1 forms create no task and no automatic gold; exports label the single assessment "single reviewer, unreconciled"; an optional, attributed "accept as gold" action creates a snapshot. I Q-29 pending-Q-29
AC-R4a-32 Drag-pairing uses CDK pointer-based drag that works with touch; the reviewer and reconciler smoke journeys pass in Firefox and WebKit. X, E review AC-19; D3-15 pending-D3-15
AC-R4a-33 When candidates' pinned revisions for a question fall in different compatibility classes, that question is held on its own; a held question blocks only itself (prefill, agreement), and the rest of the task reconciles. C VA-04; D2-02 pending-D2-02
AC-R4a-34 A publication that makes a gold answer's compatibility class differ from the form's current pin flags that answer "needs re-reconciliation", while gold stays effective and is labelled with its version in exports and PRISMA manifests; a publication that de-qualifies a pinned candidate is a drift trigger. I VA-11 PROPOSAL
AC-R4a-35 A session questioned in a reconciliation conversation gets the exposure kind "questioned in reconciliation", which makes that reviewer's later versions on that study × form informed; R5c, C11 manifests and R6 read it. C NS-06 PROPOSAL
AC-R4a-36 When two reconcilers open the same study × form task through any stage, exactly one holds the editor claim and the other is refused with a typed reason, with tracking on and off. I RA1; RT-01 confirmed
AC-R4a-37 With several reconcilers pressing "Start reconciling" at once, no task goes to two of them. I RA1; RT-01 confirmed
AC-R4a-38 A requested extra reviewer is admitted past pool, bucket and capacity filters by a single-use, expiring, audited admission, even with allocation enabled and the target met; nobody else is. I RA5; AP-03; RT-13; D3-13 pending-D3-13
AC-R4a-39 Only the assignee can claim an assigned task; an admin release revokes the editor claim through the outbox; editor-lease expiry never expires a started assignment. I RA2–RA4; RT §5.2 confirmed
AC-R4a-40 Assignment timers use absolute UTC timestamps (ADR-008) with Quartz integration tests; the expiry warning is a scheduler marker on the assignment that survives scheduler restarts without repeating. I PH-30; NS-01 PROPOSAL
AC-R4a-41 Each assignment transition (created, expiry warning, expired, released) produces exactly one notice. I NS §5.3; C15 conditional-X-NOTIF
AC-R4a-42 With the step's VS1 policy off, candidates never receive accepted answers (API or UI); with it on they see the current snapshot, and the view tells them their contribution will be recorded as informed; own previous answers are always visible; other candidates' answers never are. I, E VS1; VS2; UX-14 confirmed
AC-R4a-43 For shared-question gold across overlapping forms, the second task sees the existing gold prefilled as accepted and may revise it in its final submission, creating a new snapshot with provenance. I VA-11; D2-09 pending-D2-09
AC-R4a-44 Required applicable questions can't be blank in completed candidates; the reconciler decides optional blanks; a blank is never treated as Not applicable. I, C UA1 confirmed
AC-R4a-45 The reconciler journey (pool, task, screening part, matching, form, Complete, next) passes as one journey; the narrow layout uses a candidate selector and a single column and never hides a disagreeing candidate. E UX-14 PROPOSAL
AC-R4a-46 "Next" offers assigned work first, then a random eligible task. I, E Plan R4a (v10 r2) PROPOSAL
AC-R4a-47 A project-level "My work" surface lists the user's actionable reconciliation items; with every notification flag off, a user reaches assigned work in an unopened project in one step from the project index. E UX-08; NS-07; D3-07 pending-D3-07
AC-R4a-48 Candidates are always blinded in reconciliation; the stage chooses only the alias scheme. I, E D4-19 pending-D4-19
AC-R4a-49 An extract-and-verify step produces gold with authority Verified. I D4-03 pending-D4-03
AC-R4a-CONF C2-T05; C3-T02, T03, T05, T09; C7-T09; C9-T01 to T09, T13 to T16, T18; C17-T06; C18-T08. C review AC-01 PROPOSAL

Changes: AC-R4a-02, 03, 05, 07, 08, 09, 12 and 13 rewritten (the bundled AC-R4a-03 and 07 were split into 03, 24, 25, 26 and 07, 29; the Q-28 and Q-29 parts of 08 and 09 moved to 30 and 31); AC-R4a-14 to 49 new.

4.17 R4p Profile reconciliation

Tier T2 · freezes F4 and F5 · entry: R3b and R4a shipped · fixtures FX-RX1, FX-PRISMA-03c · seeds: Reconciliation, four candidates; Workflow routing.

ID Criterion Verified by Source Status
AC-R4p-01 Decision adjudication resolves profile conflicts; the outcome is written by the versioned ProfileAdjudication aggregate through the collective-outcome policy, never by a reconciliation session writing screeningOutcomes. I FEAT-011 (MUST NOT); RX1; V2-18; domain model confirmed
AC-R4p-02 Must-agree supporting answers and reason reconciliation work when DP5 is on; with DP5 off, recorded reasons are kept. E, I DP5; RX1 confirmed
AC-R4p-03 A collective Excluded stays Excluded (PR1), and adjudication unblocks a cross-stage route that was waiting on a conflict. C, E PR1; DP7 confirmed
AC-R4p-04 Who reconciles each part follows stage grants. I C10; RX1 (presentation, 3 October) PROPOSAL
AC-R4p-05 Two Excludes with differing must-agree reasons: the collective Exclude vetoes dependent work while reason reconciliation is pending; extra votes never resolve reasons; adjudication adds no vote; a submitted decision replacement retires the old adjudication from current applicability and re-evaluates profile rules, while drafts don't (FX-RX1). C RX1 (RECOVERED); research A25 confirmed
AC-R4p-06 A profile may require a rationale for an adjudicated screening decision (a setting, off by default); RE1 still makes explanations optional for ordinary reconciled answers. I, E Q-32; RE1 pending-Q-32
AC-R4p-07 FX-PRISMA-03c assertions pass: pending reason coverage becomes adjudicated coverage; the collective Exclude veto holds while reasons are pending; adjudication adds no vote. C PR1; RX1; V2-07 confirmed
AC-R4p-08 A profile can offer a discussion resolution route, off by default. I, E D4-02 pending-D4-02
AC-R4p-09 The adjudication view shows each candidate's full set of failing criteria, not only the primary reason; reason reconciliation compares the full sets while PRISMA receives the primary reason. E SR improvement 4; D4-13 pending-D4-13
AC-R4p-CONF C9-T17; C12-T01 (adjudicated authority). C review AC-01 PROPOSAL

Changes: AC-R4p-01 rewritten; AC-R4p-05 to 09 new.

4.18 R4b Queries

Tier T2 · entry: R4a · fixtures FX-QY · seeds: Reconciliation, four candidates (query raiser and query reviewer personas).

ID Criterion Verified by Source Status
AC-R4b-01 Anyone who can view an accepted answer can raise a query, and gold stays effective with a pending flag. I, E QY1; QY7 confirmed
AC-R4b-02 There is one work item per accepted-answer version (the reconciled revision ID), with per-concern outcomes, and invalidated children are resolved before a replacement snapshot. I QY2; QY3; VA-23 confirmed
AC-R4b-03 Each raiser sees their own outcome in "my concerns and outcomes" with every notification flag off; private notices are added when the notification stack is available. E, I QY6; A-07 confirmed
AC-R4b-04 A replacement that satisfies a concern closes it as "addressed by update"; unsatisfied concerns stay open against their original target and are flagged for current-applicability review. I QY8; QY9 confirmed
AC-R4b-05 After a correction, candidate agreement never confirms annotation gold automatically, while screening decisions re-run profile rules. C RECOVERED (RC10 split); RE2; AG2 confirmed
AC-R4b-06 Self-review by a query reviewer is audited. I QY4 confirmed
AC-R4b-07 Rejecting a concern with an empty explanation succeeds. I QY5 confirmed
AC-R4b-08 In a two-raiser fixture each raiser sees only their own concern, in the UI, the API and the inbox. I, E QY6; NS §5.3 confirmed
AC-R4b-09 Query review uses the same editor claim as reconciliation: one reviewer at a time per work item. I E4; RT §5.2 PROPOSAL
AC-R4b-10 Raising a query carries the answer version the raiser saw, never "current"; concurrent replacement and resolution keep each concern's original target. I DC-15; QY9 PROPOSAL
AC-R4b-11 Approving or rejecting a concern needs the query-review capability; a raiser without it can't resolve concerns. I QY4; V2-24 confirmed
AC-R4b-12 In canonical projects the study-issue form routes answer disputes to "Raise a query"; study issues never carry answer concerns after R4b. E NS-24 PROPOSAL
AC-R4b-13 A correction re-evaluates the smallest supported dependency closure. I Plan R4b (COMPARISON F3) PROPOSAL
AC-R4b-CONF C9-T10, T11, T12. C review AC-01 PROPOSAL

Changes: AC-R4b-02 rewritten (target defined); AC-R4b-07 to 13 new.

4.19 R4c Outcome reconciliation

Tier T2 · entry: O1 shipped, R4a, X-AF2-PR9 · fixtures FX-OUTCOME, FX-SF4 (series part) · seeds: Classification and outcomes.

ID Criterion Verified by Source Status
AC-R4c-01 Outcome series from every candidate are compared and reconciled into gold series. E SF4/RE3 confirmed
AC-R4c-02 Direction is reconciled once per outcome measure, never per series. I ODIR1 confirmed
AC-R4c-03 An extraction stage's outcome reconciliation opens in the editable reconcile host and saves gold series; before X-AF2-PR9 merges, the route shows the typed "not available" state. E, I Plan R4c; V2-23 PROPOSAL
AC-R4c-04 Every candidate's series stays reachable with provenance, including a fourth candidate, without truncation. C, E SF4 confirmed
AC-R4c-CONF C9-T02 (series part); C14-T02. C review AC-01 PROPOSAL

Changes: AC-R4c-03 rewritten as an observable outcome; AC-R4c-04 new.

4.20 R5a History and as-of export

Tier T3 · freeze F6a · entry: R4a · fixtures FX-ASOF, FX-PRISMA-05a · seeds: Reconciliation, four candidates.

ID Criterion Verified by Source Status
AC-R5a-01 An as-of export reproduces a recorded state where history exists and labels gaps where it doesn't. I EX1; EX2 confirmed
AC-R5a-02r Two exports at one watermark have identical data files and checksums for versioned datasets and the same requester authority; manifests differ only in generation metadata; current-only datasets are labelled "as at export time". I EX1; DC-13; review AC-34 PROPOSAL
AC-R5a-03 Dates before a project's adoption return "not observed", never the adoption snapshot. I EX2 confirmed
AC-R5a-04 The manifest records the basis, definitions, versions, per-dataset coverage (versioned, current-only or not observed) and content digests. I C11; DC-13; VB improvement 7 PROPOSAL
AC-R5a-05 Previous gold versions can be exported, and candidates and gold stay separate under the disclosure contract. I EX1; C10 confirmed
AC-R5a-06 The "completed sessions only" option works when its flag is on. I Plan R5a PROPOSAL
AC-R5a-07 Exports carry per-question reconciliation status and version references (question version, compatibility class and option ID per cell). I QM v2 EXP-01, EXP-02; VA-17 PROPOSAL
AC-R5a-08 With injected clock skew and a long transaction committing near the watermark, exports at the same watermark are identical and causally closed; as-of(T) is offered only for T ≤ now − (transaction lifetime + sweep interval + skew bound). I DC-13 (AC-DC-12); consistency model PROPOSAL
AC-R5a-09 As-of exports at earlier watermarks are identical except for erased identities, and the manifest records the erasure event. I D2-14 pending-D2-14
AC-R5a-10 Extraction exports default to studies whose required profiles are collectively Included; an explicit option includes the others, with per-row collective outcome, surplus-assessment and profile-version columns. I SR-17; methodology coverage PROPOSAL
AC-R5a-11 After a restore, manifests and as-of requests for affected projects report the history-discontinuity record. I DC-17; D2-13 pending-D2-13
AC-R5a-12 Reconciliation conversations are exportable only behind an audit or export capability, with aliases, and never appear in candidate-answer exports or agreement figures except as exposure markers. I D3-25 pending-D3-25
AC-R5a-CONF C11-T01 to T05 and T07 to T09; C18-T07. C review AC-01 PROPOSAL

Changes: AC-R5a-02 retired and replaced by AC-R5a-02r; AC-R5a-04 rewritten; AC-R5a-07 to 12 new.

4.21 R5c Agreement statistics

Tier T3 · entry: R4a (exposure records); Q-04 and Q-16 answered; the method contract (E9); U29 · fixtures FX-AGREE · seeds: Reconciliation, four candidates.

ID Criterion Verified by Source Status
AC-R5c-01 Agreement figures match hand-computed fixtures: multi-selects agree only on identical selection sets, with option overlap shown separately; N/A with N/A agrees and Applicable with N/A disagrees; compatible differing versions are compared with a flag, and incompatible versions never are. C AG2; AG3 confirmed
AC-R5c-02 Informed contributions are never counted as independent. C VS2 confirmed
AC-R5c-03 A missing answer is reported as "comparison not assessed", separately from agreement; Unknown or Not reported is a recorded state. C Q-04; review AC-02 pending-Q-04
AC-R5c-04 The agreement capability alone shows no candidate answers, and the view has its own navigation place. I, E AG1 confirmed
AC-R5c-05 The CSV equals the on-screen figures; a Reconcile holder without the agreement capability is refused. I, E AG1; QM v2 EXP-03 confirmed
AC-R5c-06 The default inter-rater basis is initial independent observations (AC-R3a-38); screening agreement is per profile; rotating raters use pooled pairwise κ or Krippendorff's α; percent agreement and prevalence are shown. C SR-01; Q-16; D4-12 pending-D4-12
AC-R5c-07 A contribution saved after being questioned in reconciliation counts as informed. C NS-06 PROPOSAL
AC-R5c-08 Agreement never crosses a compatibility class, and differing versions within one class are flagged. C VA-17; D2-02 pending-D2-02
AC-R5c-09 Agreement results live in their own rebuildable store, keyed by project, form version and method version, with a watermark and the independent/informed split; a bounded background job computes them; they are never a FEAT-024 family; full recompute for RV-DS-03 within 10 minutes and view load p95 within 2 s (PROPOSAL). I, B MS-20; D3-11 pending-D3-11
AC-R5c-10 A DP2 correction made after a conflict became visible never changes the initial-observation figures. C SR-01 PROPOSAL
AC-R5c-11 Agreement is shown by screening order (per 100 studies) for each reviewer pair and criterion, so drift is visible; calibration records are excluded by default and reported separately. E, C SR improvement 3; SR-11; D4-04 PROPOSAL, pending-D4-04
AC-R5c-12 The reconciler-override count (gold that differs from every candidate with no explanation) is shown per form and question and exported as goldDiffersFromAllCandidates; RE1's optional explanation stays optional. I SR-18; RE1 PROPOSAL
AC-R5c-CONF C3-T02, T03, T05, T06. C review AC-01 PROPOSAL

Changes: AC-R5c-01 and 03 rewritten (placeholders made concrete); AC-R5c-05 to 12 new.

4.22 R5b PRISMA reporting

Tier T3 · freeze F6b · entry: P1, P2, R3b and R4p shipped · fixtures FX-PRISMA-01 to 08 (R5b parts, including 06e), FX-PRISMA-08b · seeds: PRISMA identification; Workflow routing.

ID Criterion Verified by Source Status
AC-R5b-01 FX-PRISMA-05b and FX-PRISMA-08 pass in full, and the R5b assertions of FX-PRISMA-01 to 04, 06 and 07 pass, including box values with reported external parts. C PR1; Q-06a; review AC-04 confirmed
AC-R5b-02 Report snapshots are frozen, and regenerating a frozen report gives identical numbers. I Amendment J (Q-06a) confirmed
AC-R5b-03 Reported external counts are included in diagram totals and marked as reported; the manifest keeps the breakdown; reported-versus-imported mismatches warn. I, E Q-06a (Chris's request); amendment K; Q-37 pending-Q-37
AC-R5b-04 Box 3 combines SyRF-detected and externally reported duplicates, and the manifest keeps both parts. C Q-06a; amendments K and L; Q-37 pending-Q-37
AC-R5b-05 Adopted legacy projects show coverage and evidence-based lower bounds, never fabricated counts. I EX2; invariant 9 confirmed
AC-R5b-06 Box 17 uses metaAnalysisIncluded as set through its owner's UI. E C12 PROPOSAL
AC-R5b-07 All 34 PRISMA fields are derivable from SyRF data (with reported external records where amendment K applies), and the diagram export follows the PRISMA 2020 template layout. I, V FEAT-011 (34 fields); V2-04 confirmed
AC-R5b-08 PRISMA JSON and CSV exports carry a manifest; an unknown or null source type is its own group. I FEAT-011 phase 16 (EXP-05) confirmed
AC-R5b-09 Every snapshot passes the published arithmetic identities per column: identification sums (fields 31–34); records after removal = records screened + not yet screened; records screened = records excluded + reports sought; reports sought = not retrieved + assessed + not yet assessed; assessed = excluded with reasons + included. The "not yet screened or assessed" remainder appears in the manifest and as a diagram footnote; a mismatch blocks freezing unless an admin records an explanation. C SR-09; methodology coverage PROPOSAL
AC-R5b-10 Until amendment B is approved, exports label citation totals as records, never reports. I A-11 assumption-A-11
AC-R5b-11 Reason reporting gives the primary reason plus coverage status when reasons are pending or off; screening gold and ordinary gold are never conflated. I Amendment E; Q-22 pending-Q-22
AC-R5b-12 Per-box rules combine reported and computed counts; box 1 stays deferred unless the updated-review template is adopted, in which case it comes from amendment K's "previous review version" counts. I V2-04; Q-37; D4-11 pending-Q-37, pending-D4-11
AC-R5b-13 Reports count by report identity, with explicit coverage. I Amendment B; Q-23 pending-Q-23
AC-R5b-14 Current reports exclude withdrawn searches and say so; frozen reports never change. I Amendment J; Q-33 pending-Q-33
AC-R5b-15 Several reports of one study are linked for boxes 10 and 16 without merging extraction (amendment O). I D4-08 pending-D4-08
AC-R5b-16 Derived fields 31–34 accept no reported values, and identification uses an identified-at-source count when one is reported. I V2-13; Q-37 pending-Q-37
AC-R5b-17 Records imported after a step done outside SyRF count as having passed that step (an entry-phase rule per search or import). I V2-04; Q-37 pending-Q-37
AC-R5b-18 A study included at title/abstract, marked Not retrieved and never screened at full text appears in boxes 6 and 7 and not in box 8; retrieval lives in fullTextStatus, never in lifecycle status (amendment M). C SR-02; D4-07 pending-D4-07
AC-R5b-19 Report snapshots are computed from authoritative records (Citations, ExternalStepRecords, ScreeningOutcomes) at the report watermark and stored frozen; FEAT-024 rows and history are never report inputs. I MS-11, MS-22; programme integration PROPOSAL
AC-R5b-20 Corrections and protocol amendments append; they never edit old report counts (amendment F). I Q-06b pending-Q-06b
AC-R5b-21 An export preset lists full-text excluded studies with their primary reason and reviewer or reconciler provenance (the PRISMA 2020 item 16b near-miss list). I SR improvement 2; methodology coverage PROPOSAL
AC-R5b-22 The methods summary (JSON and prose) is generated from the snapshot manifest only and reports eligibility (profile versions), information sources and strategies, the selection process (reviewers, independence, Unsure, conflict routes, calibration, agreement with its basis), data collection (targets, verify or reconcile), risk-of-bias templates, registration and amendments, the deduplication method and counts, external steps and retrieval failures. I, V SR improvement 1; methodology coverage PROPOSAL
AC-R5b-23 A per-study Synthesis inclusion attribute (included; excluded with a reason such as no usable data or outcome not reported; not applicable) is set only through the Record synthesis inclusion capability, is exported, feeds box 17 (AC-R5b-06, FX-PRISMA-06e) and is never derived from extraction completion. I, E SR-20; C12; methodology coverage; A-03 PROPOSAL, assumption-A-03
AC-R5b-24 Where a project uses single screening, target-1 extraction without verification, or unverified imported decisions, the project overview and the PRISMA manifest show a persistent methods caveat label. E, I SR improvement 10; methodology coverage PROPOSAL
AC-R5b-25 Field 32 (other_total_identified) equals field 29 (other_results), including records from Other sources. C SR-09; methodology coverage PROPOSAL
AC-R5b-CONF C12-T04 to T06. C review AC-01 PROPOSAL

Changes: AC-R5b-01, 02 and 07 rewritten; AC-R5b-08 to 25 new.

4.23 P1 Identification provenance

Tier T2, with a staging rehearsal for its floor step (Study root fields) · freeze F-P · entry: R0 floor step; X-DEL design join; X-IMPORT · fixtures FX-PRISMA-01 (P1 part) · seeds: PRISMA identification.

ID Criterion Verified by Source Status
AC-P1-01 New imports in admitted projects create immutable Citations carrying source type and source name (both nullable). I FEAT-011 release 1, phase 12 (DOC-APPROVED) confirmed
AC-P1-02 Each study gets one downstream source column from its earliest import, with deterministic ties. C Amendment C (Q-06a) confirmed
AC-P1-03 Retrieval status changes are recorded as append-only StudyLifecycleEvents with actor and time; an approved checked PDF records a retrieval event. I Plan P1; NS-08 PROPOSAL
AC-P1-04 Admins can classify the source type of searches imported before P1 (integration test plus journey); an unknown source stays unknown and is never guessed as Database. I, E Amendment C (Q-06a) confirmed
AC-P1-05 Reported external identification and deduplication counts can be entered per search, with consistency warnings that never block. E, I Q-06a (Chris's request); amendment K; Q-37 pending-Q-37
AC-P1-06 Withdrawn searches keep their Citation history. I Amendment J (Q-06a) confirmed
AC-P1-07 The SearchPopulation family gains source-type metric keys under a new family source version; retained history stays unlabelled; withdrawn searches are excluded by the family's enumeration rule. I MS-11; OPS1 PROPOSAL
AC-P1-08 FX-PRISMA-01 P1 assertions pass: two immutable Citations of one report; one earliest-source column; a later import changes identification counts only. C Amendment C; review AC-04 confirmed
AC-P1-09 An architecture test finds no Study status, state or lifecycle field, no SystematicSearch type or category, and no clash with planned PRISMA names. U FEAT-011 release 1 (DOC-APPROVED) confirmed
AC-P1-10 Citations carry every raw field, and no code path updates a Citation (architecture test). U, I FEAT-011 phase 12 (DOC-APPROVED) confirmed
AC-P1-11 A study-level Full text action records Sought (with date), Retrieved (PDF in SyRF, or read externally) and Not retrieved (reason from a controlled list plus free text; author-contact date) as append-only events with actor; a title/abstract collective Include sets Sought; attaching a PDF only suggests Retrieved. I, E SR-02; amendment M; D4-07 pending-D4-07
AC-P1-12 Linking a Citation to a Publication never rewrites the Citation: Publications are created at import from DOI or PMID, or the link is a separate record (amendment N). I V2-01; PRISMA amendments PROPOSAL
AC-P1-13 In an admitted project, an accepted bibliographic correction from a study issue appends a correction event and never edits a Citation; from P2 it re-runs DOI and PMID matching. I NS-08 PROPOSAL
AC-P1-14 If approved, a protocol and registration record and search documentation fields (PRISMA items 6, 7 and 24; PRISMA-S) exist per project and search. I, E SR (protocol record); D4-05 pending-D4-05
AC-P1-15 External step records tied to a withdrawn search stay in history and leave current reports together with their search. I V2-13; Q-33 pending-Q-33
AC-P1-16 Withdrawing a search hides its Studies but keeps Citations and canonical evidence; deleting a whole project keeps ADR-014 removal with a tombstone. I PH-02; D3-12 pending-D3-12
AC-P1-17 A null sourceType is handled as its own "unknown" group in every count, export and filter. I FEAT-011 (DOC-APPROVED) confirmed
AC-P1-18 Searches and external step records carry a search round (searchRound, with updateOf for an update search), and R5b reports identification per round; full updated-review support stays deferred. I SR-24; D4-11; methodology coverage PROPOSAL
AC-P1-19 With Citation capture on, a 5,000-record import completes without a job timeout or a duplicate saga, and a 50,000-record import completes in staged mode with a heartbeat and resumes after a worker restart without duplicating studies (PROPOSAL sizes). B, I, R PH-09; programme integration PROPOSAL
AC-P1-CONF C12-T07, T08, T09. C review AC-01 PROPOSAL

Changes: AC-P1-03, 07 and 08 rewritten; AC-P1-09 to 19 new.

4.24 P2 Identification and deduplication

Tier T1 (staging rehearsal) · freeze F-P plus amendments D and L · entry: P1; R3b for the reviewed-record part · fixtures FX-PRISMA-01 (P2 part), FX-PRISMA-07a, FX-PRISMA-08a, FX-PRISMA-09 (if D4-08 is approved), FX-ASYSD · seeds: PRISMA identification.

ID Criterion Verified by Source Status
AC-P2-01r ASySD parity: a pinned ASySD commit and R version in a container; named labelled datasets (licences recorded) and SyRF's seeded PRISMA pilot data; committed golden outputs; identical AutoConfirmed groups; ProbableDuplicate pair-set F1 ≥ 0.99; sensitivity and specificity published (SR-22 proposes "within 0.5 percentage points of the R package"); every divergent pair listed for review. C Amendment L; Q-37; review AC-21; SR-22; V2-12; D4-21 pending-D4-21
AC-P2-02 Stage 1 DOI and PMID matching completes within the import; Stage 2 fuzzy matching runs once per import and resolves PendingDedupCheck. I FEAT-012 (DOC-APPROVED) confirmed
AC-P2-03 No study with review data is merged automatically; the admin queue shows each pair side by side with scores and review summaries. I, E FEAT-012; amendment D (Q-06a) confirmed
AC-P2-04 Secondary studies are never deleted: scenario 1 sets Duplicate; a reviewed merge sets Merged with an alias; reversing a decision restores status, pool membership and any moved Citation links. I FEAT-012 (detailed steps); amendment L; V2-12 confirmed
AC-P2-05 A reviewed duplicate merge is an alias: Study.mergedInto plus a StudyAlias on the primary; immutable records are never re-keyed; when one reviewer reviewed both studies, the admin chooses the current session and the other is superseded with provenance and counted once; merges and splits run as ADR-020-style operations that write both Study documents, refuse busy studies and honour bulk-update locks; a split is a clean reversal. C, I Domain model; V2-02; DC-19; amendment D; D2-12 pending-D2-12
AC-P2-06r The admission service and pool filters exclude Duplicate, Merged, PendingDuplicateReview, PendingDedupCheck, RemovedByAutomation and RemovedOther studies; only Active studies enter screening pools. C FEAT-012 §12; FEAT-011 (DOC-APPROVED); review AC-21; V2-12 confirmed
AC-P2-07 The box 3 count-consistency equation holds in every pinned read and frozen report, over Citations held in SyRF. I FEAT-012 §11.2; DC-19; V2-13 confirmed
AC-P2-08 A study becomes Included when every required profile (from the phase mapping) is Included. I C12; plan P2 PROPOSAL
AC-P2-09 FX-PRISMA-01 P2 assertions and FX-PRISMA-07a pass; every deduplication decision is in the audit log with confidence, source, actor and time, and audit entries are never deleted. C, I FEAT-012 §10; review AC-04 confirmed
AC-P2-10 DOI and PMID have unique sparse indexes on pmPublication; lifecycle enum values are exactly as specified. I FEAT-011 release 3 (DOC-APPROVED) confirmed
AC-P2-11 Enrichment follows FEAT-012 §6 with per-field MetadataProvenance; cross-project data is bibliographic only. C FEAT-012 §6 (DOC-APPROVED) confirmed
AC-P2-12 Scenario 2 follows amendment D (admin review when one study has review data); scenario 4 is restated by form and profile; "not duplicate" is never re-queued; Defer changes nothing. C FEAT-012 §7, §8; amendment D (Q-06a); domain model confirmed
AC-P2-13 On Bramble, Stage 1 handles each 1,000-record batch within budget, and Stage 2 runs the 80,000-citation set in under an hour. B FEAT-012 §2.1; D4-21 pending-D4-21
AC-P2-14 A deduplication report export carries canonical mappings and confidence scores. I FEAT-011 phase 16 (EXP-06) confirmed
AC-P2-15 Reading a Publication never exposes project or citation IDs from projects the caller can't access; enrichment is a listed Study writer whose changes as-of exports cover (FX-PRISMA-08a). I V2-03; PRISMA amendments PROPOSAL
AC-P2-16 Study.citations[] is backfilled from re-parsed retained files or labelled "derived from current Study metadata"; full-text status, retroactive deduplication and the merge wizard work. I, E V2-06; FEAT-011; FEAT-012 PROPOSAL
AC-P2-17 A configurable share of AutoConfirmed groups (PROPOSAL default 5%, at least 20 groups) appears in the admin review queue for confirmation; a reviewer's "Flag as possible duplicate of…" action creates a duplicate review item; the deduplication manifest records the ASySD algorithm version, the tier rules version, the auto-confirmed versus reviewed share, reversals and the QC sample result (PRISMA-S item 16). I, E SR-19; SR improvement 6; methodology coverage PROPOSAL
AC-P2-CONF C1-T18; C12-T08, T10, T11. C review AC-01 PROPOSAL

Changes: AC-P2-01 and 06 retired and replaced by AC-P2-01r and 06r; AC-P2-04, 05, 07 and 09 rewritten; AC-P2-10 to 17 new.

4.25 C1 Populations and explicit classification

Tier T2 (a staging floor step if C1 adds embedded fields) · freeze F-C · entry: R2a; Q-19 · fixtures FX-PRISMA-06a, FX-CLASS · seeds: Classification and outcomes.

ID Criterion Verified by Source Status
AC-C1-01 Each study population has a system whole-population cohort, and every instance belongs to exactly one population. I C13 PROPOSAL
AC-C1-02 Enabling classification on a project with canonical answers changes no answer key. C C2; C13 PROPOSAL
AC-C1-03 A parent-subset or set annotation is stored on the parent or set with its evidence; disjointness and exhaustiveness are separate claims, so answering one never implies the other. I C13; V2-23 PROPOSAL
AC-C1-04 A shared concept is defined once per project and referenced by per-paper mapping answers; publishing a new project-rule version leaves earlier mappings pinned to the earlier rule version. I C13; V2-23 PROPOSAL
AC-C1-05 Compact cohort selection doesn't push the form down (U3 pass bar), and FX-PRISMA-06a assertions pass: populations and cohorts change neither the Study count nor metaAnalysisIncluded. UT, C C12; U3; review AC-04 PROPOSAL
AC-C1-06 Classification fields don't use lifecycle enum names. U FEAT-011 release 2 (DOC-APPROVED) confirmed
AC-C1-07 Templates use verified identities (E14), and system types attach only when an extraction feature is used. I TC1 confirmed
AC-C1-08 Moving from category tabs to entity types keeps every question, answer and guidance reachable; the legacy category string becomes a display alias with no identity change. I, E C1 scope; VA-25 PROPOSAL
AC-C1-09 The Design capability publishes project rules; reviewers confirm per-paper applicability through mapping answers. I Q-19 pending-Q-19
AC-C1-10 Exports include populations, cohorts and mappings. I V2-24 PROPOSAL
AC-C1-CONF C2-T06; C13-T01. C review AC-01 PROPOSAL

Changes: AC-C1-03, 04 and 05 rewritten; AC-C1-06 to 10 new.

4.26 C2 Inference and counts

Tier T3 · entry: C1; Q-18 · fixtures FX-CLASS, FX-PRISMA-06c.

ID Criterion Verified by Source Status
AC-C2-01 Implications such as Pregnant ⊆ Female apply without automatic strictness; inferred cohorts are suggestions, never written as reported answers. C C13 PROPOSAL
AC-C2-02 Counts are shown only with full support (60 = 25 + 35). C C13 PROPOSAL
AC-C2-03 Inferred cohorts show their outcome associations, conflicts show their supporting provenance, and an inference can be withdrawn. E C13 PROPOSAL
AC-C2-04 The first reasoner covers conjunction, containment, disjointness and exhaustiveness only. C Q-18 pending-Q-18
AC-C2-05 Inference results are a rebuildable projection, never authoritative; a rebuild gives identical results. C Domain model (InferenceResult) PROPOSAL
AC-C2-06 FX-PRISMA-06c assertions pass: inferred cohorts change no count. C C13 PROPOSAL
AC-C2-CONF C13-T02 to T05. C review AC-01 PROPOSAL

Changes: AC-C2-04 and 05 new; AC-C2-06 new (V3-09).

4.27 O1 Outcome schemas

Tier T2 (a staging floor step if O1 adds embedded fields) · freeze F-O · entry: R2a; Q-17 · fixtures FX-PRISMA-06b, FX-OUTCOME · seeds: Classification and outcomes.

ID Criterion Verified by Source Status
AC-O1-01 Legacy-compatible and event-count schemas exist, and projects can create and customise schemas. I, E OC1 confirmed
AC-O1-02 Each field's role, type, validators and cardinality are enforced on save. C OC1; E12 PROPOSAL
AC-O1-03 Each outcome measure has one versioned direction across cohorts, with no context override. I, E ODIR1 confirmed
AC-O1-04 The schema-selection question shows a fixed label when one schema is available and a selector when several are; published forms pin the allowed references. E RECOVERED (owner clarification, 27 September) confirmed
AC-O1-05 The existing matrix, cell dialog and spreadsheet entry work with the new schemas; legacy export returns the typed "unsupported shape" result for new-shape data; FX-PRISMA-06b assertions pass (no metaAnalysisIncluded from extraction completion). E, I, C RD16; C14; review AC-04 PROPOSAL
AC-O1-06 Direction is never derived from numeric type and doesn't act as a validator. C OC2 confirmed
AC-O1-07 New-shape data round-trips through export and import. I O1 scope PROPOSAL
AC-O1-08 Reviewers create outcome measures from the paper; admins never have to predefine them. I, E A-20 assumption-A-20
AC-O1-09 Event-count schema fields follow the domain specification. C Q-17 pending-Q-17
AC-O1-10 Observations can carry an "estimated from graph" provenance flag. I D4-10 pending-D4-10
AC-O1-11 Every observation records how its value was obtained (extractionMethod; linking a graph region defaults it to graph-estimated); units come from a vocabulary with a free-text fallback, and a measure whose series carry different units warns at Save and blocks binding at reconciliation until mapped; dispersion type comes from a catalogue (SD, SEM, CI, IQR, range, unknown); domain validators apply on Save (SD and SEM ≥ 0, n an integer > 0, events ≤ total, CI lower ≤ upper, quartile order); exports carry observation n and cohort n with nSource. C, I SR-06; methodology coverage PROPOSAL
AC-O1-12 Per form, an extraction QC view counts graph-estimated observations, unit-mismatch warnings, SD/SEM flips corrected at reconciliation and missing n. E, I SR improvement 5; methodology coverage PROPOSAL
AC-O1-CONF C14-T01 to T03, T05, T06. C review AC-01 PROPOSAL

Changes: AC-O1-03 and 05 rewritten (reviewer-created measures moved to AC-O1-08); AC-O1-06 to 12 new.

4.28 O2 Outcome migration

Tier T1 (rehearsal on an authorised copy) · entry: O1; Q-05; separate execution approval; the P1 identity gate · fixtures FX-LEGACY (untouched defaults) · seeds: Legacy adoption rehearsal.

ID Criterion Verified by Source Status
AC-O2-01r The dry-run runs under a read-only database role, so any write attempt fails; it produces a manifest with counts, checksums and unresolved records. I, R MIG1; review AC-34; Q-05 pending-Q-05
AC-O2-02 Untouched defaults (false direction, SD, mean, zero animals) are labelled "value or default (unknown)" unless an explicit answer is proven. C Q-05 pending-Q-05
AC-O2-03 Values are consolidated only within one author's series for one outcome, and conflicting directions block binding until reviewed. C ODIR1 confirmed
AC-O2-04 Cutover is fenced per project; before cutover, rollback routes back to intact legacy data; after it, only forward recovery applies. R Q-05; migration §5 pending-Q-05
AC-O2-05 Execution has its own approval, separate from the plan and from the dry-run. G MIG1 confirmed
AC-O2-CONF C14-T04. C review AC-01 PROPOSAL

Changes: AC-O2-01 retired and replaced by AC-O2-01r; AC-O2-04 rewritten (split); AC-O2-05 new.

4.29 AL1 Shared-form allocation

Tier T2 · freeze F-A · entry: R2b; allocation phase 2 and X-AUTH-RESOLVER for reviewer validity; #3269's checklist · fixtures FX-ALLOC · seeds: Shared-form allocation.

ID Criterion Verified by Source Status
AC-AL1-01 Shares are computed once per shared form and are equal across its bound stages. C A-09 (lifted); OPS1 PROPOSAL
AC-AL1-02 No study is allocated twice through two stages. C OPS1 PROPOSAL
AC-AL1-03 Turning the flag off returns to refusing proportional shares for shared forms. I A-09 assumption-A-09
AC-AL1-04 Canonical session versions record the admitting allocation regime, as legacy sessions do today. I AP-16 PROPOSAL
AC-AL1-05 Reviewer validity on the form-scoped roster uses the out-of-request resolver; an invalid reviewer is never allocated. I AP-02, AP-16 conditional-X-AUTH-RESOLVER
AC-AL1-06 Changing a form's target while an active regime uses a different value is refused until the regime is updated. I AP-06, AP-16 PROPOSAL
AC-AL1-07 Regime schema v2 has a floor step one release ahead; an older binary refuses to start against an unknown regime schema version. I, H AP-10, AP-16 PROPOSAL
AC-AL1-08 The D8 slot rule over form-keyed claims gives the same answers as the stage-keyed rule for single-stage forms. C AP-16 PROPOSAL
AC-AL1-09 The allocation read APIs and the editor read the membership projection on canonical stages. I AP-15 PROPOSAL
AC-AL1-10 #3269's legacy-stage acceptance checklist is complete before F-A. G AP-23 PROPOSAL
AC-AL1-CONF C7-T06 (lifted for allocated shared forms), C7-T10. C review AC-01 PROPOSAL

Changes: AC-AL1-04 to 10 new.

4.30 GA milestone

Tier T1 (milestone) · entry: the R2–R4 core piloted · evidence: every conformance test first required by a release that shipped before GA passes on the GA candidate.

ID Criterion Verified by Source Status
AC-GA-01 R2a to R2d, R3a to R3d, R4a and R4p have shipped and met their pilot exit criteria. G Plan §5.9 PROPOSAL
AC-GA-02 Guided setup parity is accepted (AC-R3d-01). G SET2 confirmed
AC-GA-03 Navigation and the editor behave correctly for both legacy and canonical projects, checked by a tester who holds both kinds of project; the workflow-version badge shows each project's mode. E, UT U27; UX-11 PROPOSAL
AC-GA-04 Help pages and the in-product "What changed" entries for every shipped release are published. D Plan §5.9; UX-09 PROPOSAL
AC-GA-05 The production prerequisites hold, including environment-wide enablement of the flags the canonical path needs, and new projects default to the canonical path. G, E Plan §5.9, §5.11; DS-04 PROPOSAL
AC-GA-06 At least one production opt-in pilot per family (R2, R3, R4a) meets PE-01 to PE-08. G review AC-33; A-23; D1-07 confirmed
AC-GA-07 The old setup wizard retires only after parity is accepted and the GA milestone is reached. G, E SET2 confirmed
AC-GA-08 A WCAG 2.1 AA audit of the canonical path passes. A, G D4-18 (answered 3 October, "independent of funders"; the recorded reading keeps the audit and is PROPOSAL until Chris confirms it in the G0 dossier) pending-D4-18
AC-GA-09 Legacy screens' chrome and shared pages carry the Material 3 restyle, with no behaviour change. V UX-11; D3-06 pending-D3-06
AC-GA-10 Production publication counting at GA uses the materialised families activated on the agreed date (D1-03 chose activation of ProjectStatistics, #3987, not a freeze, so Q-31(b) authoritative counting doesn't extend to GA; Chris set the date on 3 October: from 5 October 2026 in staging, with production the following week as a target that keeps its own approval and waits for X-STATS-b1 to b7, decision register §1.14). G MS-01; D1-03 confirmed
AC-GA-CONF Every conformance test first required by a release shipped before GA passes on the GA candidate. C review AC-01 PROPOSAL

Changes: AC-GA-05 rewritten (wizard retirement moved to AC-GA-07); AC-GA-06 to 10 new.

4.31 R6 Adoption waves

Tier T1 for every wave (staging and authorised-copy rehearsals) · entry: G-ADOPT per wave · fixtures FX-LEGACY · seeds: Legacy adoption rehearsal.

ID Criterion Verified by Source Status
AC-R6-01 Each wave's manifest is approved, and any source change invalidates it. R, G Migration §4 PROPOSAL
AC-R6-02 Every reader and writer of the adopted scope is canonical (scope completeness). G Migration §4 PROPOSAL
AC-R6-03 The shadow backfill is idempotent: reruns create nothing new. R Research A18 PROPOSAL
AC-R6-04 Semantic parity (decisions, outcomes, pools, exports, permission-filtered API output, statistics) is verified before cutover; statistics parity is automated only for families with a parity audit (ProjectScreening today) and labelled manual for the rest until #3845; FEAT-024's staged operation fence covers every family during shadow and cutover, with a rebuild under the new source versions afterwards. R MS-17 PROPOSAL
AC-R6-05 Cutover is all-or-nothing through ADR-020's lock, verify, stamp and release protocol: each Study is locked, verified, stamped with its CanonicalScopes marker and released with an Audit.Version bump; legacy writes are refused and retried during the window; in-flight writes finish or are refused with retries that keep drafts. R VB-07; consistency model PROPOSAL
AC-R6-06 Legacy records become labelled current snapshots with coverage, never fabricated history; each wave has separate execution approval. C, G EX2; MIG1; research A17 confirmed
AC-R6-07 Adopted questions count as published, so QD1 applies to them. I QD1 confirmed
AC-R6-08 Adoption never promotes legacy single-reviewer work to gold. C Q-29 pending-Q-29
AC-R6-09 E10's labels ("membership-uncertain", "legacy-completed, unvalidated") appear in manifests and exports. C E10 PROPOSAL
AC-R6-10 Conflicting legacy duplicates adopt as a Conflicted head holding at least two unordered legacy-snapshot revisions with no current pointer until the reviewer resolves it with Fix or Save; meanwhile it is excluded from prefill and agreement. C VB-13 PROPOSAL
AC-R6-11 A LegacyIdAlias table remaps #3944 and #3945 references and exports; after cutover no saved link breaks. I, E VB-13; NS §5.3 PROPOSAL
AC-R6-12 An adopted answer pins "wording verified" when its stored Annotation.Question equals the v1 wording, otherwise unknown, which is excluded from same-version agreement. C VA-18 PROPOSAL
AC-R6-13 Wave manifests list conversations, study issues and inbox items. R NS §5.3 PROPOSAL
AC-R6-14 The stage target (override or inherited) becomes the form's target setting; the project threshold becomes the compatibility profile rule; an enabled legacy regime becomes a frozen record, with allocation disabled on adoption unless AL1 is live. C, R AP-13 PROPOSAL
AC-R6-15 Legacy screening is labelled by an admin-reviewed "legacy project screening" compatibility profile at adoption. G, C Q-21 pending-Q-21
AC-R6-16 Lifecycle status and screening outcomes are created per project at adoption from the approved manifest, with coverage labels; there is no platform-wide backfill. C, R Amendment G (Q-06a) confirmed
AC-R6-17 An existing project can adopt the screening-profile scope after R3b without adopting its annotation scopes. R D4-16 pending-D4-16
AC-R6-18 At adoption, a search's source type is inferred only where evidence determines it, per project, and otherwise stays unknown. C, R FEAT-011 MIG-13; amendment G; V2-10 PROPOSAL
AC-R6-CONF C2-T03 (Conflicted head part); C3-T04; C16-T01 to T08 re-run on each wave's candidate. C review AC-01 PROPOSAL

Changes: AC-R6-04 and 05 rewritten; AC-R6-07 to 18 new.

4.32 R7 Retirement

Tier T1 · separate approval.

ID Criterion Verified by Source Status
AC-R7-01 The consumer inventory is empty for every adapter retired. G Research A28 PROPOSAL
AC-R7-02 A restore rehearsal across collections passes: a whole-database point-in-time restore into an isolated database, with the consistency checker green and discontinuity records written. R DC-17; D2-13 pending-D2-13
AC-R7-03 Retention is approved, and retirement has its own approval. G Plan §5.9 PROPOSAL
AC-R7-CONF The whole catalogue passes on the last image that still contains adapters. C review AC-01 PROPOSAL

Changes: AC-R7-02 rewritten.

4.33 External joins and their evidence

The programme integration document is authoritative for each join's owner and timing; this table names the evidence an activation or production gate checks.

Join Needed by Evidence checked Rows
Per-project AF2 and shell admission (X-AF2) R2a–R4 production pilots AC-R2a-42 plus the AF2 owner's go/no-go AC-ALL-12
X-STATS-a R2c staging pilots Usage family on, pilot projects allowlisted on both hosts, by FEAT-024 decision AC-R2c-08
X-STATS-b1 to b7 R2c production publication b1 gate (b) idle-host pass; b2 soak (#3510, #3952); b3 production pending index built in an approved window; b4 production rollout approval lifting the in-code refusal; b5 production allowlist or eligibility for pilots; b6 usage family built; b7 its staging proof AC-R2c-08, AC-GA-10
X-ELIG R3a production admission AC-R3a-33 AC-R3a-03
X-CLAIMS Any production reliance on claims or capacity AC-R2b-14, AC-T-01 to 09 AC-ALL-12
X-RECLAIM (internal to the reconciliation stream) R4a everywhere AC-R4a-36, 37 —
X-AUTH-SCHEMA, X-AUTH-ENFORCE, X-AUTH-WP9 R1c; explanations in R1b Production migration evidence; cutover or parity tests; explanation-equals-enforcement contract test AC-R1b-08, AC-R1c-05
X-AUTH-RESOLVER Per-reviewer Monitor rows (R3a); AL1 Resolver merged and consumed AC-R3a-09, AC-AL1-05
X-BATCH Batches in R3c AC-R3c-17 AC-R3c-05
X-NOTIF Notices in R1c, R2c, R3c, R4a, R4b Steps 1 to 5 of the D1-09 merge order merged with flags off AC-R1c-04, AC-R4a-41
G-NOTIF Any notification enablement AC-ALL-29 AC-ALL-22
X-DEL Search withdrawal in P1 Agreed reversible-deletion design AC-P1-16
X-AF2-PR9 R4c Merged code AC-R4c-03

4.34 Production enablement steps

Every release names how it reaches production users and what evidence that step needs (DS-04). Until a step's evidence exists, the release stays on staging and preview (Q-25).

Release Production enablement step Evidence
R1a The new editor becomes the default entry point for legacy projects once the coexistence design defines its two modes Staging acceptance; flag decision; AC-R1a-07
R1b Owner-only enforcement is live on merge (security fix); the Members & groups page flag turns on after staging acceptance AC-R1b-01 to 07
R1c, R1d Enabled per environment after the authorization joins §4.33 joins
R2a to R2d Opt-in pilot projects admitted through R0 with per-project AF2 and shell admission (AC-R2a-42), under D1-07 AC-ALL-12; PI rows
R2c Production publication only under X-STATS-b or Q-31(b) AC-R2c-08
R3a to R3d As R2, plus X-ELIG for production admission AC-R3a-33
R4a to R4c As R2, with the task editor claim; X-CLAIMS only where capacity promises apply AC-R4a-36, 37; AC-R2b-14
R5a to R5c, P1, P2, C1, C2, O1, AL1 Per admitted project after staging acceptance Activation record
Notifications (any release) Per environment and kind family under G-NOTIF AC-ALL-29
GA Canonical default for new projects AC-GA-01 to 10

4.35 Claims and tracking prerequisites (X-CLAIMS)

ID Criterion Verified by Source Status
AC-T-01 A reviewer working continuously for over 30 minutes sees no expiry UI; a network drop under 10 s changes nothing; reconnecting within the grace period, even through another API pod, cancels the scheduled removal; reconnecting after the grace period with the study full shows the refusal and keeps the draft recoverable. E RT §5.2 PROPOSAL
AC-T-02 Stale scheduled deliveries (an old suspension baseline, an old idle generation, an old stage-keyed command shape) do nothing after a reconnect or a deploy. I RT §5.2 PROPOSAL
AC-T-03 A rolling restart of every API pod with 50 active reviewers (PROPOSAL) loses and duplicates no claim, clears orphaned connections within 2 minutes and produces no burst of 503 responses. R RT §5.2 PROPOSAL
AC-T-04 The previous web bundle keeps working through the declared window; then MinUiVersion forces a reload. R RT-11 PROPOSAL
AC-T-05 After rolling the image back to the recorded minimum, with form claims and canonical sessions present, capacity guards and pool filters are still correct. R, H RT-07 PROPOSAL
AC-T-06 A lost scheduled message can't hold a place beyond the backstop horizon (an absolute lease expiry, or a backstop sweep behind its own flag). I RT-24 PROPOSAL
AC-T-07 With 300 connections across 2 replicas, 30 s heartbeats and a burst of 20 joins per second, join and save p95 stay within budget, the Quartz backlog stays flat and no claim is duplicated (PROPOSAL numbers). B RT §5.2 PROPOSAL
AC-T-08 Presence sent to someone who doesn't hold the claim carries counts plus their own claim only; names go only to Monitor-capability holders; nothing crosses reconciliation blinding. I RT-14; D3-20 pending-D3-20
AC-T-09 The production claims route is a binding-scope tracking setting (#3876 reshaped), enabled per admitted pilot project and for legacy projects that opt in; a shared form is tracked if any bound stage is; API and PM switch together. I, G RT-02, RT-03; D3-16 pending-D3-16

4.36 Lanes awaiting a Batch D decision

X1 Analysis-ready exports: tier T3 · freeze F6a · entry: O1, R4c, R5a; F6a (C11); D4-09 · fixtures FX-OUTCOME, FX-X1 · applies only if Chris approves D4-09.

ID Criterion Verified by Source Status
AC-X1-01 The comparison-level export (gold by default, candidates optional) gives one row per comparison and timepoint, pairs cohorts by Experiment membership and control flags, flags a control serving several treatment cohorts as sharedControl, carries the dispersion type unconverted, defaults to collectively Included studies (AC-R5a-10), and matches the FX-X1 fixtures. C SR-08; D4-09; methodology coverage pending-D4-09
AC-X1-02 A RIS export of any study set (included; excluded with reason; duplicates; not retrieved), built from Citation raw fields, re-imports into EndNote and Zotero without losing raw fields. E SR-08; D4-09 pending-D4-09
AC-X1-03 Every export ships a machine-readable codebook (question identity, version, wording, options, semantic role, entity scope, requiredness) with per-answer answeredUnderVersion and qualificationPolicy. I SR improvement 8; SR-16; D4-09 pending-D4-09
AC-X1-CONF C11-T01 to T05, re-run on the comparison export. C review AC-01 pending-D4-09

If Chris approves D4-14 (an answer-import lane after R2a, from FEAT-004) or D4-15 (routing studies by answer values after R4a), that lane's brief adds criteria here under its own release ID. They start from floors this page already states: imported answers carry provenance Imported (source system, import job, mapped reviewer), count toward a target only when mapped to a SyRF reviewer and declared independent, are excluded from default independence statistics, never become gold automatically and pin the current question version, as AC-R3a-30 does for screening decisions; routing reads gold values or collective outcomes only, never one candidate's answers.

Changes: new section; AC-X1-01 to 03 new.

4.37 Retired IDs

These IDs are retired and never reused. Reviewer-proposed IDs that this revision renumbered (listed as aliases in the resolution record) were never live and are not reserved.

Retired Replaced by Why
AC-R5a-02 AC-R5a-02r "Identical" ignored generation metadata and unversioned datasets (review AC-34, DC-13)
AC-O2-01 AC-O2-01r "Read-only" was unproven; a read-only database role now proves it (review AC-34)
AC-P2-01 AC-P2-01r The parity tolerance couldn't be computed (review AC-21, D4-21)
AC-P2-06 AC-P2-06r The excluded-status list was incomplete (review AC-21, V2-12)
PE-04 PE-04r Synthetic fixtures on pilot data are replaced by the invariant monitor (review AC-16)

5. Pilot entry, pilot exit and user testing

5.1 Pilot exit criteria

ID Criterion Verified by Source Status
PE-01 No lost or silently changed work across the pilot: INV-01, INV-02 and INV-09 report no violation, and every reported loss is traced to a typed cause, none of them the engine. M, S Invariants 1, 2, 9; review AC-16 PROPOSAL
PE-02 No permission, blinding or privacy leak: the AC-ALL-19 probe suite passes against the pilot projects' data in the pilot environment, telemetry shows no disclosure anomaly, and no tester or reviewer reports one. C, M, S Invariant 10; review AC-16; V2-23 PROPOSAL
PE-03 No open Sev-1 or Sev-2 defect (PE-07); every Sev-3 defect is triaged with an owner. G Plan §9 PROPOSAL
PE-04r The invariant monitor reports zero violations on the pilot projects, nightly, for the whole pilot. M review AC-16 PROPOSAL
PE-05 AC-UX-01 and AC-UX-02 are met for every user-testing task of the release (§5.3), with each "explain" answer scored against its rubric. UT UX-01; review AC-29 PROPOSAL
PE-06 Minimum exposure, overridable per release at its freeze gate: at least 2 projects, at least 3 reviewers in each, at least 50 studies with two or more completed contributions, and at least 10 working days. S, M review AC-16 PROPOSAL
PE-07 Severity definitions. Sev-1: lost or silently changed work, a disclosure leak, or a wrong authoritative outcome. Sev-2: a wrong count or status, or a blocked task with a workaround. Sev-3: cosmetic. G review AC-16 PROPOSAL
PE-08 For releases that enable notifications in the pilot, no notice or email reaches a user outside the admitted pilot projects (inbox and Mailpit checked). I, M NS §5.3 pending-D3-21

Changes: PE-01, 02 and 05 rewritten with measurement; PE-04 retired and replaced by PE-04r; PE-06 to 08 new.

5.2 Pilot entry conditions

Plan §5.10's conditions are written here as entry rows; a pilot starts only when its rows hold.

ID Entry condition Source Status
PI-ALL-01 The release's automated activation rows pass on the release candidate; the telemetry dashboard (AC-ALL-20) and the invariant monitor (AC-ALL-21) run in the pilot environment. review AC-16; §8.2 PROPOSAL
PI-ALL-02 Seeds are deployed additively; pilot projects are admitted through R0's admission service by an audited action; the testers are named and booked. Q-07; D1-06 (panel shape approved; names given on 3 October, decision register §1.14; no external SyRF users named yet) confirmed
PI-ALL-03 The rollback and containment plan is recorded: the minimum image, and what reviewers and admins see if the pilot becomes read-only (U28). Plan §9 item 7 PROPOSAL
PI-ALL-04 A production pilot starts only with AC-ALL-12 evidence and under D1-07; until then pilots run on staging and preview only. Q-25; D1-07 confirmed
PI-ALL-05 Notifications are enabled in a pilot only under G-NOTIF (AC-ALL-29). NS-04; D3-21 pending-D3-21
PI-R2a-01 Forms are target-1 or their reconciliation can wait until R4a; target-1 exports are labelled "single reviewer, unreconciled". Plan §5.10; Q-29 pending-Q-29
PI-R2a-02 One stage per form. A-21 assumption-A-21
PI-R2a-03 One form per entity category. A-19 assumption-A-19
PI-R2a-04 Used forms needn't change before R2c. A-14 assumption-A-14
PI-R2a-05 Project 0102 ("Ready for Annotation", FEAT-024's staging pilot) stays out until the canonical-commit-with-statistics fixture (C8-T07) passes. MS-10; D3-10 pending-D3-10
PI-R2b-01 No proportional shares on shared forms, and no allocation on canonical stages. A-09; D3-13 assumption-A-09, pending-D3-13
PI-R2b-02 Stages bound to one form have identical stage-owned settings, or Q-28's interim rule applies. Q-28 pending-Q-28
PI-R2c-01 Staging pilots meet X-STATS-a; preview pilots use Q-31(b) authoritative counting. MS-10; D3-10 pending-D3-10
PI-R3a-01 Conflicts resolve through extra votes (eligibility D1 and D2, Allow); a pilot using Stop on a profile that feeds a cross-stage route accepts that conflicted studies wait for R4p. Plan §5.10 PROPOSAL
PI-R3a-02 Eligibility is enabled in the pilot environment; production admission needs X-ELIG (AC-R3a-33). AP-09; D3-09 pending-D3-09
PI-R3b-01 Multi-profile statistics are served live. MS-08; D3-10 pending-D3-10
PI-R3c-01 Batches are used only with X-BATCH evidence (AC-R3c-17). AP-05 PROPOSAL
PI-R4a-01 The task editor claim is live; any production capacity promise also needs X-CLAIMS. RT-01; D3-16 pending-D3-16
PI-R4a-02 Conversations are enabled only after #3965's Q-10 changes have merged, in the D1-09 order. Q-10; D1-09 confirmed
PI-R4c-01 X-AF2-PR9 has merged. Plan R4c PROPOSAL
PI-R5b-01 P1, P2, R3b and R4p have shipped, and the F6b answers (Q-06b, Q-22, Q-23) are recorded. Plan R5b PROPOSAL
PI-P2-01 ASySD parity (AC-P2-01r) has passed. D4-21 pending-D4-21
PI-AL1-01 #3269's legacy-stage checklist is complete (AC-AL1-10). AP-23 PROPOSAL

5.3 User-testing tasks, rubrics and pass bars

Pass bar for every task: AC-UX-01 (at least 80% complete without help) and AC-UX-02 (at least 80% give an explanation containing every point in the rubric). Tester numbers follow D1-06 (approved 3 October: five named CAMARADES reviewers or administrators for T1 releases, three elsewhere, with at least two external SyRF users where possible). Chris named the panel late on 3 October (decision register §1.14): for T1 releases Gillian Currie, Alexandra Bannach Brown, Francesca Tinsdeall, Chris Sena and Nadia Soleman; for the rest Gillian Currie, Alexandra Bannach Brown and Francesca Tinsdeall. No external SyRF users are named yet. Sessions are batched monthly across neighbouring releases (DS-16). The UX strategy owns the protocol and may refine tasks and rubrics.

How an explanation is scored: each rubric lists two or three key points, recorded in the session protocol before the session. The facilitator asks once ("Tell me what you see and why") and may prompt once ("Anything else?"). Two observers score each point present or absent; the tester passes when every point is present and nothing contradicts it. Observers settle disagreements from the recording or notes. Sessions use the seeded or open-licence realistic-content projects, and notes never contain study content.

Release Task the tester completes and explains A correct explanation names Testers
R1a Import two question templates with a parent and a lookup, then explain what changed in the project The parent and lookup were remapped; the copies won't change when the templates do 3
R1b Say who can do what in a project, and why The grant's source (group, stage or owner); which actions are owner-only 3
R1c Create a group with a stage grant and predict what a member can do The group's scope; the anti-escalation rule; ChangeOwner is never grantable 3
R1d Delegate permission administration and predict what the delegate can grant The envelope's limits; never ChangeOwner 3
R2a Edit, save and complete a session; say which version counts and why; recover a two-tab conflict The latest explicit Save or Complete counts; autosave doesn't; a Save after Complete removes the completed contribution; the other tab's edits are kept as a conflict copy 5
R2b Open the same study from two stages and explain the count One session per form; counted once in each stage 3
R2c Predict a publication's impact on completed, saved-incomplete and draft-only sessions before publishing For each category, what happens under the chosen treatment (pass bar applies per category) 5
R2d Fix an outdated session and say why it was flagged Their own newer answer elsewhere; Fix creates an incomplete version; a warning alone keeps Complete 3
R3a Say why a study is offered or locked at a step; screen 20 studies by keyboard The gate or dependency and its state; no personal vote is revealed 5
R3b Say what a screening decision rests on; set up a title/abstract → full-text route The triggering criteria and own answers; the decision counts only on submit 3
R3c Approve a pending change to a Completed stage you were alerted to, predicting its effect Which stages reopen; nothing changes before approval 3
R3d Set up a project from templates, then resume a saved setup draft Task completion and time (AC-UX-07) 5
R4a Reconcile a study with three candidates and say why the gold answer is what it is; find work assigned to you in a project you haven't opened Every candidate was used; prefill only on exact agreement; Complete accepted the displayed answers 5
R4p Adjudicate a decision with conflicting reasons Decision agreement and supporting-answer agreement are separate; adjudication adds no vote 3
R4b Raise a query and find its outcome Gold stays effective while queried; you see only your own outcome 3
R4c Reconcile outcome series from three candidates Direction is reconciled once per measure 3
R5a Download an as-of export and explain its coverage labels Versioned, current-only and not observed 3
R5c Explain independent versus informed figures Informed means after viewing accepted answers or being questioned 3
R5b Read the PRISMA diagram, including reported external counts Which numbers are reported and which computed; the "not yet screened" remainder 3
P1 Enter external deduplication counts and explain the warning Identified at source minus removals should equal imported records 3
P2 Resolve a duplicate pair Which study is primary; nothing is deleted; the decision is reversible 3
C1 Select cohorts for an outcome without losing your place in the form Task completion and time 3
C2 Accept or withdraw an inferred cohort and say when a count is shown A count appears only with full support 3
O1 Create an outcome measure and choose its schema One direction per measure 3
AL1 Configure shared-form allocation and say why both stages show the same shares One plan per shared form 3

5.4 UI validation pass bar

A UI validation (U1 to U29, and the new U items in the UX strategy) passes when, on its prototype, at least five participants per affected role (at least two from outside CAMARADES where possible, D3-08) meet AC-UX-01 and AC-UX-02 for its tasks, and no Sev-1 usability issue remains (a misread authoritative state or a risk of losing work). Each validation is scheduled at least one window before the build that consumes it, and each freeze gate's exit evidence lists the validations that passed (UX-03). Status: PROPOSAL.

6. Pilot projects and seeded test data (Q-07)

Chris, 3 October 2026 (Q-07): pilots run on new projects and on the seeded projects in the staging and preview environments; seed projects may be added where helpful.

6.1 Test-data tiers

Tier What Where Built by Used by
DT1 Code fixtures The FX-* JSON corpus (§7) and builders src/libs/testing/SyRF.Testing.Common/ S0 harness (E99) U, I, C
DT2 Scenario builders API-driven, with per-test unique IDs; canonical states built by a test-only scenario endpoint in the e2etest environment that calls canonical commands, never raw database writes Hermetic e2e stack L17-12 E, X
DT3 Human-acceptance seeds The seed projects in §6.3, created by the seed-if-absent job (AC-S0-06) Preview and staging E97; D3-14 S, UT
DT4 Benchmark datasets RV-DS-01 to 05 on FEAT-024's generator and seeds, at the D1-08 tiers: typical (50 questions, 100 pins), p99 (340 questions, 1,000 pins), max (2,023 questions, 5,000 pins, 50 instances per category) Bramble E98 B
DT5 ASySD golden outputs Generated once in a pinned R container from labelled datasets, licences recorded Repository test data P2 stream C
Dataset Basis Shape Serves
RV-DS-01 FEAT-024's PS-DS-01 PS-DS-01's project shape with one canonical form at the typical tier S0 baseline, M0
RV-DS-02 PS-DS-02 PS-DS-02's shape with a p99-tier form bound to two stages M0, R2a, R2c
RV-DS-03 PS-DS-03 25,000 studies, 25 reviewers, 8 stages, as PS-DS-03, with canonical forms M0, R2c, R5c
RV-DS-04 E28 The max-form case (2,023 questions; 5,000 pins per session version) M0, R2a
RV-DS-05 FEAT-007 and FEAT-008 metric 100,000 studies with profile and route filters and 2,500 batches R3a, R3c

Dataset IDs and shapes are PROPOSALs fixed in S0; FEAT-024's dataset table is in docs/features/materialized-project-statistics/phase0-benchmark-and-capacity-baseline.md.

6.2 Personas

Today the e2e stack has three users (e2e/setup/auth.setup.ts): admin (SyRF Seed Bot, roles administrator and SyrfAdmin), reviewer (Alpha) and standard (Beta). Application-admin bypasses distort project-permission tests, so the persona set below lands in S0 (AC-S0-05). GUIDs are proposals fixed at S0 in auth.setup.ts and e2e/helpers/constants.ts.

Persona Purpose e2e user Application roles
SyrfAdmin Application-admin paths only, plus one negative test per blinded surface Existing admin (…0001) administrator, SyrfAdmin
Owner Owner-only paths (transfer, delegation); never an application admin New (…0020) none
Project admin, not owner Admin-not-owner refusals; publication and settings New (…0021) none
Reviewer A Candidate Existing reviewer, Alpha (…0010) none
Reviewer B Candidate Existing standard, Beta (…0011) none
Reviewer C Third candidate New, Gamma (…0012) none
Reviewer D Fourth candidate New, Delta (…0013) none
Reconciler Never a candidate on the studies they reconcile New (…0022) none
Extra reviewer RA5 requested reviewer New (…0023) none
Observer View-only member New (…0024) none
Query raiser Raises queries New (…0025) none
Query reviewer Holds the query-review capability New (…0026) none
Support impersonator Support edit-mode and impersonation paths New (…0027) The support or impersonation role in use today

On staging, human testers log in as themselves: the seed-if-absent job grants the named tester accounts (D1-06) the persona memberships in seed projects. There are no shared credentials.

6.3 Seed projects

Existing seed projects (docs/platform/enhanced-database-seeding.md): Quick Start Demo, Screening In Progress, Ready for Annotation (project 0102, FEAT-024's staging pilot, kept out of R2a–R3a pilots under PI-R2a-05), Complete Review and Private Research, with the Seed Bot owner and the Alpha and Beta reviewers.

Proposed seed projects, each delivered with the release it serves:

Seed project Contents Serves
Versioned forms, one stage A form with sessions in every state (completed, saved-incomplete, draft-only, drafts over explicit versions) under v1, bound to one stage R2a
Shared forms, two stages Form F (target 2) bound to stages A and B with sessions reached from both; an overlapping form G under the same entity category; incompatible question versions across the two forms R2b, R2c, R2d
Workflow routing Title/abstract → combined full text → extraction steps; Pending, Conflict, Included and Excluded studies; Allow and Stop settings; batched and early-stopped variants R3a, R3b, R3c
Reconciliation, four candidates Studies with three and four completed candidates; disagreements; entity-matching cases; a target-1 form; legacy reconciled answers; an explicit assignment; a requested extra review; a queried answer R4a, R4p, R4b
Classification and outcomes Populations and cohorts; an implication (Pregnant ⊆ Female); event-count outcomes; several measures with directions C1, C2, O1, R4c
PRISMA identification Searches of every source type plus one unknown legacy source; cross-search duplicates, including reviewed duplicates; a search with reported external deduplication counts; retrieval statuses P1, P2, R5b
Legacy adoption rehearsal A synthetic legacy-shaped project with cross-stage answer overwrites, legacy reconciled answers, untouched outcome defaults, missing timestamps, conflicting duplicates, and v0 and v1 system questions R6 and O2 dry-runs
Realistic content An open-licence reference set of real abstracts (licence recorded) for the UX baseline and summative sessions UX baseline, R2a, R3a
Shared-form allocation Legacy and canonical stages with allocation regimes AL1

6.4 Rules

  • Seeds are additive and idempotent, keyed by fixed GUIDs, and contain no real user, clinical or participant data.
  • Canonical seed projects are created through canonical commands after R0 admits them. The legacy seeder (application services) creates only legacy-shaped seeds, because from R0 it is a legacy writer that refuses canonical scopes.
  • Preview and staging receive seeds through the seed-if-absent job (AC-S0-06), separately from ownership reconciliation. It never drops or edits existing data and never runs the operator reseed procedure, so tester-created pilot projects survive.
  • Each seed project documents the releases, fixtures and personas it serves.
  • New pilot projects are created by CAMARADES testers on staging for each release.
  • In production, a new project joins a pilot only after the production prerequisites hold; until GA, only when its creator opts in at creation (A-23) and under D1-07.
  • Existing real projects stay on the legacy path until adopted in R6.

7. Fixtures, invariants and conformance tests

7.1 Fixture format and location

  • Each fixture is a versioned JSON file under src/libs/testing/SyRF.Testing.Common/ (a corpus folder per family; the folder name is settled in S0, E99) with: id, version, title, sourceRefs (decision, research and specification IDs), inputs (entities and canonical commands, in order) and assertions keyed by release ("R2a": [...]).
  • Inputs change only with a version bump. Assertions per release are append-only. A release can't pass with an empty assertion set for a fixture assigned to it.
  • xUnit theories and Vitest describe.each read the same files; the DT2 scenario endpoint builds the same inputs for e2e journeys. For the applicability and admission corpora, a seeded generated corpus (fixed, recorded seed) is diffed across the .NET and TypeScript evaluators (review AC-31).
  • Timing (review AC-04, V3-10): every family, PRISMA included, is written by the freeze gate of its first release; for the PRISMA fixtures the release is the part's Release column in §7.2. So the parts first used by R2a (02a, 04a) and R2b (02b) are written by F1a; R2c (04b) by F2; R3a (03a, 03b) and R3c (04d) by F3; R4p (03c) by F4; R3b (02c, 04c) by F5; R5a (05a) by F6a; R5b (01 R5b, 02d, 03d, 04e, 05b, 06d, 06e, 07b, 08, 08b) by F6b; P1 and P2 (01 P1, 01 P2, 07a, 08a, 09) by F-P; C1 and C2 (06a, 06c) by F-C; and O1 (06b) by F-O.

7.2 PRISMA fixtures by release

The eight fixtures come from the PRISMA compatibility review. Fixtures 3 and 4 are split by release, so each part is testable when it first applies (V2-07). FX-PRISMA-09 comes from the methodology coverage for amendment O and applies only if Chris approves D4-08.

Part Release Evidence assertion Source
FX-PRISMA-01 P1 P1 Two immutable Citations of one report; one earliest-source column; a later import changes identification counts only; distinct-report and same-report imports are tested separately; an unknown legacy source stays unknown. Amendment C
FX-PRISMA-01 P2 P2 Stage 1 finds the duplicate; the secondary is kept as Duplicate; box 3 counts SyRF-detected duplicates; no report, study or animal units are mixed. FEAT-012; amendment L
FX-PRISMA-01 R5b R5b Box values, including reported external parts and source columns. Amendment K
FX-PRISMA-02a R2a One form, one stage: one qualifying contribution per reviewer per study and form; repeated Saves add none. SF2
FX-PRISMA-02b R2b One form bound to two stages: one contribution, counted once in each stage's progress; repeated pool evaluations and personal batch grants add no screened units. SF1; SF2
FX-PRISMA-02c R3b The same profile in two stages: one effective decision per profile per reviewer; different profiles stay independent. DP4
FX-PRISMA-02d R5b Screened-unit counts equal unique studies, never stage sums. PR1
FX-PRISMA-03a R3a Own Include with collective Pending opens permitted within-stage extraction with no collective Included; cross-stage work is blocked under the default and admitted under the advanced option; collective Exclude blocks new dependent work while EW1 governs saved work; PR1 holds; one current ScreeningOutcome per profile; StudyEnteredPool entries carry versions. DP6; DP7; PR1; EW1
FX-PRISMA-03b R3a Early-stopped and batched reviews: pool entry is the first release to anyone; shared openings and personal grants are recorded separately; re-evaluation reproduces membership. Amendment A; D3-13
FX-PRISMA-03c R4p Pending reason coverage becomes adjudicated coverage; the collective Exclude veto holds while reasons are pending; adjudication adds no vote. RX1
FX-PRISMA-03d R5b The current or preliminary report exposes reason coverage and pinned decision sources. Amendment E (Q-06b)
FX-PRISMA-04a R2a A Save after Complete removes the qualifying contribution; autosave alone doesn't. SL3
FX-PRISMA-04b R2c A publication with sessions in all three categories: qualifying counts per version follow the recorded policy. FV2; FV3
FX-PRISMA-04c R3b A profile publication: decisions under the prior profile version follow the chosen treatment. Q-26
FX-PRISMA-04d R3c Unresolved applicable work blocks automatic readiness; a protected correction or new arrival needs confirmation, then the automatic or manual transition follows. LC1
FX-PRISMA-04e R5b An earlier PRISMA snapshot is unchanged after every step above. Amendment J
FX-PRISMA-05a R5a An as-of export reproduces the pre-correction state where history exists and labels coverage where it doesn't. EX1; EX2
FX-PRISMA-05b R5b Correcting Exclude to Include, amending a profile or filter, changing retrieval status and reversing a dedup decision each append events and provenance; old as-of counts reproduce; missing legacy history gives a coverage status, never a reconstruction. EX2; amendment F
FX-PRISMA-06a C1 Populations and cohorts change neither the Study count nor metaAnalysisIncluded. C12
FX-PRISMA-06b O1 Outcome assignments and a custom schema change neither; completing extraction never sets metaAnalysisIncluded. C12
FX-PRISMA-06c C2 Inferred cohorts change no count. C13
FX-PRISMA-06d R5b Box values are unchanged. PR1
FX-PRISMA-06e R5b Box 17 comes only from the Synthesis inclusion attribute, never from extraction completion. SR-20; C12
FX-PRISMA-07a P2 Originals are kept; the admin's identity mapping is an alias; conflicts are flagged; one contribution is counted; no automatic double target count or gold promotion. Amendment D; domain model
FX-PRISMA-07b R5b The reviewed duplicate counts once in the report. Amendment D
FX-PRISMA-08a P2 A cross-project Publication lookup exposes no foreign project or citation IDs (moved from R5b). V2-03
FX-PRISMA-08 R5b A stale statistics state or rewrite lock gives a consistent manifest or an explicit retry; concurrent snapshot generation never mixes epochs; a revocation leaks no candidate data. PRISMA review fixture 8
FX-PRISMA-08b R5b An early-stopped batched review satisfies the arithmetic identities, with the "not yet screened" remainder shown. SR-09
FX-PRISMA-09 P2 (if D4-08 is approved) Two reports linked to one study: one study and two reports in box 10; an excluded companion report stays in box 9 (amendment O). D4-08; methodology coverage

7.3 Other fixture families

Family Contents First release Source
FX-ACCESS-01 to 10 01 within-stage own Include opens the next step while the collective decision is Pending; 02 cross-stage locked by default; 03 advanced personal cross-stage opens; 04 strict within-stage waits (pending Q-01); 05 collective Exclude blocks each new route without deleting extra work; 06 PRISMA stays Excluded with completed extraction; 07 a prerequisite self-cycle is rejected; 08 a personal Exclude is never silently overridden; 09 EW1 saved completion is preserved; 10 a changed published policy is rechecked at transactional admission R3a (04 in R3c) docs/planning/review-stage-step-access-policy-proposal-2026-10-03.md
FX-LIFE-01 to 10 01 readiness counts unresolved applicable drafts and corrections; 02 abandonment is never inferred, and discard is explicit and audited; 03 a change to a Completed stage becomes a pending request, with nothing committed before approval; 04 approval covers that change only; 05 approval never grants the initiator authority; 06 commit rechecks permission, expiry, source hashes and stage state, and changed inputs invalidate approval; 07 shared work needs approval for every affected Completed stage, all or none; 08 automatic mode commits the change and Active status in one transition record; 09 manual mode needs an explicit Reopen; 10 new arrivals take the same gate R3c docs/planning/review-lifecycle-gold-settings-proposal-2026-10-03.md; Q-02
FX-SETUP-01 to 13 01 profile copies stay independent; 02 a later template change doesn't alter local configuration; 03 parent and lookup imports survive ID remapping; 04 cross-project dependencies are denied; 05 privacy, contact, name, keywords and protocol fields survive the replacement; 06 the old create entry uses the new flow without duplicate creation; 07 navigation and manual setup are preserved; 08 disabled living-search and ML behaviour is preserved; 09 an empty project creates no PRISMA records or reports; 10 extraction off adds no unused mandatory types; 11 an interrupted draft setup resumes; 12 publish honours impact gates; 13 the ordinary editor and category UI still work without the wizard R1a (02 to 04), R3d docs/planning/review-guided-setup-template-plan-2026-10-03.md
FX-PUB Policy-combination table: per-question treatments × per-category treatments × compatible or incompatible changes × added and removed questions, with expected qualifying counts per version R2c FV2; FV3; VA-14
FX-PUB-10K 10,000 sessions across v1 to v3 and two stages, split 60/30/10 completed, saved-incomplete and draft-only, 5% with drafts over explicit versions; variants at 1,000 and 100,000 R2c E22; review AC §3.1
FX-LEGACY Cross-stage answer overwrites; legacy reconciled answers; untouched outcome defaults (false direction, SD, mean, zero animals); missing timestamps; conflicting legacy duplicates; schema-v0 and v1 options; SystemQuestionVersion v0 and v1 projects; legacy thresholds (single, manual dual, automated dual, custom) R0 onwards Review AC §3.5; VB-13; research A2
FX-FLOOR Documents with unknown elements at Study, Project and SystematicSearch top level and in every enumerated embedded type, including schema-conditional fields R0 and floor steps VB-02; review AC-13
FX-APPLIC The applicability corpus, starting from FEAT-020's specification and fixtures (multi-option conditional parents, filtered options, branch context, ADR-011), plus a seeded generated corpus diffed across the .NET and AF2 evaluators R2a E23; review AC-31; PH-07
FX-DRAFT-01 to 08 01 the lease and its holder; 02 take-over; 03 the conflict copy; 04 Save and Complete consume the draft; 05 a late autosave is rejected; 06 a duplicate write sequence counts as success; 07 the first-draft race on the natural key; 08 a network loss R2a DC-07 (AC-DC-08); RT-10
FX-CLAIMS Two tabs through two stages; release on first explicit save; reconnect within and after grace; stale scheduled deliveries; RA5 admission R2a, R2b, R4a RT §5.2
FX-ELIG The eligibility truth table (docs/planning/review-eligibility-truth-table.md), for membership-facts parity and C6 R0, R3a AP-01
FX-PERM Persona × activity matrix, including owner-reserved activities, anti-escalation and the delegation envelope R1b PM1; PM2; Q-03a
FX-RX1 The ledger's RX1 example (two Excludes with conflicting must-agree reasons) and its variations R4p RX1
FX-RE5 The ledger's RE5 delivery list (four cases) R4a RE5
FX-SF4 The ledger's SF4/RE3 delivery list (six cases), including outcome series R4a, R4c SF4/RE3
FX-SF5 The ledger's SF5 delivery list (seven cases) R2d SF5
FX-DP4 The ledger's DP4 delivery list (four cases) R3b DP4
FX-QY QY1 to QY9 cases: two raisers; addressed by update; an unsatisfied concern; invalidated children; audited self-review; an empty rejection explanation R4b QY1–QY9
FX-AGREE Hand-computed agreement: multi-select sets, N/A pairs, compatible versions, informed and independent contributions, a DP2 correction after conflict, missing states R5c AG2; AG3; VS2; SR-01
FX-ASOF History gaps, an adoption date, an erasure event, clock skew near the watermark, unversioned datasets R5a DC-13
FX-ASYSD Labelled benchmark datasets (licences recorded) and SyRF's seeded PRISMA pilot data, with golden outputs from a pinned R container P2 Amendment L; D4-21
FX-OUTCOME Legacy-compatible and event-count schemas; several measures with directions; legacy defaults O1, O2, R4c OC1; ODIR1
FX-X1 Hand-built comparison fixtures: shared controls, multi-arm experiments, mixed dispersion types and one collectively Excluded study X1 SR-08; D4-09
FX-CLASS Populations, cohorts, Pregnant ⊆ Female, counts with and without full support C1, C2 C13
FX-ALLOC Allocation regimes on legacy and canonical stages; RA5 under allocation; shared-form plans R2a, R4a, AL1 AP-03; AP-16
FX-NOTIF Disclosure fixtures per kind × channel (inbox, email, digest) × role (candidate, reconciler, admin, revoked, blinded); two-event lifecycles Releases adding kinds C15; NS §4.2

7.4 Invariant checks

One executable check per invariant in plan §2. The invariant monitor (§10, L17-09) runs the data checks read-only and typed, nightly per admitted project, after every restore and before every adoption step (AC-ALL-21). It also reports the operational checks in the consistency model: derived records current or flagged for a sweep, per-aggregate stamps monotonic, outstanding intents and operations within their age bounds.

ID Invariant Executable check Runs from Source
INV-01 Forms own evidence; stages own workflow; one session and one contribution per reviewer, study and form; form-owned minimum target No two FormSessions share (study, form, reviewer); at most one qualifying contribution per reviewer, study and form; sufficiency reads the form target; Study.CanonicalSummary equals recomputation R2a SF1; SF2; SF4
INV-02 The latest explicit Save or Complete is current; autosave is a draft; prior versions are immutable and never counted twice Every session pointer resolves to its latest explicit version; every pinned revision exists; version digests verify; every draft's base exists; no draft counts R2a SL1–SL3; SF6
INV-03 Within a stage, own Include opens dependent steps subject to the collective-Exclude veto; across stages, Collective Include by default Every admission record recomputes to the same result from its recorded policy and version evidence; no dependent admission follows a collective Exclude R3a DP6; DP7
INV-04 PRISMA reports the collective authoritative outcome; a collective Excluded stays Excluded No collectively Excluded study counts as Included in any outcome projection or snapshot; its extraction evidence and provenance remain R3a PR1
INV-05 One versioned outcome-measure direction across cohorts, with no context override At most one current direction head per measure; no direction stored per series O1 ODIR1
INV-06 Adding a question creates a new form version; publication checks every prior version, needs a recorded admin choice and current statistics at a protected boundary Every published form version has a policy record and a recorded usage-evidence identity; no version referenced by a session or task changed after first use R2c FV1–FV3; PS1–PS3
INV-07 Reconciliation acceptance: final submission accepts displayed valid answers; no gold from agreement or majority Every gold snapshot links to a final reconciler submission (or an attributed accept-as-gold act); none was created by agreement alone R4a RE2; SF4
INV-08 Gold is an immutable snapshot; queries never take gold out of effect until a valid replacement exists Snapshot digests verify; every current pointer resolves; queried answers stay in the current snapshot until a replacement publishes R4a GS1; QY1–QY3
INV-09 No fabricated history, votes, versions or reasons Every version has a command-ledger record or a migration manifest ID; every screening vote traces to a submit command; adopted records carry coverage labels; no legacy review data was written after its scope's marker R2a EX2; research §5
INV-10 Possessing a capability is not administering it; ownership transfer is owner-only; assignments never override eligibility; notifications only under fresh authority No group holds an owner-reserved activity; no assignment targets an ineligible reconciler; every inbox SourceId resolves or is labelled R1b PM1; PM2; RA1; RA2
INV-11 A published question is never permanently deleted Every question version referenced by a published form or profile version exists R2a QD1
INV-12 New and updated screens are consistent, modern and Material 3 UI-1, UI-3, UI-10 and UI-11 guard checks pass on main; every programme route is in FEAT-023's route matrix S0 UI1

7.5 Contract conformance tests

IDs are stable. The contract texts (contracts for C1–C17; consistency model for the new C18 and C19) are authoritative for wording, and each contract's conformance list maps onto these IDs. A CONF row requires the listed tests, plus every test first required by an earlier release, to pass in full on the release candidate.

C1 Canonical annotation identity, revisions, commands and Study coupling

ID Assertion First release Source Status
C1-T01 A repeated command and a concurrent duplicate submit leave one head, one effective vote and one command result; a correction appends history without increasing the voter count. M0 Research A1 PROPOSAL
C1-T02 Open, dirty, idle, disconnect and draft save never create a vote or alter an effective decision. M0 Research A3 PROPOSAL
C1-T03 Changing a decision preserves old reasons and ordinary saved answers; the same question ID in a different profile or entity context never collides. M0 Research A7 PROPOSAL
C1-T04 A valid Complete-and-Include commits both; an injected failure before commit commits neither; a retry after an unknown commit returns the original result. M0 (engine), R3a (journey) Research A8 PROPOSAL
C1-T05 A shared question and context across stages reuses the reviewer's answer identity, pins submitted versions and is never counted twice. M0 Research A11 PROPOSAL
C1-T06 Two stages or tabs share a claim and leaving one doesn't release it; the first explicit save releases only the annotation claim; a stale expiry can't remove a newer claim. M0 (synthetic), R2a (release on save), R2b Research A13; DC-16 PROPOSAL
C1-T07 Final-slot races, vote corrections that reopen disagreement and unsatisfiable assignments give correct queues and counts; having no available work never completes a stage. M0 (synthetic), R2b, R3c Research A14; DC-16 PROPOSAL
C1-T08 Answer and ScreeningDecision pass the same identity, context, attribution, revision, CAS, idempotency and history contract suite through one logical repository; kind-specific keys and validators still apply. M0 Research A20 PROPOSAL
C1-T09 Owned reason descendants pin exactly the submitted versions; cross-owner edges, cycles, wrong study or profile and stale definition contexts fail before publication; a candidate child never attaches to a reconciled parent. M0 Research A21; DD-26 PROPOSAL
C1-T10 Two drafts based on one shared answer conflict safely; reverting one never changes the other's submitted answer; explicit independent contexts stay separate. M0 Research A22 PROPOSAL
C1-T11 A synthetic quality-judgement kind reuses storage, receipts, history, tree handling and export without screening effects. M0 Research A23 PROPOSAL
C1-T12 A canonical commit racing a bulk-update lock conflicts. M0 C1 PROPOSAL
C1-T13 Legacy readers see correct tallies and membership facts through Study.CanonicalSummary. M0 (skeleton), R2a C1; consistency model PROPOSAL
C1-T14 Command ledger: the same ID and digest return the original result; a different digest returns 409; an indeterminate commit returns "outcome unknown", and a retry resolves it. M0 Consistency model PROPOSAL
C1-T15 No canonical command for study S commits without writing S (architecture test). R2a DC (CR-1); consistency model PROPOSAL
C1-T16 Immutable collections are append-only (an architecture test fails the build on replace, update or delete), content digests verify on read-back, collection names are explicit and mapped, and no canonical collection has a TTL index. R2a VB-10 PROPOSAL
C1-T17 Commands above the E28 ceiling are refused before any write. R2a E28; VB-12 PROPOSAL
C1-T18 A merge is an alias: no immutable record is re-keyed; one reviewer's two sessions resolve to one counted contribution with provenance; a split reverses it. P2 Domain model; V2-02; DC-19 pending-D2-12
C1-T19 Natural-key aggregates get deterministic IDs; client-proposed IDs are validated; a foreign-scope ID is refused before mutation. R2a E27; VB-16; research A5 PROPOSAL

C2 Answer context identity and sharing

ID Assertion First release Source Status
C2-T01 An identical QuestionId under different entities or branches stays separate. R2a SF5; C2 confirmed
C2-T02 Ancestor lineage shows across two forms in the matching context. R2d SF5 confirmed
C2-T03 Conflicting legacy duplicates are surfaced with a conflict marker, and adopt as a Conflicted head. R2d, R6 SF5; VB-13 confirmed
C2-T04 Two profiles stay separate, even with identical wording. R3b DP4 confirmed
C2-T05 Candidate and reconciled heads stay separate. R4a C2 PROPOSAL
C2-T06 Enabling classification changes no existing key. C1 C2; C13 PROPOSAL
C2-T07 Two forms on incompatible versions of one question never flag each other; a v2-only option never appears in a v1 session; Fix shows the in-class current revision. R2d VA-02; D2-02 pending-D2-02
C2-T08 Two heads that differ only in the second entity-path element coexist, and an exact duplicate is refused (scalar key hash, partial unique indexes per kind). R2a VB-05 PROPOSAL

C3 Provenance, exposure and history capture

ID Assertion First release Source Status
C3-T01 A reused answer keeps its original authoring stage. R2b PV1 confirmed
C3-T02 An informed contribution counts for progress but is labelled informed in agreement statistics. R4a, R5c VS2 confirmed
C3-T03 A lost exposure report never turns informed work into independent work. R4a VS2 confirmed
C3-T04 Legacy records never gain fabricated versions. R2a, R6 EX2 confirmed
C3-T05 "Questioned in reconciliation" is an exposure kind that makes later versions informed. R4a NS-06 PROPOSAL
C3-T06 The initial independent submission marker is set once, before any collective outcome was visible to that reviewer. R3a SR-01 PROPOSAL
C3-T07 Collective exposure is recorded at correction time. R3b SR-01 PROPOSAL
C3-T08 Imported screening decisions carry authority Imported and independence unknown. R3a SR-03 PROPOSAL
C3-T09 Exposures carried in the Save or Complete payload, or arriving late keyed by draft etag, bind to the right version; the class is derived on read. R4a DC-20 PROPOSAL

C4 Question, form and profile definitions and versioning

ID Assertion First release Source Status
C4-T01 Adding a question creates a new form version. R2c FV1 confirmed
C4-T02 Sessions under v1 and v2 are both found when publishing v3. R2c FV2 confirmed
C4-T03 Needs updating stays visible and blocks Complete. R2c VU1 confirmed
C4-T04 Copies of one template (question templates; profiles) stay independent after the template changes. R1a, R3b SET1; DP4 confirmed
C4-T05 A question hidden by a condition is never required. R2a UA1 confirmed
C4-T06 Phase 1 is constant work; its time is flat across 1,000, 10,000 and 100,000 sessions. R2c VB-06 PROPOSAL
C4-T07 Compatibility is declared at commit, immutable once pinned, and transitive. R2c VA-01; D2-02 pending-D2-02
C4-T08 Option identity: a rename keeps answers valid; a retirement doesn't. R2c VA-05 PROPOSAL
C4-T09 Composition: ancestors are included and dangling conditions are refused. R2a VA-06; QM-09 PROPOSAL
C4-T10 "In use" is defined, and an edit under a draft-only session returns a stale-definition conflict. R2a VA-13; research A16 PROPOSAL
C4-T11 Added and removed questions have their own treatments. R2c VA-14 PROPOSAL
C4-T12 System questions are versioned data; a deploy changes no published form. R2a VA-09; D2-06 pending-D2-06
C4-T13 Publication writes no session versions and no answer revisions. R2c VA-03; D2-01 pending-D2-01
C4-T14 Only one publication per form is active at a time. R2c VB-06; D2-11 pending-D2-11
C4-T15 A policy revision compare-and-sets the policy generation and rewrites no version or work. R2d FV4 confirmed
C4-T16 Every published canonical form version passes AF2's structural guards, with no AF1 fallback. R2a VB-08 PROPOSAL
C4-T17 A question referenced by a published version is never deleted by any path. R2a QD1 confirmed
C4-T18 Operational settings change with audit and no impact flow. R2a VA-07; D2-05 pending-D2-05
C4-T19 A data-type or multiplicity change is an incompatible version of the same identity. R2c VA-16; D2-03 pending-D2-03
C4-T20 Profile publication applies the chosen treatment to decisions cast under prior versions. R3b Q-26 pending-Q-26

C5 Form session lifecycle, drafts and contribution qualification

ID Assertion First release Source Status
C5-T01 A Save after Complete removes qualification. R2a SL3 confirmed
C5-T02 Autosave alone doesn't. R2a SL1; SL3 confirmed
C5-T03 Complete restores one contribution, not two. R2a SL3; SF2 confirmed
C5-T04 The same session is reached from two stages. R2b SF1 confirmed
C5-T05 An order-only change never removes Complete. R2a C5 PROPOSAL
C5-T06 A warning alone keeps Complete; a reviewer-created incomplete version removes it. R2d SF6 confirmed
C5-T07 A withdrawn session neither counts nor loses its history. R2a C5 PROPOSAL
C5-T08 Draft mechanics FX-DRAFT-01 to 08: lease, take-over, conflict copy, consumption by Save and Complete, late autosave rejected, duplicate write sequence, first-draft race, network loss. R2a DC-07; consistency model PROPOSAL
C5-T09 A session version's previous-version export equals its full pin map. R2a VA-22 PROPOSAL
C5-T10 A late Save is pinned to its declared version; Upgrade keeps pins. R2c VA-10 PROPOSAL
C5-T11 The per-answer state enum is derived consistently. R2d VA-27 PROPOSAL
C5-T12 A draft-only session is created by upsert on the natural key, with a deterministic SessionId. R2a VB-16; consistency model PROPOSAL

C6 Workflow binding, steps and admission

ID Assertion First release Source Status
C6-T01 to T10 FX-ACCESS-01 to 10 (T04, strict mode, first applies in R3c). R3a Access-policy proposal; DP6; DP7 PROPOSAL (T04 pending-Q-01)
C6-T11 to T15 Research A12 to A16: assigned-reviewer completion, shared claims, capacity and final-slot races, independent outcomes and denominators, stale-context conflicts. R3a Research A12–A16 PROPOSAL
C6-T16 FX-PRISMA-03a. R3a PR1 confirmed
C6-T17 PRISMA stays Excluded with completed extraction. R3a PR1 confirmed
C6-T18 The evaluation table gives identical results for selection, reservation, direct access and submit. R3a C6 PROPOSAL
C6-T19 Skip records nothing; AND/OR, terminal and compulsory scopes behave as specified. R3a Amendment A; C6 PROPOSAL
C6-T20 Screening capacity follows the profile rule (eligibility D6). R3a Q-24 pending-Q-24
C6-T21 Admission writes no per-project document per save. R3a DC-05 PROPOSAL
C6-T22 An incomplete save or reopen creates no Include; annotation completion never changes an existing Exclude; Stop and Allow are rechecked under concurrent completion. R3a Research A9 PROPOSAL

C7 Operational projections and claims

ID Assertion First release Source Status
C7-T01 Every eligibility truth-table row gives the same answer from the membership-facts seam as from today's predicates (embedded provider in R0, canonical provider in R2a). R0, R2a AP-01 PROPOSAL
C7-T02 Stage views project their bound form and never sum duplicate stage projections. R2b C7; SF2 confirmed
C7-T03 Typed claims are unique per (study, kind, scope, reviewer) and released when the last page ends. R2b RT-11 PROPOSAL
C7-T04 Two stage tabs reuse one claim; closing either keeps it. R2b RT-16 PROPOSAL
C7-T05 An optional capacity cap is separate from the minimum target. R2b RT-13; D3-17 pending-D3-17
C7-T06 Proportional shares are refused for shared forms until AL1. R2b A-09 assumption-A-09
C7-T07 Allocation is refused on canonical stages until AL1. R2a AP-06; D3-13 pending-D3-13
C7-T08 Target-aware classification has parity with the authoritative calculation. R2b MS-07 PROPOSAL
C7-T09 An RA5 scoped admission admits exactly the requested reviewer. R4a AP-03; D3-13 pending-D3-13
C7-T10 The D8 slot rule reads form-keyed claims. R2b AP §5 PROPOSAL
C7-T11 An orphaned claim can't outlive the backstop horizon. X-CLAIMS RT-24 PROPOSAL
C7-T12 A draft holds the reviewer's place under the D2-07 rule. R2a D2-07 pending-D2-07

C8 Version usage evidence and protected publish boundary

ID Assertion First release Source Status
C8-T01 Usage counts explicit versions; draft-only sessions are counted from pmSessionDraft at the fence. R2c MS-03 PROPOSAL
C8-T02 "Current" is a FEAT-024 read at the fence (Fresh or pinned-Authoritative) with its identity recorded. R2c MS-04; D3-10 pending-D3-10
C8-T03 Missing or stale evidence is never treated as zero. R2c PS2; PS3 confirmed
C8-T04 Affected identities come from authoritative records, never from counts. R2c PS1 (boundary) confirmed
C8-T05 Question-version usage is counted from revisions, form-version usage from session versions. R2c VA-17 PROPOSAL
C8-T06 An N-1 binary reading a project with rows of an unknown family serves its known families and ignores the rest. R2c MS-14 PROPOSAL
C8-T07 A canonical commit on an allowlisted project with statistics on leaves every affected family exact or Stale, never Fresh and wrong. R2a MS §7(a) PROPOSAL
C8-T08 Profile-version usage is available for profile publication. R3b C8 PROPOSAL

C9 Reconciliation task, gold snapshots, assignments and queries

ID Assertion First release Source Status
C9-T01 One task per study × form, reachable through any bound stage. R4a RE4 confirmed
C9-T02 All qualifying candidates take part, including outcome series; non-qualifying sessions never do. R4a SF4/RE3 confirmed
C9-T03 Input drift never retracts gold. R4a GS1; RE4 confirmed
C9-T04 Gold snapshots are immutable, and the current pointer changes only by compare-and-set. R4a GS1 confirmed
C9-T05 Free text prefills only on exact text in the same context, with no normalisation. R4a RE5 confirmed
C9-T06 No gold exists before the reconciler's final submission. R4a RE2 confirmed
C9-T07 The task editor claim is exclusive and works with tracking off. R4a RA1; RT-01 confirmed
C9-T08 Assignment expiry, start and release races each have one outcome. R4a RA2–RA4; E6 confirmed
C9-T09 A requested extra reviewer sees no candidate answers or identities. R4a RA5 confirmed
C9-T10 One query work item per reconciled revision ID, with per-concern outcomes; children resolve before a replacement. R4b QY2; QY3; VA-23 confirmed
C9-T11 QY8 and QY9 closure rules hold. R4b QY8; QY9 confirmed
C9-T12 After a correction, screening decisions re-run profile rules, while annotation gold needs the final submission. R4b RECOVERED (RC10 split) confirmed
C9-T13 Target-1 forms create no task. R4a Q-29 pending-Q-29
C9-T14 Legacy reconciled answers are handled as AC-R4a-12 states. R4a Q-35 pending-Q-35
C9-T15 The second task may revise shared gold, with provenance. R4a D2-09 pending-D2-09
C9-T16 An incompatible publication flags gold for re-reconciliation without retracting it. R4a VA-11 PROPOSAL
C9-T17 Profile adjudication is a separate, versioned aggregate and never writes through a reconciliation session. R4p FEAT-011 (MUST NOT); RX1; V2-18 confirmed
C9-T18 Conversation rules follow Q-10. R4a Q-10 confirmed
C9-T19 A question whose candidates span compatibility classes is held on its own. R4a VA-04; D2-02 pending-D2-02

C10 Capabilities, groups, delegation and disclosure

ID Assertion First release Source Status
C10-T01 Every permission-update endpoint refuses owner-reserved activities. R1b SEC1 confirmed
C10-T02 Anti-escalation holds across the FX-PERM matrix. R1c Q-03a confirmed
C10-T03 Delegation stays inside the owner's envelope and is non-recursive. R1d PM2; Q-03 (approved as recommended, 3 October) confirmed
C10-T04 Revocation applies to canonical commands on the next request and to page reads within the C18-T06 bound. R1b, R2a C10; DC-12 PROPOSAL
C10-T05 The disclosure probe suite passes per channel, including presence and notifications. R2a C10; review AC-24; RT-14 PROPOSAL
C10-T06 The export disclosure contract holds: authorised unmasking only, audited, candidates separate from gold for exporters who aren't reconcilers. R2a C10 PROPOSAL
C10-T07 Every endpoint is in the permission catalogue (coverage test). R1b C10 PROPOSAL
C10-T08 Monitor-capability holders may see personal votes; reviewer-facing warnings never reveal them. R3a RECOVERED (OD5); V2-08 PROPOSAL
C10-T09 Study-issue and PDF-correction capabilities exist and drive recipients. R1c NS-20 PROPOSAL

C11 History, export and manifests

ID Assertion First release Source Status
C11-T01 As-of(T) is the set of records stamped at or before T, offered only for T ≤ now − (transaction lifetime + sweep interval + skew bound); ordering is transaction time, never an observed-at field. R5a DC-13; VA-21; consistency model PROPOSAL
C11-T02 Two exports at one watermark have identical data files for versioned datasets and the same authority. R5a EX1; DC-13 PROPOSAL
C11-T03 The manifest classifies each dataset as versioned, current-only or not observed. R5a DC-13 PROPOSAL
C11-T04 Dates before adoption return "not observed". R5a EX2 confirmed
C11-T05 Erasure events appear in manifests and are the only permitted difference at a watermark. R5a D2-14 pending-D2-14
C11-T06 Exports carry per-cell question version, class and option IDs. R2a VA-17 PROPOSAL
C11-T07 Extraction exports default to collectively Included studies. R5a SR-17 PROPOSAL
C11-T08 FEAT-024 history is never an input to as-of exports or report snapshots. R5a MS-22 PROPOSAL
C11-T09 After a restore, manifests report the history-discontinuity record. R5a DC-17; D2-13 pending-D2-13

C12 PRISMA units, authority and report manifest

ID Assertion First release Source Status
C12-T01 One current outcome per study and profile, with route provenance, the approved authority set and a structured reason with coverage. R3a Amendment H (Q-06a) confirmed
C12-T02 Pool entry is the first release to anyone; shared openings and personal grants are recorded separately, with filter and profile versions kept. R3a Amendment A; D3-13 pending-D3-13
C12-T03 No personal Include, extra completed work, form target or inferred cohort changes a PRISMA count. R3a, C2 C12; PR1 confirmed
C12-T04 Snapshots pass the arithmetic identities. R5b SR-09 PROPOSAL
C12-T05 Snapshots are computed from authoritative records only. R5b MS-11 PROPOSAL
C12-T06 Reported external counts combine as amendment K says, with both parts in the manifest. R5b Q-37 pending-Q-37
C12-T07 The entry-phase rule per search or import holds. P1, R5b V2-04; Q-37 pending-Q-37
C12-T08 Linking a Citation to a Publication never rewrites the Citation. P1, P2 V2-01 PROPOSAL
C12-T09 Retrieval is fullTextStatus only, never a lifecycle state. P1 SR-02; D4-07 pending-D4-07
C12-T10 Reading a Publication exposes no foreign project or citation IDs. P2 V2-03 PROPOSAL
C12-T11 An alias merge counts once in reports. P2 Amendment D; domain model PROPOSAL

C13 Classification, populations and inference

ID Assertion First release Source Status
C13-T01 Each population has a whole-population cohort; every instance belongs to exactly one population. C1 C13 PROPOSAL
C13-T02 Inference is never written back as a reported answer and can be withdrawn. C2 C13 PROPOSAL
C13-T03 Counts show only with full support. C2 C13 PROPOSAL
C13-T04 Implications apply without automatic strictness. C2 C13 PROPOSAL
C13-T05 The first reasoner's scope is conjunction, containment, disjointness and exhaustiveness. C2 Q-18 pending-Q-18

C14 Outcome schemas, measures and observations

ID Assertion First release Source Status
C14-T01 Field roles, types, validators and cardinality are enforced on save. O1 OC1; E12 PROPOSAL
C14-T02 One versioned direction per measure across cohorts, with no override. O1 ODIR1 confirmed
C14-T03 Direction is never derived from numeric type and is not a validator. O1 OC2 confirmed
C14-T04 Legacy defaults are labelled "value or default (unknown)". O2 Q-05 pending-Q-05
C14-T05 New-shape data round-trips through export and import. O1 C14 PROPOSAL
C14-T06 Legacy export returns "unsupported shape" for new-shape data. O1 C14 PROPOSAL

C15 Notification events through the existing notification stack

ID Assertion First release Source Status
C15-T01 If capture fails, the source change rolls back; if the source rolls back, no inbox row remains. Releases adding kinds NS §5.3 (AC-C15-01) PROPOSAL
C15-T02 Replaying an occurrence or resuming a half-applied fan-out creates nothing new; two lifecycle transitions of one source create two items. Releases adding kinds NS §5.3 (AC-C15-02); NS-12 PROPOSAL
C15-T03 Every kind has a category, resolver, label and fixtures (registry test). Releases adding kinds NS §5.3 (AC-C15-03); NS-03 PROPOSAL
C15-T04 Disclosure fixtures pass per kind across inbox, email and digest, and across candidate, reconciler, admin, revoked and blinded recipients; a revoked recipient sees "Related item unavailable" and gets no email. Releases adding kinds NS §5.3 (AC-C15-04) PROPOSAL
C15-T05 With the kind's flag off or the project not admitted, nothing is captured and saved items stay readable. Releases adding kinds NS §5.3 (AC-C15-05) PROPOSAL
C15-T06 An old client with a new server, and a new client with an old server, can both save an opt-out. Releases adding kinds NS §5.3 (AC-C15-06); NS-02 PROPOSAL
C15-T07 The delivery halt pauses dispatch within one worker cycle and resumes without loss or duplicates. Releases adding kinds NS §5.3 (AC-C15-07) PROPOSAL
C15-T08 Fan-out above the cap goes through recorded fan-out; a 10,000-session publication gives one item per affected owner within AC-R2c-06's bounds. R2c NS §5.3 (AC-C15-08) PROPOSAL
C15-T09 A burst of writes for one recipient causes at most one refetch per tab per second. Releases adding kinds NS §5.3 (AC-C15-09) PROPOSAL
C15-T10 Preferences tolerate unknown and missing keys across the version-skew matrix (before #3942 merges, or one deploy before the first new category). X-NOTIF NS-02 PROPOSAL
C15-T11 An unknown kind leaves its ledger row ready rather than suppressed, one deploy before the first new kind. X-NOTIF NS-26 PROPOSAL

C16 Compatibility floor, admission and reader and writer compatibility

ID Assertion First release Source Status
C16-T01 The minimum image round-trips unknown elements through its normal replace path on every extended type. R0, floor steps VB-02; review AC-13 PROPOSAL
C16-T02 Computed fields merge Study.CanonicalSummary, and a mixed-fleet recount matches. R0 DC-02; VB-01 PROPOSAL
C16-T03 Every legacy writer is refused by the ownership guard, and the architecture test fails on an unguarded write. R0 DC-04; DS-10 PROPOSAL
C16-T04 Removing admission doesn't change ownership. R0 A-22 assumption-A-22
C16-T05 The admission service gives the API and the web the same answer. R0 C16 PROPOSAL
C16-T06 The minimum-image rollback rehearsal passes with canonical data present. R0, floor steps C16 PROPOSAL
C16-T07 A legacy writer racing a marker sweep never lands after the marker. R0 DC-04 PROPOSAL
C16-T08 Project admission and the statistics allowlist stay independent. R0 MS-24 PROPOSAL

C17 Information architecture, coexistence, overview and settings DTOs

ID Assertion First release Source Status
C17-T01 New screens import copy-deck constants (guard spec). R2a UX-05; C17 PROPOSAL
C17-T02 Overview and settings DTOs keep gate status, sufficiency and work status separate; a lock is never labelled "Excluded". R3a C17; C6 PROPOSAL
C17-T03 The Dockview layout contract validates panel keys and migrates saved version-2 layouts. R2a C17 PROPOSAL
C17-T04 AF2 extension points exist as merged code with contract tests. R2a C17; delivery operating model (F1c) PROPOSAL
C17-T05 Navigation follows each project's mode, and the workflow-version badge shows it. R2a, GA C17; UX-11 PROPOSAL
C17-T06 The "My work" surface lists actionable items by role. R3c, R4a UX-08; D3-07 pending-D3-07

C18 Concurrency, transactions and idempotency (new)

ID Assertion First release Source Status
C18-T01 Fault injection at every write step of Save, Complete, decision, gold and publication commits leaves no readable partial state; a retry returns the original result. M0 DC §6 (AC-DC-01) PROPOSAL
C18-T02 Zero engine-caused exhausted submissions at 1, 2, 5 and 10 reviewers, same and different study, with the fold worker, claims and a sweep running. M0, then every AC-ALL-26 release DC §6 (AC-DC-02); D1-08 confirmed
C18-T03 The command ledger's duplicate, digest-mismatch and post-retention behaviour hold. M0 DC §6 (AC-DC-03) PROPOSAL
C18-T04 A forced UnknownTransactionCommitResult and a primary failover in a replica-set Testcontainer produce no duplicate versions or notices. M0 DC §6 (AC-DC-04) PROPOSAL
C18-T05 At least 1,000 randomised interleavings of commits against publication phase 1, stage completion and settings changes never violate PS3, LC1 or eligibility D4. R2c, R3a, R3c DC §6 (AC-DC-09); D2-10 pending-D2-10
C18-T06 With two API instances, CAS bases and "current" reads are never stale; revocation applies to canonical commands on the next request and to page reads within 2 s (PROPOSAL). R2a DC §6 (AC-DC-11); DC-12 PROPOSAL
C18-T07 With injected clock skew and a long transaction near the watermark, exports at one watermark are identical and causally closed. R5a DC §6 (AC-DC-12) PROPOSAL
C18-T08 Reconciliation races: published versus displayed answers (Complete carries the base snapshot and input etag); release versus Save; expiry versus start; query target retention. R4a, R4b DC §6 (AC-DC-14); DC-15 PROPOSAL
C18-T09 Canonical repositories never serve deciding reads from the shared RepositoryCache and never use upsert saves (architecture test; #3985 merged first). R2a DC-12; consistency model (C18); D1-02 PROPOSAL
C18-T10 A DuplicateKey on a natural-key first write reloads and takes the compare-and-set path. R2a DC-11 PROPOSAL
C18-T11 Command-budget tests pin the canonical commit shape. M0, R2a DC-11; VB-12 PROPOSAL

C19 Durable effects and events (new)

ID Assertion First release Source Status
C19-T01 A crash between commit and dispatch still delivers the durable intent; a lease takeover resumes; duplicate delivery is a no-op. R2a DC §6 (AC-DC-10); consistency model (C19) PROPOSAL
C19-T02 Outdated flags and task drift are derived on read and bounded to one reviewer's sessions on one study. R2d Consistency model (C19); VB improvement 4 PROPOSAL
C19-T03 Dropping every SignalR and change-stream hint loses no obligation; clients refetch on focus or reconnect. R2a Consistency model (C19) PROPOSAL
C19-T04 Each committed legacy screening change produces exactly one capture entry; overflow becomes a coverage gap. R2a DC §6 (AC-DC-13) PROPOSAL
C19-T05 A publication or sweep operation resumes after a crash with a new lease generation and applies each item exactly once. R2c DC-06; VB-06 PROPOSAL

8. Definition of ready and done, and release tiers

The delivery operating model owns the process (slice briefs, review tiers, WIP limits, the STATUS ledger); this section states what each gate checks.

8.1 Pull requests

Ready (before work starts):

  • The PR lists the criterion IDs it advances, and the release's freeze-gate dossier authorises its slice (D1-04).
  • The contracts it consumes are frozen, or it builds against a published fake.
  • Its UI validation passed its pass bar (§5.4), and its copy comes from the copy deck.
  • Its flag is declared in env-mapping.yaml, default off.
  • Its test plan names a layer and a fixture for each criterion; the fixture files exist or ride in the PR.
  • No behaviour depends on an unanswered question unless it is written as a pending row and stays dark.
  • Excluded specs in the areas it touches are identified for re-enabling (AC-ALL-15).
  • Its slice brief exists, and any hot-file lease it needs is free.

Done (merge):

  • The merge criteria (§2.1) and the M rows of §3 pass on the exact head.
  • Conformance suites for touched contracts are green.
  • The SonarCloud new-code gate passes.
  • Docs, user guide and any ADR are in the same PR.
  • Review has passed on the exact head under the PR's review tier (§8.3), with no unresolved thread and the latest review summary not requesting changes.
  • The traceability file is updated, and the tests carry criterion IDs.

8.2 Releases

Ready (before the build):

  • The freeze gate has passed: ADR, DTOs, fake and conformance suite.
  • Every pending row is re-confirmed from Chris's answer or its behaviour is descoped; every PROPOSAL row is confirmed or rewritten; both are recorded in the acceptance record.
  • Its fixture files, benchmark datasets and seed projects are designed; its UI validations have passed.
  • Its brief names the flags-off spec set, the tracking modes, the supported-flag matrix and the e2e minutes it adds (AC-ALL-14, AC-ALL-17).
  • Its pilot entry rows (§5.2), pilot plan (projects, testers, and a duration that meets PE-06) and telemetry are agreed.
  • The minimum rollback image and the rehearsal plan are recorded; a Bramble window is booked if the release has B rows.
  • Its tier (§8.3) is assigned.

Done (activation for pilots):

  • A release-candidate commit and image SHAs are deployed to staging (or to a pinned preview for T2 and T3 releases that persist no data) and recorded in the acceptance record.
  • Every automated row passes on that commit: CI, the e2e label run, the conformance suites and the Bramble report against main's baseline.
  • The rehearsals and containment checks the tier needs are done.
  • Seeds are deployed additively.
  • A staging acceptance note names who accepted, when, and on which SHA; Chris's walkthrough is done.
  • PE-01 to PE-08 are met with monitor evidence, and user testing meets its pass bars.
  • External joins have go/no-go evidence before any production pilot.
  • The ship-gate verifier's report (AC-ALL-13) and the acceptance record are committed, and Chris gives the go/no-go.

8.3 Release tiers

The tiers merge the review's T1/T2/T3 proposal (review AC-25) with the delivery review's gate weights (DS-11). Status: PROPOSAL, except the tester numbers, which D1-06 approved on 3 October (the panel was named that night, §5.3; no external SyRF users are named yet).

Tier Applies when Activation evidence Rollback Testers e2e in CI Review tier
T1 heavy The release builds the core canonical write path, migrates or adopts data, or changes the production default Every applicable activation criterion AC-ALL-04 (a) and (b): staging image rollback in an agreed promotion-pause window 5 run:e2e-full on the candidate Supervised: /claude-review opus plus a fresh-context verifier, and Chris reads the summary
T2 standard The release builds on the T1 core, or adds UI over existing data Every applicable activation criterion except the staging rehearsal AC-ALL-04 (a) on a pinned preview when it persists data; floor steps still need staging 3 Smoke plus the release's targeted specs Supervised for engine, authorization, blinding, admission and flag code; delegated otherwise
T3 light Derived or read-only outputs, or scaffolding AC-ALL-03, 08, 13, 19 and 21, its own rows and one walkthrough None 3, in one batched walkthrough Smoke Delegated; supervised for export disclosure
Release Tier Rehearsal Testers Benchmarks e2e in CI
S0 T3 None — S0 baseline (AC-S0-03) None
M0 T1 (milestone) Mixed-version harness — M0 go/no-go None
R0 T1 Staging — (no UI) Floor round trip Smoke
R1a, R1b, R1c, R1d T2 None (no canonical data); R1a's N-1 test 3 — Smoke
R2a T1 Staging 5 Write gate; autosave latency Full
R2b T2 Staging for the floor step 3 Write gate Smoke plus targeted
R2c T1 Staging 5 Phase 1; FX-PUB-10K Full
R2d T2 Harness plus pinned preview 3 Write gate Smoke plus targeted
R3a T1 Staging (screening floor step) 5 Write gate; selection Full
R3b, R3c T2 Harness plus pinned preview 3 Write gate (R3b) Smoke plus targeted
R3d T2 None 5 (AC-UX-07) — Smoke plus targeted
R4a T1 Staging 5 Workspace performance; write gate Full
R4p, R4b, R4c T2 Harness plus pinned preview 3 Write gate (R4p); AF2 matrix (R4c) Smoke plus targeted
R5a, R5c, R5b T3 None 3 (walkthrough) Export start; agreement store; report generation Smoke
P1 T2 Staging for the floor step 3 Import at 5,000 and 50,000 records (AC-P1-19) Smoke plus targeted
P2 T1 Staging 5 ASySD at 80,000 citations Full
C1, O1 T2 Staging floor step if they add embedded fields; harness otherwise 3 AF2 matrix (O1) Smoke plus targeted
C2 T3 None 3 — Smoke
O2 T1 Authorised copy — (administrators only) Dry-run None
AL1 T2 Harness 3 Selection Smoke plus targeted
X1 (if D4-09 is approved) T3 None 3 (walkthrough) Export start Smoke
GA T1 — Production pilot evidence (AC-GA-06) — Full
R6 T1 Staging and authorised copy per wave — Parity Full per wave
R7 T1 Restore rehearsal — — None

9. Traceability

9.1 The traceability file

One machine-readable file holds every criterion, starting in this package (traceability.yaml, beside this page) and moving to a permanent docs/features/ location at G0 (PROPOSAL). Format:

decisions:
  - id: SL3
    kind: ledger          # ledger | s111 | recovered | approved-spec
    meta: false
  - id: IP1
    kind: ledger
    meta: true            # exempt from the coverage check
criteria:
  - id: AC-R2a-02
    release: R2a
    gate: activation      # merge | activation
    tier: T1
    source: [SL2, SL3]    # ledger or s111 IDs | RECOVERED:<ref> | RULE | FEAT-011 | Q-26 | A-14 | D2-01 | review:AC-07
    status: confirmed     # confirmed | pending-Q-xx | pending-Dn-nn | assumption-A-xx | PROPOSAL | conditional-X-...
    confirmed_at: null    # freeze-gate record for PROPOSAL rows; answer reference for pending rows
    traces:
      research: [A1]
      qmv2: [FORM-04]
      feat011: []
      feat012: []
      conformance: [C5-T01]
    fixtures: [FX-PRISMA-04a]
    methods: [I, C]
    tests:
      - "dotnet:FormSessionLifecycleTests.SaveAfterComplete_RemovesQualification"
      - "playwright:@AC-R2a-02"
    evidence:
      rc_commit: null
      images: {}
      ci_run: null
      record: "acceptance/R2a.md#ac-r2a-02"
    aliases: []           # reviewer-proposed IDs folded into this row
    retired: false
    superseded_by: null

9.2 Generated views and checks

  1. Decision → criteria. Fails when a non-meta ledger or §1.11 ID has no criterion.
  2. Criterion → tests. Fails at a ship gate when an applicable row has no test, or only skipped tests.
  3. Per-release acceptance record. A generated page listing, for each applicable row, its status, tests, evidence links, the candidate commit and image SHAs, tester notes and the verifier's sign-off; committed at activation.
  4. Pending view. Rows grouped by the question, assumption or join they wait on; it feeds each freeze gate's dossier.
  5. Tag check. A test tag naming an unknown or retired ID fails docs CI.

9.3 Coverage of owner decisions

Every ledger ID and §1.11 ID has at least one criterion, except the meta decisions IP1 and AC1 (AC1 is covered anyway) and DP1, which DP6 and DP7 superseded.

Decision Criteria
SF1 AC-R2b-01, 02, 05, 08; C5-T04; INV-01
SF2 AC-R2a-18, 31; AC-R2b-01, 06, 07; AC-R3a-06; C7-T02
SF3 AC-R2d-01, 07
SF4/RE3 AC-R4a-01, 09, 14; AC-R4c-01, 04; AC-R2b-16; C9-T02
SF5 AC-R2d-01 to 04, 09; C2-T01 to T03
SF6 AC-R2d-05 (AC-R2d-12 pending D2-01); C5-T06
SL1 AC-R2a-01, 08, 28; C5-T02
SL2 AC-R2a-02, 03, 05
SL3 AC-R2a-02, 18, 28; C5-T01, T03
PV1 AC-R2a-26; C3-T01
PV2 AC-R3a-36; AC-R2b-15 (pending D2-04)
GS1 AC-R4a-04, 20; C9-T03, T04; INV-08
VS1 AC-R3a-15; AC-R4a-42
VS2 AC-R4a-19, 42; AC-R5c-02; C3-T02, T03
EW1 AC-R3a-01, 35
FV1 AC-R2a-14; C4-T01
FV2 AC-R2c-01, 02; C4-T02
FV3 AC-R2c-09, 11
FV4 AC-R2d-06; C4-T15
Recovered transitions (requireReanswer, autoUpdate, doNothing) AC-R2c-11; AC-R2c-02 (pending D2-01)
PS1, PS2, PS3 AC-R2c-04, 05, 08; C8-T03, T04
VU1, VU2, VU3 AC-R2c-03, 12; C4-T03
RA1 AC-R4a-05, 22, 36, 37; C9-T07
RA2 AC-R4a-22, 39; C9-T08
RA3 AC-R4a-07, 40
RA4 AC-R4a-29, 39
RA5 AC-R4a-06, 38; C9-T09
EX1 AC-R2a-05; AC-R5a-01, 05
EX2 AC-R5a-01, 03; AC-R5b-05; AC-R6-06; C3-T04
AG1 AC-R5c-04, 05
AG2, AG3 AC-R5c-01
RE1 AC-R4a-16
RE2 AC-R4a-03, 14, 24, 25, 26; C9-T06; INV-07
RE4 AC-R4a-15, 20; C9-T01
RE5 AC-R4a-03, 18; C9-T05
BL1 AC-R3a-15; AC-R4a-08
QY1, QY7 AC-R4b-01
QY2, QY3 AC-R4b-02; C9-T10
QY4 AC-R4b-06, 11; AC-R4a-05
QY5 AC-R4b-07
QY6 AC-R4b-03, 08
QY8, QY9 AC-R4b-04, 10; C9-T11
MG1 AC-R4a-02
NT1 AC-R4a-17
DP1 Superseded by DP6 and DP7 (decision register §2); no criterion
DP2 AC-R3b-11
DP3 AC-R3b-03; AC-R3a-04
DP4 AC-R3b-01, 02, 09; C2-T04
DP5 AC-R3b-04, 10; AC-R4p-02
DP6 AC-R3a-01, 05; INV-03
DP7 AC-R3a-01, 05, 14; AC-R4p-03
PR1 AC-R3a-05; AC-R4p-03; C6-T17; INV-04
RX1 AC-R4p-02, 05
RX2 AC-R3c-03, 06, 09
LC1 AC-R3c-01 to 04, 15
UA1 AC-R2a-04; AC-R4a-44
PM1 AC-R1b-01 to 05; AC-R1c-09; AC-ALL-03; INV-10
PM2 AC-R1d-01 to 04
OC1 AC-O1-01
OC2, ODIR1 AC-O1-03, 06; AC-R4c-02; AC-O2-03; INV-05
TC1 AC-R3d-06; AC-C1-07
MIG1 AC-O2-05; AC-R6-06
IP1 Meta decision; exempt
SET1 AC-R1a-05; AC-R3b-01; AC-R3d-02
SET2 AC-R3d-01; AC-GA-02, 07
OPS1 AC-R2b-02; AC-R3a-06; AC-AL1-01, 02; AC-P1-07
NOTIF (3 October addition) AC-ALL-22, 29; AC-R2c-07
UI1 UI-1 to UI-11; AC-ALL-08; INV-12
AC1 AC-ALL-16; AC-S0-04 (meta)
QD1 AC-R2a-10; AC-R6-07; C4-T17; INV-11
SEC1 AC-R1b-01, 03, 07, 09; C10-T01
Q-10 AC-R4a-21; PI-R4a-02; C9-T18
Q-07 AC-ALL-02; §6; PI-ALL-02
Q-08 AC-M0-04
Q-09 AC-R1c-12
Q-13 UI-11
Q-03a AC-R1c-01, 02, 03
Q-25 AC-ALL-12; AC-R2a-42; PI-ALL-04
Q-31 AC-R2c-04, 08
Q-06a Amendment A: AC-R3a-13, 19; C: AC-P1-02, 04; D: AC-P2-03; G: AC-R6-16; H: AC-R3a-18; I: AC-ALL-04; J: AC-P1-06, AC-R5b-02

9.4 Research acceptance cases A1 to A28

Case Criteria
A1, A3, A7, A11, A20, A21, A22, A23 C1-T01, T02, T03, T05, T08, T09, T10, T11 (AC-M0-01); A22 also AC-R2b-07
A2 AC-R3a-12
A4 AC-R3b-02
A5 AC-R2a-21; AC-ALL-19; C1-T19
A6 AC-R3b-18
A8 C1-T04; AC-R3a-11
A9 C6-T22
A10 AC-R2a-16; AC-ALL-19
A12 to A16 C6-T11 to T15; A13 also C1-T06 (synthetic in AC-M0-01); A14 also C1-T07 (synthetic in AC-M0-01) and AC-R3c-10; A16 also AC-R2a-14
A17 AC-R6-06
A18 AC-R6-03
A19 AC-R0-01, 05; AC-ALL-04
A24 AC-R4a-14; C9-T02
A25 AC-R4p-05
A26 AC-ALL-19; AC-R3a-06
A27 AC-R0-08; AC-M0-03
A28 AC-R7-01, 02

9.5 Approved specifications and the QM v2 tracker

Requirement Criteria
FEAT-011 reserved names (release 1) AC-P1-09
FEAT-011 Citation raw fields and immutability; nullable source type and name AC-P1-01, 10, 17
FEAT-011 per-profile outcomes, no single Study status, structured reasons and authority values AC-R3a-18
FEAT-011 pool membership derivable from filter rules; pool exclusion AC-R3a-19; AC-P2-06r
FEAT-011 enum values and DOI/PMID indexes (release 3) AC-P2-10
FEAT-011 no reconciliation writing screeningOutcomes; Reconcile covers both kinds AC-R4p-01, 04
FEAT-011 34 fields; EXP-05; EXP-06; classification enum names AC-R5b-07, 08; AC-P2-14; AC-C1-06
FEAT-011 MIG-11, MIG-12, MIG-13 (per project under amendment G) AC-R6-16, 18
FEAT-012 §2.1 performance and batching; §6 enrichment; §7 and §8 scenarios, Defer, "not duplicate"; §10 audit retention; §11.2 box 3; §12 exclusions AC-P2-13; AC-P2-11; AC-P2-12; AC-P2-09; AC-P2-07; AC-P2-06r
QM v2 ARCH-03 (scope, owner, derived-from) C2 owner scope (AC-R3b-09); copy provenance (AC-R1a-08)
QM v2 QM-09; QM-11, QM-14 AC-R2a-24; AC-R2c-27
QM v2 FORM-06; FORM-07 AF2 mounting caps (AC-R4a-13, AC-ALL-24); AC-R2a-28, 46
QM v2 RECON-10, RECON-11, RECON-17; SCR-07; FILT-04 AC-R4a-15, 42, 16; AC-R4p-05; AC-R3a-26, 41
QM v2 MIG-01, MIG-09; EXP-01 to EXP-06; PRISMA-07 AC-R6-03, 04; AC-R2a-43, AC-R5a-07, AC-R5c-05, AC-R3b-19, AC-R5b-08, AC-P2-14; AC-R5b-08

10. Acceptance tooling deliverables (lane L17)

Tooling facts verified read-only on main at de3e98c59 (3 October 2026): e2e/playwright.config.ts defines the projects setup, smoke, @full, @perf and @bulk-pdf, all on devices['Desktop Chrome']; e2e/setup/auth.setup.ts defines three users (one of them SyrfAdmin); e2e/package.json has no axe dependency; src/libs/testing/SyRF.Testing.Common/Fixtures/ holds MongoDbReplicaSetTestFixture (mongo:8.0, replica set rs0), ForwardingProxy and MongoDriverFaults (UnknownTransactionCommitResult, TransientTransactionError); FEAT-024's BenchmarkEnvironment.cs gates benchmarks on SYRF_STATS_DATASET with iteration and warm-up variables (defaults 100 and 10); e2e/tests/perf/annotation-form-perf.spec.ts holds AF2's budgets (first interactive 1,500 ms, edit-to-settle p95 16 ms, category switch 250 ms, at most 20 mounted controls and 10 units, an 8 MiB heap plateau); and docs/platform/enhanced-database-seeding.md describes reconciliation that only transfers ownership of the five seed projects, with staging reseeds as an operator procedure.

ID Deliverable Detail Needed by Verifies Engineering item
L17-01 Persona set The §6.2 personas in e2e/setup/auth.setup.ts and e2e/helpers/constants.ts, matching seed investigators R1b (S0) AC-ALL-03, AC-ALL-19 —
L17-02 axe in journeys @axe-core/playwright in e2e/package.json; per-route checks inside journey specs with a committed baseline R1b (S0) AC-ALL-07, AC-UX-09 —
L17-03 Screenshot capture Named-state captures in light at the §3.1 widths, attached to PRs; dark captures on staging per release R1b (S0) UI-4, UI-7, AC-ALL-08 —
L17-04 Firefox and WebKit smoke New Playwright projects beside the Desktop Chrome projects, for reviewer and reconciler journeys R2a AC-R4a-32, AC-R3a-29 —
L17-05 Barrier-injection harness Named interleaving points ("after read", "before commit", "after commit, before dispatch") on MongoDbReplicaSetTestFixture, reusing ForwardingProxy and MongoDriverFaults; fixed seeded schedules M0 (S0) Concurrency rows; C18 E96
L17-06 Mixed-version harness Starts the current image, writes canonical fixture data to a persistent database, starts the recorded minimum image against it, runs legacy flows and a replace round trip (the e2e stack starts from a fresh database today) R0 (S0 skeleton) AC-R0-01, 06, 09; AC-ALL-04 E95
L17-07 Canonical benchmark datasets RV-DS-01 to 05 on FEAT-024's environment-gated generator, plus a canonical-commit arm M0 (baseline in S0) AC-ALL-09, AC-ALL-26, AC-M0-02 E98
L17-08 Cross-language fixture corpus The §7.1 JSON corpus read by xUnit and Vitest; seeded generated corpora diffed across evaluators S0 AC-S0-02; C rows E99
L17-09 Invariant monitor Read-only checker for INV-01 to 12 plus the consistency model's operational checks; nightly per admitted project; typed findings; staging dashboard R2a AC-ALL-21; PE-04r — (checker contract in the consistency model)
L17-10 Traceability file and check §9 format, generated views, docs-CI job S0 AC-ALL-16; AC-S0-04 E94
L17-11 Tracking-mode matrix Playwright project matrix with tracking on and off on one stack R2a AC-ALL-23 —
L17-12 Scenario endpoint A test-only endpoint in the e2etest environment that builds canonical states through canonical commands R2a DT2; E rows —
L17-13 Seed-if-absent job Additive, idempotent seeding for preview and staging S0 (skeleton); each release (seeds) AC-S0-06 E97
L17-14 Telemetry dashboard Staging dashboard of pilot-exit signals R2a pilot entry AC-ALL-20 —
L17-15 Excluded-spec check A script comparing changed paths with both web exclusion lists S0 AC-ALL-15 —
L17-16 Two-API journeys Variants on the e2e/tests/materialized-statistics-two-api.spec.ts pattern for claims, drafts and fences R2a C18-T06; AC-R2a-06 —
L17-17 Network-throttling helper Offline and latency injection for journeys R2a AC-R2a-46; AC-UX-06 —
L17-18 Native-drag guard spec A guard spec failing on native HTML5 drag events in programme code, beside CDK drag helpers for journeys R1a (S0) AC-R1a-12; AC-R4a-32 —

Resolution record

Categories: Corrected (the plan was wrong or inconsistent; fixed), Adopted (improvement accepted, labelled PROPOSAL where it is a design choice), Question (needs Chris; Batch D ID cited), Follow-up (recorded for the backlog, outside this scope), Noted (no change).

Counts. The previous version had 227 IDs. This revision keeps 222 of them (111 unchanged in substance, with copy edits at most; 111 rewritten in place, as the change logs and §2 and §3 show), retires 5 (replaced by r rows, §4.37), and adds 346 new criteria (345 plus AC-C2-06, added after verifier V3), 23 pilot entry rows and 33 conformance rows, plus 210 contract conformance tests in 197 rows (§7.5) and 12 invariant checks (§7.4). Every ledger and §1.11 ID is covered (§9.3). A last pass aligned the rows with the companion documents as merged into this package (consistency model, domain model, methodology coverage, programme integration, UX strategy and versioning model); it added 22 criteria and the X1 conformance row, listed below under their findings.

Review AC (acceptance criteria and testability)

Finding Category Where Note
review AC-01 Corrected §1.2; CONF rows; §7.5; §9.3 Source and Status on every row; a conformance row per release naming test IDs; coverage table. New rows for PV1 (AC-R2a-26), VS1 (AC-R3a-15, AC-R4a-42), RE1 (AC-R4a-16), NT1 (AC-R4a-17), TC1 (AC-R3d-06, AC-C1-07), QY5 (AC-R4b-07), RE4 (AC-R4a-15), Q-10 (AC-R4a-21), Q-13 (UI-11) and amendment H (AC-R3a-18).
review AC-02 Corrected §1.2; pending rows Pending rows are concrete recommended answers that can't pass until answered: AC-R1c-08, AC-R1d-05, AC-R2d-08, AC-R3a-07, 21, AC-R3b-05, AC-R3c-07, 08, AC-R4a-12, 28, 30, 31, AC-R5c-03, 06. Q-32 (AC-R4p-06), E1 (AC-R2c-02, 20) and E11 (AC-R3b-10) now have rows.
review AC-03 Adopted §1.3; §2.1; §2.2; §8.2 Merge criteria versus activation criteria on a recorded candidate commit and image SHAs; acceptance record. PROPOSAL.
review AC-04 Corrected §7.1; §7.2 Fixtures as versioned data with per-release parts and authoring dates.
review AC-05 Corrected AC-R3a-14; AC-R3c-08 to 10; AC-R3d-06, 07; §7.3 Access-policy, lifecycle and setup fixtures are rows and fixture families.
review AC-06 Corrected AC-R3a-11 to 41 Every proposed R3a row, plus other reviews' additions.
review AC-07 Corrected AC-R2a-20 to 31 Proposed IDs kept; AC-R2a-20 now states the consistency model's ordering (HLC plus per-aggregate versions) instead of a per-project commit sequence.
review AC-08 Corrected AC-R4a-14 to 22 (and 23 to 49) Negative cases and the missing decisions.
review AC-09 Adopted §10 (L17-01 to 17); §1.2 Dated tooling with "needed by" releases; rows whose tooling doesn't exist can't pass.
review AC-10 Adopted §6.2; AC-ALL-03 Persona set; SyrfAdmin only for application-admin paths.
review AC-11 Adopted; Question (D3-14) AC-S0-06; §6.1; §6.4 Seed-if-absent job; data tiers.
review AC-12 Adopted §1.4; L17-05; C18 Barrier harness and the interleaving rule.
review AC-13 Corrected AC-R0-01, 06, 07 Subject is the recorded minimum image; capture, never ignore-only.
review AC-14 Corrected; Question (D2-08) AC-R2a-06, 28 Lease model with a conflict copy; durability and draft-changes indicator.
review AC-15 Corrected AC-ALL-15; AC-R1a-07 Both exclusion lists checked (verified: 45 angular.json entries; vitest.config.ts excludes question-management/**).
review AC-16 Corrected PE-01, 02, 04r, 06, 07; AC-ALL-20, 21; §5.2 Measurable exit, minimum exposure, severity, entry rows.
review AC-17 Corrected; Question (D3-01) UI-3; UI-9 Statically checkable UI-3; route matrix registration.
review AC-18 Corrected §6.1; AC-ALL-09; AC-M0-02; AC-R2a-19; AC-R2c-06, 13; AC-R4a-13 Named datasets on FEAT-024's harness, iteration counts, same-host baselines, AF2 gate reuse.
review AC-19 Corrected; Question (D3-15) AC-ALL-07; UI-6; AC-R4a-32; L17-04 FEAT-023 accessibility matrix; one width list; CDK drag; Firefox and WebKit smoke.
review AC-20 Corrected AC-P1-09, 10, 17; AC-P2-10, 14; AC-R3a-18, 19; AC-R5b-08; AC-C1-06; §9.5 FEAT-011 MUSTs as rows.
review AC-21 Corrected; Question (D4-21) AC-P2-01r, 06r, 11 to 14 Parity made computable; exclusion list completed.
review AC-22 Adopted AC-ALL-17; §8.2 Fail-closed surfaces; supported-flag matrix in each brief.
review AC-23 Adopted AC-ALL-18; AC-ALL-04 Containment row; rehearsal scoped by tier.
review AC-24 Adopted AC-ALL-19; C10-T05 Disclosure-matrix probe suite (matrix produced at F1b).
review AC-25 Adopted; Question (D3-02, D1-06); D1-06 answered 3 October §8.3; UI-8 Tiers merged with DS-11's gate weights.
review AC-26 Adopted §1.4; AC-ALL-14; §8.2 Persisted-state rows carry I or C; briefs list spec sets and e2e minutes.
review AC-27 Adopted UI-10 Literal-colour guard spec.
review AC-28 Adopted UI-2; UI-5; UI-8 Pattern inventory, handoff link, "materially changed" defined.
review AC-29 Adopted §5.3; §5.4 Tasks for every user-facing release, with rubrics and pass bars.
review AC-30 Adopted §7.4 INV-01 to 12.
review AC-31 Adopted §7.1; E99 Corpus location, format and cross-language harness.
review AC-32 Adopted AC-ALL-22; C15-T01 to T11 Notifications-on criteria.
review AC-33 Question (D1-07); answered 3 October AC-GA-06 Production opt-in pilot per family before GA.
review AC-34 Corrected AC-R5a-02r; AC-R2a-09, 10, 32; AC-R3a-07; AC-R1b-08; AC-R2c-10; AC-O2-01r; AC-R3d-01 Each precision defect fixed.
review AC-35 Corrected AC-M0-01; §9.4 Research cases mapped.
review AC §3.1–§3.5, §5 Adopted §2; §4; §6; §8; §9 Proposed rows, DoR/DoD, tiers, traceability format, test strategy, data plan and coverage gaps adopted; data tiers renamed DT1 to DT5 to avoid clashing with release tiers.

Reviewer IDs folded into other rows (aliases)

Proposed by Proposed ID(s) Final ID(s)
VB; RT; DC VB AC-R0-06; RT AC-R0-06; AC-DC-05 AC-R0-09
VB AC-R0-07 AC-R0-06
VB; DC; MS VB AC-R2a-20; AC-DC-03; MS-05 AC-R2a-07; C18-T03
VB AC-R2a-21, 22, 23, 24 C2-T08; C1-T16; AC-R2a-44; AC-R2a-19 and C18-T11
VB AC-R2a-25, 26, 27 AC-R2a-38 and AC-R2c-16; AC-R2a-39 and AC-R2d-14; AC-R2a-17
VB AC-R2c-10, 11, 12, 13 AC-R2c-13; AC-R2c-06; AC-R2c-05; AC-R2c-14
VB AC-R2d-09; AC-R6-05, 07, 08 AC-R2d-10; AC-R6-05, 10, 11
VA AC-R2a-20, 21, 22, 23, 24 AC-R2c-21; AC-R2c-22; AC-R2a-24; C5-T09; AC-R2a-14
VA AC-R2c-10, 11, 12, 13, 14 AC-R2c-02 and C4-T13; AC-R2c-18; AC-R2c-20; AC-R2d-06; AC-R2a-23
VA AC-R2d-09, 10; AC-R4a-14, 15 AC-R2d-11; AC-R2d-13; AC-R4a-33 and C9-T19; AC-R4a-34
VA AC-R5a-07, AC-R5c-05; AC-R6-07 AC-R5a-07 and AC-R2a-43; AC-R5c-08; AC-R6-12
RT AC-R2a-20, 21, 22, 23 AC-R2a-35, 36, 37, 06
RT AC-R2b-03, 07, 08 AC-R2b-03, 09, 10
RT AC-R3a-11, 12; AC-R3c-08; AC-R2c-10 AC-R3a-24, 25; AC-R3c-14; AC-R2c-19
RT AC-R4a-14, 15, 16, 17; AC-R4b-07 AC-R4a-36, 37, 38, 39; AC-R4b-09
RT AC-ALL-13 (tracking-mode parity) AC-ALL-23 (AC-ALL-13 was already in use)
NS AC-R3c-08; AC-R4a-14, 15; AC-R4b-07 AC-R3c-11, 12; AC-R4a-40, 41 and AC-R4a-21; AC-R4b-08
NS AC-R5c-05; AC-R6-07; AC-ALL-14; PE-06 AC-R5c-07; AC-R6-11, 13; AC-ALL-04 (d); PE-08
SR AC-R5b-08; AC-P1-09 AC-R5b-09; AC-P1-11 and AC-R5b-18 (both IDs were already used by review AC proposals)
UX AC-ALL-14 onwards (efficiency) AC-ALL-24, 25
DC AC-DC-01, 02, 04 C18-T01 and AC-M0-06; AC-ALL-26 and C18-T02; C18-T04 and AC-M0-06
DC AC-DC-06, 07, 08, 09, 10 AC-R2b-11; AC-R0-11 and C16-T07; AC-R2a-06 and C5-T08; AC-R3c-13 and C18-T05; C19-T01
DC AC-DC-11, 12, 13, 14, 15 C18-T06; AC-R5a-08 and C18-T07; AC-R2a-17 and C19-T04; AC-R4a-27 and C18-T08; AC-R2a-29
NS AC-C15-01 to 09 C15-T01 to T09 (AC-ALL-22)
AP AC-AL1-04 to 08 Same IDs

Verifier V2

Finding Category Where Note
V2-01 Adopted AC-P1-12; C12-T08 Amendment N criterion. PROPOSAL.
V2-02 Adopted; Question (D2-12) AC-P2-05; C1-T18 Merge as an alias.
V2-03 Adopted AC-P2-15; FX-PRISMA-08a Publication privacy; the cross-project fixture part moves to P2.
V2-04 Corrected; Question (Q-37, D4-11) AC-R5b-07, 12, 17 Entry-phase rule, per-box rules, box 1.
V2-05 Corrected §1.2; Status column; UI-8; AC-R4a-05, 28 Recommendations marked pending; A-24 cited; Q-36 caveat.
V2-06 Corrected AC-R2a-20 to 25, 31; AC-R3a-11 to 13, 17, 19, 23; AC-R4a-14, 16, 17, 19, 20, 44; AC-R5b-10, 12 to 14; AC-P2-10, 16 MVP-boundary items have rows.
V2-07 Corrected §7.2; AC-R3c-15; AC-R4p-07 Fixtures 3 and 4 split by release.
V2-08 Corrected AC-R3a-09; C10-T08; integrated plan; contracts C10 Monitor holders may see votes; reviewer-facing warnings never do. Plan and C10 wording aligned.
V2-09 Corrected; Question (D3-14) AC-S0-06; §6.2; §6.3 A seed mechanism exists; the versioned-forms seed is split; testers use their own accounts.
V2-10 Adopted AC-R6-18 MIG-13 per project.
V2-12 Corrected AC-P2-01r, 04, 06r Scenario 3 sets Merged; reversal restores Citation links; pilot-data parity; full exclusion list.
V2-13 Corrected AC-P2-07; AC-P1-15; AC-R5b-16
V2-15 Adopted AC-M0-03 Missing Study writers added to the inventory.
V2-16 Adopted; Question (D2-15) AC-R1a-08, 10 Copy provenance with an N-1 test; system-scoped templates.
V2-18 Adopted AC-R4p-01; AC-R2a-06 Versioned adjudication; where the losing tab's draft lives.
V2-21 Corrected AC-ALL-04, 11; AC-R0-01 Scoped by tier; subject corrected.
V2-22 Corrected; Question (D3-01) UI-3; UI-6; UI-8 925 px added; A-24 cited; the UI1 reading put to Chris.
V2-23 Corrected §5.1; AC-R4a-03, 07; AC-O2-04; AC-R6-05; AC-R3b-04; AC-R4c-03; AC-C1-03, 04; AC-R4a-13 Methods added; bundled rows split; non-observable rows rewritten.
V2-24 Corrected AC-R3d-06, 07; AC-R3c-08; AC-R4b-07, 11; AC-R4p-05; AC-R5c-05; AC-C1-07, 08, 10; AC-M0-04, 05, 07; AC-R6-08, 13; AC-R1c-09; AC-R2d-09
V2-25 Corrected §5.3 Tasks for R2d, R3c, R4b, R4p, R5c, P2 and C2.

Data consistency (DC)

Finding Category Where Note
DC-01 Corrected AC-R2a-20; AC-M0-07 No per-project document in interactive commits.
DC-02 Corrected AC-R0-09; AC-R2a-12 Study.CanonicalSummary behavioural floor.
DC-03 Corrected AC-R2a-07 Command ledger.
DC-04 Corrected AC-R0-02, 08, 11 Markers, guard, race test.
DC-05 Adopted AC-R3a-27
DC-06 Corrected AC-R2c-05, 06
DC-07 Corrected AC-R2a-06; C5-T08
DC-08 Adopted AC-R3a-31; AC-R2c-15
DC-09 Adopted; Question (D2-10) AC-R3c-13
DC-10 Adopted C19-T01 to T05
DC-11 Adopted AC-ALL-10; C18-T10, T11
DC-12 Adopted AC-ALL-03; C18-T06, T09
DC-13 Corrected AC-R2a-20; AC-R5a-02r, 04, 08; C11-T01
DC-14 Corrected AC-R2a-17; AC-R3a-10
DC-15 Adopted AC-R4a-22, 27, 39; AC-R4b-10; C18-T08
DC-16 Corrected; Question (D1-08); answered 3 October AC-M0-01, 02, 06; AC-ALL-26; AC-R2a-19 A13 and A14 run on synthetic claims in M0, as the consistency model asks, and again as journeys in R2a and R2b (C1-T06, T07).
DC-17 Adopted; Question (D2-13) AC-R2a-29; AC-R5a-11; AC-R7-02
DC-18 Corrected AC-R0-01
DC-19 Corrected AC-P2-05, 07
DC-20 Adopted AC-R4a-19; C3-T09
DC-21 Adopted AC-R0-12

Versioning implementation (VB) and versioning model (VA)

Finding Category Where Note
VB-01 Corrected AC-R0-09
VB-02 Corrected AC-R0-01, 06
VB-03 Adopted AC-R2c-13
VB-04 Corrected AC-R2a-07
VB-05 Adopted C2-T08
VB-06 Corrected; Question (D2-10, D2-11) AC-R2c-05, 06, 14, 15
VB-07 Corrected AC-R0-02, 08; AC-R6-05
VB-08 Adopted AC-R2a-38; AC-R2c-16
VB-09 Adopted AC-R2a-39; AC-R2d-14
VB-10 Adopted C1-T16
VB-11 Adopted AC-R2a-10, 44; §7.4
VB-12 Corrected AC-R2a-19, 22; §6.1
VB-13 Adopted AC-R6-10, 11
VB-14 Corrected AC-R2a-17
VB-15 Adopted AC-R2d-10; AC-R3c-16
VB-16 Adopted AC-R2a-21; C5-T12
VB-17 Adopted AC-M0-04
VB-18 Adopted AC-R0-14
VB-19 Adopted; Question (D2-14) AC-R2a-30
VB-20 Adopted; Question (D2-13) AC-R2a-29
VA-01 Question (D2-02) AC-R2c-21; C4-T07
VA-02 Question (D2-02) AC-R2d-11; C2-T07
VA-03 Question (D2-01) AC-R2c-02; AC-R2d-12; C4-T13 The FV4 row (AC-R2d-06) stays confirmed.
VA-04 Question (D2-02) AC-R4a-33; C9-T19
VA-05 Adopted AC-R2c-22; C4-T08
VA-06 Adopted AC-R2a-24; C4-T09
VA-07 Question (D2-05) AC-R2a-14, 33
VA-08 Question (D2-04, D2-05) AC-R2b-15
VA-09 Question (D2-06) AC-R2a-23; C4-T12
VA-10 Adopted AC-R2c-20; C5-T10
VA-11 Adopted; Question (D2-09) AC-R4a-34, 43; C9-T16
VA-12 Corrected; Question (D2-08) AC-R2a-06
VA-13 Adopted AC-R2a-14; C4-T10
VA-14 Adopted AC-R2c-18; C4-T11
VA-15 Corrected AC-R2a-10, 32
VA-16 Question (D2-03) AC-R2c-26; C4-T19
VA-17 Adopted AC-R2a-43; AC-R5a-07; AC-R5c-08; C8-T05
VA-18 Adopted AC-R6-12
VA-19 Question (D2-05) AC-R3b-05
VA-20 Adopted AC-R3a-32
VA-21 Adopted C11-T01
VA-22 Adopted C5-T09; AC-R2a-26
VA-23 Adopted AC-R4b-02; C9-T10
VA-25 Adopted AC-C1-08
VA-27 Adopted AC-R2d-13; C5-T11

Active reviewer tracking (RT) and notifications (NS)

Finding Category Where Note
RT-01 Corrected AC-R4a-36, 37; C9-T07; §4.33 X-RECLAIM replaces X-TRACK as R4a's route.
RT-02 Corrected; Question (D3-16) AC-ALL-12; AC-R2b-14; AC-T-09
RT-03 Corrected AC-R2b-14; AC-T-09
RT-04 Adopted AC-ALL-01, 23; L17-11
RT-05 Adopted AC-R2a-35, 36
RT-06 Corrected AC-R2a-12; AC-R0-09
RT-07 Corrected AC-R0-09; AC-T-05
RT-08 Corrected AC-R0-02; AC-M0-03
RT-09 Question (D2-07) AC-R2a-37
RT-10 Adopted AC-R2a-06
RT-11 Adopted AC-R2b-12; C7-T03
RT-12 Question (D3-18) AC-R2b-10
RT-13 Question (D3-17, D3-13) AC-R2b-16; AC-R4a-38
RT-14 Question (D3-20) AC-T-08; AC-ALL-19
RT-15 Adopted AC-R2a-36
RT-16 Corrected AC-R2b-03
RT-18 Adopted AC-R3c-14
RT-19 Adopted AC-R2c-19
RT-20 Adopted AC-R1c-10
RT-21 Adopted; Question (D2-14) AC-R2a-30
RT-23 Adopted; Question (Q-24) AC-R3a-24
RT-24 Adopted AC-T-06; C7-T11
RT-26 Adopted AC-R4a-19 Exposure travels in REST payloads, never hub calls.
RT AC-T-01 to 08 Adopted §4.35 IDs kept; AC-T-09 added for the D3-16 route.
NS-01 Adopted AC-R2c-07; AC-R4a-40 Recorded fan-out; scheduler markers.
NS-02 Adopted C15-T06, T10
NS-03 Adopted AC-ALL-22; C15-T03
NS-04 Question (D3-21) AC-ALL-29; PI-ALL-05
NS-05 Adopted; Question (D1-09); answered 3 October AC-R2a-40; AC-R4a-21; PI-R4a-02
NS-06 Adopted AC-R4a-35; AC-R5c-07; C3-T05
NS-07 Question (D3-07) AC-R3c-11; AC-R4a-47
NS-08 Adopted AC-M0-03; AC-R0-02; AC-P1-03, 13
NS-09 Corrected AC-R1c-04 Conditional on X-NOTIF.
NS-10 Noted AC-ALL-08 The stack's screens fall under UI1 like any updated screen; timing is D3-01.
NS-11 Adopted AC-ALL-22
NS-12 Adopted C15-T02
NS-14 Question (Q-20) AC-R2d-08
NS-15 Adopted AC-R2c-07
NS-18 Adopted AC-R2a-40
NS-20 Adopted AC-R1c-11; C10-T09
NS-21 Adopted; Question (D2-14) AC-R2a-30
NS-24 Adopted AC-R4b-12
NS-26 Adopted C15-T11; AC-ALL-04 (d)
NS AC-C15-01 to 09 Adopted C15-T01 to T09; AC-ALL-22
NS §5.3 release criteria and user-testing tasks Adopted AC-R1c-04; AC-R2c-07; AC-R2d-08; AC-R3c-11, 12; AC-R4a-21, 40, 41; AC-R4b-08; AC-R5c-07; AC-R6-11, 13; AC-ALL-04 (d); PE-08; §5.3

Materialised statistics (MS) and allocation (AP)

Finding Category Where Note
MS-01 Adopted AC-R2c-08; §4.33 X-STATS-b1 to b7 and X-STATS-a.
MS-03 Adopted AC-R2c-01, 25; C8-T01
MS-04 Question (D3-10) AC-R2c-04; C8-T02
MS-05 Adopted AC-R2a-07
MS-06 Adopted AC-M0-05
MS-07 Adopted AC-R2b-13; AC-R3a-06
MS-08 Question (D3-10) AC-R3a-34; AC-R3b-12
MS-10 Question (D3-10) AC-R2c-08, 17; PI-R2a-05
MS-11 Adopted AC-P1-07; AC-R5b-19
MS-12 Adopted AC-R2a-20; AC-S0-03
MS-14 Adopted C8-T06
MS-16 Adopted AC-ALL-04 ©
MS-17 Adopted AC-R6-04
MS-19 Adopted AC-R3a-27
MS-20 Question (D3-11) AC-R5c-09
MS-22 Adopted C11-T08; AC-R5b-19
MS-24 Adopted AC-R0-13
MS §7 (a) to (g) Adopted (a) C8-T07; (b) AC-R2c-24; © AC-R2b-13; (d) C8-T06; (e) AC-ALL-26, AC-S0-03; (f) AC-R2c-25; (g) AC-ALL-04 ©
AP-01 Corrected AC-R0-10; C7-T01; AC-R2a-12
AP-02 Question (D3-13) AC-R3a-09; AC-AL1-05
AP-03 Question (D3-13) AC-R4a-38; C7-T09
AP-04 Corrected AC-R3c-05
AP-05 Adopted AC-R3a-10; AC-R3c-17
AP-06 Question (D3-13) AC-R2a-41; AC-AL1-06
AP-08, AP-09 Question (D3-09) AC-R3a-33
AP-10 Adopted AC-AL1-07
AP-12 Question (D3-13) AC-R3c-19
AP-13 Adopted AC-R6-14
AP-14 Adopted AC-R2b-13
AP-15 Adopted AC-AL1-09
AP-16 Adopted AC-AL1-04 to 08
AP-17 Adopted AC-R3a-26
AP-19 Adopted AC-R3c-17
AP-23 Adopted AC-AL1-10

Domain-driven design (DD)

Only the DD findings that need a criterion are listed; the domain model resolves the rest.

Finding Category Where Note
DD-04 Adopted AC-R0-16 PM capture capability is an R0 item (E59).
DD-16 Adopted AC-M0-02 Project-document contention arm.
DD-22 Adopted AC-M0-08 Fitness tests (E58).
DD-26 Adopted C1-T09 A candidate child never attaches to a reconciled parent.

Methodology (SR), UX, past-year planning (PH) and delivery (DS)

Finding Category Where Note
SR-01 Adopted; Question (D4-12) AC-R3a-38; AC-R3b-17; AC-R5c-06, 10; C3-T06, T07
SR-02 Question (D4-07) AC-P1-11; AC-R5b-18; C12-T09
SR-03 Adopted AC-R3a-30; C3-T08
SR-04 Question (D4-05) AC-P1-14; AC-R3b-15
SR-05 Question (D4-06) AC-R1a-09, 11
SR-06 Adopted; Question (D4-10) AC-O1-10, 11
SR-07 Question (D4-08) AC-R5b-15
SR-08 Question (D4-09) AC-X1-01 to 03
SR-09 Adopted AC-R5b-09, 25; FX-PRISMA-08b
SR-10 Question (D4-13) AC-R3b-13
SR-11 Question (D4-04) AC-R3c-18; AC-R5c-11
SR-12 Question (D4-03) AC-R4a-49
SR-13 Question (D4-01) AC-R3b-14
SR-14 Question (D4-11) AC-R5b-12
SR-15 Corrected; Question (D4-07) AC-R5b-18; C12-T09 Resolved by amendment M.
SR-16 Adopted AC-R2c-28; AC-X1-03 The recovered autoUpdate choice is kept, with guards.
SR-17 Adopted AC-R5a-10; C11-T07
SR-18 Adopted AC-R5c-12 RE1 is not reopened.
SR-19 Adopted AC-P2-17
SR-20 Adopted AC-R5b-23
SR-21 Adopted AC-R3d-09
SR-22 Question (D4-21) AC-P2-01r SR-22's tolerance (sensitivity and specificity within 0.5 percentage points) is recorded in the row for D4-21 to decide.
SR-23 Question (D4-02) AC-R4p-08
SR-24 Adopted AC-P1-18
SR-25 Adopted AC-R3b-20
SR improvements 1 to 10 Adopted (7 Noted) 1 AC-R5b-22; 2 AC-R5b-21; 3 AC-R5c-11; 4 AC-R4p-09; 5 AC-O1-12; 6 AC-P2-17; 8 AC-X1-03; 9 AC-R3d-09, AC-R1a-09; 10 AC-R5b-24 Improvement 7 (reuse the pair view for report linkage) is a design note with no criterion of its own.
UX-01 Adopted §2.3; §5.3; §6.3 Baseline study and realistic-content seed.
UX-02 Adopted AC-ALL-24, 25; AC-R3a-28; AC-UX-03, 04
UX-04 Adopted AC-R2a-46
UX-05 Question (D3-03) UI-11; C17-T01
UX-06 Adopted AC-ALL-07; L17-02
UX-07 Question (D3-04) UI-2; UI-5
UX-08 Question (D3-07) AC-R3c-11; AC-R4a-47; C17-T06
UX-09 Adopted AC-ALL-27; AC-GA-04
UX-10 Adopted §5.3 (R2c pass bar per category)
UX-11 Question (D3-06) AC-GA-03, 09; C17-T05
UX-12 Question (D3-01) UI-3; UI-4; UI-7 Dark evidence from staging, where themeToggle is on (verified).
UX-13 Question (D3-02) UI-8
UX-14 Adopted AC-R4a-42, 45
UX-15 Corrected; Question (D3-05) UI-6; AC-ALL-07; AC-R3a-29 Widths aligned with break-points.ts (verified).
UX-16 Adopted UI-2
UX-17 Adopted AC-UX-06
UX-19 Adopted AC-R3d-08; AC-UX-07
UX-20 Adopted AC-ALL-28
UX-21 Question (D3-08) AC-ALL-25
UX AC-UX-01 to 09 Adopted §2.3; UI-6; UI-7 PROPOSAL thresholds; the UX strategy owns the protocol, and the rows now use its wording (a 60-second offline interval, latency at 200 and 1,000 questions, per-metric release lists, the screenshot matrix at the UI-6 widths).
PH-01 Corrected; Question (D1-08); answered 3 October AC-ALL-26; AC-R2a-19; AC-M0-02
PH-02 Question (D3-12) AC-P1-16
PH-03 Question (D2-07) AC-R2a-37
PH-05 Adopted AC-R3a-37 Every existing per-stage setting has a stated home.
PH-07 Adopted FX-APPLIC FEAT-020's specification and fixtures seed the applicability corpus.
PH-09 Adopted AC-P1-19 Import scale with Citation capture on.
PH-10 Question (D4-14) §4.36 Lane floors stated; criteria follow if approved.
PH-13 Adopted; Question (D3-15) AC-R1a-12; AC-R4a-32
PH-17 Question (D4-17) AC-R2d-15
PH-22 Question (D4-20) AC-R2a-45
PH-23 Adopted; Follow-up AC-R3a-26; AC-R3b-16; AC-R6-17 (D4-16) FEAT-007's "80% fewer multi-project workarounds" is a post-GA outcome measure, left to the UX research plan as a follow-up.
PH-25 Adopted AC-ALL-19 Blinded export columns are in the disclosure probes.
PH-27 Question (D2-15) AC-R1a-10
PH-29 Adopted AC-R0-15 Reuses ServiceVersionFloor and ADR-019's tripwire.
PH-30 Adopted AC-R4a-40
PH-32 Corrected AC-R4a-13; AC-ALL-09
DS-04 Adopted AC-R2a-42; §4.34
DS-07 Adopted AC-S0-07; §8.1
DS-08 Adopted §4.1; AC-M0-05
DS-09 Adopted AC-S0-01
DS-10 Corrected AC-R0-08
DS-11 Adopted §8.3; AC-ALL-04
DS-12 Adopted AC-ALL-09
DS-13 Adopted AC-ALL-13; §8.3
DS-16 Question (D1-06); answered 3 October §5.3; PI-ALL-02 Standing tester panel and batched sessions.