---
id: ATS-CMT-MTG-004
scope: CAP-CMT-MTG-004
product_area: committees
module: meetings
revision: 1
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-CMT-MTG-004-01
    title: Insertion respects the selected sibling and parent
    level: api
    proves:
      - BR-CAP-CMT-MTG-004-01
    preconditions: An editable agenda includes a consent section.
    steps: Append items and place items before and after siblings; request both placements at once.
    expected: Valid placements preserve the surrounding order; the ambiguous request is refused.
    negative: true
    data_needs: 'An isolated workspace with editable meetings, nested agenda items and attachment fixtures.'
    bound_to:
      - >-
        services-committees:modules/meetings/tests/integration/services/meetings.integration.spec.ts#places
        an item before another without renumbering the rest’s keys
      - >-
        react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0226.spec.ts#CMT-ACC-0226
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/integration/services/meetings.integration.spec.ts#places
      an item before another without renumbering the rest’s keys
  - id: ATS-CMT-MTG-004-02
    title: Concurrent additions retain distinct ordered positions
    level: api
    proves:
      - BR-CAP-CMT-MTG-004-02
    preconditions: An editable meeting has an agenda.
    steps: Submit ten item additions concurrently.
    expected: 'All ten items remain, with unique ordering keys and sibling numbers one through ten.'
    negative: false
    data_needs: 'An isolated workspace with editable meetings, nested agenda items and attachment fixtures.'
    bound_to:
      - >-
        services-committees:modules/meetings/tests/integration/services/meetings.integration.spec.ts#keeps
        all ten, each with its own key
      - >-
        services-committees:modules/meetings/tests/integration/services/meetings.integration.spec.ts#numbers
        them 1 to 10 in key order
      - >-
        services-committees:modules/meetings/tests/unit/services/order-key.spec.ts#keeps order under
        a hundred insertions between the same two neighbours
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/integration/services/meetings.integration.spec.ts#keeps
      all ten, each with its own key
  - id: ATS-CMT-MTG-004-03
    title: Whole-agenda replacement validates completeness and hierarchy
    level: api
    proves:
      - BR-CAP-CMT-MTG-004-03
    preconditions: An editable agenda contains seven items including a nested item.
    steps: 'Omit an item, place a child before its parent, then submit a complete valid order.'
    expected: >-
      Invalid orders leave the agenda unchanged; the valid order updates ordering and parent
      assignments.
    negative: true
    data_needs: 'An isolated workspace with editable meetings, nested agenda items and attachment fixtures.'
    bound_to:
      - >-
        react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0227.spec.ts#CMT-ACC-0227
    provenance: test
    source: >-
      react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0227.spec.ts#CMT-ACC-0227
  - id: ATS-CMT-MTG-004-04
    title: Deletion preserves records that depend on an item
    level: api
    proves:
      - BR-CAP-CMT-MTG-004-04
    preconditions: >-
      Agenda fixtures include an item with notes and decisions, a parent with children, and an item
      with a material only.
    steps: Attempt to delete each item.
    expected: >-
      Dependencies prevent deletion and are named; the material-only item is removed while its
      material remains attached to the meeting.
    negative: true
    data_needs: 'An isolated workspace with editable meetings, nested agenda items and attachment fixtures.'
    bound_to:
      - >-
        services-committees:modules/meetings/tests/unit/services/agenda-item-delete.spec.ts#names
        every holder found, in one sentence
      - >-
        services-committees:modules/meetings/tests/unit/services/agenda-item-delete.spec.ts#carries
        the code in_use
      - >-
        react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0231.spec.ts#CMT-ACC-0231
      - >-
        react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0227.spec.ts#CMT-ACC-0227
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/unit/services/agenda-item-delete.spec.ts#names
      every holder found, in one sentence
  - id: ATS-CMT-MTG-004-05
    title: Deferral creates one later copy and protects the original
    level: api
    proves:
      - BR-CAP-CMT-MTG-004-05
    preconditions: The committee has November and December meetings with editable agendas.
    steps: >-
      Defer a November item to December, retry its deferral or edit, and attempt targets that are
      the source, earlier or another committee’s meeting.
    expected: >-
      Only the valid initial deferral succeeds; December receives one planned copy and the original
      retains its deferred state.
    negative: true
    data_needs: 'An isolated workspace with editable meetings, nested agenda items and attachment fixtures.'
    bound_to:
      - >-
        react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0228.spec.ts#CMT-ACC-0228
    provenance: test
    source: >-
      react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0228.spec.ts#CMT-ACC-0228
  - id: ATS-CMT-MTG-004-06
    title: Publication refuses repeated or ended-meeting requests
    level: unit
    proves:
      - BR-CAP-CMT-MTG-004-06
    preconditions: >-
      The lifecycle rule receives a scheduled draft agenda, an already published agenda and a
      cancelled meeting.
    steps: Evaluate agenda publication for each.
    expected: Only the scheduled draft agenda is publishable.
    negative: true
    data_needs: 'An isolated workspace with editable meetings, nested agenda items and attachment fixtures.'
    bound_to:
      - >-
        services-committees:modules/meetings/tests/unit/services/meeting-lifecycle.spec.ts#publishes
        a draft agenda of a meeting that has not started
      - >-
        services-committees:modules/meetings/tests/unit/services/meeting-lifecycle.spec.ts#does not
        publish an agenda twice
      - >-
        services-committees:modules/meetings/tests/unit/services/meeting-lifecycle.spec.ts#does not
        publish the agenda of a cancelled meeting
      - >-
        react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0229.spec.ts#CMT-ACC-0229
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/unit/services/meeting-lifecycle.spec.ts#publishes a
      draft agenda of a meeting that has not started
  - id: ATS-CMT-MTG-004-07
    title: Proceedings and closure prevent agenda changes
    level: api
    proves:
      - BR-CAP-CMT-MTG-004-07
    preconditions: A scheduled meeting has a published agenda.
    steps: Call it to order and attempt an addition; close it and attempt another agenda edit.
    expected: The agenda is final and both writes are rejected.
    negative: true
    data_needs: 'An isolated workspace with editable meetings, nested agenda items and attachment fixtures.'
    bound_to:
      - >-
        services-committees:modules/meetings/tests/unit/services/meeting-lifecycle.spec.ts#makes the
        agenda final at the call to order
      - >-
        services-committees:modules/meetings/tests/integration/services/minutes.integration.spec.ts#refuses
        an agenda change after the close
      - >-
        services-committees:modules/meetings/tests/unit/services/meeting-lifecycle.spec.ts#freezes a
        final agenda
      - >-
        react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0229.spec.ts#CMT-ACC-0229
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/unit/services/meeting-lifecycle.spec.ts#makes the
      agenda final at the call to order
  - id: ATS-CMT-MTG-004-08
    title: Confidential reading depends on meeting role and vote
    level: unit
    proves:
      - BR-CAP-CMT-MTG-004-08
    preconditions: 'Viewers include a voting participant, liaison and non-voting guest.'
    steps: Evaluate confidential item access for each.
    expected: The voting participant and liaison receive access; the guest does not.
    negative: true
    data_needs: 'An isolated workspace with editable meetings, nested agenda items and attachment fixtures.'
    bound_to:
      - >-
        services-committees:modules/meetings/tests/unit/services/snapshot-and-participation.spec.ts#shows
        confidential items to voting participants and liaisons
      - >-
        services-committees:modules/meetings/tests/unit/services/snapshot-and-participation.spec.ts#hides
        confidential items from a non-voting guest
    provenance: test
    source: >-
      services-committees:modules/meetings/tests/unit/services/snapshot-and-participation.spec.ts#shows
      confidential items to voting participants and liaisons
  - id: ATS-CMT-MTG-004-09
    title: Optional item durations enforce their boundaries
    level: api
    proves:
      - BR-CAP-CMT-MTG-004-09
    preconditions: A meeting has an editable agenda.
    steps: >-
      Create items with zero and 1,441 minutes, then create at 1,440 and update to one minute; clear
      the duration.
    expected: 'Invalid durations fail, both inclusive limits succeed, and clearing leaves no duration.'
    negative: true
    data_needs: 'An isolated workspace with editable meetings, nested agenda items and attachment fixtures.'
    bound_to:
      - >-
        react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0226.spec.ts#CMT-ACC-0226
    provenance: test
    source: >-
      react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0226.spec.ts#CMT-ACC-0226
  - id: ATS-CMT-MTG-004-10
    title: Item classifications and direct status updates are validated
    level: api
    proves:
      - BR-CAP-CMT-MTG-004-10
    preconditions: A meeting has an editable agenda.
    steps: >-
      Create an unknown kind, create a supported kind, set covered status, and attempt deferred
      status through ordinary update.
    expected: >-
      Unknown kinds and direct deferred updates fail; supported kinds and covered status are
      retained.
    negative: true
    data_needs: 'An isolated workspace with editable meetings, nested agenda items and attachment fixtures.'
    bound_to:
      - >-
        react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0226.spec.ts#CMT-ACC-0226
    provenance: test
    source: >-
      react-console:acceptance/committees/playwright/journeys/meetings/CMT-ACC-0226.spec.ts#CMT-ACC-0226
evidence:
  - >-
    services-committees at 36129c24: agenda routes and schemas, agenda persistence, order keys,
    lifecycle and participation rules, agenda items table
  - >-
    react-console at baf6dae3: acceptance inventory CAP-CMT-MTG-008, 009 and journeys CMT-ACC-0226
    to 0229, 0231
---

# Prepare and share an ordered meeting agenda: Acceptance Test Set

## Coverage

| Rule | Proved by |
|---|---|
| `BR-CAP-CMT-MTG-004-01` | `ATS-CMT-MTG-004-01` |
| `BR-CAP-CMT-MTG-004-02` | `ATS-CMT-MTG-004-02` |
| `BR-CAP-CMT-MTG-004-03` | `ATS-CMT-MTG-004-03` |
| `BR-CAP-CMT-MTG-004-04` | `ATS-CMT-MTG-004-04` |
| `BR-CAP-CMT-MTG-004-05` | `ATS-CMT-MTG-004-05` |
| `BR-CAP-CMT-MTG-004-06` | `ATS-CMT-MTG-004-06` |
| `BR-CAP-CMT-MTG-004-07` | `ATS-CMT-MTG-004-07` |
| `BR-CAP-CMT-MTG-004-08` | `ATS-CMT-MTG-004-08` |
| `BR-CAP-CMT-MTG-004-09` | `ATS-CMT-MTG-004-09` |
| `BR-CAP-CMT-MTG-004-10` | `ATS-CMT-MTG-004-10` |
