Contracts

delivery-label-contract.md

Contract: per-criterion delivery labels (software-dev spec template)

Canonical definition: tactic acceptance-criteria-non-vacuity (spec-kitty charter context --include tactic:acceptance-criteria-non-vacuity). This contract fixes only the shape the tooling depends on; it does not redefine the labels.

Functional Requirements table

| ID | Title | User Story | Priority | Status | Delivery | No-op passable? |
  • Delivery ∈ [build] · [ratchet] · [folded] (a [folded] row names the item that satisfies it).
  • No-op passable? ∈ no · yes — <named positive control>.
  • Both columns are trailing and optional; legacy five-column tables parse and gate identically.

Success criteria

- SC-###: <measurable outcome> — [build|ratchet|folded] · no-op passable: yes|no

Invariants (pinned by tests)

InvariantGuard
A labelled row is declared by parse_requirement_ids_from_spec_md and yields the same coverage through plan_mapping as its unlabelled twintests/specify_cli/test_requirement_mapping.py::TestDeliveryLabelledRequirementRows
A label inside/before the id cell undeclares the row (never place it there)same class, same fixture
The template scaffold stays non-substantive; its filled example (FR-EXAMPLE) declares no idtests/specify_cli/missions/test_substantive_gate_formats.py
No gate enforces the labels (guidance only)spec C-002