| laziness-protocol | core | Bias toward deletion and the smallest change that solves the problem. |
| foundational-thinking | core | Before writing logic, get the core types and data structures right so downstream code becomes obvious; sequence scaffold before feature; ask what concurrent actors share. |
| redesign-from-first-principles | core | Redesign as if the new requirement had been a foundational assumption from day one, instead of bolting it on. |
| attack-the-premise | core | When two fixes sharing one premise fail the same gate, take a census of who holds the imbalance and question the premise instead of writing a third fix. |
| subtract-before-you-add | core | Remove dead code, redundant validators and stub references first, then build on the simpler base. |
| minimize-reader-load | core | Count layers between question and answer and hidden state in the reader's head; collapse one-caller wrappers and shrink mutable scope. |
| outcome-oriented-execution | core | In planned rewrites and migrations, converge on the target architecture; don't preserve smooth intermediate states with throwaway compatibility code. |
| experience-first | core | Choose user delight over implementation convenience; ship fewer polished features over more rough ones. |
| exhaust-the-design-space | core | For a novel interaction or architecture with no precedent, build 2β3 competing prototypes and compare side by side before committing. |
| build-the-lever | core | For any non-trivial work, build the tool that does or proves it (codemod, script, generator, skill) instead of working by hand. The tool is what a reviewer reruns. |
| model-the-domain | architecture | Encode the domain in a structure (state machine, typed model, registry, reducer) instead of scattered conditionals. |
| boundary-discipline | architecture | Concentrate guards at system boundaries (CLI, config, network, external APIs); trust internal types and keep business logic in pure functions. |
| type-system-discipline | architecture | Make illegal states unrepresentable, brand semantic primitives, parse external data at boundaries, never lie to the compiler, exhaust variants, derive from authoritative schemas. |
| make-operations-idempotent | architecture | Commands, lifecycle steps and loops converge to the same end state regardless of partial prior runs, crashes and retries. |
| migrate-callers-then-delete-legacy-apis | architecture | When a new internal API replaces an old one, migrate every caller and delete the old API in the same wave. |
| separate-before-serializing-shared-state | architecture | When concurrent actors might write the same file, branch, key or object, eliminate the sharing first; serialize only when one shared writer is a real invariant. |
| prove-it-works | verification | Before declaring done, verify against the real artifact (run the feature, read the actual value, inspect the diff), not a proxy, self-report or "it compiles". |
| fix-root-causes | verification | Reproduce first, ask why until you reach the root cause and fix it there; resist nil-check guards that silence crashes. |
| sequence-verifiable-units | verification | Break multi-step work into small units that each end in a verifiable state, check each before the next, and order commits so the sequence proves itself. |
| test-behavior-not-implementation | verification | Call the code the way users do and assert what they observe against a literal. If the test still passes when every import returns undefined, rewrite or delete it. |
| guard-the-context-window | delegation | Route bulk (large outputs, long files, fan-out) to subagents; keep summaries in the main thread, not raw payloads. |
| never-block-on-the-human | delegation | On reversible work, proceed, present the result and let the human course-correct; reserve confirmation for irreversible actions. |
| encode-lessons-in-structure | meta | When you write the same instruction twice, encode it as a lint, metadata flag, runtime check or script instead of more text. |