Skip to content

ATS-SUB-SUB-012Protect impartial review through identity and conflict controls: Capability Test Specification

Markdown

ATS-SUB-SUB-012

Protect impartial review through identity and conflict controls: Capability Test Specification

Markdown
  • DocumentProposed

KindAcceptance test setProduct areaSubmissionsModuleSubmissions, Intake, Review and OutcomesRevision2

Read atservices-submissions 64236c19services-platform ad3f6a65react-console baf6dae3

Coverage

  • Rule gap: FND-SUB-SUB-076
  • Transition gap: FND-SUB-SUB-076
  • Validation gap: FND-SUB-SUB-076
  • Permission gap: FND-SUB-SUB-076
  • Edge gap: FND-SUB-SUB-076
  • Failure gap: FND-SUB-SUB-076
  • Boundary covered
  • Concurrency gap: FND-SUB-SUB-076
  • Invariant covered
  • Interaction covered

Test Scenarios

13 scenarios proving CAP-SUB-SUB-012; 7 bound to an existing test.

01 Blind projection distinguishes reviewer and staff audiencespermissionapinegativetest
Proves
BR-CAP-SUB-SUB-012-01
Preconditions
Identifying questions and files belong to a single-blind stage.
Steps
[ { "do": "Read queue and assignment as reviewer and the application as staff.", "provenance": "test", "source": "services-submissions:modules/review/tests/integration/services/views/reviewer-views.integration.spec.js#the assignment withholds the applicant, the participants, the identifying fields, the staff field and the file’s name" } ]
Expected
Reviewer output omits identity-marked material while staff output retains staff-visible content.
Data
Use the setup supplied by the referenced executable suite.
Bound to
Source
services-submissions:modules/review/tests/integration/services/views/reviewer-views.integration.spec.js#the assignment withholds the applicant, the participants, the identifying fields, the staff field and the file’s name
02 Workflow facts obey blind identity projectioninvariantapitest
Proves
BR-CAP-SUB-SUB-012-02
Preconditions
A double-blind stage raises a configured message.
Steps
[ { "do": "Open the stage and inspect reviewer-stage and staff facts.", "provenance": "test", "source": "services-submissions:modules/review/tests/integration/services/workflow/host-callbacks.integration.spec.js#withholds the identifying title and the applicant from a blind stage’s facts" } ]
Expected
Blind facts suppress identifying title and applicant data; staff facts retain their authorized values.
Data
Use the setup supplied by the referenced executable suite.
Bound to
Source
services-submissions:modules/review/tests/integration/services/workflow/host-callbacks.integration.spec.js#withholds the identifying title and the applicant from a blind stage’s facts
03 Conflict declaration atomically removes live worktransitionapinegativetest
Proves
BR-CAP-SUB-SUB-012-04
Preconditions
A fixed panel has a spare reviewer.
Steps
[ { "do": "Declare through the reviewer screen, repeat and attempt outsider declaration.", "provenance": "test", "source": "services-submissions:modules/review/tests/integration/services/views/reviewer-views.integration.spec.js#declared by an assignee recuses their assignment" } ]
Expected
The first recuses and refills, the repeat fails and the outsider sees no application.
Data
Use the setup supplied by the referenced executable suite.
Bound to
Source
services-submissions:modules/review/tests/integration/services/views/reviewer-views.integration.spec.js#declared by an assignee recuses their assignment
04 Staff conflict handling checks actor and subjectpermissionapinegativetest
Proves
BR-CAP-SUB-SUB-012-05
Preconditions
A live reviewer cannot self-recuse under stage policy.
Steps
[ { "do": "Declare as coordinator, reader, without a reviewer and with an oversized reason.", "provenance": "test", "source": "services-submissions:modules/review/tests/integration/services/conflicts/staff-conflicts.integration.spec.js#recuses a reviewer’s live assignment even where the stage forbids self-recusal, replaces them from the pool, and logs both" } ]
Expected
Coordinator declaration recuses and replaces; invalid callers or inputs fail.
Data
Use the setup supplied by the referenced executable suite.
Bound to
Source
services-submissions:modules/review/tests/integration/services/conflicts/staff-conflicts.integration.spec.js#recuses a reviewer’s live assignment even where the stage forbids self-recusal, replaces them from the pool, and logs both
05 Clearance does not restore recused assignmentstransitionapinegativetest
Proves
BR-CAP-SUB-SUB-012-06
Preconditions
An active conflict has already removed review work.
Steps
[ { "do": "Clear as coordinator and administrator, then repeat resolution.", "provenance": "test", "source": "services-submissions:modules/review/tests/integration/services/conflicts/staff-conflicts.integration.spec.js#clears an active declaration with the reason: who and when kept, the log written, and the reviewer can be assigned by hand again" } ]
Expected
Only the administrator clears it once; old review work stays recused.
Data
Use the setup supplied by the referenced executable suite.
Bound to
Source
services-submissions:modules/review/tests/integration/services/conflicts/staff-conflicts.integration.spec.js#clears an active declaration with the reason: who and when kept, the log written, and the reviewer can be assigned by hand again
06 An active conflict applies across later staffinginvariantapinegativetest
Proves
BR-CAP-SUB-SUB-012-07
Preconditions
The reviewer has an unresolved declaration.
Steps
[ { "do": "Open another run and attempt manual assignment.", "provenance": "test", "source": "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" } ]
Expected
Pool exclusion persists and manual assignment is rejected.
Data
Use the setup supplied by the referenced executable suite.
Bound to
Source
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
07 Contribution identity creates a detected conflictinteractionapitest
Proves
BR-CAP-SUB-SUB-012-08
Preconditions
A contact already reviews the application.
Steps
[ { "do": "Name that contact as a referee.", "provenance": "test", "source": "services-submissions:modules/review/tests/integration/services/requirements/contributions.integration.spec.js#recuses her assignment on the open run, the conflict recorded as detected_contributor" } ]
Expected
The request matches the contact, recuses the review and retains the detected-conflict record.
Data
Use the setup supplied by the referenced executable suite.
Bound to
Source
services-submissions:modules/review/tests/integration/services/requirements/contributions.integration.spec.js#recuses her assignment on the open run, the conflict recorded as detected_contributor
08 Stage entry preserves exclusions and timed follow-upinteractionapiproposed
Proves
BR-CAP-SUB-SUB-009-01 BR-CAP-SUB-SUB-011-12 BR-CAP-SUB-SUB-012-07 BR-CAP-SUB-SUB-013-01 BR-CAP-SUB-SUB-016-07 BR-CAP-SUB-SUB-018-01
Preconditions
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
09 A reviewer departure refills the panel without reviving workinteractionapiproposed
Proves
BR-CAP-SUB-SUB-009-09 BR-CAP-SUB-SUB-010-05 BR-CAP-SUB-SUB-012-04
Preconditions
A fixed panel has a drafted response and an eligible replacement.
Steps
[ { "do": "Decline or recuse one assignment, inspect its response, then inspect replacement staffing and completion.", "provenance": "proposed", "source": [ "rhythm-v2-docs:specs/submissions/submissions/design/workflows/WF-SUB-SUB-008-keep-a-panel-filled-when-reviewers-leave-or-conflicts-arise.md", "services-submissions:modules/review/tests/integration/services/assignments/assignment-actions.integration.spec.js#declines with the configured reason and the note, and asks the next pool member in its place", "services-submissions:modules/review/tests/integration/services/assignments/assignment-actions.integration.spec.js#moves the assignee’s assignment to accepted, with the instant", "services-submissions:modules/review/tests/integration/services/views/reviewer-views.integration.spec.js#declared by an assignee recuses their assignment" ] } ]
Expected
Departed draft work remains voided, replacement work is separate and completion uses the remaining live panel.
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-008-keep-a-panel-filled-when-reviewers-leave-or-conflicts-arise.md,services-submissions:modules/review/tests/integration/services/assignments/assignment-actions.integration.spec.js#declines with the configured reason and the note, and asks the next pool member in its place,services-submissions:modules/review/tests/integration/services/assignments/assignment-actions.integration.spec.js#moves the assignee’s assignment to accepted, with the instant,services-submissions:modules/review/tests/integration/services/views/reviewer-views.integration.spec.js#declared by an assignee recuses their assignment
10 A contributor cannot retain a reviewer seatinteractionapiproposed
Proves
BR-CAP-SUB-SUB-016-02 BR-CAP-SUB-SUB-016-07 BR-CAP-SUB-SUB-012-08
Preconditions
A named prospective contributor already has a live reviewer assignment on the application.
Steps
[ { "do": "Create the contribution request, inspect reviewer exclusion and answer the contribution.", "provenance": "proposed", "source": [ "rhythm-v2-docs:specs/submissions/submissions/design/workflows/WF-SUB-SUB-019-name-contributors-and-collect-their-contributions.md", "services-submissions:modules/intake/tests/integration/services/contributions/requests.integration.spec.js#leaves unmatched an address two contacts share: the engine never guesses", "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/requirements/contributions.integration.spec.js#recuses her assignment on the open run, the conflict recorded as detected_contributor" ] } ]
Expected
The reviewer departure is retained and the contribution participates only in its configured requirement 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-019-name-contributors-and-collect-their-contributions.md,services-submissions:modules/intake/tests/integration/services/contributions/requests.integration.spec.js#leaves unmatched an address two contacts share: the engine never guesses,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/requirements/contributions.integration.spec.js#recuses her assignment on the open run, the conflict recorded as detected_contributor
11 Blind downloads follow projected attachment visibilityinteractionapinegativeproposed
Proves
BR-CAP-SUB-SUB-007-05 BR-CAP-SUB-SUB-012-01
Preconditions
An application has one identifying and one non-identifying reviewer-visible file.
Steps
[ { "do": "Record scan verdicts and request downloads as staff, the assigned blind reviewer and an outsider.", "provenance": "proposed", "source": [ "rhythm-v2-docs:specs/submissions/submissions/design/workflows/WF-SUB-SUB-021-attach-a-file-record-its-scan-and-hand-out-a-download.md", "services-submissions:modules/intake/tests/integration/services/submissions/submission-views.integration.spec.js#mints a link to a file the applicant may see, under the name they gave it, and logs the download", "services-submissions:modules/review/tests/integration/services/views/reviewer-views.integration.spec.js#the assignment withholds the applicant, the participants, the identifying fields, the staff field and the file’s name" ] } ]
Expected
The permitted reviewer download uses its anonymous filename, while concealed or rejected material supplies no link.
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-021-attach-a-file-record-its-scan-and-hand-out-a-download.md,services-submissions:modules/intake/tests/integration/services/submissions/submission-views.integration.spec.js#mints a link to a file the applicant may see, under the name they gave it, and logs the download,services-submissions:modules/review/tests/integration/services/views/reviewer-views.integration.spec.js#the assignment withholds the applicant, the participants, the identifying fields, the staff field and the file’s name
12 Conflict commands retain the oversight role boundaryinteractionapinegativeproposed
Proves
BR-CAP-SUB-SUB-012-05 BR-CAP-SUB-SUB-017-06
Preconditions
The stated comparison uses isolated applications and explicit actor grants.
Steps
[ { "do": "Declare a conflict as coordinator, inspect it as reader and attempt its resolution without administrator authority.", "provenance": "proposed", "source": [ "services-submissions:modules/review/tests/integration/services/conflicts/staff-conflicts.integration.spec.js#recuses a reviewer’s live assignment even where the stage forbids self-recusal, replaces them from the pool, and logs both", "services-submissions:modules/review/tests/e2e/staff-board.e2e.spec.js#refuses the board, the workload and the progress to a staff reviewer and to a person with only the application (403)" ] } ]
Expected
The declaration is visible but the attempted resolution changes neither declaration nor assignment history.
Data
Create isolated records for the stated before-and-after comparison.
Source
services-submissions:modules/review/tests/integration/services/conflicts/staff-conflicts.integration.spec.js#recuses a reviewer’s live assignment even where the stage forbids self-recusal, replaces them from the pool, and logs both,services-submissions:modules/review/tests/e2e/staff-board.e2e.spec.js#refuses the board, the workload and the progress to a staff reviewer and to a person with only the application (403)
13 An overlong staff conflict reason changes no assignmentboundaryapinegativeproposed
Proves
BR-CAP-SUB-SUB-012-05
Preconditions
A coordinator can declare a conflict for a live reviewer.
Steps
[ { "do": "Send a reason of five hundred and one characters and inspect the declaration and assignment.", "provenance": "proposed", "source": "services-submissions:modules/review/tests/e2e/staff-board.e2e.spec.js#refuses a body that names no reviewer, an unknown field and a reason past 500 characters (400)" } ]
Expected
The request is refused without a declaration or recusal.
Data
Create isolated records for the stated before-and-after comparison.
Source
services-submissions:modules/review/tests/e2e/staff-board.e2e.spec.js#refuses a body that names no reviewer, an unknown field and a reason past 500 characters (400)

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.