Skip to content

Releases: yarrasys/yarramate

v0.13.0

Choose a tag to compare

@nabsha nabsha released this 02 Aug 01:39
7cc05b1

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

Choose a tag to compare

@nabsha nabsha released this 01 Aug 23:25
56348fb

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-changes view (--changed overlay) stays at the root.
  • Applies to export-project in both yarramate export likec4 and yarramate-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

Choose a tag to compare

@nabsha nabsha released this 01 Aug 14:19
fe2a207

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 added roster also appears in the ask --changed envelope.
  • 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-changes view 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

Choose a tag to compare

@nabsha nabsha released this 01 Aug 13:30
f21a693
  • excludeStatuses joins 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 vetoes connected expansion: 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-surface view of the agent contract.

v0.9.0 — review slices derive from git

Choose a tag to compare

@nabsha nabsha released this 01 Aug 10:25
c50a4fb

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 --budget digest / --json), plus an inline coverage note naming changed subjects that appear in no authored projection.
  • export markdown --changed <range> and export 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.md

v0.8.1

Choose a tag to compare

@nabsha nabsha released this 01 Aug 09:14
4e3ece4

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: retired subjects 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 through apply is deliberately deferred (#123).
  • Flow-style items survive enrichment: apply field inserts after - { id: x, ... } items corrupted the sequence (rejected by the compile gate), and remove could 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

Choose a tag to compare

@nabsha nabsha released this 01 Aug 04:33
565f374

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 ask orientation 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, and ask --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

Choose a tag to compare

@nabsha nabsha released this 01 Aug 02:58
21b556b

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): apply now 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 design steps carry the full openSubjects roster, so when one policy answer covers N subjects (ownership, classically) the harness lands it as one apply batch instead of interviewing N times. The agent skill names the pattern.

v0.7.0 — the seven verbs

Choose a tag to compare

@nabsha nabsha released this 01 Aug 02:15
0a0c537

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 one yarramate/ask-result/v1 envelope (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), --subjects roster, --kinds declarable 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/v1 and next-result/v1 formats, schemas, and package exports are gone (their content lives in ask-result/v1).
  • MCP server re-exposed as four read-only tools: yarramate_ask, yarramate_design, yarramate_check, yarramate_reconcile.
  • init pointer, 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

Choose a tag to compare

@nabsha nabsha released this 30 Jul 03:18
e9cb86e

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's planned subjects 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. --json emits the new yarramate/next-result/v1. (ADR 0048, closes #63)
  • yarramate check --strict — opt-in gate that fails on contradicted evidence, rendering each contradiction as a source-located YM901 diagnostic 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. Default check is 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 check now fails on unmapped projected relationships (YMLC111). map --sync has 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, run yarramate-likec4 map --sync <mapping> <workspace> once and commit the result. Rendering is deliberately unaffected: a view selects a relationship by metadata, so export and export-project still accept a concept-only mapping. (ADR 0051, closes #33)
  • export-project no 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 --compare regeneration is consequently allowed and re-recorded, where it was previously refused. (ADR 0050, closes #58)

Improved reporting

  • Reconciliation counts the unobserved: subjectsWithoutEvidence and a sorted unobservedSubjects list name current subjects with no evidence observation at all — previously absent from the denominator, so summaries implied more verification than existed. Surfaced in status as well. (ADR 0049, closes #64)
  • YM404 enumerates 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.