v3.3.0
[3.3.0] — 2026-08-08
Bump category: MINOR — new notation spec file, additive document-view-engine rendering, and tooling/hygiene fixes only; no migration recipe required.
Added
DIRECTIVE_LANGUAGE.mdnormative conformance spec (notations/views/documents/, stable, v1.0) — the{{ ... }}directive grammar shared by.ttrsdocument-source templates and document-view-engine skeleton files becomes a conformance contract an independent implementation can build against without reading the reference code: five reference states (adds⚑S, cited toCONTRACT.md§16), a three-way suspicion-distinguishability requirement (§5.1), a normative strict/lenient render-profile split where lenient must detect exactly what strict fails on (§6), a named-failure requirement for any unimplemented construct (§7.1), and a conformance checklist (§9). New canonical extension form*.<short-name>.ttrsalongside*.<short-name>.transitrix.yaml(CONTRACT.md§3). (#461, #462)@transitrix/document-rendererpackage — reference implementation of the directive language and the.ttrsdocument-source template format. Pass 1 resolver runs with no agent present, touches nothing in the model (read-only), and is re-run-stable; resolves model-object references ({{ REQ-14.parent.title }}, depth 3) and derived/supplied/reference figures, and copies{{# instruct }}slots through byte-for-byte. NewT1doc-lint check names the.trsnear-miss extension explicitly. Frozen byte-for-byte conformance fixture (tests/fixtures/product.mrd.expected.md) thattest_conformance.mjsdiffs against and never regenerates; line endings pinned to LF across the fixture tree. Newdocument-renderer-testCI workflow. (#461, #462)- Document-view engine gains derived-content evaluation, render profiles, illustrations, and the trace-coverage matrix (
packages/document-view-engine/) —createEvaluator()resolves{{ ID.field }}traversal (re-classifying the §3 states at every hop) and{{# each ... }}selection against canon;renderDocument()walks the AST intoreview(coloured, flagged) orclean(fails the build on a configured state set) HTML per §4;figure/figrefrender with document-order illustration numbering (forward references resolve; manual vs. missing border classes);evaluateTrace()builds the fullfrom-type ×to-type{{ trace }}coverage matrix, resolvingviaagainst either a first-class REL kind or a claim record's named endpoint field (e.g.VERIFICATION.verifies), with every row/column present even when uncovered. Derivation share, telemetry, and PDF output remain open on the epic. (#450, #451, #452) blocks-notationviewrendering — newblocks-view.mjsparses ablocksnotationnested_blocksdocument and lays it out as nested-box SVG;render.mjs'sviewcase renders it clean (green), suspect via⚑S(amber, cross-linked block id resolves suspect), or missing/unsupported (red,⚑U);figureandviewnow share one illustration-numbering sequence in document order. (#452)notations/vocabulary.yaml— new machine-readable source of truth for the element TYPE registry, the relation-type enum (with endpoint TYPE set and ACTOR-subtype narrowing), closed value vocabularies, and rule codes. FourVOC1–VOC4checks inscripts/check-notations.mjscross-verify it againstELEMENT_PRIMITIVES.md§4,elements/17-relations.md§3, each vocabulary's owning spec, and rule-code tables respectively, failing closed on a missing or unparseable artefact.packages/ingest-cliderives itsplacement.mjs/validate.mjsclosed sets from this file instead of hand-maintained literal copies. (#457, #466)- README names the new
.ttrsdocument source format and links the spec. (#464)
Changed
document-view-engineanddocument-renderershare one grammar owner.document-renderer/src/ids.mjsabsorbsisValidTypeNameand becomes the single ID grammar for the notation; newdocument-renderer/src/syntax.mjsholds the front-matter, header-scalar, and identifier/field-path primitives both parsers previously carried as byte-identical copies.document-view-engine's ownids.mjsis deleted andparse-skeleton.mjsimports fromdocument-rendererinstead. Structural only — each parser keeps its own construct set, error shape, and AST node names; all eight existing test suites across both packages, including the frozen conformance fixture's byte comparison, pass unchanged.document-view-enginegains its own CI workflow, path-filtered to also run on grammar changes indocument-renderer. (#465)
Fixed
notations/CURRENT_VERSION.yamland every dependentmethodology_versionpin (CONTRACT.md, examples, view specs, onboarding templates, migration fixtures) bumped to3.2.0— thev3.2.0tag shipped without this step.RELEASING.md's per-release checklist gains the missing step so a future release cuts the pin bump in the same PR as the changelog, before tagging. (#455)notations/vocabulary.yaml's ownmethodology_versionpin bumped to3.2.0(missed by #455). (#463)ingest-cliplacement.mjs/validate.mjswere silently missing several catalogued element TYPEs and relation kinds versus the spec (stale hand-maintained literal lists) — both now derive fromvocabulary.yaml, closing the gap. (#457)offersrelation was missing itsfrom_subtype: [business_unit]narrowing in the newvocabulary.yaml, despite17-relations.md§3's table and prose already documenting it. (#457)BOBJ-D001— a live warning row inELEMENT_PRIMITIVES.md— was missing fromvocabulary.yaml'srule_codes. (#466)ELEMENT_PRIMITIVES.md§4's materialisation-mode table still listedEQUIPMENT/INFORMATION_ENTITYas view-defined, predating the 2026-06-08 ADR that promoted both to standalone catalogued elements (EQUIPMENT, renamedBUSINESS_OBJECT). (#457)