---
id: ATS-PFM-MTD-013
scope: CAP-PFM-MTD-013
product_area: platform
module: metadata
revision: 2
status: proposed
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-PFM-MTD-013-01
    title: Publication state tracks publication time
    level: api
    proves:
      - BR-CAP-PFM-MTD-013-01
      - INV-DOM-PFM-MTD-005-05
    preconditions: A publishable record and a nonpublishable object exist.
    steps:
      - do: 'Publish, move to another state and try publishing the nonpublishable record.'
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses
          publication on an object that is not publishable
    expected: Time is populated during publication and cleared outside it; unsupported publication fails.
    negative: true
    data_needs: A publishable record and a nonpublishable object exist.
    bound_to:
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#sets
        published_at when a record is published
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#clears
        published_at when it is unpublished
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#moves
        a record to pending review
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses
        publication on an object that is not publishable
      - TST-PFM-MTD-065
    provenance: test
    source: >-
      services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses
      publication on an object that is not publishable
    category: rule
    assertions:
      - expect: Time is populated during publication and cleared outside it; unsupported publication fails.
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses
          publication on an object that is not publishable
  - id: ATS-PFM-MTD-013-02
    title: Archival retains information until restoration
    level: api
    proves:
      - BR-CAP-PFM-MTD-013-02
    preconditions: 'A record has values, files and links.'
    steps:
      - do: 'Archive it, list records, try archival again and restore it.'
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#archives
          a record with everything kept
    expected: >-
      Ordinary browsing excludes it, data remains, repeated archival fails and restoration returns the
      retained information.
    negative: true
    data_needs: 'A record has values, files and links.'
    bound_to:
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#archives
        a record with everything kept
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses
        to archive an archived record
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#restores
        an archived record
      - TST-PFM-MTD-065
    provenance: test
    source: >-
      services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#archives
      a record with everything kept
    category: transition
    assertions:
      - expect: >-
          Ordinary browsing excludes it, data remains, repeated archival fails and restoration returns the
          retained information.
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#archives
          a record with everything kept
  - id: ATS-PFM-MTD-013-03
    title: Deletion removes owned storage and retires file attachments
    level: api
    proves:
      - BR-CAP-PFM-MTD-013-03
    preconditions: 'A record has values, unique reservations and files.'
    steps:
      - do: Delete at its current version.
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#deletes
          a record with its values and unique values
    expected: Record and owned rows disappear and files are detached for retirement.
    negative: true
    data_needs: 'A record has values, unique reservations and files.'
    bound_to:
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses
        a delete at another version
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#deletes
        a record with its values and unique values
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#detaches
        a deleted record’s file, due for retirement
      - TST-PFM-MTD-065
    provenance: test
    source: >-
      services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#deletes
      a record with its values and unique values
    category: transition
    assertions:
      - expect: Record and owned rows disappear and files are detached for retirement.
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#deletes
          a record with its values and unique values
  - id: ATS-PFM-MTD-013-04
    title: Restrict prevents deletion while protection is in force
    level: api
    proves:
      - BR-CAP-PFM-MTD-013-04
    preconditions: A record has an open restricting link.
    steps:
      - do: Try deleting the protected record.
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses
          to delete a record an open restricting association names, and removes nothing
    expected: The deletion fails and removes nothing.
    negative: true
    data_needs: A record has an open restricting link.
    bound_to:
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses
        to delete a record an open restricting association names, and removes nothing
      - >-
        services-platform:modules/associations/tests/integration/db/apply-endpoint-deletion.integration.spec.js#refuses
        while the restricting association has an end date that has not passed, removing nothing
      - TST-PFM-MTD-065
      - TST-PFM-MTD-037
    provenance: test
    source: >-
      services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses
      to delete a record an open restricting association names, and removes nothing
    category: failure
    assertions:
      - expect: The deletion fails and removes nothing.
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses
          to delete a record an open restricting association names, and removes nothing
  - id: ATS-PFM-MTD-013-05
    title: Cascade refusal rolls back the entire deletion
    level: browser
    proves:
      - BR-CAP-PFM-MTD-013-05
      - INV-DOM-PFM-MTD-005-08
    preconditions: A builder has boats including a protected one.
    steps:
      - do: Delete the builder and inspect every dependent record.
        provenance: test
        source: >-
          react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S08.spec.ts#PLAT-M6-S08: an
          insured boat cannot be deleted and a builder's deletion takes its boats except the refused one
    expected: The refusal preserves the builder and all boats.
    negative: true
    data_needs: A builder has boats including a protected one.
    bound_to:
      - >-
        react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S08.spec.ts#PLAT-M6-S08: an
        insured boat cannot be deleted and a builder's deletion takes its boats except the refused one
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#deletes
        the record a cascading association names, with the association
      - >-
        services-platform:modules/associations/tests/integration/db/apply-endpoint-deletion.integration.spec.js#refuses
        a chain of eleven with SQLSTATE AE409 and removes nothing of it
      - TST-PFM-MTD-022
      - TST-PFM-MTD-065
      - TST-PFM-MTD-037
    provenance: test
    source: >-
      react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S08.spec.ts#PLAT-M6-S08: an insured
      boat cannot be deleted and a builder's deletion takes its boats except the refused one
    category: failure
    assertions:
      - expect: The refusal preserves the builder and all boats.
        provenance: test
        source: >-
          react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S08.spec.ts#PLAT-M6-S08: an
          insured boat cannot be deleted and a builder's deletion takes its boats except the refused one
  - id: ATS-PFM-MTD-013-06
    title: Dependent announcements precede the root deletion
    level: api
    proves:
      - BR-CAP-PFM-MTD-013-06
    preconditions: A chain has cascading records and links.
    steps:
      - do: Delete its root and inspect event order.
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#writes
          every dependant’s event before the record it depended on: the associations, then the cascade deepest
          first (B1)
    expected: Link removals precede dependent record deletions and the originating deletion is last.
    negative: false
    data_needs: A chain has cascading records and links.
    bound_to:
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#writes
        every dependant’s event before the record it depended on: the associations, then the cascade deepest
        first (B1)
      - TST-PFM-MTD-065
    provenance: test
    source: >-
      services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#writes
      every dependant’s event before the record it depended on: the associations, then the cascade deepest
      first (B1)
    category: interaction
    assertions:
      - expect: Link removals precede dependent record deletions and the originating deletion is last.
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#writes
          every dependant’s event before the record it depended on: the associations, then the cascade deepest
          first (B1)
  - id: ATS-PFM-MTD-013-07
    title: Owner cascades ignore owned-object lifecycle status
    level: api
    proves:
      - BR-CAP-PFM-MTD-013-07
    preconditions: An owner has a record whose object is archived.
    steps:
      - do: Delete the owner through its cascade.
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#applies
          the owner’s cascade to a record of an archived custom object (B5: the rule applies whatever the
          type’s state)
    expected: The dependent record is removed despite its object state.
    negative: true
    data_needs: An owner has a record whose object is archived.
    bound_to:
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#applies
        the owner’s cascade to a record of an archived custom object (B5: the rule applies whatever the type’s
        state)
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#refuses
        to delete it, and leaves it stored
      - TST-PFM-MTD-065
    provenance: test
    source: >-
      services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#applies
      the owner’s cascade to a record of an archived custom object (B5: the rule applies whatever the type’s
      state)
    category: interaction
    assertions:
      - expect: The dependent record is removed despite its object state.
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#applies
          the owner’s cascade to a record of an archived custom object (B5: the rule applies whatever the
          type’s state)
  - id: ATS-PFM-MTD-013-08
    title: Lifecycle audits record the selected action
    level: api
    proves:
      - BR-CAP-PFM-MTD-013-08
    preconditions: An active object has lifecycle-enabled records.
    steps:
      - do: 'Publish, archive, restore and delete and inspect audit events.'
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#records
          the publication and its state in the audit events
    expected: Each action is audited and publication records its resulting state.
    negative: false
    data_needs: An active object has lifecycle-enabled records.
    bound_to:
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#records
        the publication and its state in the audit events
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#records
        the archive and the restore in the audit events
      - >-
        services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#records
        the delete in the audit events
      - TST-PFM-MTD-065
    provenance: test
    source: >-
      services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#records
      the publication and its state in the audit events
    category: rule
    assertions:
      - expect: Each action is audited and publication records its resulting state.
        provenance: test
        source: >-
          services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.integration.spec.js#records
          the publication and its state in the audit events
  - id: ATS-PFM-MTD-013-09
    title: Record-page lifecycle actions explain refusal
    level: browser
    proves:
      - BR-CAP-PFM-MTD-013-09
    preconditions: An administrator opens an ordinary and a protected boat.
    steps:
      - do: 'Publish, archive and restore, then attempt protected deletion.'
        provenance: test
        source: >-
          react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S07.spec.ts#PLAT-M5-S07:
          publish, archive and restore from the boat page; History names each revision and who made it
    expected: Supported actions succeed and the deletion confirmation identifies the restricting link.
    negative: true
    data_needs: An administrator opens an ordinary and a protected boat.
    bound_to:
      - >-
        react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S07.spec.ts#PLAT-M5-S07: publish,
        archive and restore from the boat page; History names each revision and who made it
      - >-
        react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S08.spec.ts#PLAT-M6-S08: an
        insured boat cannot be deleted and a builder's deletion takes its boats except the refused one
      - TST-PFM-MTD-007
      - TST-PFM-MTD-022
    provenance: test
    source: >-
      react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S07.spec.ts#PLAT-M5-S07: publish,
      archive and restore from the boat page; History names each revision and who made it
    category: permission
    assertions:
      - expect: Supported actions succeed and the deletion confirmation identifies the restricting link.
        provenance: test
        source: >-
          react-console:acceptance/custom-objects/playwright/journeys/PLAT-M5-S07.spec.ts#PLAT-M5-S07:
          publish, archive and restore from the boat page; History names each revision and who made it
  - id: ATS-PFM-MTD-013-10
    title: A refused cascade preserves records and their evidence
    category: interaction
    level: api
    exercises:
      - CAP-PFM-MTD-013
      - CAP-PFM-MTD-012
      - CAP-PFM-MTD-014
      - CAP-PFM-MTD-015
      - CAP-PFM-MTD-019
    proves:
      - BR-CAP-PFM-MTD-013-05
      - BR-CAP-PFM-MTD-014-01
      - BR-CAP-PFM-MTD-015-01
      - BR-CAP-PFM-MTD-019-04
    preconditions: A root reaches two custom records and one has a restricting link.
    steps:
      - do: >-
          Attempt root deletion, compare record values, revisions and events, remove the restriction and
          retry.
        provenance: proposed
        source: &ref_0
          - >-
            react-console:acceptance/custom-objects/playwright/journeys/PLAT-M6-S08.spec.ts#PLAT-M6-S08: an
            insured boat cannot be deleted and a builder's deletion takes its boats except the refused one
          - >-
            services-platform:modules/custom-objects/tests/integration/services/history/custom-object-record-history.integration.spec.js#answers
            the association, the update and the creation, newest first
          - >-
            services-platform:modules/custom-objects/tests/integration/services/persistence/custom-object-records.events.integration.spec.js#publishes
            nothing when the transaction that wrote the record rolls back, in the ledger or the queue
          - >-
            services-platform:modules/associations/tests/integration/db/apply-endpoint-deletion.integration.spec.js#leaves
            the same audit rows, events, revisions and no record, as the record store does
    expected: Inspect the complete refusal and successful cleanup separately.
    negative: false
    data_needs: A root reaches two custom records and one has a restricting link.
    bound_to: []
    provenance: proposed
    source: *ref_0
    assertions:
      - expect: Inspect the complete refusal and successful cleanup separately.
        provenance: proposed
        source: *ref_0
  - id: ATS-PFM-MTD-013-11
    title: Every publication state can be selected from each current state
    category: transition
    level: api
    proves:
      - BR-CAP-PFM-MTD-013-01
    preconditions: A publishable active object has a separate unlocked record for each source and target state pair.
    steps:
      - do: >-
          Set each record to its source state, reread its version and select the target state; include all
          sixteen pairs and reread the record, audit and events.
        provenance: proposed
        source: specs/platform/metadata/design/state-models/STATE-PFM-MTD-006-custom-record-publication.md
    expected: >-
      The selected state and publication time satisfy the cited obligation for each pair; selecting the
      existing state adds no business event.
    negative: false
    data_needs: Sixteen records covering the four-by-four publication matrix.
    bound_to: []
    provenance: proposed
    source: specs/platform/metadata/design/state-models/STATE-PFM-MTD-006-custom-record-publication.md
    transitions:
      - from: draft
        to: published
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: pending_review
        to: published
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: unpublished
        to: published
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: published
        to: unpublished
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: published
        to: draft
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: published
        to: pending_review
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: draft
        to: pending_review
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: pending_review
        to: draft
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: draft
        to: draft
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: draft
        to: unpublished
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: pending_review
        to: pending_review
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: pending_review
        to: unpublished
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: published
        to: published
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: unpublished
        to: draft
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: unpublished
        to: pending_review
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
      - from: unpublished
        to: unpublished
        provenance: proposed
        source: 'services-platform:modules/custom-objects/services/persistence/custom-object-records.ts:publishRecord'
    assertions:
      - expect: >-
          The selected state and publication time satisfy the cited obligation for each pair; selecting the
          existing state adds no business event.
        provenance: proposed
        source: specs/platform/metadata/design/state-models/STATE-PFM-MTD-006-custom-record-publication.md
evidence:
  - >-
    services-platform at ad3f6a6582843008ed0f5a17b131878d15829af1: the record store and endpoint deletion
    specs named in each scenario.
  - 'react-console at baf6dae382d6f41dce976c7f848667ccc37e076f: Playwright PLAT-M5-S07, PLAT-M6-S08.'
  - >-
    Codex testing back-fill: pinned capability, domain object, state model and workflow obligations reviewed;
    existing bound test files and exact case titles checked.
coverage:
  rule: covered
  transition: covered
  validation: 'gap: FND-PFM-MTD-075'
  permission: covered
  edge: 'gap: FND-PFM-MTD-075'
  failure: covered
  boundary: 'gap: FND-PFM-MTD-075'
  concurrency: 'gap: FND-PFM-MTD-075'
  invariant: 'gap: FND-PFM-MTD-075'
  interaction: covered
coverage_obligations:
  - rule: BR-CAP-PFM-MTD-013-01
    scenarios:
      - ATS-PFM-MTD-013-01
      - ATS-PFM-MTD-013-11
    finding: null
    provenance: documented
    source: >-
      specs/platform/metadata/planning/capabilities/CAP-PFM-MTD-013-publish-archive-restore-and-delete-custom-records-deliberately.md
  - rule: BR-CAP-PFM-MTD-013-02
    scenarios:
      - ATS-PFM-MTD-013-02
    finding: null
    provenance: documented
    source: >-
      specs/platform/metadata/planning/capabilities/CAP-PFM-MTD-013-publish-archive-restore-and-delete-custom-records-deliberately.md
  - rule: BR-CAP-PFM-MTD-013-03
    scenarios:
      - ATS-PFM-MTD-013-03
    finding: null
    provenance: documented
    source: >-
      specs/platform/metadata/planning/capabilities/CAP-PFM-MTD-013-publish-archive-restore-and-delete-custom-records-deliberately.md
  - rule: BR-CAP-PFM-MTD-013-04
    scenarios:
      - ATS-PFM-MTD-013-04
    finding: null
    provenance: documented
    source: >-
      specs/platform/metadata/planning/capabilities/CAP-PFM-MTD-013-publish-archive-restore-and-delete-custom-records-deliberately.md
  - rule: BR-CAP-PFM-MTD-013-05
    scenarios:
      - ATS-PFM-MTD-013-05
      - ATS-PFM-MTD-013-10
    finding: null
    provenance: documented
    source: >-
      specs/platform/metadata/planning/capabilities/CAP-PFM-MTD-013-publish-archive-restore-and-delete-custom-records-deliberately.md
  - rule: BR-CAP-PFM-MTD-013-06
    scenarios:
      - ATS-PFM-MTD-013-06
    finding: null
    provenance: documented
    source: >-
      specs/platform/metadata/planning/capabilities/CAP-PFM-MTD-013-publish-archive-restore-and-delete-custom-records-deliberately.md
  - rule: BR-CAP-PFM-MTD-013-07
    scenarios:
      - ATS-PFM-MTD-013-07
    finding: null
    provenance: documented
    source: >-
      specs/platform/metadata/planning/capabilities/CAP-PFM-MTD-013-publish-archive-restore-and-delete-custom-records-deliberately.md
  - rule: BR-CAP-PFM-MTD-013-08
    scenarios:
      - ATS-PFM-MTD-013-08
    finding: null
    provenance: documented
    source: >-
      specs/platform/metadata/planning/capabilities/CAP-PFM-MTD-013-publish-archive-restore-and-delete-custom-records-deliberately.md
  - rule: BR-CAP-PFM-MTD-013-09
    scenarios:
      - ATS-PFM-MTD-013-09
    finding: null
    provenance: documented
    source: >-
      specs/platform/metadata/planning/capabilities/CAP-PFM-MTD-013-publish-archive-restore-and-delete-custom-records-deliberately.md
interactions:
  - with: CAP-PFM-MTD-011
    scenarios: []
    finding: FND-PFM-MTD-075
    provenance: proposed
    source: >-
      specs/platform/metadata/planning/capabilities/CAP-PFM-MTD-013-publish-archive-restore-and-delete-custom-records-deliberately.md
  - with: CAP-PFM-MTD-015
    scenarios:
      - ATS-PFM-MTD-013-10
    finding: null
    provenance: proposed
    source: >-
      specs/platform/metadata/planning/capabilities/CAP-PFM-MTD-013-publish-archive-restore-and-delete-custom-records-deliberately.md
---

# Retire or Publish Custom Records: Capability Test Specification

## Coverage

- Obligation 01: 2 scenarios cite this obligation.
- Obligation 02: 1 scenario cite this obligation.
- Obligation 03: 1 scenario cite this obligation.
- Obligation 04: 1 scenario cite this obligation.
- Obligation 05: 2 scenarios cite this obligation.
- Obligation 06: 1 scenario cite this obligation.
- Obligation 07: 1 scenario cite this obligation.
- Obligation 08: 1 scenario cite this obligation.
- Obligation 09: 1 scenario cite this obligation.

Category coverage identifies the kind of proof present. Detailed transition, permission and invariant obligations and unbound proposals remain in the coverage finding until their individual cases are accounted for.

## Interactions With Related Capabilities

Refused cascades leave no partial mutation, history or event effects. The structured interaction rows identify the related capabilities exercised and any remaining gap. Cross-capability workflow seams remain subject to the detailed coverage audit.
