This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+2 more
Affected surfaces
Summary
AI summaryUpdates ADR-007, normal, and bench across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Low |
LLM router defaults to newer cheap‑lane Kimi (k2-0905) for 2× context and modest cost increase. LLM router defaults to newer cheap‑lane Kimi (k2-0905) for 2× context and modest cost increase. Source: llm_adapter@2026-07-19 Confidence: high |
— |
| Feature | Low |
`bench-run.sh` can bill against an API key from `~/.great_cto/secrets.env` instead of shared session limit. `bench-run.sh` can bill against an API key from `~/.great_cto/secrets.env` instead of shared session limit. Source: llm_adapter@2026-07-19 Confidence: high |
— |
| Feature | Low |
Pre‑push private terms now load from out‑of‑repo `~/.great_cto/private-terms` file. Pre‑push private terms now load from out‑of‑repo `~/.great_cto/private-terms` file. Source: llm_adapter@2026-07-19 Confidence: high |
— |
| Feature | Low |
`parseTestCounts` now supports vitest and jest summary parsing. `parseTestCounts` now supports vitest and jest summary parsing. Source: llm_adapter@2026-07-19 Confidence: low |
— |
| Feature | Low |
`scripts/bench-env.mjs` provisions declared databases, relocates ports, and runs schema migrations. `scripts/bench-env.mjs` provisions declared databases, relocates ports, and runs schema migrations. Source: llm_adapter@2026-07-19 Confidence: low |
— |
| Feature | Low |
`scripts/pipeline-state.mjs` reconstructs pipeline state from logs; `/resume` resumes interrupted pipelines. `scripts/pipeline-state.mjs` reconstructs pipeline state from logs; `/resume` resumes interrupted pipelines. Source: llm_adapter@2026-07-19 Confidence: low |
— |
| Feature | Low |
`great-cto board ensure` is idempotent: starts the board only if not running, never kills a healthy instance, restarts hung PIDs. `great-cto board ensure` is idempotent: starts the board only if not running, never kills a healthy instance, restarts hung PIDs. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Feature | Low |
`great-cto board install-daemon` / `uninstall-daemon` adds per‑user OS service (launchd/systemd‑user/schtasks) with start‑at‑login and restart‑on‑crash; opt‑in only. `great-cto board install-daemon` / `uninstall-daemon` adds per‑user OS service (launchd/systemd‑user/schtasks) with start‑at‑login and restart‑on‑crash; opt‑in only. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Feature | Low |
Board now reads space‑path / tasks.md‑backed projects, parsing Markdown‑table fallback with header mapping, escaped pipes, and owner‑debris filtering. Board now reads space‑path / tasks.md‑backed projects, parsing Markdown‑table fallback with header mapping, escaped pipes, and owner‑debris filtering. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Feature | Low |
Metrics and session‑log parsers tolerate heading/format variance; session‑log fallback scopes verdicts to the specific project. Metrics and session‑log parsers tolerate heading/format variance; session‑log fallback scopes verdicts to the specific project. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Feature | Low |
`parseTestCounts` now parses vitest and jest summaries in addition to node:test, preventing mis‑scoring of unparsed suites. `parseTestCounts` now parses vitest and jest summaries in addition to node:test, preventing mis‑scoring of unparsed suites. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Feature | Low |
`assess()` returns `overall: null` when no real test counts are obtained; `evaluateGate(null)` blocks with a reason, stopping publication of grades for unmeasured suites (e.g., exit 143). `assess()` returns `overall: null` when no real test counts are obtained; `evaluateGate(null)` blocks with a reason, stopping publication of grades for unmeasured suites (e.g., exit 143). Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Feature | Low |
`scripts/bench-env.mjs` provisions each product's declared database via env‑file discovery/compose fallback, relocates to an owned port if needed, and runs the product's schema migration script. `scripts/bench-env.mjs` provisions each product's declared database via env‑file discovery/compose fallback, relocates to an owned port if needed, and runs the product's schema migration script. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Feature | Low |
`scripts/pipeline-state.mjs` reconstructs completed/failed/next/remaining stages from verdict logs; `/resume` resumes interrupted pipelines; exits with code 3 if a mandatory stage lacks a terminal verdict. `scripts/pipeline-state.mjs` reconstructs completed/failed/next/remaining stages from verdict logs; `/resume` resumes interrupted pipelines; exits with code 3 if a mandatory stage lacks a terminal verdict. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Feature | Low |
`/crystallize approve` is gated: stamped eval regressions cannot be activated without override, and any block requires a logged reason via `--no-eval "<reason>"`. Noisy deltas are marked "not shown to help". `/crystallize approve` is gated: stamped eval regressions cannot be activated without override, and any block requires a logged reason via `--no-eval "<reason>"`. Noisy deltas are marked "not shown to help". Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Feature | Low |
Decisions log writes are per‑project in `<project>/.great_cto/decisions.md`; lacking scope causes write refusal, preventing cross‑project contamination. Global file retains only promoted `## pattern:` entries. Decisions log writes are per‑project in `<project>/.great_cto/decisions.md`; lacking scope causes write refusal, preventing cross‑project contamination. Global file retains only promoted `## pattern:` entries. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Bugfix | Medium |
`readSafe`/`parseSafe` now distinguish absent, unreadable, and present data. `readSafe`/`parseSafe` now distinguish absent, unreadable, and present data. Source: llm_adapter@2026-07-19 Confidence: low |
— |
| Bugfix | Medium |
API endpoints add `X-Board-Degraded` header and UI banner when reads fail silently. API endpoints add `X-Board-Degraded` header and UI banner when reads fail silently. Source: llm_adapter@2026-07-19 Confidence: low |
— |
| Bugfix | Low |
Decision log writes now fail when no project scope is provided, preventing cross‑project contamination. Decision log writes now fail when no project scope is provided, preventing cross‑project contamination. Source: llm_adapter@2026-07-19 Confidence: low |
— |
| Bugfix | Low |
Continuous learner delegates cross‑project promotion to `lessons-merge.mjs` instead of a drifted prose implementation. Continuous learner delegates cross‑project promotion to `lessons-merge.mjs` instead of a drifted prose implementation. Source: llm_adapter@2026-07-19 Confidence: low |
— |
| Bugfix | Low |
Gate approve/reject falls back to writing status in tasks.md when the board is unavailable and reports the used path (`via: beads|tasks.md`). Gate approve/reject falls back to writing status in tasks.md when the board is unavailable and reports the used path (`via: beads|tasks.md`). Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Bugfix | Low |
Project switcher hides $HOME (global config dir) and dead registrations with no data source. Project switcher hides $HOME (global config dir) and dead registrations with no data source. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Bugfix | Low |
`readSafe`/`parseSafe` distinguish "absent", "unreadable", and actual content, fixing five board bugs where emptiness rendered as truth. `readSafe`/`parseSafe` distinguish "absent", "unreadable", and actual content, fixing five board bugs where emptiness rendered as truth. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Bugfix | Low |
Session‑log reads differentiate ENOENT (normal) from real read failures. Session‑log reads differentiate ENOENT (normal) from real read failures. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
| Bugfix | Low |
GP frontmatter writer now emits required `fix:`/`verification:` keys; previous empty "→ apply:" lines are corrected for all four live patterns. GP frontmatter writer now emits required `fix:`/`verification:` keys; previous empty "→ apply:" lines are corrected for all four live patterns. Source: granite4.1:30b@2026-07-19-audit Confidence: low |
— |
Full changelog
The harness stops giving confident answers where it does not know
One theme across the release: every place the system could fail silently and
render its failure as a clean, confident answer now says what it actually knows.
Informed by the open problems in arXiv:2605.18747 "Code as Agent Harness"
(oracle adequacy, semantic verification, self-evolving harnesses, shared state).
Board always-on (ADR-007)
great-cto board ensure— idempotent health gate: starts the board only when
it is not already answering; never kills a healthy instance; restarts a live
pid whose port is hung (the case a liveness supervisor cannot see).great-cto board install-daemon/uninstall-daemon— per-user OS service
(launchd / systemd --user / schtasks) with start-at-login + restart-on-crash.
Explicit opt-in, never a side effect of init.--dry-runprints the unit.
Board reads space-path / tasks.md-backed projects
- The tasks.md fallback now parses the Markdown-table dialect the pipeline
writes when beads cannot open a path (e.g. one containing a space) — with
header-mapped columns, escaped-pipe handling, and owner-debris filtering. - Gate approve/reject falls back to a tasks.md status write-back when bd is
unavailable, and reports which path it used (via: beads|tasks.md). - Metrics and session-log parsers tolerate real-world heading/format variance;
the session-log fallback scopes verdicts to the project instead of showing
every project the same global list. - The project switcher hides $HOME (the global config dir is not a project) and
dead registrations with no data source.
Silent failures now speak (the release theme)
readSafe/parseSafekeep "absent", "unreadable" and "here it is" apart —
the shared root of five separate board bugs where emptiness rendered as truth.GET /api/tasksand/api/logscarry anX-Board-Degradedheader when a
read failed; the UI mounts a persistent banner (visible on every tab), and
the landing view no longer claims "All clear" / "Nothing urgent" over data it
could not read. Round-trip verified: break the file → banner; fix it → gone.- Session-log reads distinguish ENOENT (normal) from a real read failure.
Quality oracle tells the truth (bench)
parseTestCountsreads vitest and jest summaries, not only node:test — an
unparsed suite was previously scored as "1 test, and it failed".- "ran" now means "we obtained real counts";
assess()returns
overall: nullwhen the suite was not measured, andevaluateGate(null)
blocks with a reason. A product whose suite exited 143 can no longer carry a
published grade. scripts/bench-env.mjsprovisions each product's declared database (env-file
discovery → compose fallback), relocates onto a port we own when the declared
one is somebody else's cluster, and migrates the schema with the product's own
script. Measured on one product: 62/132 without env → 131/132 with it.
Pipeline state survives interruption
scripts/pipeline-state.mjsreconstructs completed / failed / next /
remaining stages from the verdict logs;/resumeruns it instead of the
operator hand-writing "these stages are done". Exit 3 when a mandatory stage
(QA / security) has no terminal verdict.
Learning loop disarmed until it earns trust
/crystallize approveis gated: a stamped eval regression can never be
activated (no override); no evidence blocks unless--no-eval "<reason>",
and the reason is logged. Noisy deltas activate as "not shown to help".- The GP frontmatter writer now emits the
fix:/verification:keys its
consumers grep — all four live patterns were being injected with an empty
"→ apply:" line. Consumers fall back to detection steps when no remedy exists. - continuous-learner delegates cross-project promotion to
lessons-merge.mjs
instead of a prose reimplementation that had already drifted.
Decisions log is per-project (ADR-008)
- Gate decisions land in
<project>/.great_cto/decisions.md; with no scope the
write is refused rather than redirected to the global file. One project's gate
vocabulary can no longer reach another project's agent context. The global
file keeps only promoted## pattern:entries.
Misc
- LLM router default moves to the newest cheap-lane Kimi (k2-0905: 2× context
for +5%/+9% per token); pricier tiers stay explicit opt-in. bench-run.shcan bill against an API key from~/.great_cto/secrets.env
(out of repo) instead of the subscription's shared session limit.- pre-push private terms load from an out-of-repo file
(~/.great_cto/private-terms), so the leak detector no longer ships the very
names it guards against.
Tests: 99 board · 199 top-level · 368 lib · 281 CLI — all green.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About great_cto
Engineering-management layer of 34 specialist AI agents covering the full SDLC (architect, PM, senior-dev, reviewer, QA, security, devops, L3-support + 18 archetype-specific reviewers) with auto-detected archetypes and compliance gates (PCI-DSS, HIPAA, FedRAMP, GDPR, EU AI Act). Runs in Claude Code, Cursor, Codex CLI, Aider, and Continue via AGENTS.md + MCP. MIT.
Related context
Related tools
Earlier breaking changes
- v2.72.2 Removes Autopilot sidebar item and Operate topbar button from dev board.
- v2.55.0 Hard-gates the Build board; redirects invite sessions to Operate for operators.
- v2.43.0 Runtime now blocks autonomous execution of irreversible actions without prior human checkpoint.
- v2.43.0 Adds reversible and blastRadius fields to every flow step.
- v2.32.0 Removed AgentShield scanner and its CLI commands.
Beta — feedback welcome: [email protected]