v3.2.0
[3.2.0] — 2026-08-07
Bump category: MINOR — additive notation, tooling, and CI-hygiene changes only; no migration recipe required.
Added
- Document-view engine (
packages/document-view-engine/) — skeleton-file parser (parseSkeleton()) covering bare/field/traversal inline references,{{# each TYPE where ... order by ... }}selection blocks,.fieldreferences,trace,view,figure/figref,view'sas=/fit=parameters, and the\{{escape; plusresolveReference()/createResolver()classifying an id against canon into the four §3 states (ok,⚑Uunresolved,⚑Anot admitted,⚑Vout of validity,⚑Ssuspect via CONTRACT §16). Zero runtime dependencies; syntax/resolution scope only — render profiles, derivation share, telemetry, and PDF output remain open. (#439, #440, #443) - Document-view class + MRD/SRS/SDD layouts (
notations/views/documents/) — new view class alongside diagrams/reports; three deterministic, render-contract-defined layouts derived from admitted canon with no hand-authored prose surface: MRD (groupedNEED+REQUIREMENTviaREQUIREMENT.serves), SRS (software-tierREQUIREMENTsectioned bykind), SDD (APPLICATION/NODE/TECHNOLOGY_SERVICEdesign elements traced to theREQUIREMENTs they realise). Reserved inertview.standardfield; newDOC1doc-lint rule forbidding a shipped layout from emitting a standard identifier. (#426, #427, #430, #431) RELEASEelement TYPE (ELEMENT_PRIMITIVES.md§7.29,canon/elements/05_implementation/releases/) — dated/versioned state of aPRODUCT/APPLICATION(of,version, optionalpredecessor,released_at). RulesRELEASE-001..005. (#446)required_forrelation (REQUIREMENT→RELEASE,17-relations.md§3) — scopes an obligation to one release rather than the whole subject; derived "what must hold in release R" query via apredecessor-chain walk (scripts/release-obligations.mjs). No new rule code (reusesREL-002/REL-003). (#447)ASSERTION.subject_releaseandVERIFICATION.verified_on— optionalRELEASEqualifiers narrowing a claim/protocol run to a specific release; derived "superseded" read via thepredecessorchain. RulesASSERT-010,VERIF-007(both error, reachable only when the new optional field is set). (#448)depends_onrelation kind (REQUIREMENT→REQUIREMENT,17-relations.md§3) — conditional obligation dependency, distinct fromparent/work-order relations. RulesREL-005(self-reference, error),REL-006(cycle, warning). (#438)- Agreement axis (
CONTRACT.md§6.3) —agreement: draft | agreed | disputedonREQUIREMENT/CONSTRAINT/NEED, independent of admission; only a human may writeagreed(AGREE-001..003). Reference implementationscripts/check-agreement.mjs. (#433) - Link suspicion / content identity (
CONTRACT.md§16) — git-derived (never stored) suspicion flag overREL/ASSERTION/VERIFICATION/VALIDATIONendpoints and agreement-carrying elements, with a mechanical-procedure hatch for declared bulk migrations. Reference implementationscripts/check-link-suspicion.mjs. (#437) - Deprecation policy (
CONTRACT.md§10.6) — astatus: deprecatedspec must name itsremoved_in:release; window is at least one MAJOR; removal is always a BREAKING entry. NewDEP1doc-lint rule. FGA scheduled for removal in4.0.0, migration recipe pre-staged undermigrations/3.1-to-4.0/. (#429) - Externally-distributed packages (
PACKAGES.md§1, §7.2) — package class with its own version andcompatible_withrange (PKG-002); package-agnostic validator discovery (ingest-cli check-packages); required §6 envelope-statement row on every package spec (PKGDOC1). (#434) - Ingest review-queue
semantic_links— optional typed edges between candidates for relations with no closed REL kind yet; passed through, never admitted to canon. (#435) - Ingest approver extraction +
role_assignment_proposals— new cross-cutting extraction prompt for a document's approval/sign-off chain; review-only person→role proposals, never shaped into a relation candidate or admitted. (#436) .github/pull_request_template.md— two-section PR template (What changed / How it is verified). (#444)
Changed
- ADL per-repo decision layer (
method/03-architecture-decision-log.md§1, §6, §10) — canonical only where the repo's readership is the reasoning's intended audience; a public repo keeps at most an unmotivated pointer, record lives centrally. Matching agent-authorship boundary added to §6. (#423) - Onboarding skill computes the admission record and lifecycle —
admitted_at/admitted_by/gate_checks/valid_fromare no longer hand-typed placeholders;SKILL.mdgains an "Admission record and lifecycle" procedure mirroring the CLI's owntransitrix newbehaviour. (#424) - Capability/application maturity converges on the versioned-attribute sidecar (
CONTRACT.md§9.4,05-capability-map.md,10-applications.md) —target_maturityjoinscurrent_maturity/target_dateas time-varying (sidecar{valid_from, value}step function); single shared CMMI V2.0 scale definition. (#425) - View catalogue split into
diagrams//reports//documents/(notations/views/) — each spec's class now structural via folder rather than a README table position;IDS_AND_REFERENCES.md§3.2's document-level TYPE registry renamedVIEW_TYPE;check-notations.mjsC1 count check derives counts from the filesystem. (#426)
Fixed
- CI work-item reference guard — widened to catch the unpunctuated "hub"+worktype+number form alongside the existing
#-punctuated pattern; self-test added against the live extracted pattern. (#422) baseline-manifestscope — derived from everyid:undercanon/instead of a hardcoded two-directory list, so newly registered TYPEs are no longer silently omitted. (#428)ingest-cli admit-sourceidempotency — retrying on the same converted markdown after the raw source moved out of_intake/inbox/no longer skips the duplicate check and mints a spurious second artefact;--forcestill mints a genuine duplicate. (#432)check-notationsunit tests wired into CI —scripts/check-notations.test.mjsnow runs innotations-doc-lint.ymlon every PR (previously local-only, blocked by a token-scope gap). (#442)- Duplicated
RISKelement schema content removed (ELEMENT_PRIMITIVES.md§7.26) — broken nested code-fence and duplicated table/prose cleaned up. (#445)