Doctrine
Description
The artifact-shape of an operational rule — named, addressable, and invocable rather than implicit or ad hoc. A doctrine has four structural elements: a name (so it can be cited), a triggering condition (so it knows when to activate), a protected-against failure (the thing it prevents), and a citation address (where the authoritative statement lives). Without all four, a rule is just a preference or a habit; with them, it becomes an institution.
Doctrines are distinguished from individual decisions by their generality and repeatability — they apply whenever the trigger fires, not just in the current case. The most common failure mode is a rule that has the form of a doctrine but is missing its trigger, making it a bare principle rather than an actionable policy. This is why trigger-rule-pair is so closely coupled to doctrine: the trigger is what makes a doctrine load-bearing rather than decorative.
Encounters
- CLAUDE.md files — project-orientation files that state rules for agent behavior (“always read X before doing Y,” “never propose Z without W”). Each instruction is a doctrine fragment; together they constitute an operational doctrine set for the session.
- “Load-bearing instruction” — the diagnostic for which CLAUDE.md entries are genuine doctrines vs. boilerplate: does this rule actually change behavior when triggered?
- KCC PR #860 constraint — “LLM calls in production MUST use Gemini.” Named, triggered-on (any production LLM call decision), protected-against (IARC compliance failure), cited in CLAUDE.md.
- Three failure-mode gates — label-without-mapping check, flatter-vs-change-next-move check, asymmetry/reversal check. Each is a doctrine: named failure type, triggering signal, protective function.
- Code-review norms — “never merge without test coverage” is a doctrine; “write good tests” is not (no trigger, no protected failure).
- Git workflow conventions — “never push to main directly” is doctrine; “always create a PR” — similar.
When it applies / triggers on
User-initiated: User is articulating a rule, policy, or principle — especially when they use “always,” “never,” “when X, do Y,” or “our rule is.” Also when reviewing a document that is meant to govern recurring decisions (CLAUDE.md files, team wikis, architectural decision records).
Agent-initiated: Engine notices the target situation involves a standing rule or policy decision rather than a one-off choice. Candidate inference: “this rule has the shape of a doctrine — does it have a named trigger and a protected failure?” Also surfaced when a rule is being violated or when someone is asking whether a rule applies.
Vocabulary cues: “doctrine,” “policy,” “convention,” “mandate,” “standing rule,” “we always,” “we never,” “the rule is,” “per our convention,” “governing principle.”
Situation-shape signals: The presence of a rule stated without a trigger (“do X”) is an invitation to apply the trigger-rule-pair form — what condition causes X to activate?
Composes with
- trigger-rule-pair (creation relationship) — doctrine is the artifact; trigger-rule-pair is the structural criterion that makes a doctrine executable. A bare doctrine without an explicit trigger is incomplete.
- graduation-promotion (creation relationship) — doctrines are often the output of graduation: a pattern that recurred enough to be named and elevated becomes doctrine. The graduation move produces doctrines as its artifact.
- route-as-context (specialization relationship) — route-as-context is a specific doctrine: “path encodes intent.” The doctrine form is the containing category; route-as-context is a high-confidence instance.
- active-gate-vs-passive-audit (composition relationship) — doctrines often specify how errors are handled: some doctrines are gates (block on violation), some are audit-trails (record and review). The posture choice is load-bearing.
When it doesn’t apply
- One-off decisions — a choice made in a specific situation with no expectation of recurrence isn’t a doctrine. Applying the doctrine frame over-formalizes it and adds ceremony without dividend.
- Taste or heuristic — aesthetic preferences (“I prefer short functions”) that don’t carry a protected failure or trigger aren’t doctrines; they’re style. The doctrine frame inflates their status.
- Contested norms — in contexts where the rule is genuinely in dispute, naming it a “doctrine” prematurely forecloses the debate. Better to call it a proposal until it earns consensus.
Sources
- Military usage: operational doctrine as the body of standing rules for action in a domain.
- CLAUDE.md files across the James corpus (124 hits in full corpus) — the most-encountered form by raw count.
- “Named rule + trigger + protected-failure + citation” decomposition emerged from analysis of which CLAUDE.md instructions actually changed agent behavior.
Canonical exemplars from corpus (T2 2026-05-17)
Mined via
scripts/mine_new_form_exemplars.pyfromdata/backfilled-insights.jsonl. 242 backfill-only matches at score ≥ 2 — strong support; one of the most-instantiated newer forms. Top co-occurrences:cadence(31),grain(17),active-gate-vs-passive-audit(7).
- Lean-cell-doctrine refinement on provider-level photos (cwd: campconnect, 2026-05-11): “Provider-level photo dominance triggers a lean-cell-doctrine refinement… under the strict lean-cell doctrine…” — explicit named doctrine + triggering condition (artifact-class signal) + protected failure (incorrect surface choice).
- Directive sharpens the doctrine, not just adds a feature (cwd: campconnect, 2026-05-03): “Old rule was ‘save = bookmark, place = commit, only commits earn real estate.’ New rule: ‘anything the parent has explicitly placed on the calendar with date bounds earns real estate.’ That’s a load-bearing improvement because it generalizes cleanly.” — doctrine-as-named-rule whose generality is the load-bearing property.
- Doctrine-as-test rather than doctrine-as-doc (cwd: campconnect, 2026-05-03): “The unit test
bookmark-only save MUST NOT emit (vague-date-intent doctrine)literally encodes the rule. Future features that try to extend the window without a specific-date commitment will trip that test, and the failure message will tell the next reader exactly which doctrine they’re violating.” — doctrine encoded in the enforcement artifact; trigger is structural (test fires on the violating shape). - Goldfish protected hygiene over instruction (cwd: campconnect, 2026-05-03, task-notification): “A less careful agent would have run
git rebase --interactiveto fold the wording refinement… and broken the no-force-push rule from CLAUDE.md. Holding the line on hygiene is exactly the goldfish-smart-tier judgment we’re paying for.” — CLAUDE.md doctrine successfully invoked at the right moment.
Trigger pattern (T2): Doctrine surfaces when the user articulates a rule/policy/principle or reviews a document meant to govern recurring decisions — strong “always/never/when-X” trigger-verb signal; 242 matches with
cadenceco-occurrence (31) suggests many doctrines specify when they apply via cadence-shaped triggers.