CoalBoard is the consensus & debate board of the TheColliery series. We welcome issues, bug reports, and pull requests.
- Open an issue first describing the problem, gap, or proposed feature (especially for changes to
SKILL.md— the board contract). - Make your code changes and keep the verification gates green.
- For board-behavior or
SKILL.mdchanges, dogfood it live (convene the board on a real task across at least one platform) and document the behavior in your PR.
CoalBoard is zero-dependency (Node.js built-ins only, Node 22+). No npm install is required.
Keep the gates green before and after editing:
node scripts/verify.mjs # validates the config schema, the manifest, the factory config, and plugin/ dist-sync
node scripts/test.mjs # runs the zero-dependency test suite: each test file as its own `node --test` child, in waves, judged by its TAP test names- Rebuild the dist after a source change: edit
skills/,hooks/,commands/,scripts/lib/, or the manifest, thennode scripts/build-plugin.mjsto re-syncplugin/(verify fails on a stale dist). config-schema.mjsis the single source of truth for every.coalboard.jsonkey —verify.mjsvalidates the factory config against it.- Keep the conductor Phoenix-pure: zero dependencies, fail-silent (wrap in try/catch, never exit non-zero), no network, no spawn, no NUL byte.
- Add unit tests: every shared helper gets a
*.test.mjs; the conductor change gets a hermetic spawn test. Register new files inscripts/test.mjs(the runner fails on an unlisted orphan and on a file whose only result line names the file). Open: the runner has no per-file test-count floor, so a test that exits 0 after another test already passed reads as a pass with the tests that completed. - Spawn
gitthroughgitEnv():verify.mjsruns the shared git-spawn census (the org canon,SKILL-REPO-PATTERN.mdin theTheColliery/.githubrepo); the room keeps only its pins and file set inscripts/lib/git-spawn-room.mjs. - Language & tone: shipped source and docs stay in English.
Both checks the branch ruleset requires — all-green (CI) and analyze (javascript) (CodeQL) — now run on every push, including one that touches only root docs. On such a push each check reports success so the ruleset stays satisfiable, not because anything was verified: the workflows decide per-run, from the changed paths, whether their suite has any work to do.
So read the job summary, never the green tick alone. Each check states which of three things happened — the path classifier failed (the check refuses), the suite ran (with its result), or there was nothing to run (naming the changed paths that produced that verdict). A summary saying nothing ran is not a clean bill of health. The two workflows exempt deliberately different path sets: CI still runs on a shipped markdown artifact, because verify.mjs checks dist-sync, while CodeQL skips all markdown, because it analyzes JS/TS.
CoalBoard is cross-agent — it runs on any platform with concurrent subagents (the board spawns parallel-blind lenses; diversity rides the prompts, not a vendor). Claude Code additionally lets it run cheap lenses + a premium judge (a cost bonus) and auto-activates via hooks. A platform with no concurrent fan-out degrades to a sequential pass or off — never a broken board. Verify the platform's current subagent support (it churns).
Two tiers, honestly. Any subagent platform works with CoalBoard — the degrade-safe path runs (conservatively, unverified, design-supported not run end-to-end by us) with no setup, so you can use the board there today. Claude Code is validated end-to-end; Antigravity is validated for the load only (measured 2026-10-29, agy 1.4.8, a report-only load check: the whole skill loads under its 24,000-byte limit and reaches Step 4). The debate itself last ran on Antigravity on 2026-06-22. Validation follows access, not a request queue: if you run a platform we haven't, open an issue at Issues and we'll walk you through a one-off capability probe you run on your side, then we confirm the result and ship a tuned adapter. The probe prompts stay private, and we never mark a platform "validated" until it's actually been run there — the free degrade-safe path is always there; "validated" is earned by whoever has the platform.
| Path | Purpose |
|---|---|
skills/coalboard/SKILL.md |
The board contract (the load-bearing prompt). |
scripts/lib/ |
Core logic: config-schema, trigger (AND-gate), rigor (preset), secrets (scrubber), link-check (repo-internal link/anchor gate). |
scripts/ |
Tool scripts: build-plugin.mjs, verify.mjs, test.mjs. |
hooks/coalboard-conductor.js |
Phoenix-pure conductor hook (SessionStart + UserPromptSubmit). Auto-synced by the build. |
plugin/ |
Generated Claude Code plugin distribution. |
platform-configs/.coalboard.json |
Commented factory default configuration. |
| (benchmark) | The with-the-board-vs-without benchmark lives in the series records — TheColliery/.github/benchmarks/CoalBoard — kept out of the clone (clean-clone: a skill repo carries only the skill). |
Bump version in .claude-plugin/plugin.json ➡️ add a CHANGELOG.md entry ➡️ ensure verify.mjs and test.mjs pass ➡️ commit ➡️ create a signed git tag (vX.Y.Z) ➡️ push ➡️ create a GitHub Release (stable tags only).
Contributions are licensed under the Apache License 2.0. Please assume good faith and be respectful. Report security issues per SECURITY.md.