Thanks for helping make this suite better. It's small by design, so the bar is simple and mechanical.
Every user-visible or behavior-affecting change updates CHANGELOG.md in the
same commit — no separate "docs" commits. Entries are organized per mod
under the current Unreleased heading. Version headers bump only at
milestone releases.
- Conventional prefixes:
fix(mod): …,perf(mod): …,feat(mod): …,chore: …. - One cohesive change per commit — each mod's changes land in their own diffable commit.
- Each mod is standalone-installable. Duplicated regex tables and helpers across mods are intentional — the cross-mod contract is the event schema (see README), never shared code.
- Namespaced events only. Emit and consume through
cmd.eventswith namespaced names (self-repair/verdict,memory-bank/graduate). - Cache discipline. The system prompt must stay byte-identical across
turns:
appendSystemPromptcontent is static or one-shot; dynamic content ridestransformContext(tail append),onStopreasons, or tooladditionalContext. Injected messages use array content blocks —content: [{type: 'text', text}]— never raw strings. - Ownership markers. A mod that writes to shared locations must stamp an owner marker and refuse to clobber artifacts it doesn't own.
node scripts/check-contracts.mjs— must pass (CI also runs this).- The changed mods load cleanly (
commandcode mods listshows zero load warnings). - A headless smoke run completes:
commandcode -p "Reply with exactly SMOKE_OK and nothing else".
- Fixes the root cause, not the symptom — and documents the root cause.
- Guards the guardrails: budget caps, min/max flag validation, and refuse-and-suggest on conflicts.
- Receipts for autonomous actions: what ran, why it belonged, how it was verified, how to undo it.