import type { CoreRoot, IssueRecord, Preset } from 'ztrack/preset-kit'; export declare function assertSdlcGrammarConformance(p: { checkDefault: (records: IssueRecord[], ctx?: object) => { findings: { code: string; }[]; }; parseDefault: (records: IssueRecord[]) => unknown; HEAD: string; REC: IssueRecord; }): void; /** * Cases 1 (real-store fixture) + 2 (edit-locality). `canonical` must already be rendered in the * preset's OWN `serialize()` shape (byte-identity is proven for canonical store files — see the * narrowing note in docs/PRESETS.md — not for arbitrary hand-formatting). `edit` names one AC in * `edit.record.body` and a patch that changes it; the fixture must contain at least one OTHER * top-level AC line (`- [ ] …` / `- [x] …`) so "outside the owned region" is provable. */ export declare function assertRoundTripFidelity(p: { preset: Preset; canonical: { title: string; status: string; body: string; }; edit: { record: IssueRecord; acId: string; patch: Record; }; }): void; /** * Case 1's position-specific edge: an unknown `## X` section BETWEEN two known sections (the * header fields and "## Acceptance Criteria") keeps its ORIGINAL position on an unmodified round * trip instead of being re-emitted at the end. Only meaningful for presets that carry unknown * sections (the default-family SDLC presets) — `spec`/`speckit` have no such concept and don't * call this. */ export declare function assertNotePositionFidelity(p: { preset: Preset; record: IssueRecord; }): void; /** * Case 1 one level DOWN: an unknown SUB-LINE of an AC survives the round trip. * * Section-level carry (`notes`/`notesBefore`/`prose`) had this covered; AC sub-lines did not. The * sub-field parser is an if-chain over the fields the preset models, and anything else fell off the * end into nothing — no field, no diagnostic, exit 0. Because `ztrack fmt` and EVERY `ztrack ac * patch` write re-serialize the whole body, editing one AC silently deleted an operator's note on * a different one, and nothing in the tracker recorded that it had happened. * * Also asserts the carry is inert: a carried line that merely LOOKS like `proof:` must set no * field and move no AC state, so carrying can never become a back door that talks an unchecked AC * into passing. * * `record` must contain an AC bearing a sub-line the preset does not model, and — so the carry is * proven, not merely tolerated — that line should be the LAST one of its AC block, since the typed * fields have a canonical serialization order that an unrecognized line cannot be interleaved into. */ export declare function assertAcSubLineFidelity(p: { preset: Preset; record: IssueRecord; acId: string; subLine: string; }): void; /** * Case 3: a preset with no `serialize` (a read-only adapter, e.g. `speckit`) is EXEMPT from the * round-trip contract by construction — demonstrates the exemption path rather than asserting * round-trip fidelity (there is no `serialize` to round-trip through). */ export declare function assertReadOnlyRoundTripExemption(p: { preset: Preset; record: IssueRecord; }): void; /** Pure: the list of VIZ-7 conformance problems for `preset` (empty = conformant). Never throws — * an uninspectable schema shape is silently skipped (see the module note above), not reported. */ export declare function visualizerSpecConformanceProblems(preset: Preset): string[]; /** bun:test-registering wrapper (dev/01): every shipped preset's own test file calls this with * ITS preset, exactly like `assertSdlcGrammarConformance`/`assertRoundTripFidelity` above — the * no-shared-model invariant holds (only the TEST is shared; each preset owns its own visualizer * block and schema). A preset with a real conformance problem shows it here, named. */ export declare function assertVisualizerSpecConformance(preset: Preset): void;