Minor release. Twenty days of test-driven hardening since v0.2.0: full bats coverage surfaced 6 real gate-logic bugs (one fail-OPEN) and all are fixed red-tests-first; CI was rebuilt on CodeQL + a deterministic shellcheck/bats lane; Wasteland federation and the ASCII status dashboard landed; and the system grew its first observability layer — a deterministic daily recap email in the house HTML template, live on cron. No breaking changes.
Added
- Wasteland federation support — the
wl claim → PR → wl doneflow, board→repo mapping, A-phase gate adaptations for federated claims, the[wendy:github-mirror]staleness trap, and the collaboration-surface inversion; specified inreferences/wasteland-federation.md(#62). scripts/dashboard.sh— local-only ASCII status dashboard (pipeline funnel / in-flight / shipped / suggested-next / timeline), printed first by/contributeStep 0; +8 bats cases with an alignment invariant guarding multibyte-title border drift (#60).scripts/contribute-daily-recap.sh— deterministic personal daily recap email in the Intent Solutions house HTML template (stat tiles, Action-needed card, pipeline funnel + in-flight tables, event badges, override-trend table). Heartbeat only on positive log-read proof; fixed 2-day event window, no watermark by design; zero LLM in the correctness path. Live on the dev-box crontab at45 6 * * *; weekly team mode ready behind--window/--toflags (#66).- Full bats coverage for all 51 gates — one
.batsper gate, genuine (non-tautological) assertions; surfaced 5 real gate-logic bugs, all since fixed (#54). - CI rebuilt — CodeQL + deterministic shellcheck/bats gate workflow (#55); apt dropped from CI in favor of preinstalled shellcheck/jq + npm bats, with job timeouts (#57).
Changed
- PR-review workhorse switched Gemini Code Assist → CodeRabbit (#56); estate-wide Greptile transition noted for when the GitHub App swap reaches this repo.
- README reshaped to the versioned product-landing standard (#53).
- CLAUDE.md drift corrected against the tree — script counts, release machinery, support subagents, Wasteland reference, review-bot transition, #60–#62 history (#63).
audit-overrides.shhonorsCONTRIBUTE_STATE_DIR(parity withdashboard.sh, testability) (#66).
Fixed
- Gate c24
engagement-frame-leakagewas fail-OPEN — its|-split TOKENS table truncated 3 regexes into unparseable patterns (grep exit 2 silently swallowed) and the author-footer anchor could never match the extracted line shape. Fixed red-tests-first with parallel token arrays, a re-anchored footer token, and a loud BLOCK when the gate cannot evaluate one of its own rules (#64). - Gate c22
cross-cli-vocabularyfail-closed underset -e—((x++))from 0 tripped the ERR trap on the first signal (#59, #61). - Gates c26/c11/f04 dead branches revived (#65): c26's no-new-functions SKIP was unreachable under
pipefail; c11 emitted0\n0arithmetic stderr noise on every fast-forward PASS (nowgit rev-list --count); f04's disclosure-verify paths were dead (PR-body capture stopped at the disclosure's own##heading) and lowercase gate IDs crashed the gate — capture now stops only at known candidate sections, ID extraction is case-insensitive, unparseable override lines fail loud. - Gate e02
ai-strike-trackcrashed fail-closed on everyshortlist→claimed— strict jq aborted (exit 5) on historical tornhook_interceptlog lines; now a tolerant per-line parse that still counts strikes past torn lines. Caught by the daily recap's block-event table on its first live day (#66). log.jsonlappends fail loud, never silent —gate_log_runand all fourtransition.shappends print a visible stderr WARN on write failure instead of swallowing it; the unguardedgate_overrideappend could previously torn-abort a committed transition underset -e(#65).scout --refreshdrops closed issues —--jqscalar output brokejson.loads(#58).tools/: cosmiconfig js-yaml patched to 4.2.0; gray-matter residual documented (#52).
Full changelog: v0.2.0...v0.3.0