Browse docs▾
Changelog
All notable changes to coding-os are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Development began in April 2026 and the full history is preserved in this repository. Release automation (release-please) starts at the 0.3.0 baseline below; entries before the first tagged release were written by hand and describe the project as it was on that date — the current adapter/parity state lives in docs/engineering/adapter-parity.md.
0.3.20 (2026-08-15)
Added
- adapters: give Hub chat a real port instead of a duck-typed SDK module (6dc3fc1)
- bench: measure the always-on context cost per project profile (c6c6015)
- bench: rank always-on rules by measured blocks per token (f7394e1)
- doctor: report whether the hook layer has a JSON/stdin parser at all (91e13cf)
- eval: pre-register the ablation and mine its candidate task set (fb3370c)
- stacks: mark which stacks CI actually builds, derived from the matrix (fb96358)
Fixed
- adapters: tool_guard raises instead of silently dropping the write policy (da5041b)
- bench: never score an envelope the harness could not read (91d5b2d)
- bench: score against a realistic baseline and never score a truncated envelope (5dbaf84)
- core: resolve the agent runtime through the adapter registry, not by SDK name (ccf55f8)
- db: hold the migration write lock for the whole apply loop (43dfb2a)
- db: type the migration proxy at its call site (07e6940)
- docs: replace the hand-computed meta-repo budget with a profiler run (c255ebc)
- doctor: report stack rules that have drifted from their template (4c22078)
- graph: revive two enforcement globs that matched no file (d47e838)
- graph: stop reporting zero references for structural node kinds (0f64cf9)
- hooks: degrade stdin read perl -> python3 -> cat so gates never fail open (0731594)
- hooks: read the governance keyword from the task, not the marker string (42c4fc0)
- hooks: scope the layered-backend rules to stacks that opted into them (c5c8c49)
- hooks: stop every blocking gate from flipping its verdict when jq is absent (7c55a56)
- hub: refuse an off-loopback bind with no token, stop mounting all of $HOME (001be95)
- memory: reading a pattern no longer raises its confidence (4a6f057)
- packaging: make a wheel install actually serve the Hub (c6d3a16)
- ssot: reconcile five facts the repo stated in two places (f56c0db)
- test: size the hook subprocess timeout as a hang detector, not a budget (1f9d4bb)
Changed
- comments: strip TASK-NNN provenance and gate it shut (67dd8dd)
Documentation
- agents: add the file-size gate to the matrix row for edited Python (f6fd39b)
- bench: replace the strawman savings claims with measured, baselined numbers (0d319d0)
- eval: move the ablation onto SWE-bench Verified and name the run environment (f8393e5)
- graph: a zero from references is a coverage signal, not just truncation (9877aa4)
- readme: publish what one project actually receives, per stack and per profile (56c6d7a)
- readme: quote the exact preset figure rather than a rounded group (45f15bc)
Build
- add
make lintso a local check cannot be narrower than CI (c23c277)
0.3.19 (2026-08-14)
Fixed
- hub-ui: picking a project no longer bounces chat and memory to Hub home (a3eaa3c)
- hub: say codex live chat is unbuilt instead of explaining in-process streaming (f86e047)
Documentation
- readme: show the Web Hub with five annotated screenshots (bd3aa8e)
0.3.18 (2026-08-14)
Fixed
- templates: pin log4j2 2.25.5 in the spring-boot scaffold for CVE-2026-49844 (c6be65d)
Documentation
- governance: turn the PyPI approval gate off and record why the reversal is the lesson (fa3a087)
Build
- security: hash-pin the build frontend and verify the uv installer before running it (e676d5b)
0.3.17 (2026-08-13)
Documentation
- agents: add the Verification-Matrix row for src/core/rules and src/core/skills (1bd26e7)
- governance: gate irreversible publishes behind a human, and say why review cannot be bought here (7a0d27d)
0.3.16 (2026-08-13)
Fixed
- deps: bump nanoid to 3.3.18 for GHSA-2v37-7h3g-55p8 (6a4ad9d)
Documentation
- ci: correct the Signed-Releases prediction with the measured result (f76a359)
0.3.15 (2026-08-13)
Fixed
- board_os: freeze the clock in the reconcile determinism test (4615982)
- ci: drop the unused noqa that failed the ruff gate (c8dec8e)
- ci: make Dependabot able to satisfy the gates this repo already has (05c93d3)
- ci: set the mypy baseline from the CI count, not the local one (bbb39fd)
- deps: clear all 79 OSV advisories across scaffolds and locks (c7cab87)
- graph_os: use SHA-256 for the three derived content digests (41946cf)
- release: bump uv.lock with pyproject.toml and gate the drift in CI (912f902)
- security: close the weak-hash, ReDoS and URL-substring CodeQL alerts (ba37021)
- security: log exceptions under a correlation id instead of returning str(exc) (7fbffcb)
- security: one path-segment validator, applied where request data joins a path (cf343c3)
- web: drop the control-char regex class that broke the ESLint gate (b670471)
- web: escape quotes and gate URL schemes in the task markdown renderer (c596947)
Changed
Documentation
- bench: publish the Django 5.2 third-party token-cost row (#37) (c51ecea)
- ci-gates: record the CodeQL fix-vs-dismiss policy and the reachability test (ad6b4d9)
- ci-gates: record the measured 5.9 to 7.4 outcome, not the prediction (7dc5ce4)
- ci-gates: record the Scorecard weight model and its honest ceiling (41288b0)
- insights: record that fixing a CodeQL finding and clearing its alert are separate jobs (9f23636)
- insights: record why a gate below a self-healing command is a no-op (6fa4869)
- release: define the merge trigger and correct the pre-1.0 bump table (fb006ca)
Build
- pin Docker base images by digest and the release build backend (a63730e)
0.3.14 (2026-08-12)
Fixed
- scripts: point the session-resolver probe at the helper's real module (f6105a6)
- tests: make the script smoke test catch sys.path bootstrap bugs (4117200)
Changed
- scripts: point the session-resolver probe's docs at the real module (d9d7b0b)
0.3.13 (2026-08-12)
Added
- ci: add zero-tolerance mypy error codes above the count ratchet (dcb5b59)
- cli: offer quick vs custom setup and close init with an actionable panel (bd008b7)
- cli: tell consumers which command actually upgrades coding-os (16f38a5)
- hooks: make the documented 300-line budget visible at write time (03223e2)
- hub: list MCP servers by scope and accept custom http/sse servers (e80a3c8)
- hub: manage MCP servers per adapter, per scope, on both transports (d1bbe50)
- hub: probe adapter chat, dispatch and transcript capability at runtime (2b5c611)
- hub: rebuild the Memory tab around the trust ladder (65cb794)
- hub: show role titles and name what each inherited default resolves to (452172a)
- rules: add Critical Rule 27 — runtime cost is correctness (6cb07ef)
- scripts: add a split-parity guard that proves a module move edited nothing (1b1f508)
Fixed
- ci: annotate the split fixtures as generators so the mypy ratchet holds (a594051)
- ci: make dispatch readiness assertions environment-independent (1bf6166)
- ci: repoint the workflow, Makefile and scan-ignore paths at the split test modules (072b009)
- ci: resolve the remaining flat sibling imports for mypy (004fd5b)
- ci: restore the mypy BASELINE to the CI-measured value (3283e41)
- ci: silence the flat-sibling import class for board_os and thinking_os tool modules (d153222)
- ci: spell out the flat-sibling mypy overrides so the dead glob stops hiding errors (29a1eab)
- cli: register every command before the main guard runs (311aeb2)
- cli: restore the dropped return in _normalized_hook_map (d76583f)
- docs: repair three Verification-Matrix rows that resolved to no tests (80a6293)
- gates: measure the mypy count over kernel source, not test preambles (b2b80aa)
- graph_os: drop the duplicated _php_short_name left by the contracts split (1503226)
- graph_os: roll back the write transaction when a backend statement raises (028196b)
- hub: name the graph doctor tab and label its informational findings (e5d41a3)
- hub: start the daemon without project- or session-scoped COS_* env (cadaaa2)
- memory: render distilled lessons in the agent-memory mirror, not block counters (ba79946)
- memory: sweep orphaned outbox rows so the embedding drain stops starving (5c809ae)
- mypy: bind the strict overrides to the module names mypy derives (0489c6d)
- presence: restore the chat presence probe globals a module split left behind (08d0b65)
- release: unblock CI — regenerate api-types, split db pool, clean shellcheck (68f2d2b)
- skills: drop the live model id from the no-hardcoding example (91f1fbe)
- tests: assert sqlite3.Error so the rollback guard passes on 3.11+ (c179e6b)
- tests: keep the cos-env marker-parity assertion within its size ratchet (9e27c13)
- tests: repoint the assertions the cos-env and config splits moved (3ac4da3)
- update: re-register hooks in the agent settings file when it falls behind (47c7030)
- update: stop cos update relinking skills the project opted out of (0f8adc4)
- web: keep the cognition helpers reachable and patchable after the split (76f46c1)
- web: re-export the moved cognition helpers from the facade (d753929)
Changed
- board_os: split id allocation, card shaping and forge refs out of _mcp_shared (a0dc6c6)
- board_os: split reclaim into stranded, pick, report and work-log modules (54d08b0)
- board_os: split the git commit sources and the edit tool out of task history (e0d5fef)
- board_os: split the override audit and result types out of the gate validator (f8112e0)
- board_os: split the ready label and reposition tools out of the lifecycle module (1b5818b)
- board_os: split workflow into types, wip, deps, frontmatter, and gates (926297d)
- claude: lift prompt, schema, env and result mapping out of dispatch (0135441)
- claude: split the SDK dispatcher into options, telemetry and result modules (9501dcd)
- clean-code: move the error-handling and split-mechanics depth into references (dc6ac4e)
- cli: move per-project skill enablement out of the skill commands (4e9398c)
- cli: move the first doc + graph index runs out of the init phase driver (336b885)
- cli: move the installed-asset manifest engine out of cos update (4b29d21)
- cli: split AGENTS.md, CI and Docker rendering out of renderer.py (0acefef)
- cli: split board commands into shared, lifecycle, views, outcome and validate (9a8dccf)
- cli: split doctor_extras into runtime, adapter and project checks (b77220b)
- cli: split graph commands into shared, query, reindex, ingest and group modules (cb86e0a)
- cli: split hub file locations and the service group out of hub_commands (94a61e2)
- cli: split init target resolution, git bootstrap and materializers into leaves (39f81d7)
- cli: split main into path leaf, init, adopt, install and runtime command modules (90f4b25)
- cli: split the core-rule link cascade out of the module commands (9af0a9c)
- cli: split the doctor check-orchestration sequence into a leaf (34d7fde)
- cli: split the graph doctor checks into pipeline, storage and embedding leaves (810b763)
- cli: split the runtime doctor checks into cognition, hooks, presence and schedule (5a8f65f)
- cli: split the stack registry into manifest parsers and relocation rules (d5c9b0a)
- cli: split the stack-registry and MCP launch doctor checks into leaves (15f78dd)
- core: split learning.py and graph.py along their real cohesion seams (da130a2)
- graph_os: decompose cos_graph_doctor into edge, orphan and path checks (5712ad4)
- graph_os: decompose the ts symbol walk into a declaration pass and a call pass (b23a6d7)
- graph_os: move the doctor's orphan classifier to a leaf module (421e0ae)
- graph_os: split change analysis into impact, rename and contract modules (7dde54a)
- graph_os: split code_generic into spec, node walk and edge-hook modules (8299fa7)
- graph_os: split code_go into uid, symbol, type, package, call and regex modules (abcf452)
- graph_os: split code_php into a uid leaf, symbol walker, and call walker (1bf573a)
- graph_os: split code_python into uid, decl, tree-sitter, visitor and emit modules (92858a4)
- graph_os: split code_ts into a uid leaf, node primitives, symbol walk and regex scanners (ff6824e)
- graph_os: split md_links into a shared base leaf, uids, resolve and section modules (b4ff3fb)
- graph_os: split the community processes view out of the export tool (0d366dc)
- graph_os: split the contracts extractor into one module per ecosystem (2b87fff)
- graph_os: split the graph kernel into envelope, walk and lookup leaves (4b83aa3)
- graph_os: split the insight tools into structure, centrality, ranking and hygiene (5a76647)
- graph_os: split the PHP contract scanners into their own module (0d66cc3)
- graph_os: split the read tools into read, paths, references and similar (69a41cc)
- graph_os: split the reindex dispatcher into routing, state and layer modules (349d21b)
- graph_os: split the sqlite backend into a connection base and three mixins (9346953)
- graph_os: split the TypeScript regex fallback out of code_ts (4ad773a)
- graph_os: split uid derivation and node emission out of the shell extractor (7681d00)
- hooks: move doc-sync symbol extraction to its own leaf module (e0f378f)
- hooks: split cos-env.sh into path, log, io and state function leaves (017772f)
- hooks: split the branch guard into shared refs, trunk and pr policy (384d02b)
- hub-ui: clear the last three files over the backstop (18813f1)
- hub-ui: split DashboardPage into types, format leaf, data hook and widgets (c26f5df)
- hub-ui: split DoctorPage into one module per diagnostic tab (9dbb0b0)
- hub-ui: split HubHome into types, shared leaf, icons, card and dialogs (b0213da)
- hub-ui: split OnboardingWizard into types, constants, controls and a composer hook (fc1514e)
- hub-ui: split SettingsPage into types, primitives and one module per section (1db5d42)
- scheduled: split nightly into memory, board and index leg modules (4972240)
- scripts: split the MCP audit into a shared harness and per-group probes (98bb073)
- supervision: split the routing policy out of the capacity breaker (45fd7fd)
- thinking_os: move the embedding outbox into its own module (a6871ea)
- thinking_os: split cognition into supervise, audit, routing and classify (5f11a81)
- thinking_os: split cognition.py into dispatch, a shared leaf, and the gates (6506f74)
- thinking_os: split doc tools into hints, retrieval and header modules (6c6fc31)
- thinking_os: split doc_indexer into chunking, sources and store modules (a1e6488)
- thinking_os: split formula dispatch into request building and persistence (cbf7fd4)
- thinking_os: split learning into extract, suggest, validate and generalize modules (789c734)
- thinking_os: split memory tools into ranking, semantic and search modules (5452fba)
- thinking_os: split skill routing, weights and failure anatomy out of routing.py (021b7de)
- thinking_os: split the agent and situation registry loaders out of cognition (9ed4c36)
- thinking_os: split the cognitive artifact value types out of the schemas module (0ef8ce4)
- thinking_os: split the cos_task_* tools into records and lifecycle modules (3169a07)
- thinking_os: split the human-readable report renderer out of health_check (27bd214)
- thinking_os: split the MCP envelope into size, trim, subgraph, errors, and gating (d11b6ce)
- thinking_os: split the metric, recall and learning tools out of _tools_memory (08b2780)
- thinking_os: split the prompt keyword heuristics out of the formula composer (c4234fb)
- web: move the cognition router to a leaf and split out the dispatch views (e8c9169)
- web: split board routes into shared, presence, autospawn, git and view modules (11721b0)
- web: split cognition chat serialization into a leaf module (080cca3)
- web: split hub routes into shared, init, init-routes and scan (7dad131)
- web: split presence runtime readers and context accounting into leaves (8141db5)
- web: split the cached graph export endpoint off the thin route wrappers (2da5a2d)
- web: split the cognition chat routes from their SDK, prompt and lookup seams (825389c)
- web: split the cognition routes into chat and onboarding modules (a2c2957)
- web: split the config routes into shared, read and mutation modules (a283be8)
- web: split the presence and activity snapshots out of the SSE stream route (d413170)
Documentation
- adr-0016: record the held-out eval-gate spike verdict as a measured no-go (b9326b0)
- ci-gates: record the four burndown splits and the two traps they surfaced (fbb77e5)
- ci-gates: record why embeddings.py stays whole and how the envelope split cleared mypy (bf34bad)
- ci: record why the pr_commands split was reverted (b2c8f70)
- clean-code: adopt one output contract for scripts and checks (99d6000)
- clean-code: name resource lifetime on the failing path as a rule (d26fd8f)
- clean-code: record the five resolution mechanisms a module split breaks (e768e4b)
- insights: record the reproduce-before-fixing lesson from TASK-929 (319f681)
- insights: record the type-checker re-export trap in a facade split (5e27b56)
- readme: merge the two quickstarts and correct the supervision copy (b11a987)
- record the real oversized-file state after the burndown session (cb0f23b)
- record the session-context exception and the real burndown numbers (b8b30e2)
- skills: add upload, rate-limit, concurrency, CQS and file-splitting standards (51d48c1)
Build
0.3.12 (2026-08-10)
Added
- quality: enforce an 800-line file ceiling at write time and in consumers (859425a)
- quality: make the file-size budget cohesion-first and surface it everywhere (541b643)
Fixed
- ci: give diff-cover a real merge base so the gate can pass (20248dd)
- ci: reformat after the main.py split and tighten the size ratchet (3602dce)
- ci: stop counting unresolvable flat sibling imports in the mypy ratchet (93a09ab)
- thinking_os: make the database sibling imports work under both import identities (e257310)
Changed
- cli: split main.py into cohesive init modules, 3111 lines to 1605 (3f1cabc)
- thinking_os: split database.py into paths, the migration ledger, and a facade (70f3533)
- thinking_os: split the 3159-line server.py into a facade plus domain modules (4d12c4d)
Documentation
- insights: record the four break modes of a dual-identity module split (7414348)
Build
- deps: bump aiohttp from 3.13.5 to 3.14.3 (#29) (e96e7cf)
- deps: bump cryptography from 48.0.0 to 50.0.0 (#26) (0f70fed)
- deps: bump mcp from 1.27.2 to 1.28.1 (#27) (ea27f11)
- deps: bump python-multipart from 0.0.29 to 0.0.31 (#51) (64296e1)
- deps: bump starlette from 1.2.1 to 1.3.1 (#50) (86e2a15)
- deps: bump torch from 2.12.0 to 2.13.0 (#28) (de6cc90)
0.3.11 (2026-08-10)
Fixed
- ci: keep sigstore bundles out of the PyPI upload directory (5080d3c)
- ci: write the release SBOM to an existing directory (3461b46)
0.3.10 (2026-08-09)
Added
- board: add cos task-validate --repair for stale duplicate frontmatter (d609a32)
- graph_os: reproducible third-party token-cost benchmark harness (ba8d79c)
Fixed
- cli: stop cos init rejecting piped stdin for the agent prompt (e1b4a86)
- cli: stop cos update reporting drift on a freshly initialised project (6e0a95f)
- lint: clear the ruff baseline and fix bug-prone patterns (7caea1e)
- tests: type the frontmatter-repair tests and use the core.board_os import path (d20bcbc)
- types: declare all on the split facades so re-exports are explicit for mypy (2c6fdac)
Changed
- board_os: split mcp_tools.py into a facade over private mcp* siblings (6f0e9fc)
- cli: split doctor.py into a facade over doctor_checks_* siblings (2ec606b)
- graph_os: split graph.py into four private tool-family modules (8478d64)
- tests: split test_cli.py into _cli_suite part modules (141e102)
Documentation
- add front-matter headers to ci-gates and stability-contract (b19fcf1)
- correct the mypy baseline and state each gate's real scope (863c5b4)
- governance: add GOVERNANCE + MAINTAINERS and the agent-workflow contributor guide (4915a67)
- readme: correct the supervision cooldown scope and list the command (299c4f0)
- refresh generated indexes for ci-gates and stability-contract (6bd0391)
Build
- coverage: scope the coverage gate to src/core on the src suites (f7a7dec)
0.3.9 (2026-08-07)
Fixed
- board: anchor the DoD verify ledger to the project root (1a04d6e)
- cli: stop cos update deleting adapter-owned hooks (54dac1d)
- hub: keep a saved supervision target visible when its adapter is unavailable (9d54c91)
- hub: stop the settings toggle reading inverted (5966767)
- supervision: enforce trigger modes and make the orchestrator target the role default (f221330)
- supervision: hold the recovery probe for its whole run and report the soonest recovery (44cfb37)
- supervision: meter capacity per model pool instead of per adapter (bfe13e6)
- supervision: restore adapter validation and protect the capacity recovery probe (8451079)
Documentation
- refresh the engineering index after the supervision doc update (501687f)
- rules: sync the model-routing rule to the enforced supervision trigger modes (96cefa4)
- supervision: document probe-lease duration, fleet exhaustion, and the adapter contract (05ee39c)
- supervision: document the enforced contract, add the operator playbook and README section (b1d0633)
- supervision: record what a provider limit actually applies to (72c8c2b)
0.3.8 (2026-08-07)
Fixed
- make supervision configurable without Hub (33001c0)
- sync shared supervision OpenAPI schema (29e2509)
0.3.7 (2026-08-07)
Added
- add configurable agent supervision (b924120)
Fixed
- sync Hub OpenAPI snapshot (bdbe6be)
Documentation
- define configurable agent supervision (bc5846f)
0.3.6 (2026-08-06)
Fixed
- ci: refresh golden fixtures and scaffold manifest for the CLAUDE.md entrypoint (4251243)
- cli: emit Node 22 in generated CI and the TypeScript Dockerfile (cceba34)
- release: keep the PyPI recovery hatch reachable and pin checkout to the release sha (ce2d180)
0.3.5 (2026-08-06)
Fixed
- templates: raise the go-fiber dependency floors past 21 advisories (1a30a05)
- cli: create each adapter's root entrypoint symlink during init and update (beceeaa)
Documentation
- readme: point the version badge at PyPI instead of GitHub releases (f7376f3)
- readme: drop the per-project token figures from the scoping section (2ab0420)
- readme: state skill scoping accurately with measured numbers (57f2cd0)
- drop residual references to removed third-party material (70788bb)
- translate all remaining non-English prose to English (f26ff1d)
- readme: lead with measured context economics + a visible support surface (e265f88)
Build
- release: pin last-release-sha so the changelog starts at 0.3.4 (e09bc04)
0.3.4 (2026-08-05)
Fixed
- docs-lint: audit the last unwatched doc subtree + GitHub-accurate anchor slugs (02c8a5b)
- hub-ui: update vulnerable transitives + react-router-dom to the patched 7.18 (f4a942d)
- security: declare and enforce why credential-shaped test fixtures are safe (bad64a7)
- templates: nestjs 11, laravel 12 and puma 7.2.1 floors clear their advisories (1a602ec)
- templates: npm floors above known-vulnerable ranges + repair the SvelteKit toolchain (5143d3a)
- templates: quote the go.mod module placeholder so Go can parse it (3254a44)
0.3.3 (2026-08-04)
Fixed
- cli: honest post-init next steps + document the Hub-optional CLI loop (cf434fa)
- cli: post-init quick start prints commands that actually run (729ce10)
- readme: color-safe release badge URL so release-please version bumps keep the color (4ff70b4)
- readme: dynamic GitHub release badge — works now the repo is public (70a4699)
Documentation
- lead with the modular story — take only what you need (50e4bb6)
- Maven Wrapper attribution per Apache-2.0 4(d) + final name sweep (6068c3e)
- readme: accurate profile ladder + paste-safe shell fences (ce1ba81)
- readme: live CI workflow badge now that Actions run green in public (488531c)
- workflow: ship the modularity note to consumer projects, not just the meta-repo (467776a)
0.3.2 (2026-08-04)
Added
- docs-lint: audit all root *.md and resolve link targets case-exactly (a441719)
Fixed
- regenerate derived artifacts left stale by the codex-parity change (3068588)
- release: self-updating README release badge via release-please extra-files (a11c909)
Documentation
- readme: dynamic release badge so the version never goes stale (3a35cf5)
- readme: restore Sponsor links now that GitHub Sponsors is live (1eba56d)
- readme: slim the front page — move graph/docker deep-dives to engineering docs (5a792da)
- replace absolute developer paths with neutral placeholders (e0ff839)
0.3.1 (2026-08-04)
Added
- adapters: complete Codex SDK and hook parity (c0e1870)
- adapters: dual Claude auth mode — subscription OAuth or API key, selectable in Hub panel (7743797)
- adapters: refresh Codex SDK and hook parity (2abec02)
- adapters: versioned agent memory — in-repo .agents/memory with self-repairing harness symlink (099fef0)
- board: autonomy-gated auto-commit of board↔git drift + fix silent drift-task filing (93de359)
- board: blocked-lane SLA aging via blocked_sla_hours knob (observability only) (fc8c5d1)
- board: graduated DoD acceptance gate at complete + fix for_kind merge clobber (ae11594)
- board: hook-block trend KPI in cos retro (blocks/session vs prior period) (46ce11b)
- board: warn on session-created un-ready icebox cards (create-then-park nudge) (74c684e)
- cli: --enable-module escape from profile+disable union on init/adopt (92e22e3)
- cli: add owner-gated brain-sweep-changelog to retire legacy changelog rows (2746981)
- cli: generate backend Dockerfiles at init — render_dockerfile, cicd-gated (3417a51)
- cli: generate consumer CI workflow at init — render_ci_workflow, cicd-gated (d5519e2)
- cli: mention --preset in the interactive stack prompt (54c69df)
- cli: stack-lint v2 soft checks + factory rows 13-18 + 4 backfilled rules (a67c9b1)
- cognition: persist sub-agent transcript + cos cognition log --transcript (1cb24c6)
- core: doctor rule_drift + doc_drift audit + Hub drift banner (F-D) (f4bee05)
- core: JIT convention-rule reminders via jit-recall glob map (jit-rules.tsv) (a15378b)
- core: live agent pip on task cards — pulse while the bound session works, click opens its chat (dd05259)
- core: live-toggle doc prune/restore + correct doc_drift source mapping (F-B) (eb89852)
- core: LLM friction-lesson distiller behind the dispatcher port (idempotent, budget-capped) (0b70e65)
- core: module-owned rules — cascade-unlink a disabled module's rules (F-A) (af56209)
- core: out-of-core module overlay so a plugin registers a module without forking (F-F) (91d4ea0)
- core: promotion ladder — promoted lessons leave belief surfaces; retro drafts rule promotions (cd79983)
- core: settings-gated board auto-spawn — drag icebox->in_progress dispatches an implementer (17b282b)
- cost: dispatch cost analytics + budget ladder; fix budget spent-today query (2b539e7)
- dispatch: cost-routed multi-model dispatch — bandit, cheaper reviewer, adapter hint (83ead02)
- dispatch: per-chain budget ceiling, EvidenceBundle flock, max_turns hop-cap (c4fa7ff)
- docs: lint scaffold docs for untagged module-owned slash commands (F-H) (1554365)
- governor: dedup make-target verify suites, not only bare pytest (0d56c79)
- hooks: nudge-git-mode + banner git=pr field so pr-mode is surfaced proactively (dab639b)
- hooks: nudge-reentry UserPromptSubmit reminder for an unbound in_progress task (94eb7b2)
- hooks: session-end advises on uncommitted non-docs code at end-of-turn (b53ba48)
- hooks: visible hook-parity deficits (N1) + rename-completeness teeth (N11) (951817f)
- hooks: warn-diff-size nudges diff-minimal commits (fail-open) (7ec570c)
- hub: add Config Adapters tab with runtime, models, and MCP wiring (14997c4)
- hub: add Marketplace top-nav tab (Extension Manager coming-soon) (b77abef)
- hub: config stack/adapter/MCP install-remove endpoints (meta-guarded) (636e416)
- hub: consolidate IA — Settings into Config, Memory into Workspace, slim Diagnostics (0c6e665)
- hub: declutter task HISTORY — commits-first default, details behind a toggle (d2bf41b)
- hub: live dispatch observability via trace tee, SSE tail route, and chat fallback (82f308f)
- hub: mark installed adapters in /api/config/adapters (c098bf8)
- hub: Memory tab — validation-rate headline, tier groups, lesson evidence (341e3ee)
- hub: ModulesTab discloses commands/rules + inline refusal reason + dependency why (F-E) (8bd5757)
- hub: move Overview into Workspace and restore the Design tab (d7f0414)
- hub: redesign Config tabs — installed-first stacks, grouped skills, adapter/MCP add-remove (0c4c0fc)
- hub: SettingsPage single-save flow — bottom Save flushes scheduled edits (TASK-836) (4b1c46d)
- hub: show module reverse-deps + skills; pre-empt a blocked disable in Config (ab35f7e)
- hub: tag presets with provenance and clarify the composer preset choice (4fb5ad5)
- hub: typecheck every SPA API path against the generated OpenAPI types (84f82ea)
- learning: derive per-task reward label from the verify ledger (v52) (833fba5)
- learning: fire the validation loop for formal tasks + honest trust deflation (300a8fd)
- memory: async per-session LLM enrichment of changelog observations (default-OFF) (c63c52c)
- memory: fidelity-gated session_summaries.learned via apply_session_facts (a759a73)
- memory: MMR diversity + column-weighted FTS5 + RRF fusion in cos_search (7f2b484)
- memory: wire expires_at forward — TTL stamp at capture + decay GC of expired rows (6198221)
- modules: lite install profile + per-module hint discovery in Hub (4f9815d)
- pr-mode: cos pr conflicts — early-warning file overlap across agent branches (3564a23)
- pr: bootstrap worktree gitignored deps + secrets so first validate works (a2635f4)
- pr: cos pr triage — ranked digest of open agent PRs for the review bottleneck (9ae239c)
- pr: local_autonomous rung — cos pr land merges to local integration, guard-carved (d6cb2dc)
- pr: warn on unprotected integration branch + mark local-rung merge human-only (fdcc42c)
- pulse: surface last verify-suite result in the agent pulse (63c17a8)
- repair: budget-capped autonomous repair loop + dispatchable repairer (84a4ef8)
- routing: flag-gated Thompson-sampling Beta-Bernoulli model router (05ce062)
- stack-lint: flag a shipped sample test that verify never runs (dbc8be0)
- templates: add famous-stack presets mern, nuxt-fullstack, laravel-vue, go-react (37355b0)
- templates: bootable fastapi + django scaffolds (manifest, entrypoint, test, verify) (c829604)
- templates: bootable go + go-fiber scaffolds (go.mod, cmd/api entrypoint, test, verify) (29d33d4)
- templates: bootable nextjs + react-native seeds + flat ESLint migration (1ac6921)
- templates: bootable wordpress php seed (composer.json + phpcs PSR-12) (48fcbd2)
- templates: bump astro scaffold to v7 with the Content Layer API (bc243bf)
- templates: language config bundle for go/rust/ruby/php/dart linters (ac0d35a)
- templates: migrate angular scaffold to v22 with Vitest unit-test runner (0d52c15)
- templates: per-language toolchain config bundle selected by stack language (52bc7a7)
- templates: seed .editorconfig + base .gitignore in _base/scaffold (bab7893)
- verify: add test-web-ui (vitest) suite + make ui-test target (49e8221)
Fixed
- adapters: add Sonnet 5 / Fable 5 to Claude model catalogue, bump SDK to 0.2.110 (12608aa)
- adapters: drop codex delegates pointing at removed core hooks (5c544ae)
- adapters: pass a real UUID as the SDK session id — new CLI rejects non-UUID --session-id (4aad3dd)
- board_os: panel-first session attribution to stop cross-panel drift (6b48e05)
- board: board-churn auto-commit fires on 'local' autonomy + Hub lists local_autonomous (4496d3e)
- board: flag icebox zombie cards + bilingual task-mode classifier (10634d2)
- board: merge duplicate frontmatter blocks in 12 task files that sync rejected (235af22)
- board: prune deleted-file task rows on full sync, cascade to child tables (f9a709d)
- board: stop phantom NULL-reason reverts from idle sibling panels (36932e0)
- board: YAML-quote frontmatter list items, map legacy fallback status to icebox+ready (f59840c)
- ci: exclude .ruff_cache from manifest + golden capture — dev-cache pollution (85979f7)
- ci: resolve 7 Linux-only full-sweep failures + unblock fresh uv resolution (d51c753)
- ci: resolve adapter-scoped hooks in registry test + drop herestring read-loop (416148f)
- clarify git config safety limits (ed2d582)
- cli: apply ultra-review findings to generated CI/Dockerfiles + stack-lint (d206735)
- cli: cos init substitutes placeholders in all text files, not a 7-extension allowlist (f1fe393)
- cli: detect nested same-language root collisions + longest-pattern boundary owner (2716ce6)
- cli: drop shadowed graph-reindex dup, wire cos-mcp-start entry, portable trace-replay path (8b7326b)
- cli: ensure_gitignore tops up runtime carve-outs on an existing .gitignore (59a5fe9)
- cli: honor adapter_scope in doctor hook.coverage check (5b7b2cc)
- cli: materialize wires Makefile -include only when a stack contributes targets (2235b83)
- cli: renderer preserves file mode; node-express Node>=21; astro doc drift (81d5434)
- cli: stream init progress to stderr in json mode so create phases advance (04ff999)
- codex: preserve runtime identity across Hub and hooks (12a8bb6)
- codex: wire warn-diff-size into codex pretool dispatch + kernel module (0d1319c)
- cognition: drop repairer's spurious canonical_order; align onboarder registry pin (f6c1b1b)
- core: anatomy lessons require a recorded remedy; harvest skips headers and frontmatter (023b91f)
- core: attribute unattended board maintenance to a system actor, not the human operator (aa88cb4)
- core: cos_search recall correctness — read-only, semantic filters, FTS5 escaping (435bc5a)
- core: drop hardcoded claude-opus-4-8 literals that broke the anthropic guard suite (0ba07f2)
- core: full graph stub list, project-root doc-header guard, drop dead experiment script (a5a2111)
- core: gate parallel dispatch on projected cost so an N-way fan-out cannot overrun the cap (15b0d12)
- core: honor bound project scope over $COS_DB_PATH in resolve_db_path (16b863f)
- core: let the distiller use the adapter turn default; filter tool-fumble noise from lessons (7caf198)
- core: memory lifecycle safety — fresh breakthrough survival + trust_tier decay guard (7fca22b)
- core: missing DB rows no longer block the nightly board-drift auto-commit (de8fb34)
- core: outcomes/metrics loop — dedup outcome_history + add time_to_solution metric (3f657b3)
- core: own 3 delta hooks + fix profile assertion; add tool-owner guard + module verify-suite (ef5d46f)
- core: panel-scoped gate resolution in session_enrich (a3170da)
- core: raise board-drift commit timeout to 600s for large staged sets (f0f65a3)
- core: refuse $HOME as a project root so no phantom DB is minted in the hub state dir (b6ca44a)
- detect unmanaged hub listeners (e8e157e)
- enforce protected branch patterns (ee3a85f)
- error-sweep: classify hook BLOCKs as policy via log_events.event_class (d944209)
- fastapi: async-first sample endpoint + test, declare pytest-asyncio (4a1ddb1)
- governance: put comment-provenance ban in always-on Rule 12 + de-contradict TODO hook (7971e51)
- graph: declare networkx as base dep so the Communities view populates (34b5e9a)
- graph: honest references count, impact visit_limit + freshness, dead_code FP (cluster 3) (742d9ef)
- graph: map live extractor ids to provenance, cover edges in export cache signature (ae5b34b)
- graph: MCP-written freshness-bound graph-gate markers (cluster 1) (8f32678)
- graph: sweep folder-spine + phantom residue on full graph-reindex reconcile (badce59)
- graph: type-only TS imports emit imports_type, not a runtime cycle edge (fa38916)
- hooks: block-protected-files guards src/core skills+rules source, not just renders (142c321)
- hooks: block-secrets blocks all git-hook-skip bypasses (-n, path/cd/env, core.hooksPath) (894709d)
- hooks: branch-guard trunk blocks force-rewrite of main + update-ref (pr-mode parity) (c329c5e)
- hooks: close 6 code-review bypasses/FPs in branch-guard + block-secrets + pr-cleanup (TASK-565) (ed21433)
- hooks: close git long-option-abbreviation bypasses in 3 client-side guards (f0934a7)
- hooks: close git-safety bypasses F1-F5 via shared shlex tokenizer (b0792a5)
- hooks: close indirection, settings-write & pr-mode update-ref HEAD git-guard bypasses (236f8ce)
- hooks: close separator/grouping bypass of git-verify gate + order-independent force-push (2679f5b)
- hooks: context-budget marker no longer reports stale pre-compact ctx after /compact (cf20bcc)
- hooks: context-budget marker no longer reports stale pre-compact ctx after /compact (1022a4a)
- hooks: data-driven graph-explorer gate in enforce-skill (cluster 2) (50bca95)
- hooks: defer heredoc/command-substitution commit -m values instead of mis-validating them (7c573f1)
- hooks: drop dead TodoWrite matcher from track-discovery, clarify Work-Log-vs-todo policy (e9b70b7)
- hooks: re-arm abandoned-task warning on task-state-change (50f41d5)
- hooks: surface git_settings fail-open downgrades + jq↔python parity test (49be78a)
- hooks: surface state-misroute in the per-turn banner (8704d8f)
- hooks: test-governor lock uses owner-agent pid + release leg, not host-global pgrep (a41227f)
- hub-ui: confirm pr-mode enable + meta hard-block, always-probe, agent-only note (08c658a)
- hub-ui: read producer response shapes, send CSRF on mutations, re-scope live logs (25cc454)
- hub: a11y sweep — WAI-ARIA tablists/listbox + keyboard-operable rows/cards (TASK-835) (6212163)
- hub: align Observability/CommandPalette/trace consumers to producer field names (3bae64f)
- hub: allow config mutations on coding-os; mark only active skills on; kernel badge nowrap (b973437)
- hub: bound trace replay, presence allow-list, patterns envelope (TASK-833) (0ce795d)
- hub: close module sets over dependents and let the onboarding marker expire (b7df636)
- hub: Config→Git highlights the active preset, not the Recommended badge (1709204)
- hub: correct SupportFooter repo handle (kouroshez) + drop 404 payment placeholders (TASK-836) (c9e52ef)
- hub: data-drive RolesPage agent picker + render single-integer model ids (46424ab)
- hub: harden /api/sessions payload + bound search sys.path & graph export (TASK-833) (43c456a)
- hub: honest telemetry + working Activity bell + Search redesign (1523792)
- hub: honor per-request project scope over ambient env in Hub routes (83a9729)
- hub: InfoTip a11y (aria-describedby + Esc-dismiss); drop orphaned read-only comment (144fcf0)
- hub: isolate scheduled run-now, honor cron hour, scope client logs (TASK-834) (c30d648)
- hub: keep board toolbar and zoom controls clear of the stream/legend/tweaks panels (ca567ef)
- hub: keyboard-operable switch toggles + WAI-ARIA tablist nav (TASK-835) (8dfe962)
- hub: make Composer module chips authoritative and land users in the new project (48b0121)
- hub: make HealthAlarmBar link scope-aware and reconnect LiveStatus SSE on project switch (ece7d9a)
- hub: plain-language module refusal string + surface toggle cascade notes (de28c5b)
- hub: preserve task Work Log on board edit; focus deep-linked task; trim dead bell events (f86404c)
- hub: re-open the Composer when a create job is still running after a reload (b9e2415)
- hub: real per-session ctx badges for every adapter (1d3e0bf)
- hub: review fixes for config mutations — cos JSON parse, argv guard, cwd shadow (1012152)
- hub: scope Config→Git settings per-project + preserve unknown sections + atomic write (0a1c48c)
- hub: stop Config→Git leaking meta-repo framing to consumers; fix NUL-byte separator (ee02785)
- hub: stop the board "+ more" button re-fetching an exhausted column page (641b0ba)
- hub: surface fetch failures on Diagnostics Overview and the Roles panel (f65b5fd)
- learning: emit enum-valid domain header on filed narratives (c58ff38)
- learning: link filed narratives to the real slugged task file (cca0db4)
- learning: mine anatomy lessons from remedy-less backtracks via canonical remedies (b3603bf)
- load Codex transcripts in Hub chat (ba5b320)
- memory: drain embedding-outbox under rag interpreter + BGE-M3 similarity floor (641a28a)
- memory: hide mechanical capture rows as changelog + session-wide write-dedup (be361e0)
- memory: recalibrate BGE-M3 memory floor 0.55->0.45 to restore synonym recall (8f4b1a6)
- memory: relabel MEMORY.md trusted-lessons badge validated→seen (8a85d69)
- memory: split conflated times_validated into times_seen vs times_validated (v49) (eae440c)
- migrate Codex hooks feature flag (214128d)
- nightly: reconcile orphan doc chunks + run memory_gc; column-guard gc (625a14a)
- node-express: exclude test files from pre-install tsc typecheck (d7ebfa4)
- onboarding: keep readiness on one signal and stop json mode emitting prose (b729f92)
- pr-mode,hooks: preserve unpushed work on cleanup; anchor session-end advisory (H/J/N) (f811816)
- pr-mode: cos pr cleanup preserves drifted/peer uncommitted work before destroy (7cfb7de)
- pr-mode: driver STOP-on-green is signal-derivable via passing-unarmed (D5) (e578778)
- pr-mode: harden branch-guard double-prefix, gh-api cwd, reaper preserve (D1/D4/D2) (5f65cf1)
- pr-mode: route misrouted worktree state to a per-worktree quarantine off the hub (fe31593)
- pr: distinguish merge-queue queued/ejected from pending in ci rollup (9b4f407)
- pr: harden owner-stamp liveness — refresh on re-open, parse pid past a quoted host (8c43b75)
- pr: reaper skips a live-but-presence-less worktree via the lock-owner pid (371ed93)
- pr: surface review-required so auto_merge does not silently deadlock on reviews (c32a5f7)
- pr: validate autonomy_level at consumption + escalate auto-merge deadlock (d9c47e2)
- review: apply code-review findings from the 9-task backlog (bugs + doc-drift) (74d4394)
- review: apply ultra-code-review findings to the TASK-633..642 backlog (76ea6f6)
- review: correct 6 bugs introduced by the code-review fix batch (1ba0d7f)
- review: RED test + test-modules coverage + regex/UI guards from max-effort review (daace0b)
- review: relocate $HOME DB guard to init_db; board sends full body to keep Work Log (955678c)
- review: restore resolve_db_path raise as the complete $HOME guard; swap fresh Work Log on edit (cee1116)
- scheduled: nightly.py runs as a direct script — bootstrap src + src/core on sys.path (5d3ec2a)
- templates: astro problem.ts emits the canonical error envelope, not RFC 9457 (8ae1f46)
- templates: astro sample test passes astro check; pin Node>=20 for global crypto (2f25745)
- templates: complete go-fiber v3 migration across docs, skill, rules, boundary (635662b)
- templates: conform nestjs error filter and docs to the error-format.md envelope (ea8efd8)
- templates: gate every task-system instruction in AGENTS.md fragments on modules.tasks (04ff621)
- templates: honest verify + day-one sample tests for 5 stacks (7d5cc3c)
- templates: node-express verify command drops the dead npx-eslint prefix (e2eaae3)
- templates: relocate wordpress skill to its stack overlay (stop over-shipping) (4c6b6e0)
- templates: remove go/go-fiber/svelte shipped-artifact drift (18667a1)
- templates: repair 4 shipped hard-breaks (dangling rules, go-fiber v3, mvnw, astro content-seo) (3854a0a)
- templates: ship angular accessibility doc for the playbook's a11y link (76a8931)
- templates: ship aspnet-core xUnit test project for green dotnet test on init (b5481aa)
- templates: ship go-fiber go.sum so go vet/test pass on a fresh init (91e5d25)
- templates: spring-boot scaffold google-java-format + bind spotless to verify (9cfdfb8)
- templates: svelte vite.config import + vue-nuxt vitest/vite major skew (ee42c5f)
- templates: sync nextjs/wordpress verify substitutions + revert day-one-red changes (37a7783)
- templates: wire cross-adapter Channel-2 memory-read pointer into AGENTS.md (90284bd)
- test: -S in nightly smoke test so the editable finder can't mask a broken bootstrap (5fcf70e)
- thinking_os: atomic observation dedup via partial UNIQUE index (migration v51) (dcf15b3)
- thinking_os: close the learn-validate loop on the MCP completion path (5378bc9)
- thinking_os: session_summary bootstraps src/ so it runs as a file (90780f1)
- web: attribute unowned panel move/reposition to the human actor (8c70fb1)
Performance
- core: guard jit-nudge mkdir behind a dir-exists check (e4ab25d)
- pr: reaper sweep lists worktrees once (O(N)) and rejects foreign-host owners (cc31900)
- tests: class-scoped scaffold for TestInit + TestClaudeAdapter (cos-init once per class) (3f22dab)
Changed
- board: self-documenting names over comments in board_coherence (55974f8)
- core: compress git-workflow, test-discipline, transparency-banner rules 42 percent (dce452b)
- core: disjoin graph_query/graph_search + honest kernel always-on tool floor (0d12e76)
- core: drop dead completion_gap read-paths + cos_learn_feedback; measured [Memory] pulse (5192ef9)
- golden: single SECTIONS SSOT module for capture + parity test (bf4ff33)
- hooks: behavior-parity harness + delete transitional warn-template-drift hook (d82ffdc)
- hooks: consolidate branch_guard onto shared tokenizer + fail-closed test (0fb3de0)
- hooks: merge shell reindex+prune into one ordered reconciler (cluster 4) (1eb8041)
- hub: decompose ChatView (806L) into chat-turns + chat-turn-views (TASK-836) (f631c23)
- hub: decompose ConfigPage (1855L) into features/config modules (TASK-836) (37b8f79)
- hub: derive the scheduled-endpoint payload types from the OpenAPI schema (d055f4f)
- hub: extract board modals/badges/panels from CosBoardPage (TASK-836) (379bb3f)
- hub: extract board-shared (types/constants/helpers/context) from CosBoardPage (TASK-836) (e704ee2)
- hub: extract git-tab-data (types/presets/tips) from GitTab (TASK-836) (77da2d3)
- hub: extract TaskDetailDrawer + history into task-detail from CosBoardPage (TASK-836) (e04b50d)
- hub: extract TaskStickyCard/SwimlaneLabel + TopBar from CosBoardPage (TASK-836) (f00ded8)
- hub: extract the stream-event and trace-timeline models from their views (094448c)
- hub: route MemoryPage/DoctorPage through api-client (TASK-836) (489baf2)
- hub: split board-modals into 4 modules all <400 (TASK-836) (6f6956c)
- hub: split board-panels into 4 panel modules all <400 (TASK-836) (8be4f2e)
- hub: split CosBoardPage into data/view/dnd hooks + grid — main 928->233 (4b1f82c)
- hub: split task-detail drawer + GitTab so every module is under 400 lines (5a74c51)
- hub: split task-detail into drawer + history + edit-form (TASK-836) (4be988d)
- thinking_os: drop dead record_review + auto-record memory-check on cos_search (78b6176)
Documentation
- adapters: define current Codex capability and SDK contract (3aca2b2)
- adapters: state the enforced P8 boundary and sanctioned lazy-import carve-out (fc54993)
- adr: ADR-0014 unified graph-gate + graph-first-enforcement epic tasks (eb47932)
- adr: kernel scope boundaries (ADR-0015) + dispatch-deferral partially revived (525c258)
- adr: record graph-first-enforcement landed C1-C5; scope C6 deferral (ec6e02a)
- align public-facing docs with current reality before first release (0e64f46)
- api: regenerate openapi.json — spec drifted from live routes (d97eee5)
- architecture: complete raptor lens — density, operational cost, worked case study (e0dc8f8)
- core: align dispatcher contract with current Codex runtimes (e3f6d5b)
- engineering: July 2026 modularity re-audit + variability-completion backlog (1e1d849)
- engineering: register derived-store coherence audit in the index (4db6472)
- fix onboarding clone URLs and stale governance references (7487fa7)
- governance: add Critical Rule 26 — verify by executing, not by reading (153b5ec)
- governance: add product vision + raptor consolidation lens as SSOT docs (4b5b8b4)
- hub: tick-by-tick pre-release audit report for the Hub UI (4b5b00b)
- index: commit stale auto-index regen for adapters + engineering (6f81c8f)
- index: list pr-mode-ci-economics playbook in the auto-index (TASK-619) (47615ab)
- index: re-sort engineering index for the modularity-audit updated date (48ed52a)
- memory: mark QW-3 shipped as detector, not column (SSOT) (be697a6)
- memory: persist icebox-parking structural-failure finding (288de5f)
- memory: reconcile memory.md + retro.md with the shipped memory/metrics tools (79f4e27)
- modularity: record pass-7 audit + inline the tasks->docs rationale (620a0db)
- onboarding: document the panel-first install path and the module/profile axis (79a5026)
- playbook: add multi-agent git layered-defense model + 11 real-world use-case matrix (0893477)
- pr-mode: document agent-only enforcement boundary + settings durability (7b8d9d8)
- pr: pr-mode CI economics — fast-gate/full-suite split + reference workflow (c41e84d)
- research multi-adapter supervisor architecture (1254119)
- rules: add Test cadence policy to test-discipline.md (d07f6e8)
- Smoke row in testing-strategy + the as-file bootstrap invariant in scheduled-jobs and hook-authoring. Regenerated golden (hook + skill drift). (e1090cb)
- templates: add references/anatomy.md to 13 bare stack skills (d4c91b9)
- test: refresh stale suite-size figures to ~4,850/327 files (e03f87c)
- tests: testmon spike verdict — DEFER (redundant with verify-ledger dedup) (e7c6dba)
Build
- pin ruff==0.15.15 — floating pin broke the CI format gate on each release (ec1f607)
Unreleased
Added
Changed
Fixed
Removed
0.3.0 — 2026-05-20
Initial public release of coding-os, the agent-agnostic cognitive operating system for AI coding agents.
What is coding-os?
Three-layer composition that teaches AI agents how to think and how to code:
src/core/— agent-agnostic kernel: MCP server (thinking_os,graph_os,board_os), hooks (62 scripts), rules, skills.src/adapters/<agent>/— per-agent translation: how the kernel surfaces as.claude/,.codex/,.cursor/.src/templates/<stack>/— per-stack scaffolds: Django, Next.js, FastAPI, Go, Go+Fiber, React Native, Python library, Meta.
The cos CLI composes the three layers into a consumer project that
inherits the same skeleton (own hooks, own MCP, own AGENTS.md).
Highlights of the 0.3 line
Cognitive layer (thinking_os + graph_os + board_os)
- 11 semantic agent roles (researcher, analyst, architect, documenter,
implementer, reviewer, debugger, security_auditor, deployer,
observer, refactorer) composable via
cos_compose_chain. - Append-only schema migrations with idempotent extractors.
- Polyglot graph extractor: Python, TS/TSX, Go, Bash, YAML, Markdown,
JSON, TOML. Parallel reindex (
cos graph-reindex --workers N). - Knowledge graph backed by SQLite (Kuzu backend retired in B2 series — see ADR 02).
- 79 MCP tools, all under the
cos_*prefix with theok(data) / fail(category, message)envelope (Rule 13).
Workflow governance
- Intent enforcement layer: exhaustive-intent vocabulary (FA + EN) triggers evidence-required audit mode (G0–G14).
- Completion guardian (Stop hook) refuses premature "done" claims without satisfying predicates.
- Scrumban task system (
docs/tasks/TASK-*.md) with axes: swimlane · kind · epic · labels. WIP-limit enforcement.
Web Hub
- Singleton FastAPI + uvicorn on port 9188, multi-project router via
/api/p/<slug>/*. SSE event stream at/api/stream/events. - React 18 + Vite + TypeScript + Sigma.js graph canvas + Zustand state.
- 4 tabs: Graph (3 views — overview/tree/code), Board (Scrumban), Cognition (trace replay), Search.
- All
/apiresponses ≥ 500 B gzipped (compresses 270 KB → 21 KB).
Adapter parity
- Adapter capabilities declared in
src/adapters/<agent>/adapter.yaml::hook_capabilities— renderer skips registry entries the agent's CLI can't fire. - Claude Code: 58/62 hooks fire. Cursor: 59/62. Codex CLI: 21/62
(Bash-only). Codex GUI: 0/62 (
.codex/hooks.jsonignored upstream). (Historical — the Cursor adapter was removed 2026-06-15 and Codex reached full hook parity 2026-08-03; current matrix: adapter-parity.md.)
Performance
- Database mmap +
ANALYZEon init → 4× faster JOINs. - Nightly auto-reindex when graph probe > 24 h stale.
- Barnes–Hut FA2 layout cuts graph-tab freeze from 10–30 s to < 2 s.
- Hook timeouts capped at ≤ 30 s (previously up to 5000 s).
Repo hygiene (this release)
- Apache License 2.0 + NOTICE.
- SECURITY.md private-disclosure policy.
- CONTRIBUTING.md + CODE_OF_CONDUCT 2.1.
.github/workflows/ci.ymlmatrix CI on every PR.pyproject.toml[tool.ruff]+[tool.mypy]baseline..github/dependabot.yml(Python uv, npm, actions)..pre-commit-config.yaml(ruff + shellcheck + prettier).- 5 ADRs documenting the major architectural decisions of the 0.x line.
Removed in 0.3.0
- Internal client references (
NakoDigital) replaced with neutralExampleAppplaceholders across scaffold templates, golden fixtures, and the E2E verification script. - Developer-local path defaults in
verify_phase_c_e2e.py; the script now requiresCOS_CORPUS_PATHexplicitly. - Internal experiment artifacts predating the 0.3.0 baseline (see note at top of file).
Acknowledgements
- The thinking_os methodology draws on John Boyd's OODA loop, the Cynefin framework (Snowden), Wardley Mapping, and DDD bounded contexts.
- The graph_os layer draws on Roy Fielding's REST dissertation, tree-sitter, and the GraphRAG literature.