Release Notes
Brownfield onboarding and decision extraction
cairn onboard decisions indexes decision evidence from an existing codebase; the hybrid onboard-index plus cairn-dev reference mechanism was ruled by adversarial panel (dec.brownfield-extraction-mechanism, #670, #671, #681). cairn init --from-code names an explicit review step for the scaffolded blueprint after discovery (#609), and the flow is exercised end to end against an external repository (res.autodocs-arm-a-brownfield-run, #677, #678).
- Discovery anchors candidate nodes on package manifests (
package.json, pyproject.toml, Cargo.toml, go.mod) instead of file placement and depth: the depth budget restarts at each package root, the innermost root wins, and one package maps to one node (dec.brownfield-package-root-discovery, proposed, #669). Nested packages scan clean without redundant node_modules ignores (#610, #682), and discovery-observed dependency cycles are classified advisory on measured evidence rather than failing the scan (dec.brownfield-discovery-cycle-severity, #506, #618, #642).
- An absent candidate blueprint at hook time is classified and reported rather than refused (#668).
Decision ratification and the maintainer queue
- Decisions carry a ratification tier: a
local ruling is machine-acceptable on convergent agent-cross-model review receipts bound to the decision's recomputed subject manifest, while a binding ruling, or one touching the binding surface, waits for the maintainer (dec.decision-ratification-tiers, dec.reviewer-panel-ratification, #544). An accepted local decision without two convergent receipts raises CAIRN_DECISION_CONVERGENCE_UNMET, and a receipt whose subject_hash matches no local decision's manifest is flagged.
cairn pending lists proposed decisions awaiting ratification oldest first, or renders one decision's full briefing by id (todo.maintainer-pending-queue, #536, #574).
Typed todo relationships
- Todos carry a typed relationship schema (
dec.todo-relationship-model, #570), projected to GitHub as full issue bodies and relationship links (#614, #619). cairn roadmap derives a view over the relationship edges (#571), and decisions surface reverse provenance edges, refined_by and superseded_by (dec.reverse-provenance-wire, #576).
Loop selection: deferral, strict-green, and parked findings
- Findings on the lint/scan JSON wire carry
deferred_by: the id of the accepted decision deferring the finding, or null. A Deferred-by cell naming a decision that is not accepted raises CAIRN_SPEC_RULE_DEFERRED_DECISION_INVALID and publishes no deferral, so a published deferral always names an accepted decision (dec.loop-selection-deferred-findings, #531).
- The lint/scan
data payload publishes strict_green: true exactly when --strict would exit zero over the emitted finding set. One shared predicate feeds the field and both strict exit paths, so the wire verdict and the gate cannot disagree; previously the shared-JSON path ignored --strict and exited 0 on warnings (dec.loop-selection-strict-green-fold, todo.lint-selection-folding item 2, #532).
- Todos gain an optional
defers: list that parks a matching live Info finding while the todo is blocked: cairn lint and cairn scan still print it in full, annotated (parked by todo.<slug>), and the wire publishes per-finding parked_by. Parking applies to Info findings alone and only through the typed reference; a reference aimed at an Error or Warning raises CAIRN_TODO_DEFERS_BLOCKING (CA042), one matching no finding raises CAIRN_TODO_DEFERS_UNMATCHED (CA041), and a malformed entry raises CAIRN_TODO_DEFERS_INVALID (CA043) (todo.lint-selection-folding item 1a, dec.parked-deferral-composition, #533).
- Loop-mode selection skips a finding with a published
deferred_by, folds Info findings while the wire publishes strict_green: true, and skips a parked Info finding on its published parked_by; an Error or Warning with no published deferral stays selectable whatever any artefact says.
Authorability evaluation
- A new
cairn-authoreval binary scores how authorable a blueprint is, with a published baseline from one corpus run (dec.authoreval-instrument-placement, todo.blueprint-authorability-eval, #654, #663). It scores an unparseable blueprint instead of aborting the run (#661), and the gate grades the running binary rather than a cairn found on PATH (#658).
Over-harness console (web UI)
- The web explorer gains a read-only over-harness console with three lanes (
dec.control-plane-programme, dec.orchestration-placement, #572). Node state carries a grammar that survives greyscale, stillness, and a screen reader (#692); the console renders the evidence the browser already downloaded (#693); and the dimmed-node contrast audit is honest (#691). Web UI write authority is scoped by dec.webui-write-authority.
Sources, artefacts, and scanner gates
- Sources gain a
verification: tracked mode for live in-repo material (dec.source-tracked-verification, #537), and a source whose file cites the source itself warns (dec.source-file-never-self, #539). The artefact filename convention is enforced as CA038 (dec.artefact-layout-authority, #490). Accepted-decision accumulation on a node is flagged (#517), and a configured tag registry is validated (#626).
Contracts
- Contract asserted-numeral drift is gated (
todo.contract-asserted-numeral-drift, #705). Contract node-shape drift against the blueprint is enforced with non-generative baseline management (#515, #516), replacing the deferred stance (dec.contract-node-shape-drift-deferred, deprecated).
Change lifecycle read surface
cairn change show and cairn change list report task progress: JSON carries progress: {completed, total, remaining} parsed from the change's tasks.md checkboxes, and change show prints Tasks: n/m complete, sharing the checkbox parser with CAIRN_CHANGE_TASKS_COMPLETE (#508).
cairn change accept --dry-run previews the acceptance gate: it resolves the battery, lists every step as planned with the command it would run, and reports gate_outcome: preview. Previously --dry-run was parsed as the change id (#508, gh:#241).
Landing page and CLI
- The public landing page is rebuilt on a dedicated marketing design lane (
dec.marketing-visual-world, #500, #507). cairn init scaffolds ignore suggestions (#615), and status and todo paths render relative to the project (#616, #620).
Coordination and hooks
- Fact-store writes and reads are hardened (
dec.coord-fact-write-once, #643). Auto-PR merge pins to the gated head (#629), blocked hook output points to remediation (#624), and configured decisions pointers are honored (#622).
Wire format
- Query and web UI
/api/* JSON payloads move from schema_version 3 to 12: change progress (#508), deferred_by (#531), strict_green (#532), parked_by (#533), the todo relationship schema (#570), the pending queue (#574), reverse provenance edges (#576), and normalized artefact paths (#617).
Install cairn-framework 0.10.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/cairn-framework/cairn/releases/download/v0.10.0/cairn-framework-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/cairn-framework/cairn/releases/download/v0.10.0/cairn-framework-installer.ps1 | iex"
Install prebuilt binaries via Homebrew
brew install cairn-framework/tap/cairn
Download cairn-framework 0.10.0