Releases: TheColliery/CoalBoard
v1.5.0 - Antigravity verified as a supported platform
MINOR - Antigravity is now a VERIFIED supported platform for the board.
The board was validated end-to-end on Antigravity (Claude Opus 4.6): 3 read-only-leaf lenses via define_subagent -> invoke_subagent (parallel), the decontamination clause clean on all lenses, reaped via manage_subagents. The capability-hack gate flips AG from UNVERIFIED to VERIFIED.
Added
references/platform-antigravity.md- the Claude-Code -> Antigravity tool-mapping + verified caveats: read-only is TOOL-level (write/spawn tools absent from the sub - stronger than CC by-instruction); AG auto-injectsAGENTS.md-> the decontam clause is required + confirmed clean; subs are zombies ->manage_subagents kill_allmandatory; no model-pick -> lenses inherit the parent model (cross-vendor = human-manual); ~16 concurrent, depth-10 nesting; no hooks -> manual-invoke.
Changed
- SKILL.md capability-hack now lists "Verified live: Claude Code + Antigravity."
Gate: build + 36 node tests + verify PASS.
v1.4.2 - wizard CHANGE-path recompute + re-consent
PATCH - wizard / Step-0 consent CHANGE-path correctness.
A user found that picking change at the cost checkpoint did not specify the recompute-and-re-consent loop - an implementer could spawn on a stale bill (a change to nasa multiplies cost, un-reconsented).
Fixed
- CHANGE recomputes the bill + re-consents (
bill -> change -> bill -> pay).references/wizard.md(programmer Call 3 + the layman bill) andSKILL.mdStep 0 now spell out: on change, loop back to re-pick -> RECOMPUTE the bill -> re-present the confirm as a FRESH box; never spawn on a stale bill, never fold the recompute into the change step.
Gate: build + 36 node tests + verify PASS.
v1.4.1 - lens decontamination hardened
PATCH - lens decontamination hardened (W1/W2/W3).
A dogfood audit run from inside the dev tree caught two blind lenses citing the umbrella MEMORY.md (outside the target): on Claude Code a spawned lens auto-loads the project CLAUDE.md -> MEMORY.md/AGENTS.md (the up-tree walk) + SessionStart hooks, defeating the R2-6 "no dev-governance" rule. No new capability - a correctness fix.
Fixed
- Lens decontamination defeated on Claude Code (W1) -
references/lens-prompts.mdnow carries an explicit "IGNORE auto-loaded governance" FIXED rule. Proven live: an out-of-frame solver spawned with the clause did not leak. - Neutral-cwd guidance + honest independence flag (W2/W3) -
SKILL.mdStep 1 +references/audit.mddirect main to spawn lenses from a neutral cwd inside a governed tree, and flag such passes NOT independence-clean.
Gate: build + 36 node tests + verify PASS.
v1.4.0 — wizard CM-parity + non-Latin trigger + auto-apply guard
MINOR — the manual /coalboard wizard brought to CM-parity (flow-correctness + max token-min), a non-Latin critical-prompt trigger, and a gateless-auto-apply guard.
Added
- Non-Latin critical-prompt trigger (CB-7) — the per-prompt conductor was English-keyword-only; a pure-Thai/CJK critical prompt (e.g.
แก้บั๊กการเข้ารหัส…) produced zero reasons and the board stayed silent. It now emits ascript:non-Latingrade-by-intent reason so a non-English critical prompt routes to the board's judge. Off for file scans; Phoenix-pure.
Fixed
- Gateless auto-apply now mechanically guarded (CB-4) —
verify.mjsrejects{coalboardMode:auto, applyConsent:false}(explicit orrigor:relaxed-inherited);applyRigor()forces the apply-gate back on at runtime. The human gate is never config-able off underauto. - Manual-wizard flow-correctness (CB-W1) — the resident
SKILL.mddescribed the superseded pre-v1.3.0 2-call stale-cost flow; aligned with the on-demand 3-call order→bill→pay wizard (bill computed AFTER the picks),SKILL.mddelegating the step detail to the wizard. - Cross-platform README claim scoped (CB-14) — the named platforms (Cursor/Codex/Copilot/Amp/Goose) are now design-supported, unverified; every actuatable artifact (installer, hook, cost-tiering) is Claude-Code-only; the debate structure is cross-agent by design but verified on CC only.
Changed
- Wizard token-minimized ~33% — squeezed to the leanest text passing all bars; every cut re-verified, and the load-bearing rules (box-counts, the bill-after-picks anti-drift rule, the layman honesty triad, the dev-contamination exclude-floor) were rejected-from-cutting (the maximality proof).
Gate: build + 36 node tests + verify PASS. Update: claude plugin update coalboard@coalboard + restart.
CoalBoard v1.3.3
PATCH — board-audit round-2 fix (sub4-reproduced); bugfix only.
- #3 conductor
updateCheckDaysclamped at read to[1,365]— it was unbounded, so{updateCheckDays:0}(or negative) made the throttle window ≤0 →now-last < 0never true → the self-update nudge fired EVERY session. Out-of-bound now falls back to the 14-day default (mirrors CoalTipple). + a regression test (two consecutive SessionStart with{updateCheckDays:0}→ the 2nd is throttled). CoalBoard was the lone unguarded sibling.
Gate: build + verify + tests PASS. Update: claude plugin update coalboard@coalboard + restart.
CoalBoard v1.3.2
PATCH — board-audit fix (verify-triaged from the whole-Colliery nasa board); bugfix only.
coalboardMode:offno longer silences self-update. The conductor returned early onboardOff, which also suppressed the SessionStart self-update check — butcoalboardMode(the board AND-gate) andupdateMode(self-update) are ORTHOGONAL off-switches. Now the board's UserPromptSubmit path is skipped when off while the SessionStart self-update still fires per its ownupdateMode. (+ the companion test, which had encoded the bug.)
Gate: build + verify + 28 tests PASS. Update: claude plugin update coalboard@coalboard + restart.
CoalBoard v1.3.1
PATCH — report-context sharpen + doc sibling-consistency.
- R3B-8 — the report always carries the full sub4 picture (the contested claim · each camp's position · sub4's verdict-if-resolved OR inability-if-escalated), in BOTH cases, so the human can reconstruct sub4's judgment at the apply gate rather than rubber-stamp it. (Step 3 + the Step 4 consent digest.)
- Docs (#20 sibling-consistency) — README leads with the badge + links rows (the series pattern);
SECURITY.mdreordered to the family section order + aversion-transitionmarker on the scan section; workflow action-version comments normalized to the major-only style (# v7, SHAs untouched). The shared public-doc pattern is now documented atTheColliery/.github/DOC-PATTERN.md.
Gate: build + verify + 28 tests PASS. Update: claude plugin update coalboard@coalboard + restart.
CoalBoard v1.3.0 - layman-default wizard + flow/honesty rework
Round-3 deep dogfood — the user ran the real published wizard + board as a customer and surfaced flow / honesty gaps the build gate cannot. MINOR: a new layman-default UX + a holistic wizard/gate flow rework + model-diversity honesty; no new config keys.
Added
- Dual-audience wizard — a LAYMAN-DEFAULT path:
/coalboardnow defaults to AI-handles-everything — smart safe defaults (cwd · auto-work-type · L2 · standard) + ONE plain-language bill+confirm ("3 reviewers + a judge check X for ~Y tokens — go / cheaper / more thorough / cancel"; no opaque jargon — "cheaper/more thorough" map to depth/rigor, a universally-known word like "nasa" may stay). A programmer opts into the full restaurant wizard. The layman is kept safe by staging + the human-apply gate; the result carries the honest ceiling in plain language and never says "definitely safe".
Changed
- Wizard = the "restaurant" order → bill → pay (programmer path): TARGET → silent scan → the 3 settings → the ACCURATE bill computed FROM the picks → ONE confirm. Fixes the stale-cost consent (the bill used to precede the picks).
- Step 4 exit re-ordered + leaned: DIGEST → ONE consent question (apply-all / let-me-pick / report-only / stop) → THEN write, CONDITIONAL on the choice (stop = write NOTHING; the report is never written before consent).
- Surfaced output = decisions + results only — internal mechanics (template fill, memory arm, contract steps) run SILENTLY.
- Model-diversity honesty:
diversifyModelsis INERT on Claude Code (the spawn tool takes only aliases — it cannot pin a model generation). The only actuatable model-decorrelation is a tier-mix (partial, at a lens-strength cost); the real decorrelation is the diverse lens prompts + adversary + sub4, never the model. - NASA honesty (correlated-blind-spot ceiling): all-opus at nasa = MAX model-correlation at MAX stakes — the escape is the non-model ground-truth gates (
tier2Verify) + the human, NOT model-diversity and NOT sub4 (sub4 is the same model → shares the blind spot; it breaks deadlocks only). - Warm-resume corrected (verified): the standard CC session has no callable SendMessage tool → recover a stopped/dead lens by re-spawning a FRESH lens on the un-done REMAINDER from main's journal; SendMessage-resume is a bonus only where the tool exists.
TaskStopreaps a runaway/zombie sub.
Fixed
- The org
.githubrepo had nodependabot.yml— its workflows' pinned actions never auto-bumped; added it (github-actions, weekly), matching the plugin repos.
Gate: build + verify + 28 tests PASS.
CoalBoard v1.2.1 - lean manual wizard (2 question-box calls)
Wizard token-economy pass — a dogfood where a sub RAN the manual /coalboard wizard while main watched, then trimmed the waste. PATCH (leaner manual-wizard UX, no new capability/config).
Changed
- Manual
/coalboard→ 2 question-box calls (was up to 4 round-trips across 8 steps): Call 1 = TARGET → a silent enumerate-only scan (1-line summary) → Call 2 = WORK-TYPE + DEPTH + RIGOR + PROCEED. 2 calls is the dependency FLOOR (TARGET → SCAN → scan-derived WORK-TYPE forces ≥2 round-trips). The cost-confirm folds into Call 2's PROCEED slot — a cost line precedes the call (informed consent); "change" recomputes the precise per-config estimate on demand. - DISPATCH dropped as a question — defaults to all-at-once (a speed-only choice, rarely changed;
maxConcurrentSubagentscaps it, ask only if the user raises it), freeing the slot for the confirm. - Terser throughout — one-line option text, a single scan-summary line, no decorative filler.
references/wizard.mdprose ~−38%. Every load-bearing ask is KEPT: target-first, ask-work-type, exclude ∪ the dev-contamination floor,.github/workflows security, units-from-scan, cost consent, the lens-prompt fill-flow.
Gate: build + verify + 28 tests PASS.
CoalBoard v1.2.0 - deterministic rigor-scaled tiering, scan-exclude, .github security, warm-resume
Round-3 dogfood (the board run as a customer, every finding reported). MINOR — new config keys + deterministic behavior.
Added
rigorLensTiers— a deterministic rigor→lens-tier map (factoryrelaxed/standard → haiku · high → sonnet · nasa → opus). The lens model now scales with rigor and is READ from a table, so the assignment is identical every run — fixing both all-haiku-at-nasa under-powering and run-to-run non-determinism. The judge stays top-tier; the adversary always takes the rigor tier (≥ sonnet), never undetermined.excludePathsis now a functional scan/audit exclude (was reserved/inert). The factory default unions the build/vcs dirs with the always-hard dev-contamination floor (CLAUDE.md/MEMORY.md/AGENTS.md/.claude/.agents); config adds to the floor, never weakens it (a lens must never read the dev governance).
Changed
- CoalTipple ranking adopted (optional, series-interop) — inherit CT's
ranking.jsonif installed (alias-floor authority + stable tier-structure +modelTierspins + validity-lock + spawn-fail-fall); else the alias floor +rigorLensTierssuffice. CB stands alone. .github/ workflows = a SECURITY unit, never "just CI" — workflows are classified + audited (action SHA-pins, scanned/action version correctness,pull_request_target+ untrusted checkout,${{ github.event.* }}injection, over-broadpermissions). Boarding-scope enumerates units FROM the scan, never re-derives "the tools" (the recurring.githubskip-bias).- Pre-spawn scan is enumerate-only (classify by extension/path, no content read) — avoids burning 200k+ tokens and bloating main's context before any lens runs.
- Warm-resume prefers platform SendMessage-resume over re-spawn-fresh (keeps the dead lens's accumulated work), triggered on budget-return (the quota reset OR a user refill, whichever first), never a fixed clock; any scheduled resume is idempotent.
- Judge narrates verifies-vs-is-a-lens so a watcher is not alarmed when main runs ground-truth post-collapse; after a budget-collapse to an inline judge, the dead lens's domain is flagged NOT-CHECKED, never inline-generated.
Fixed
- CT/CB issue-template version placeholders were stale (
v1.0.0) and ungated → replaced with a number-freevX.Y.Zformat hint that cannot rot.
Gate: build + verify + 28 tests PASS.