Concurrent required reviews establish one result has 1 specified check.
Database guards reject duplicate lifecycle records has 1 specified check.
All-assigned completion excludes departed live work has 1 specified check.
A minimum count handles both completion and shortfall has 1 specified check.
Any-one completion uses the first recommendation has 1 specified check.
Abstention prevents unanimous approval has 1 specified check.
A certain majority finishes without unnecessary waiting has 1 specified check.
Advancement shares the completion transaction has 4 specified checks.
Administrator closure preserves override attribution has 1 specified check.
Requirement waiver retains its missing evidence has 1 specified check.
An ended run cannot accept another final response has 1 specified check.
Stage entry preserves exclusions and timed follow-up has 2 specified checks.
The structured rule map names the obligation behind each check. Category presence does not establish full transition, permission or invariant coverage; those matrices remain explicit review findings.
[
{
"do": "Submit both concurrently and force their writes to interleave.",
"provenance": "test",
"source": "services-submissions:modules/review/tests/integration/services/stage-runs/completion-concurrency.integration.spec.js#records both responses, completes the run once, and records one decision"
}
]
Expected
Both responses persist with one completion event and one decision.
Data
Use the setup supplied by the referenced executable suite.
[
{
"do": "Submit the remaining two and compare a panel with no remaining reviewers.",
"provenance": "test",
"source": "services-submissions:modules/review/tests/unit/services/completion/completion-rule.spec.ts#is met when nobody is pending, with the counts as its basis"
}
]
Expected
The two-person result completes while the empty panel remains short.
Data
Use the setup supplied by the referenced executable suite.
[
{
"do": "Submit two, then compare a run made insufficient by revocation.",
"provenance": "test",
"source": "services-submissions:modules/review/tests/unit/services/completion/completion-rule.spec.ts#is met at the minimum, whoever is still pending"
}
]
Expected
Two responses complete the first run; insufficient capacity flags the second and retained departed work still counts.
Data
Use the setup supplied by the referenced executable suite.
Three people are assigned under any-one completion.
Steps
[
{
"do": "Submit one rejecting response.",
"provenance": "test",
"source": "services-submissions:modules/review/tests/unit/services/completion/completion-rule.spec.ts#is met by the first response, rejecting when it rejects"
}
]
Expected
The stage completes with a non-approving basis.
Data
Use the setup supplied by the referenced executable suite.
[
{
"do": "Submit an abstention before the other responses.",
"provenance": "test",
"source": "services-submissions:modules/review/tests/unit/services/completion/completion-rule.spec.ts#is met, not approving, at the first rejection, others still pending"
}
]
Expected
Non-approval completes the stage despite pending work.
Data
Use the setup supplied by the referenced executable suite.
One panel has three deciders and another a final even split.
Steps
[
{
"do": "Submit two approvals in the first and finish the split panel.",
"provenance": "test",
"source": "services-submissions:modules/review/tests/unit/services/completion/completion-rule.spec.ts#is met, approving, when approvals are more than half of those expected, others pending"
}
]
Expected
The first approves immediately and the split does not approve.
Data
Use the setup supplied by the referenced executable suite.
[
{
"do": "Complete the first with an approving basis.",
"provenance": "test",
"source": "services-submissions:modules/review/tests/integration/services/stage-runs/approval-not-approved.integration.spec.js#advances to the next stage on an approving result, whichever choice was made"
}
]
Expected
Outstanding first-stage work expires and the next run opens atomically.
Data
Use the setup supplied by the referenced executable suite.
A counting stage is still open with one of two responses supplied.
Steps
[
{
"do": "Try early closure without a reason, close with an administrator explanation and repeat closure.",
"provenance": "test",
"source": "react-console:acceptance/submissions/playwright/journeys/review/SUB-ACC-0299.spec.ts#SUB-ACC-0299"
}
]
Expected
The missing reason fails; closure retains the administrator and actual counts, and the repeat is refused.
Data
Use the setup supplied by the referenced executable suite.
A contribution requirement stage still lacks responses.
Steps
[
{
"do": "Waive the requirement with administrator authority and an explanation.",
"provenance": "test",
"source": "services-submissions:modules/review/tests/integration/services/requirements/contributions.integration.spec.js#completes the wait with the counts as they stand, the key still short, who and why"
}
]
Expected
Completion preserves actual counts, unmet requirements and waiver attribution.
Data
Use the setup supplied by the referenced executable suite.
A published process has a fixed panel, an active conflict, a deadline and an entry action.
Steps
[
{
"do": "Open its review, inspect seats, frozen policies, timers and action history; repeat with a waiting contribution stage.",
"provenance": "proposed",
"source": [
"rhythm-v2-docs:specs/submissions/submissions/design/workflows/WF-SUB-SUB-007-open-a-stage-run-and-seat-its-panel.md",
"services-submissions:modules/review/tests/integration/services/stage-runs/open-stage-run.integration.spec.js#opens the run with the stage’s rule, policy and blind mode copied, and names it on the submission, now in review",
"services-submissions:modules/review/tests/integration/services/stage-runs/open-stage-run.integration.spec.js#takes the next run_number of that stage for the submission",
"services-submissions:modules/review/tests/integration/services/conflicts/staff-conflicts.integration.spec.js#declares for a pool member who holds no assignment: the declaration alone, no recusal, and a hand assignment is refused",
"services-submissions:modules/review/tests/integration/services/workflow/raise-sites.integration.spec.js#schedules the reminder two business days on, the service target three, and the deadline at the run’s due_at",
"services-submissions:modules/intake/tests/integration/services/contributions/submit-contribution.concurrency.integration.spec.js#completes the stage once, by exactly one of the three, and opens the approval once",
"services-submissions:modules/review/tests/integration/services/workflow/raise-sites.integration.spec.js#performs the inline entry action and queues the durable one, in order, in one batch"
]
}
]
Expected
Review entry excludes the conflicted person and retains its timing and action records; contribution entry waits or advances according to the recorded count.
Data
Use isolated process and application records, with only the stated policies and rights enabled.
Source
rhythm-v2-docs:specs/submissions/submissions/design/workflows/WF-SUB-SUB-007-open-a-stage-run-and-seat-its-panel.md,services-submissions:modules/review/tests/integration/services/stage-runs/open-stage-run.integration.spec.js#opens the run with the stage’s rule, policy and blind mode copied, and names it on the submission, now in review,services-submissions:modules/review/tests/integration/services/stage-runs/open-stage-run.integration.spec.js#takes the next run_number of that stage for the submission,services-submissions:modules/review/tests/integration/services/conflicts/staff-conflicts.integration.spec.js#declares for a pool member who holds no assignment: the declaration alone, no recusal, and a hand assignment is refused,services-submissions:modules/review/tests/integration/services/workflow/raise-sites.integration.spec.js#schedules the reminder two business days on, the service target three, and the deadline at the run’s due_at,services-submissions:modules/intake/tests/integration/services/contributions/submit-contribution.concurrency.integration.spec.js#completes the stage once, by exactly one of the three, and opens the approval once,services-submissions:modules/review/tests/integration/services/workflow/raise-sites.integration.spec.js#performs the inline entry action and queues the durable one, in order, in one batch
12The final assessment commits with its stage resultinteractionapinegativeproposed
Two assessments are required and one is already submitted.
Steps
[
{
"do": "Submit the remaining assessment, inspect response and run history, then repeat the submission.",
"provenance": "proposed",
"source": [
"rhythm-v2-docs:specs/submissions/submissions/design/workflows/WF-SUB-SUB-009-save-submit-or-amend-an-assessment.md",
"services-submissions:modules/review/tests/integration/services/responses/response-actions.integration.spec.js#stores the response scored by the rubric, completes the assignment, and says whether it completed the stage",
"services-submissions:modules/review/tests/integration/services/stage-runs/approval-not-approved.integration.spec.js#advances to the next stage on an approving result, whichever choice was made"
]
}
]
Expected
The accepted response and stage result appear together; the repeat adds neither another assessment nor another completion.
Data
Use isolated process and application records, with only the stated policies and rights enabled.
Source
rhythm-v2-docs:specs/submissions/submissions/design/workflows/WF-SUB-SUB-009-save-submit-or-amend-an-assessment.md,services-submissions:modules/review/tests/integration/services/responses/response-actions.integration.spec.js#stores the response scored by the rubric, completes the assignment, and says whether it completed the stage,services-submissions:modules/review/tests/integration/services/stage-runs/approval-not-approved.integration.spec.js#advances to the next stage on an approving result, whichever choice was made
13Stage completion creates one attributable handoffinteractionapiproposed
A final review stage selects a registered owner outcome.
Steps
[
{
"do": "Complete the required assessments and inspect the result and queued handoff in the committed state.",
"provenance": "proposed",
"source": [
"rhythm-v2-docs:specs/submissions/submissions/design/workflows/WF-SUB-SUB-010-complete-a-stage-exactly-once-and-advance-or-decide.md",
"services-submissions:modules/review/tests/integration/services/stage-runs/approval-not-approved.integration.spec.js#advances to the next stage on an approving result, whichever choice was made",
"services-submissions:modules/review/tests/e2e/staff-reads.e2e.spec.js#logs the reason and the note in the decision’s event",
"services-submissions:modules/outcomes/tests/integration/services/decisions/decision-recording.integration.spec.js#queues the decision once for the subject’s owner, at its change-event handler"
]
}
]
Expected
One current outcome and its delivery pointer accompany the completed run.
Data
Use isolated process and application records, with only the stated policies and rights enabled.
Source
rhythm-v2-docs:specs/submissions/submissions/design/workflows/WF-SUB-SUB-010-complete-a-stage-exactly-once-and-advance-or-decide.md,services-submissions:modules/review/tests/integration/services/stage-runs/approval-not-approved.integration.spec.js#advances to the next stage on an approving result, whichever choice was made,services-submissions:modules/review/tests/e2e/staff-reads.e2e.spec.js#logs the reason and the note in the decision’s event,services-submissions:modules/outcomes/tests/integration/services/decisions/decision-recording.integration.spec.js#queues the decision once for the subject’s owner, at its change-event handler
A counting stage is below its minimum and a contribution wait has a declared deadline outcome.
Steps
[
{
"do": "Fire due timers for both applications, then inspect completion basis and outcome history.",
"provenance": "proposed",
"source": [
"rhythm-v2-docs:specs/submissions/submissions/design/workflows/WF-SUB-SUB-018-fire-stage-deadlines-escalations-and-service-targets.md",
"services-submissions:modules/review/tests/integration/services/workflow/stage-timers.integration.spec.js#auto_complete (decision D1(a), SUBM-M2): a run short of the minimum number of answers is held, the timer blocked and the run flagged, nothing decided",
"services-submissions:modules/review/tests/integration/services/stage-runs/approval-not-approved.integration.spec.js#advances to the next stage on an approving result, whichever choice was made",
"services-submissions:modules/intake/tests/integration/services/contributions/submit-contribution.concurrency.integration.spec.js#completes the stage once, by exactly one of the three, and opens the approval once"
]
}
]
Expected
The counting stage remains open with intervention evidence; only the configured contribution deadline path records its declared outcome.
Data
Use isolated process and application records, with only the stated policies and rights enabled.
Source
rhythm-v2-docs:specs/submissions/submissions/design/workflows/WF-SUB-SUB-018-fire-stage-deadlines-escalations-and-service-targets.md,services-submissions:modules/review/tests/integration/services/workflow/stage-timers.integration.spec.js#auto_complete (decision D1(a), SUBM-M2): a run short of the minimum number of answers is held, the timer blocked and the run flagged, nothing decided,services-submissions:modules/review/tests/integration/services/stage-runs/approval-not-approved.integration.spec.js#advances to the next stage on an approving result, whichever choice was made,services-submissions:modules/intake/tests/integration/services/contributions/submit-contribution.concurrency.integration.spec.js#completes the stage once, by exactly one of the three, and opens the approval once
15Clarification restart prevents completion of cancelled reviewinteractionapinegativeproposed
The stated comparison uses isolated applications and explicit actor grants.
Steps
[
{
"do": "Answer a clarification under restart policy, then try to complete the asking run.",
"provenance": "proposed",
"source": [
"services-submissions:modules/intake/tests/e2e/seam.e2e.spec.js#cancels the run that asked and opens the approval stage again as run 2",
"services-submissions:modules/review/tests/integration/services/stage-runs/open-stage-run.integration.spec.js#takes the next run_number of that stage for the submission"
]
}
]
Expected
The old run remains cancelled and only the fresh run can establish the next review result.
Data
Create isolated records for the stated before-and-after comparison.
Source
services-submissions:modules/intake/tests/e2e/seam.e2e.spec.js#cancels the run that asked and opens the approval stage again as run 2,services-submissions:modules/review/tests/integration/services/stage-runs/open-stage-run.integration.spec.js#takes the next run_number of that stage for the submission
16An ended run cannot accept another final responsevalidationapinegativetest
[
{
"do": "Submit the pending response and inspect retained responses.",
"provenance": "test",
"source": "services-submissions:modules/review/tests/integration/services/responses/response-actions.integration.spec.js#is refused as StaleObject after another response completed the stage, and records nothing"
}
]
Expected
The refusal adds no late response when that run disallows late work.
Data
Create isolated records for the stated before-and-after comparison.