Releases: yarrasys/yarramate
Release list
v0.13.0
ask --where: evidence-backed pointing
Evidence observations bind subjects to repo: locators; --where inverts that mapping into an answer surface (#137, #139, ADR 0068):
yarramate ask .yarramate/workspace.yaml --where "compiler"- Same free-text/subject-id seeding as every slice — no new grammar.
- The answer is each matched subject's verified code locations, with subject- and claim-level observations deduplicated and contradicted locations included and marked — a place known to disagree with intent is review signal, not noise.
- Every answer states its own coverage boundary: unobserved subjects listed by name, everything outside the model explicitly handed to the agent's own search tools. Verified pointers outrank derived pointers; the routing lives in the output, not in the reader's head.
- The engine stays out of the indexing business: no scanning, no inferred links, no ranking.
The cross-harness case study ships with the package
The model is the handover — one architecture, two AI harnesses, zero handoff, every claim with a commit, PR, or release attached — now lives in docs/, with a "Proven across harnesses" section in the README (which ships in this tarball, so the npm page leads with it).
CI
- codeql-action bumped 4 → 4.37.3 (#119).
Full changelog: v0.12.0...v0.13.0
v0.12.0
LikeC4 sidebar folders
yarramate/likec4-project/v1 view entries take an optional folder (#135, ADR 0067):
views:
- id: index
projection: projections/starter-landscape.yaml
folder: "1 · Orientation"- Emitted as a LikeC4 title path —
title 'Folder / Title'— which LikeC4 ≥1.59 renders as a native sidebar folder tree. Zero new DSL constructs; on older LikeC4 the path is simply a longer title. - Nest folders with
/inside the value. Views without a presentation title synthesize the leaf from the view id, so a folder assignment is never dropped. - LikeC4 orders sibling folders by name — encode a deliberate reading order in the names (
"1 · Orientation","2 · Agent contract"). Views inside one folder keep the views-list order. - The synthetic
review-changesview (--changedoverlay) stays at the root. - Applies to
export-projectin bothyarramate export likec4andyarramate-likec4; the schema rejects empty path segments.
The repository's own 21-view project now ships filed as five ordered stories: Orientation → Agent contract → Engine internals → ArchiMate viewpoints → Evolution.
Full changelog: v0.11.0...v0.12.0
v0.11.0 — the review overlay is derived too
The visual half of the derived review-slice story (ADR 0066), requested by the third cross-harness dogfood report:
yarramate export likec4 .yarramate/likec4-project.yaml out .yarramate/workspace.yaml --changed main..HEAD- The git derivation now classifies new (declaration wholly inside pure insertions) vs changed (touched otherwise); the
addedroster also appears in theask --changedenvelope. - Generated elements and relationships carry
metadata { yarramateGitChange 'new' | 'changed' }— filterable, absent when untouched. - Every ordinary view highlights its own changed members (green = new, amber = changed), and a synthetic
review-changesview collects everything with the legend as its description. - Nothing is authored, so nothing goes stale: a merged range renders an empty overlay on the next export.
v0.10.0 — excludeStatuses and the curated view set
excludeStatusesjoins the projection query vocabulary: drop concepts carrying a listed lifecycle status while keeping concepts that declare no status — the viewpoint form of status filtering (excludeStatuses: [retired]shows the living architecture without losing unstatused actors and motivation elements). It also vetoesconnectedexpansion: an excluded concept is never pulled in as a neighbour, and edges touching one are dropped rather than left dangling.- The repository's own LikeC4 view set is re-curated as a worked example: 21 views ordered as five stories (orientation → the seven-verb agent contract → engine internals → ArchiMate viewpoints → evolution), retired subjects excluded everywhere, and a new
seven-verb-surfaceview of the agent contract.
v0.9.0 — review slices derive from git
The review surface the second cross-harness dogfood asked for (ADR 0065) — with the slice derived from git rather than authored as tags.
ask <workspace> --changed <git-range>: the subjects whose declarations changed in the range, rendered as their connected-neighbourhood brief (or--budgetdigest /--json), plus an inline coverage note naming changed subjects that appear in no authored projection.export markdown --changed <range>andexport briefs --changed <range> --out <dir>: the same slice as a persisted review document or per-concept handoff bundle.- No new authored surface: records stay closed, a ref range is disposable by construction, and git diff remains authoritative for what changed. Authored review tags are deliberately deferred (#126) until a real cross-cutting need appears.
Typical review motion after an enrichment burst:
yarramate ask .yarramate/workspace.yaml --changed main..HEAD
yarramate export markdown --changed main..HEAD .yarramate/workspace.yaml --out review.mdv0.8.1
Fixes from the first cross-harness dogfood — a Codex session resumed the design loop from nothing but the repo pointer and the published CLI, and surfaced two real defects (ADR 0064).
- Retired is a closed question: the evaluator excludes
status: retiredsubjects from the enrichment target set. Retirement is the recorded descoping decision — no subject question stays open against it, retired concepts still serve as relationship counterparts, and if the last live subject of a kind retires, the workspace-level question correctly reopens. Catalogue 0.5's resolutions prescribe retirement for descoping; whole-subject deletion throughapplyis deliberately deferred (#123). - Flow-style items survive enrichment:
applyfield inserts after- { id: x, ... }items corrupted the sequence (rejected by the compile gate), andremovecould silently delete the whole item line. All three mutation paths now rewrite a flow item as a block mapping with the change applied.
v0.8.0 — the catalogue deepens
The internal design catalogue completes the deep ArchiMate path, and the product gains its rule for what happens when the path deepens under a finished interview.
Catalogue 0.4 (ADR 0063)
Six waves — motivation, business, application, technology, implementation, hygiene — 38 questions. New:
- Technology:
component-unhosted("Where does this run?" — exact-matched, so profile-derived module kinds inherit their deployable parent's hosting),node-serves-nothing,technology-service-unrealized,artifact-unassigned. - Implementation:
workpackage-delivers-nothing,workpackage-unassigned,deliverable-realizes-nothing,plateau-aggregates-nothing,gap-unaddressed.
Versioning discipline
- A completed interview honestly reopens when the catalogue deepens. The model did not regress; the standard of adequacy grew. If your
askorientation shows new open questions after upgrading, they will carry the marker below. - Every question records
since: <catalogue version>— surfaced in the interrogation report, design steps, andask --open([since 0.4]), so you can attribute reopening to the catalogue delta at a glance. - Semver: minor catalogue versions are additive only; only a major may change or remove triggers. No pinning — the interview stays stateless; teams needing a frozen path copy the shipped catalogue and pass
--catalogue.
Dogfooded on yarramate's own model before shipping: 0.4 opened 20 questions, 17 of which exposed catalogue selector imprecision (fixed pre-release — selector precision is part of the additive contract) and 3 of which were real hosting gaps, now answered in the model.
v0.7.1
Patch release: the fixes surfaced by dogfooding 0.7.0 against a real foreign model (yarradev-ai).
- An apply diff is exactly the answer it landed (#114, ADR 0062):
applynow writes by splicing minimal text edits into the authored source instead of re-serializing the YAML AST. Untouched bytes — folded prose, comments, authored wrapping — stay byte-identical. The atomic compile gate validates the spliced text itself, so splice defects reject the batch instead of corrupting a document. The incident batch replayed: previously a 350-line diff, now exactly 10 inserted lines. - Retraction (#115): update operations accept
remove: [<field> ...]— the assert → catch → retract loop closes through the same audited surface, restoring exact prior bytes. Identity fields are never removable; removing an unset field is a located error. - One answer, many subjects (#116): subject-scoped
designsteps carry the fullopenSubjectsroster, so when one policy answer covers N subjects (ownership, classically) the harness lands it as oneapplybatch instead of interviewing N times. The agent skill names the pattern.
v0.7.0 — the seven verbs
YarraMate 0.7.0 — the seven verbs
A clean break: the CLI is now exactly one verb per lifecycle stage, designed top-down as the agent-harness contract (docs/AGENT-INTERFACE.md, ADRs 0056–0061).
init → design → apply → ask → check → reconcile → export
create fill write read gate drift derive
New
yarramate design— the conception loop's ask-half (ADR 0058): each stateless invocation serves exactly the top open design question — materiality-ordered from an internal, versioned catalogue (29 questions across motivation/business/application/hygiene waves) — with the subject's one-hop brief slice and per-wave progress. Answer,apply, re-run; resumable across sessions and agents because nothing is stored but the model.yarramate apply— all writes as one validated atomic batch (yarramate/operations/v1, ADR 0057): any invalid operation rejects the whole batch; documents are addressed by workspace-manifest paths; edits are enrich-only (scalars replace, lists append).yarramate ask— every consumed-now read behind oneyarramate/ask-result/v1envelope (ADR 0059): bare orientation (check verdict + drift + open questions + dependency-ordered backlog), free-text addressing (ask <ws> "billing"→ matching concepts seed a one-hop brief),--subjectsroster,--kindsdeclarable vocabulary,--advise(engine-composed slice + open questions + drift for the LLM to answer as the architect),--next,--open,--compare.yarramate export— every persisted artifact (ADR 0060):graph(canonical v2 JSON),markdown,briefs(a handoff bundle: one brief per projected concept + INDEX.md),likec4(delegates to the sibling adapter binary in a separate process).- Adequacy machinery (ADR 0056): linkage-depth trigger conditions and attestation claims (
yarramate/attestation/<topic>), keeping "filled adequately" structural and git-reviewed — the engine still never reads words.
Removed (no aliases — ADR 0061)
add, connect, new, compile, view, context, status, next, compare, evidence, interrogate.
| Before | Now |
|---|---|
add / connect |
one apply batch |
new projection |
author the projection file directly; check validates it |
status |
ask |
context (all forms) |
ask <slice> (brief by default; --budget digest; --json envelope) |
next / compare / interrogate |
ask --next / --compare / --open |
compile / view |
export graph / export markdown |
evidence |
reconcile reports; check --strict gates |
Changed
- Core contract declares exactly the seven commands;
status-result/v1andnext-result/v1formats, schemas, and package exports are gone (their content lives inask-result/v1). - MCP server re-exposed as four read-only tools:
yarramate_ask,yarramate_design,yarramate_check,yarramate_reconcile. initpointer, the agent skill, README, and all reference docs rewritten to the seven-verb surface.- New package schema exports:
./schema/operations,./schema/apply-result,./schema/design-step,./schema/ask-result.
The repository's own architecture model was maintained through these verbs while they were built: every self-model change in this release landed as an apply batch and was read back through ask.
v0.6.0
Seven merged pull requests since v0.5.0, closing six issues. Every change came out of dogfooding: the yarradev-ai design journey and the 2026-07-29 context benchmark sweep.
New surface
yarramate next <projection.yaml> <workspace.yaml>— the projection'splannedsubjects in dependency order, with who requires each one and its evidence coverage, so the model keeps leading during implementation instead of returning only for validation. Ordering is deterministic (Kahn with lexicographic tie-breaks, cycles marked, orientation read from each core kind's declared intent), never an opinion.--jsonemits the newyarramate/next-result/v1. (ADR 0048, closes #63)yarramate check --strict— opt-in gate that fails on contradicted evidence, rendering each contradiction as a source-locatedYM901diagnostic anchored at the declaring claim and restating the asserted relationship. A strict pass reports how many observations it evaluated, so a gate over zero evidence announces itself rather than passing vacuously. Defaultcheckis unchanged. (ADR 0047, closes #54)yarramate-likec4 export-project --check— reports generated output as fresh, stale (with per-input reasons), absent, or modified, from input digests now recorded in the generated marker. Pure digest comparison, never a semantic judgement. (ADR 0050, closes #65)
Behaviour changes to read before upgrading
⚠️ yarramate-likec4 checknow fails on unmapped projected relationships (YMLC111).map --synchas always written these entries, so a green check previously did not mean "a later sync would change nothing" — in CI that repair was discarded with the runner and the drift recurred silently every run. If your check starts failing, runyarramate-likec4 map --sync <mapping> <workspace>once and commit the result. Rendering is deliberately unaffected: a view selects a relationship by metadata, soexportandexport-projectstill accept a concept-only mapping. (ADR 0051, closes #33)export-projectno longer refuses a previously generated directory when the project legitimately changed. The gate is now provenance plus digest integrity — a valid YarraMate marker with intact output digests is safe to overwrite. A reversed--compareregeneration is consequently allowed and re-recorded, where it was previously refused. (ADR 0050, closes #58)
Improved reporting
- Reconciliation counts the unobserved:
subjectsWithoutEvidenceand a sortedunobservedSubjectslist namecurrentsubjects with no evidence observation at all — previously absent from the denominator, so summaries implied more verification than existed. Surfaced instatusas well. (ADR 0049, closes #64) YM404enumerates valid kinds for the observed endpoint aspect pair, derived from the profile's policy matrix rather than hand-written strings, so extension kinds get actionable hints too. (closes #66)
Repository hygiene
- vitest discovery scoped to the repository's own test tree;
.claude/worktrees/ignored.
Verification
pnpm verify green: 273 tests across 27 files, plus native self-validation, LikeC4 generation and validation. Package: 87 files, 76.2 kB, runtime and normative schemas only.