/** * Amendment parser: closed grammar over the `## Amendment ` sections of * requirements.md (FR1). * * The grammar was derived from the corpus, not invented. Measured over 39 * `requirements.md` and 29 `tasks.md` on 2026-09-07, two conventions exist: * * ## Amendment 1 — 2026-09-05, after the design review (5 real, accepted) * ### Amendments from the design review (2026-09-05) (4 real, warned) * * The second is unnumbered and undated and cannot be applied, so it warns * rather than vanishing — a near-miss that reads as absence is this project's * single most repeated defect class (AC-53). * * Two rules exist because a prototype got them wrong on real input: * * - **Three emphasis variants, copied from `ACTIVE_RE`** (`traceability/parser.ts:23-24`). * The first draft accepted `Retires:` and `**Retires**:` but not * `**Retires:**` — which is the form this instance's own Amendment 1 was * written with, so its 23 retirements parsed as zero (AC-78). * - **A wrapped bullet is one bullet.** Ending the field block at "the first * non-bullet non-blank line" truncates any field that wraps: measured, a * wrapped `Retires:` yielded 12 of 23 ids and dropped `Issues`, `Reason` * and `Reopens` outright, and the impact report would then have said "no * retired ids" for an amendment that retired 23 criteria (AC-78, AC-94). * * Requirements: change-management/AC-3, AC-5, AC-7, AC-8, AC-51, AC-53, * AC-54, AC-78, AC-79 */ import type { ParsedAmendments } from './types.js'; /** * Walk lines outside fenced code blocks (AC-79). * * CommonMark rules: a fence opens with 3+ backticks or tildes and closes only * on the same character at the same length or longer. Written correctly rather * than as a naive toggle because it is cheap to do so — the corpus currently * cannot tell the two apart (1047 AC-shaped lines, zero inside fences), which * is a reason to write the correct one, not evidence that it does not matter. * * Indentation is deliberately permissive (`\s*`, not ` {0,3}`): AIDLC markdown * nests fenced examples inside list items routinely — see the `ac-coverage` * example at `packages/content/skills/50-testing.md:43-45`, indented five * spaces — and an absolute three-space rule is blind to every one of them. */ export declare function scanOutsideFences(lines: string[], visit: (line: string, index: number) => void): void; /** * Parse every amendment section in one requirements.md. * * @param content - File content (UTF-8). Never throws. */ export declare function parseAmendments(content: string): ParsedAmendments; //# sourceMappingURL=parser.d.ts.map