changedOutput schema / $defs / AcceptanceCriterion / description
Previous value: -"`### AC-NNN (Method): <criterion text>` under `## Acceptance Criteria` -- one verification criterion.\n\nThe number, method, and criterion text all live in the heading itself\n(e.g. `### AC-001 (Test): The revoke endpoint returns 204 within 1s`),\nconstrained by the regex `@alias` above and enforced by `match_alias`\n(`re.fullmatch`) at parse time -- a missing/out-of-range/malformed\nnumber, an unknown method word, or a title-less heading all fail the\nparse eagerly (REQ-003). AC numbers need not be contiguous (gaps are\nallowed, numbers are never renumbered); duplicates are rejected by\n`Vcr`'s own after-validator (the `ValidationError` channel, mirroring\nDEC's `Decision._validate_option_numbers_unique`).\n\nUnlike DEC's `Option`/RSK's `Probability`/`Impact` (all *leaf* sections\nwith zero other declared fields, so their own `.text` computed property\nreturns the *complete* extent verbatim, heading marker and any body\ntext both included), this class declares two other fields\n(`description`, `test_steps`), making it a *composite* section: its own\n`.text` therefore returns only the heading's own inline content (marker\nstripped, body text excluded -- see `MarkdownSection.text`'s composite\nbranch). `number`/`method` below are matched against that heading-only\n`.text` directly, not `.text.splitlines()[0]` -- the DEC/RSK idiom's\nexact mechanics don't apply verbatim here because of this leaf/composite\ndifference, even though the underlying idea (compute a value from the\nretained heading text via a private module-level compiled regex) is the\nsame. A consequence: an `AcceptanceCriterion`'s body may contain nothing\nbesides an optional free-form `description` paragraph followed by an\noptional `#### Test Steps` -- both independently optional (e.g. one\ncriterion may carry only a description, another only `Test Steps`,\nanother both, another neither), in that fixed declaration order.\n\nParameters\n----------\ndescription:\n The lead paragraph directly under the heading -- free-form prose\n elaborating on the criterion beyond what fits in the heading\n itself (mirrors `MoreInformation`'s \"free-form, no fixed format\"\n tone). Optional; independent of `test_steps`.\ntest_steps:\n `#### Test Steps` sub-section (a numbered verification procedure).\n Optional; independent of `description`.\nnumber:\n Computed. The criterion's 3-digit number (e.g. `1` for\n `### AC-001 (Test): ...`). Never stored separately -- derived from\n the retained heading text.\nmethod:\n Computed. The closed DTAIS method word carried by the heading\n (e.g. `\"Test\"` for `### AC-001 (Test): ...`), exactly as written\n (not lowercased/normalized). Never stored separately -- derived\n from the retained heading text."New value: +"`### AC-NNN (Method): <criterion text>` under `## Acceptance Criteria` -- one verification criterion.\n\nThe number, method, and criterion text all live in the heading itself\n(e.g. `### AC-001 (Test): The revoke endpoint returns 204 within 1s`),\nconstrained by the regex `@alias` above and enforced by `match_alias`\n(`re.fullmatch`) at parse time -- a missing/out-of-range/malformed\nnumber, an unknown method word, or a title-less heading all fail the\nparse eagerly (REQ-003). The method word is one of the five DTAIS words:\n`Demonstration`, `Test`, `Analysis`, `Inspection`, `Special` (the\n`specmgr://dtais` vocabulary). AC numbers need not be contiguous (gaps are\nallowed, numbers are never renumbered); duplicates are rejected by\n`Vcr`'s own after-validator (the `ValidationError` channel, mirroring\nDEC's `Decision._validate_option_numbers_unique`).\n\nUnlike DEC's `Option`/RSK's `Probability`/`Impact` (all *leaf* sections\nwith zero other declared fields, so their own `.text` computed property\nreturns the *complete* extent verbatim, heading marker and any body\ntext both included), this class declares two other fields\n(`description`, `test_steps`), making it a *composite* section: its own\n`.text` therefore returns only the heading's own inline content (marker\nstripped, body text excluded -- see `MarkdownSection.text`'s composite\nbranch). `number`/`method` below are matched against that heading-only\n`.text` directly, not `.text.splitlines()[0]` -- the DEC/RSK idiom's\nexact mechanics don't apply verbatim here because of this leaf/composite\ndifference, even though the underlying idea (compute a value from the\nretained heading text via a private module-level compiled regex) is the\nsame. A consequence: an `AcceptanceCriterion`'s body may contain nothing\nbesides an optional free-form `description` paragraph followed by an\noptional `#### Test Steps` -- both independently optional (e.g. one\ncriterion may carry only a description, another only `Test Steps`,\nanother both, another neither), in that fixed declaration order.\n\nParameters\n----------\ndescription:\n The lead paragraph directly under the heading -- free-form prose\n elaborating on the criterion beyond what fits in the heading\n itself (mirrors `MoreInformation`'s \"free-form, no fixed format\"\n tone). Optional; independent of `test_steps`.\ntest_steps:\n `#### Test Steps` sub-section (a numbered verification procedure).\n Optional; independent of `description`.\nnumber:\n Computed. The criterion's 3-digit number (e.g. `1` for\n `### AC-001 (Test): ...`). Never stored separately -- derived from\n the retained heading text.\nmethod:\n Computed. The closed DTAIS method word carried by the heading\n (e.g. `\"Test\"` for `### AC-001 (Test): ...`), exactly as written\n (not lowercased/normalized). Never stored separately -- derived\n from the retained heading text."