v2026.5.120
·
1227 commits
to main
since this release
Features
- cleo tree --human: default footer legend (icons + counts) — JSON unchanged (T10114)
- B1 typed render contracts — TreeResponse, TableResponse, ListResponse, RenderableEnvelope (T10126) (T10138) (T10139) (T10140) (T10141) (#531)
- B2 typed icon enums — StatusIcon, KindIcon, BadgeIcon, RelationIcon with ASCII fallback (T10127) (#543)
- B3 static UI primitives — Tree, Table, Section, Badge, Legend in @cleocode/animations/render (T10128) (T10142) (T10143) (T10144) (T10145) (T10146) (#549)
- B5 renderEnvelopeForHuman() public API + (command, kind) → renderer registry + generic fallback (T10130) (#544)
- B9 generic cleo tree — walks parent + groups edges to full depth, KindIcon + ⊂ relation prefix (T10134) (#563)
- Extend attachments table with 7 docs-provenance columns + 2 indexes mirroring brain_decisions supersession pattern (T10158 / Saga T9855 / E12) (T10158)
- core,docs: atomic ID-numbering utility — replaces fs-readdir slug allocation (T10159 / Saga T9855 / E12; absorbs T10153) (T10159)
- doc body schema validation per DocKind (requiredSections[]) with --strict gate — absorbs T10154 (T10160)
- cleo docs update — in-place update with version history (T10161 / Saga T9855 / E12.C4) (T10161)
- cleo docs supersede — atomic SQLite transaction that flips lifecycle_status to 'superseded' on the old row and links both rows via the supersedes/superseded_by self-FK pointers (T10162 / Saga T9855 / E12) (T10162)
- cleo docs find --similar — surface llmtxt rankBySimilarity over an existing seed doc (T10163)
- backfill adr-index.jsonl into attachments + freeze JSONL writer (T10165 / Saga T9855) (T10165)
- docs provenance graph contract — DocProvenanceResponse, ProvenanceNode discriminated union, edge relations (T10166 / Saga T9855 / E12) (T10166)
- ct-documentor update vs supersede vs create decision tree (T10168)
- CI gate: docs similarity lint blocks PRs adding near-duplicate docs (T10170)
- cleo backup recover brain CLI verb + operator runbook (Saga T10281 SG-BRAIN-DB-RESILIENCE) (T10304)
- db-inventory SSoT artifact + contracts type (T10305)
- cleo doctor db-substrate — fleet/integrity/orphan walker (Saga T10281 / Epic T10282) (T10307)
- Orphan project-root DB detection in cleo doctor db-substrate (Saga T10281 / E1) (T10308)
- cleo doctor legacy-backups — retention walker + ADR-013 §9 policy (Saga T10281 / Epic T10282) (T10309)
- doctor db-substrate: per-DB pragma drift detection (Saga T10281 / Epic T10283) (T10310)
- cleo doctor db-substrate — per-DB Drizzle migration coverage cross-check (Saga T10281 / Epic T10283) (T10311)
- Pin SQLite version + reference upstream bug-tracker in specs/sqlite-pragmas.json (T10313)
- ratify .cleo/backups/sqlite/ as the canonical SQLite backup path (T10315)
- vacuumIntoBackupAll covers every DB_INVENTORY entry (Saga T10281 / Epic T10284 / E3-BACKUP-RECOVERY) (T10317)
- Generalise the brain.db recovery pipeline to
cleo backup recover <role>for every DB in DB_INVENTORY (Saga T10281 / Epic T10284) (T10318) - cleo backup verify — per-DB freshness + integrity walker (T10319)
- doctor db-substrate: cross-DB orphan-row report (5 invariants I1-I5) (T10323)
- schema: @cross-db JSDoc tag + lint gate + ADR-068 charter rule (Saga T10281 / Epic T10285 E4-DB-CROSS-LINKS) (T10324)
- extend TaskType union to include 'saga' per ADR-083 §2.5 (Saga T10326 W1.A) (T10328)
- widen TASK_TYPES Drizzle enum + reversible saga migration (T10329)
- retype assertSagaInvariantI3/I5/I7 against SagaTask with dual-shape window (T10330)
- central invariants registry + ADR-073 I1-I8 registration (T10335)
- enumerate ADR-070 ORC-### codes + register in central substrate (T10336)
- R3 Zod schema for ADR-051 evidence atom grammar + GATE_EVIDENCE_REQUIREMENTS (Saga T10326) (T10337)
- cleo doctor --audit-invariants walks central INVARIANTS_REGISTRY (Saga T10326 R6) (T10340)
- R8 — auto-render docs/registry/INVARIANTS.md from INVARIANTS_REGISTRY + CI drift gate (T10342)
- brain writer-locking: single-writer chokepoint via worker thread (Saga T10281 / Epic E5) (T10351)
- cleo docs add strict flag validator (closes T10238) (T10359)
- T10360 E3.2: cleo docs add --type adr auto-numbers via allocator (closes T10153) (T10360)
- T10361 E3.3: docs add similarity warn (closes T10167) (T10361)
- T10366 E2.1: DocKind Writer Registry foundation (T10366)
- T10367 E2.2: cleo docs add --type changeset delegates to writeChangesetEntry (T10367)
- feat(docs): wire slug allocator preflight into docs add CLI (T10386 recovery) (T10386)
- T10388 E1.3: cleo changeset add wires allocator + E_SLUG_RESERVED parity (T10388)
- T10392 E1.1: central slug allocator chokepoint (T10392)
- spawn: wire lint-changesets gate into spawn prompt (T10448)
- TemplateManifest contract types + Zod schemas (Saga T9855 / ADR-076) (T9875)
- ConfigManifest types + 4 built-in entries with merge precedence (Saga T9855 / ADR-076) (T9876)
- SSoT template registry over TemplateManifest (T9877)
- feat(core): resolveCleoConfig + ConfigManifest registry with precedence chain (T9878 / Saga T9855) (T9878)
- cleo templates {list,show,install,upgrade,diff,validate} CLI namespace (T9886 / Saga T9855 / E4) (T9886)
- cleo config {show,get,set,validate,drift-check} CLI namespace wrapping the SSoT ConfigManifest registry (T9876+T9878). Adds --scope global|project|merged on read verbs and --type string|number|boolean|json on set. (T9887)
- Deprecate cleo init --workflows; delegate to cleo templates install (T9888 / Saga T9855) (T9888)
- feat(core,sentient): detectTemplateDrift Tier-2 detector for installed-template drift (T9895)
- detectContextStaleness — Tier-2 sentient proposal when project-context.json is >30 days old (T9896)
- feat(core,sentient): detectConfigDrift — Tier-2 proposal on cleo config validate violations (T9897 / Saga T9855 / E6) (T9897)
- owner-approval execute-action for Tier-2 propose accept — closes Epic T9861 (T9898 / Saga T9855 / E6) (T9898)
- Unified urgent surface across find/next/briefing/show (priority + severity dual-axis) (T9905)
- OperationInputContract + ValidationResult + ValidationError contracts (Saga T9855 / E7) (T9914)
- SSoT validateOperationInput over OperationInputContract via AJV (Saga T9855 / E7.2) (T9915)
- collectMutateInput CLI transport adapter — params/file/stdin/positional precedence (T9916 / Saga T9855) (T9916)
- cleo schema --input + --examples for agent introspection (T9918 / Saga T9855) (T9918)
- feat(contracts,core): promote meta.suggestedNext to envelope-wide CliMeta field (T9920 / Saga T9855 / E8) (T9920)
- Auto-populate meta.suggestedNext for tasks.{add,add-batch,update,complete,find} (Saga T9855 / E8.2) (T9921)
- MVI projection by default for read ops; --verbose/--human/--full opts out (T9922 / Saga T9855 / E8) (T9922)
- feat(contracts,core): rename meta._tokenEstimate -> meta.tokens (T9923 / Saga T9855 / E8) (T9923)
- CI gate locking down process.stdout.write outside renderer SSoT (T9924 / Saga T9855 / E8) (T9924)
- stdout=envelope-only discipline + Pino reroute to stderr (T9928 / Saga T9855 / E9) (T9928)
- feat(cleo,core): --field flag for scalar extraction (T9929 / Saga T9855 / E9) (T9929)
- feat(cleo): --output {envelope|id|table|count|silent} flag (T9930 / Saga T9855 / E9) (T9930)
- core: minimal-by-default mutate envelopes — {count, ids[]} (T9931 / Saga T9855 / E9) (T9931)
- Add --summary flag for cleo show + cleo list: render 1 line per record ( [] ) (T9932)
- Add global --quiet flag with centralized stderr-suppression policy (logger silent, progress no-op) (T9933)
- cleo release validate-changelog verb + workflow integration (Saga T9862) (T9937)
Fixes
- Wire mutate:tasks.relates.remove in the operations registry so
cleo relates removesucceeds (T10111) - auto-recover malformed brain.db via snapshot restore (T10303)
- doctor db-substrate auto-quarantine on integrity_check failure (T10312)
- vacuumIntoBackupAll brain backup gap — eager-open via openCleoDb chokepoint (Saga T10281 / E3-BACKUP-RECOVERY) (T10316)
- openCleoDb brain misroute (T10397) + project_id consistency gate (Saga T10281 / Epic T10285) (T10322) (T10397)
- validateTaskType accepts 'saga' (closes T10326 dogfood AC6 gap) (T10326)
- cleo add/update: typed validation for --severity + --pipeline-stage at CLI dispatch (T10341)
- retention discipline for brain_weight_history + brain_plasticity_events (T10348)
- cleo tree --human emits canonical box-drawn tree in non-TTY (was empty) (T10352)
- T10389 E1.4: cleo docs/changeset add worktree-aware routing (closes T10365) (T10389) (T10365)
- HOTFIX: co-locate db-inventory.json in @cleocode/contracts to fix v2026.5.109 install regression (T10399) (T10305)
- lifecycle hook walks task_relations.groups for saga auto-close (T10425)
- bump CLEO-INJECTION.md size cap 400->450 to unblock main CI (T10465)
- release.yml darwin-x64 prebuild non-blocking via continue-on-error (T10479)
- release.yml — remove darwin-x64 from prebuild matrix (macos-13 runner pool fundamentally unavailable) (T10479)
- bump spawn timeout 60s->180s + wire --orchestrator-defer flag (T9823) (T10430)
- validateLabels: accept canonical uppercase task-ID labels (T9813) per ADR-073 (T9824)
- IVTR Lead Validate-phase prompt auto-injects full per-package test guidance on infrastructure touches (T9814 precedent) (T9842)
- lock in cleo docs add regression test (T9901 / gh-#98) (T9901)
- cleo changeset add rejects invalid kind values + lint surfaces all violations (T9936)
- build.mjs declares cant as a hard prereq of caamp via explicit PACKAGE_DEPS map (T9939) (T9939)
- engine-result wrappers preserve CleoError LAFS codes across tasks domain (T9940)
- Regression-lock
cleo cancel <id>+cleo update --status cancelledon pending tasks with no verification gates (T9947)
Refactors
- B4 migrate format-helpers (kvBlock, dataTable, truncated) from packages/cleo to packages/core/render (T10129) (#540)
- B6 decompose system.ts (1302 LOC) into packages/core/src/render/{session,orchestration,brain} (T10131) (T10147) (T10148) (T10149) (#560)
- B7 decompose nexus.ts (1055 LOC) into packages/core/src/render/nexus/{graph,contracts,audit} (T10132) (T10150) (T10151) (T10152) (#551)
- B8 decompose tasks.ts (371 LOC) into packages/core/src/render/tasks (T10133) (#556)
- Sweep production saga callsites from labels.includes('saga') to isSagaType / type==='saga' (Saga T10326 W2.B) (T10331)
- release/invariants/registry.ts becomes consumer of central INVARIANTS_REGISTRY (T10339)
- T10368 E2.3: audit + dedupe SSoT-only writers (T10368)
- Rewire internal template/config resolver callers to SSoT registry (closes Epic T9857) (T9879)
- Retrofit tasks.add, tasks.add-batch, and tasks.update to OperationInputContract (T9917 / closes Epic T9903 / Saga T9855) (T9917)
Documentation
- B12 finalize ADR-077, update ct-cleo skill (Tier-0), add Human Render Contract to CLEO-INJECTION (T10137) (#561)
- amend ADR-068 charter — 12-row inventory + nested-nexus flag (T10306)
- ADR-085 — Cross-DB Invariants Catalogue (Saga T10281 / Epic T10285) (T10320) (T10285) (T10281)
- ADR-086 — nested ~/.local/share/cleo/nexus/ disposition (BAN) + migration tool + runtime warning (Saga T10281 / Epic T10285) (T10321)
- Amend ADR-073 §4 to retire 'Saga is NOT a TaskType' (forward-points at ADR-083 §2.5); add SG- display preservation snapshot tests (cleo renderers + core toTreeKind) proving both saga storage shapes render identically (Saga T10326 W3.B) (T10333)
- T10353 E4.1: audit cleo docs/changeset CLI verb matrix (T10353)
- T10354 E4.2: audit llmtxt SDK import-edge surface across CLEO (T10354)
- T10355 E4.3: gap verdicts (CLEO vs SDK responsibility) (T10355)
- T10356 E4.4: no upstream llmtxt issues filed (degraded path) (T10356)
- T10357 E4.5: ADR-079 docs-SDK boundary contract (T10357)
- T10358 E4.6: E4 closure handoff (T10358)
- T10362 E3.4: docs add --help refresh + 5 ct-docs-* SKILL.md sync (T10362)
- T10370 E2.5: ct-documentor + ct-docs-write reference WriterRegistry SSoT (T10370)
- T10390 E1.5: global slug namespace decision + ADR-076 amendment AMD-001 (T10390)
- GH #94 / T9900: document the canonical contract — cleo verify NEVER auto-completes (verify→complete is explicit) (T9900)
- ADR-039 amendment for E8 envelope fields + LAFS conformance updates (closes Epic T9919 / Saga T9855) (T9925)
- ADR-086 + ct-cleo + CLEO-INJECTION: CLI Output Contract (E9 closeout doc, Saga T9855) (T9934)
Tests
- B11 renderEnvelopeForHuman perf contract — 100/1000/10000 rows + 100/1000 nodes (T10136) (#559)
- integration regression — chokepoint auto-recovery on malformed brain.db (T10302)
- Idempotency contract tests for brain/conduit/llmtxt/manifest DBs (Saga T10281 / Epic T10283) (T10314)
- T10375 E5.5: verify T9976 docs->memory auto-emit payload shape (T10375)
- Add real-registry tier-filter snapshot test locking cleo ops Tier 0/1/2 surface (T9845 closeout — T10061 already moved OPERATIONS+tier SSoT to contracts) (T9845)
- integration tests for templates+config namespaces + cliCategory audit (closes Epic T9859 / Saga T9855 / E4) (T9889)
Chores
- B10 CI gate 'Stdout Discipline Lint' — prevents render logic leaking back into packages/cleo (T10135) (#569)
- T10294 spike: reproduce slug collision + RCA + decision (T10294)
- CI gate scripts/lint-saga-label-anti-pattern.mjs blocks new labels.includes('saga')/hasSagaLabel/isSagaEpic/SAGA_LABEL sites; baseline pins 24 residuals (T10332)
- T10338: CI gate scripts/lint-invariant-registry.mjs validates registry/ADR symmetry (Saga T10326 R4) (T10338)
- T10363 E3.5: close absorbed tasks T10238 T10167 (T10153 pending T10360) (T10363)
- T10369 E2.4: CI gate enforces one writer per DocKind (T10369)
- T10371 E5.1: migrate T10179/T10203 manual-write workarounds into SSoT (round-trip parity test) (T10371)
- T10372 E5.2: manual-write sweep audit script for canon.yml rawMdPaths (T10372)
- T10373 E5.3: remediate sweep-identified orphan manual writes (5 files migrated into SSoT via cleo docs add with preserved slugs; round-trip parity tests added; ct-documentor SKILL.md updated) (T10373)
- T10374 E5.4: close T9625 SG-CLEO-DOCS-CANON saga via reconcile (T10374)
- T10376 E5.6: SG-DOCS-INTEGRITY saga closeout handoff (T10376)