Releases: tuannv0069/claude-doc-genome
Release list
v4.0.0
Changed
- The Codex target is now a complete platform set of its own, not a pointer layer over the Claude Code one. No file of either set names a path of the other; only
.agent-workspace/**is shared, because it belongs to neither. This reverses the v3.0.0 design, where a Codex deployment reached into.claude/for its rules and skills — that made every Codex-only deployment incomplete and turned an auto-load guarantee into a file the agent had to choose to open. AGENTS.mdnow carries the always-loaded rule tier inline, in full, and.codex/config.tomlships aproject_doc_max_bytessized to it. The v3.0.0 rule forbidding this rested on treating the platform's 32 KiB default as fixed; the shipped manual's list of keys a project config may not override does not contain it, so a repository can raise the cap..codex/rules/*.mdis the Codex prose rule tier. The same directory holds*.rules, which the platform loads into its Starlark command-approval engine for a trusted project — the engine selects by extension, so markdown beside it is inert. Prose in a.rulesfile would be fed to that engine, and the breakage would land in the user's other work..agents/skills/<n>/SKILL.mdand.codex/agents/<n>.tomlnow carry the full body of the skill or agent, not a routing pointer.harness-adapter.mdrestates the corrected law throughout: §1 three parts rather than two, §2 the slot map with the size-control row, §3.1 reversed, §4 independence, §5 the generated set and its marker, §6 prefer the running product over its documentation when they disagree about a path.
Added
.codex/rules/agents-md-standards.mdand.codex/rules/codex-agents-standards.md— the Codex set's own standards, authored rather than mirrored.claude-md-standards.mdgoverns a file the Codex set does not have, andsubagent-standards.mddescribes a markdown agent file spawned by the other platform's tool; a path rewrite cannot make a wrong mechanism right. Both ship in a new bundle groupportable/codex-rules/.render_codex.pygained a third gate with no direction: no generated file may name a path of the other platform, nor a rule the set deliberately does not carry. A cross-reference reads perfectly in review and resolves to nothing on a machine that deployed one platform. 35 mutation cases.- A file in
.codex/rules/without the generated marker is treated as authored for that platform and left alone — the mixed directory is how a platform-only rule gets a trigger line without being owned by the renderer.
Removed
portable/rules/agents-md-standards.md— moved toportable/codex-rules/, which is the breaking change that makes this release MAJOR.- The pointer-stub model for Codex skills and agents, and every
.claude/-facing reference in the generated set.
Fixed
- v3.0.0 shipped
.agents/skills/on the strength of a documentation page while the running product also uses$CODEX_HOME/skills. The shipped manual settles the repository scope at.agents/skillsand that is what the renderer targets; the lesson is recorded in.agent-workspace/lessons/establish-external-platform-fact.md.
v3.0.0
Added
- Codex as a second harness target.
harness-adapter.mdis the new source of truth for how the genome binds to more than one agent harness: §2 the slot map (root index, always-loaded tier, path-scoped rule, skill, subagent, on-demand tree) with a column per harness, §3 the three Codex deltas that change behaviour rather than paths, §4 the one-source law, §5 the generated surface, §6 the procedure for adding a third harness. Reached by a router row. render_codex.py+test_render_codex.py— renders and gates the Codex binding surface from the live Claude Code tier:CLAUDE.md→AGENTS.md,.claude/skills/<n>/SKILL.md→.agents/skills/<n>/SKILL.md,.claude/agents/<n>.md→.codex/agents/<n>.toml. The stubs carry routing metadata and a pointer, never a copy of the instructions, so the body count stays at one.--checkgates both directions (verification-gate-design.md§2) — nothing missing, nothing left behind after a source is deleted — and enforces Codex'sproject_doc_max_bytes(32 KiB) counted in bytes. 21 mutation cases.agents-md-standards.md— path-scoped to**/AGENTS.md, holding only the Codex deltas: the file is generated soCLAUDE.mdis what you edit, two budgets apply at once (< 200 lines AND < 32 KiB), an always-loaded rule reaches Codex only as aMUST Readtrigger, and.codex/rules/is Starlark shell-command policy rather than a rule tier. Every wording and density law stays inclaude-md-standards.md.- This repo is now deployed instance #1 of both harnesses: it carries a generated
AGENTS.md,.agents/skills/, and.codex/agents/, and the pre-commit hook runsrender_codex.py --check. /init-projectgained a harness target —claude(default) ·codex·both. Every target deploys the identical body;codexandbothadditionally run the render step. The generated surface never enters the bundle, so its drift gate isrender_codex.py --checkrather than a sha256 pair.
Removed
- The skill-authoring toolkit —
skill-designer,skill-writer(both trees) and theskill-writer-auditoragent, from the bundle and from the live tier. This is the breaking change that makes the release MAJOR: an initialized project runningupdatekeeps whatever it already has (update never deletes), but a freshinitno longer deploys them.skill-md-standards.mdandsubagent-standards.mdstay — the standards a skill or agent file is written to were never part of the toolkit.
Changed
capability-packaging.md— the<critical>core line, the opening paragraph, §4, §5 and its example no longer name the removed authoring chain. The guide's job is unchanged: it raises the candidate and the human decides; the approved candidate is now authored directly againstskill-md-standards.mdorsubagent-standards.md.document-writer/README.md— the self-test pointed attest-skill.shinside the deletedskill-writertree; it now points at the<self_check>list inskill-md-standards.md.scan_rule_health.py—FROZENnow excludes the generated Codex surface (AGENTS.md,.agents/**,.codex/**). Those files are rendered from the live tier, so every line they share with their source is duplication by construction; scanning them produced 17dupfindings that could never be closed, which is the failurerule-health.md§2 names. Two cases added totest_scan_rule_health.py.CLAUDE.md— three NEVER lines (stale Codex surface, hand-editing a generated file, writing genome content into.codex/rules/), a scope-table row for the generated surface, and a language-table row.
v2.8.0
Added
rule-health.md+scan_rule_health.py— the debt recorded at 2.7.0 is paid rather than carried. The scan reports (never edits) six signals over the genome's own corpus:dup(verbatim duplicate / divergent copy),dead(sid_missing·path_missing·target_empty·paths_no_match·naming_prefix),drift(a cited section changed after the citing file did),growth(a file that has never deleted a line, against §12), andbudget— the only hard gate, exit 1. The guide governs judgement: §2 separates a finding from a context line, §6 requires every finding to closefixedorexemptwith anallowed_by§ID, §7 states what the tool cannot see. Reached by a newCLAUDE.mdtrigger and a router row.test_scan_rule_health.py— 20 mutation cases pinning the scope contract, which is the part that fails silently: an empty scope, a missingrule-writing-standards.md, nobody declaringpaths:, frozen archives leaking in, thenaming_prefixandpaths_no_matchsignals in both directions, glob expansion, budget in three states, and ledger integrity. Writing it found a real defect: on Windows a temp/8.3 short name and its long form denote one directory and spell it differently, so_fp_pathproduced machine-specific absolute ledger keys — fixed.doc-organization.md§12 — a narrowed or retired law leaves no text behind: delete the old text in the same commit, a portable§IDslot that must survive keeps its number with a bare(retired)marker, and change history belongs to git and the record files. This is the law thegrowthsignal measures.
Changed
scan_rule_health.pysemantics: a single declaredpaths:glob matching no file is now apaths_no_matchFINDING instead of aborting the scan as a declaration error. An entirely empty scope stays a hard error. The distinction is what makes a portable rule shipped ahead of an optional tier —wiki-tier.mdhere — legal without blinding the scan.FROZENnow names this lineage's paths (.agent-workspace/tasks/,.agent-workspace/worktrees/) and no longer mentions a bolt-on skill set.
v2.7.0
Added
capability-packaging.md— new portable guide: when the agent itself raises the question of packaging a procedure into a skill or a subagent. §2 Detector A reads the guide the task already opened (fixed trigger + ordered steps + defined output + no owner in.claude/skills/or.claude/agents/); §3 Detector B is an on-request sweep with a threshold of 3, grouped by kind of work; §4 chooses skill vs subagent vs staying a guide§ID; §5 the five-line proposal the human approves; §6 records a declined candidate so it is never re-raised. Reached by a newCLAUDE.mdtrigger and a router row.doc-organization.md§10 now names three trigger kinds with three tests: message-triggered (decided by scanning the user message), work-state (decided by a count the agent keeps of its own work — this lineage's own clause, kept), and action-triggered (decided before the tool call the agent is about to make, from that action and its concrete object). Abstract task classification and intent interpretation still fail all three. Gatetest_trigger_kinds.pypins the law: it asserts the required phrases inside the §10 slice only, and carries a mutation fixture with a decoy §11 line to prove the scoping..agent-workspace/decisions/gained four real entries — the wiki deployment choice, the unattended trigger-confirm delegation, the deferred rule-health debt with its unlock condition, and the dropped maintenance template.- Decision journal —
.agent-workspace/decisions/with its own router, seeded empty. New portable guidedecision-journal.md: §1 the admission test (git logreconstructs the conclusion → do not write the entry), §2 the five classes (choice · scope · debt · rule · review), §3 entry shape, §5 when to write, §6 grep before reversing a law, §8 the supersede lifecycle, §9 cap and archive. Gateverify_decision_log.py(22 mutation cases) plusarchive_decisions.py, which moves only entries a later entry superseded and asks before moving. Reached by a newCLAUDE.mdtrigger on editing a law file, answering a reviewer comment, or declaring scope / debt / a rejected option. - Wiki tier —
wiki-tier.mdships in.claude/rules/for every project. It ispaths:-scoped to.agent-workspace/wiki/**, so it costs nothing while the tier is absent and never touches the always-loaded budget. The tier itself (wiki/index.md+ its trigger + its interview slots) is a new optional module in the init module matrix, deployed only where the project investigates subject material it does not own. Gateverify_wiki.pychecks links, never truth: dead paths, drifted anchors, tier-wide id uniqueness, evidence-item schema, the one-edge-table-first convention, and R9 merge conservation — with its own declarations of what it deliberately does not check (§8). A project without the tier getsclusters: 0and a pass. verification-gate-design.md— new portable guide: name the unit of BOTH sides before wiring a comparison gate (§1), and a gate proving "nothing extra" never proves "nothing missing" (§2). Reached by a newCLAUDE.mdtrigger ontest_*.py/verify_*.py, and by a router row.- Role tier —
.agent-workspace/guide/roles/with seven portable roles (business-analyst, tech-lead, developer, qa, project-manager, security, comtor), each on the same seven-section skeleton and capped at 90 lines. Its hubroles/index.mdcarries §1 for the genome roles and §1a for the roles a project adds itself. New portable guiderole-selection.mdholds the mechanism: §2 matching, §3 the skeleton, §4 subagent role-handoff, §5 adding a role, §6 the router format the gate reads, §7 what happens when a role clause collides with a project rule. .agent-workspace/tooling/— the genome's own machine gates, Python 3 stdlib only, deployed by init and mapped into the bundle asportable/tooling/*.verify_lesson_router.pyenforces the lesson router contract (5 rules) andverify_role_files.pythe role contract (4 rules); each ships atest_*.pythat breaks one rule per case — 18 and 15 mutation cases.lesson-capture.md§8 — which phase a lesson belongs to: a store is chosen by the phase the record protects, not by the task that found the defect. Introduces the closed seven-valuephase:declaration every store now carries, and thechecksrelation between stores.- Templates
roles/index.md.tpl;lessons/index.md.tplregrown to the four-column router.
Changed
lesson-capture.md§7 rewritten as the dispatch law: one unconditional lookup replaces per-work-type routing, and a dispatcher passes the matched store path plus itscheckspaths into a subagent prompt. §1–§6 keep their numbers (portable §ID is append-only).CLAUDE.mdandCLAUDE.md.tpl— the lesson lookup line is now unconditional (it previously required classifying the work as an "artifact task"), and a matching unconditional role lookup line joins it..agent-workspace/lessons/index.md— the §1 router gained thecheckscolumn and a six-step lookup protocol; the storeverify-context-rule-change.mdnow declaresphase: building-gate.SKILL.md— dependencies, bundle map, copy step, render step and the step-7 verify checklist all cover the roles and tooling groups; step 7 now runs the deployed gates, because a gate present but red means the deploy is incomplete.
Removed
- superpowers is no longer part of the genome. Dropped the two
superpowersALWAYS triggers fromCLAUDE.md(design/plan flow, implement task-by-task) and thesuperpowersentry from.claude/init-manifest.jsonmodules. Nothing generic is lost:task-planning.md§1 already states the precedence rule without naming a skill,review-checklist-method.md§7 is still reached by the existing review trigger, and the working-file redirect is still covered by the generic "skill writes its working files" trigger. Thesuperpowersrow also leaves the init module matrix (skills/init-project/SKILL.md), so no project the genome deploys to receives a superpowers trigger.
v2.4.0
Added
claude-md-standards.md— CLAUDE.md must be written in English regardless of conversation language. Added as a<critical>line, anALWAYSbullet, a<self_check>item, and a<critical_recap>entry. The rule isscope: portable+paths: **/CLAUDE.md, so it binds every project the genome deploys to. Promoted live → bundle (skills/init-project/portable/rules/claude-md-standards.md).## languagetable gained aCLAUDE.mdrow in bothCLAUDE.mdandtemplates/CLAUDE.md.tpl— the table previously covered.claude/**,.agent-workspace/**,skills/**and the public-facing docs, but never the rootCLAUDE.mditself, so a Vietnamese-conversation project had no rule pinning it to English.
Full Changelog: v2.3.0...v2.4.0
v2.3.0
Added
conversational-output.md— new NEVER rule bans#/##heading levels in conversational replies; headings must start at###to save presentation space. Updated the matching ALWAYS rule, conditional table, and multi-topic example to reference###+ instead of##/###. Promoted live → bundle (skills/init-project/portable/rules/conversational-output.md).
v2.2.0
Added
conversational-output.md— new always-loaded rule governing structure/tone of conversational replies (conclusion-first, one idea per paragraph, structure matches content shape, fact vs recommendation vs assumption labeled, action-relevant replies end with a next step). Promoted to.claude/rules/(live tier) and wired intoCLAUDE.md's## see alsoalways-loaded list; the bundle copy underskills/init-project/portable/rules/already existed and is unchanged.skills/init-project/SKILL.mddependency count updated 7 -> 8 portable rules.templates/CLAUDE.md.tpl's## see alsoblock also gained the same bullet — without it every future/init-projectdeploy would ship the rule file but never wire it into the rendered project'sCLAUDE.md.
v2.1.0
Lesson read-back becomes unconditional: an always-loaded rule reads the store router at the start of every artifact task, so a store is reachable the moment its row exists.
The read-back law was previously stated only inside lesson-capture.md, which CLAUDE.md triggers on being corrected — so "read the store before starting the work" was visible only after the work had already gone wrong. Reachability also scaled with the number of stores: each needed a pointer line in a paired guide, and a work type with no guide had no entrance at all.
Added
guide/lesson-capture.md§7 — router lookup at task start is the read-back path; registering a store in the router is the whole wiring, no per-store trigger. §5 keeps its number and content, demoted to the secondary entrance (portable §IDs are append-only).templates/CLAUDE.md.tpl— one new## ALWAYSline: start any artifact task (write / edit / review / investigate) → read.agent-workspace/lessons/index.md§1, match the work about to be done, no match → skip. Cost is O(1) in the number of stores.templates/lessons/index.md.tpl§1 — explicit "no row matches → skip, read nothing" branch, and the router's second column renamed to the action about to be performed. Without a skip branch an agent with no matching row reads the nearest file instead, and a wrong lesson costs more than no lesson.
Changed
templates/lessons/index.md.tpl§2 no longer requires aguide/index.mdentry for a store with no paired guide — superseded by §7.templates/guide/index.md.tpl— thelesson-capturerouter row points at §7.
Upgrade
Existing projects: /init-project update pulls lesson-capture.md. The CLAUDE.md trigger line and the lessons/index.md §1/§2 changes are rendered phenotype — update only WARNs on them, so apply those two by hand.
Known gap
Whether the new rule changes agent behaviour is not verified. A subagent spawned in the session that made the edit reads a context snapshot taken at session start, so it saw the pre-edit CLAUDE.md (18 ## ALWAYS bullets against 19 on disk) and could not have obeyed the new line. That measurement needs a session started after this release. Both records in the new verify-context-rule-change.md store are about that failure mode.
v2.0.0
Changed — BREAKING
- Everything the agent owns moves out of
docs/into one root,.agent-workspace/. The on-demand guide tree deploys to.agent-workspace/guide/general/(wasdocs/agent-guide/general/), its router to.agent-workspace/guide/index.md, the lesson store to.agent-workspace/lessons/, and per-task working state to.agent-workspace/tasks/<task-slug>/(was.agent/tmp/<task-slug>/).docs/now holds project work product only;doc-organization.md§11 states the separation in both directions — no guide underdocs/, no work product under.agent-workspace/. - Isolated git checkouts move with the rest:
worktree.mdplaces them at.agent-workspace/worktrees/<ID>-<TAG>-<SESSION>/. Init gitignorestasks/andworktrees/;guide/andlessons/are committed. - Bundle folders renamed to match the deployed layout:
portable/agent-guide/→portable/guide/,templates/agent-guide/→templates/guide/.scripts/update.mjsgroup and template maps follow. orchestration-policy.md§4 persists plan/state under.agent-workspace/tasks/. New §5 spells out the task-workspace lifecycle — one folder per task slug, gitignored, deleted when the task closes, anything worth keeping promoted out first (technique →lessons/, project fact →docs/, law → a guide§ID). The former name.agent/tmp/carried its own disposability signal;tasks/does not, so the lifetime is now a written rule rather than a hint in the path.doc-organization.md§9 portable-pure law re-argued:.agent-workspace/paths are admissible insidescope: portablefiles because init creates that root in every project it deploys to — an invariant of the genome itself, resting on no external system.templates/CLAUDE.md.tplno longer ships rules that depend on tooling the genome does not own. The skill-output rule is now stated generically: a skill's working files go to the task workspace, the finished deliverable todocs/.lesson-capture.md§1 keeps its three-store boundary; the "fact about the project" destination is now the project's own work-product layer (doc-organization.md §11).
Added
guide/review-checklist-method.mdgains§7 pick the instrument first(append-only §ID;<critical>and the recap point at it). A dedicated review skill beats this method wherever one fits, so §7 routes first — code diff/PR to the harness review command at a depth matching the stakes, security exposure to the security review, "does it actually run" to runtime verification, cleanup to the simplify command — and §1–§6 handles the layer no instrument reaches, admitted on four conditions: the artifact is not code, the scope is not a diff, the hunt is for the absence defect, or the user supplied a checklist (P3's hunt/confirmation/precision discipline is exactly what a handed-over checklist does not carry — 1.9.0 had already fixed this path once, and keying §7 on artifact shape alone would have reopened it). A named instrument absent from the running harness falls through to §1–§6, since the command set varies by harness version. The rows compose rather than exclude — a diff-scoped instrument structurally cannot see what was never written, so a code change reviewed for what is missing takes the instrument over the changed lines AND P1 over the requirement set, never one instead of the other. A skill that owns a workflow sets WHEN its review checkpoints fire; it does not set how deep, which stays with the instrument.guide/orchestration-policy.mdgains§6 research output persistence(append-only §ID; §1 and the recap updated to reach it). Research changes no file, so §1 sent it past the whole policy and its product lived only in the reply — the one place compaction erases mid-task and a later session cannot reach at all. §6 fires past the 3rd file read or on dispatching an agent, and requires the write to happen while working: deferring it to the end fails against exactly the compaction it exists to survive. The file carries the artifact, the reply carries the conclusion and the path, and §5 governs what happens to it when the task closes.- Every size budget in the bundle is now counted in lines, not tokens. An agent has no tokenizer, so a threshold in tokens is one nobody can check — the budgets that bit hardest were stated in the one unit that could only be guessed at. Converted at a measured 10 tokens/line (the bundle's own files range 6–24, median ~10):
rule-writing-standardsdoc 2000→200 lines, section 200→20, example 100→10, and a rule is 1 line ≤ 15 words;subagent-standards800/2500/5000→80/250/500 lines.skill-md-standardswas converted the same way and then superseded within this release — see the next entry, which replaces its tiers with the platform's single 500-line figure. Checklists now saywc -l. - Size budgets now follow the platform's published numbers where the platform states one, and say so where it does not.
CLAUDE.md< 200 lines and SKILL.md body < 500 lines are the harness's own targets, marked as such so nobody "tidies" them later;skill-md-standardsalso gains the frontmatter limits it never carried (name≤ 64 chars,description≤ 1024) and the rule that a referenced file over 100 lines opens with a table of contents, plus the one-level-deep reference rule — a reference inside a reference gets partially read, so the deeper file arrives incomplete. The rule-file and subagent budgets are labelled as this standard's own, with the reason each exists, and the rule budget is now split by load tier rather than by artifact type: a path-scoped rule loads on demand like a skill and gets the 500-line figure, while a rule withoutpaths:loads at launch at CLAUDE.md priority, carries the same adherence penalty, and gets the 200-line figure. Addingpaths:moves a file to the higher tier as a side effect, so the standard says outright that the scoping must be honest rather than a way to buy headroom. A subagent prompt is re-sent on every spawn, which is why its budget exists at all.claude-md-standardsnow names the right remedy for an oversized file — a path-scoped rule, not@pathimports, which reorganize the text while every imported file still loads at launch. CLAUDE.mddrops its three-tier budget for a single threshold: under 200 lines. The tiers keyed on project file count (<10/10–100/ monorepo), which predicts nothing about the file's real content — CLAUDE.md holds guardrails and triggers, and how many of those a project needs tracks how many ways an agent can go wrong there, not how many files exist. The old tiers were also unreachable in practice: the shippedCLAUDE.md.tplis ~1200 tokens with every slot still empty, so a freshly initialized project blew the "small" tier 4× before adding a single rule of its own.section > 200 tokens → extractbecomes> 20 lines;complex rule (>5 lines or >200 tokens)loses the redundant token clause.rules/doc-organization.mdsplit; the construction half moves toguide/doc-system-mechanics.md. At 328 lines it was 70% of the always-loaded floor while only part of it met its own §8.2 entry criterion — a guardrail needed before the decision point. What stayed is the decision surface: §1 classification, §4 duplication exceptions, §8.2/§8.3 tiers and decision tree, §9 portability, §10 placement laws, §11 thedocs/boundary. What moved is what you consult while building: §2 reference mechanism, §3 worked examples, §5 enforcement layers, §6 the content-class flow (the same five classes §1 already tables, in branching form), §7 the guide tree's area/taxonomy/router laws, and §8.1 the network-model principles. The moved sections keep their original §ID numbers in the new file — portable §IDs are append-only, so renumbering would silently break referrers in projects beyond this repo's reach; each vacated slot keeps its heading indoc-organization.mdas a terse reminder plus a pointer, so an agent scanning it still meets the topic. Result: 328 → 189 lines, and the always-loaded floor every initialized project carries drops from 469 to 330.rules/doc-organization.md§7 loosened where it had been shaped by code projects. §7.1 now defines an area by its axis of work and states that a stack layer is the most familiar shape rather than the required one — an artifact type, a recurring activity, or a live subsystem are axes just as valid, and a project with no code has areas too. §7.1 also gains the escape the promotion rule was missing: when no axis emerges,general/stays flat at any count, because a wrong axis misroutes every file placed after it and costs more than a long flat list (NEVER + ✅/❌ example added). §7.2 demotes its four folders from a mandatory vocabulary to a default set: an area whose real content does not split that way defines its own folders and records them in its hub, and anenforcement/kept empty for symmetry is called out as a smell rather than compliance.concepts/loses "in the stack" from its definition. The invariant is unchanged — every file lives in a folder, no top-level orphan inside a taxonomy area.guide/orchestration-policy.mdgains§7 delegating for fresh attention(append-only §ID). §2 forbids handing grep/read/analyze to a subagent, which is a rule about throughput — a second reader paying again for context the orchestrator already holds. §7 is the opposite case, where the value is that the reader has not been primed: an absence sweep, an output-audit under doer ≠ checker, adversarial verification. Without it,review-checklist-method.mdP1 citedorchestration-policy.mdas authority for spawning a fresh reader while that file's NEVER list forbade exactly that; both citations now name §7.rules/doc-organization.md§10 recognizable-trigger law now admits a countable work-state signal (Nth file read, an agent dispatched, N files edited) alongside message-scan signals. Both are counted rather tha...
v1.10.0
Added
- New portable guide
agent-guide/task-planning.md(scope: portable) — plan + verify before executing any artifact-changing task. Two independent axes: scale → depth (small/medium/full; the 7-step §4 scales down to inline for small), task type → form (truth source + acceptance-criteria shape; type never raises depth). Invariant principles §3 (plan-before-execute, auditable criteria, doer ≠ checker output-audit, genome-rule per sub-task), with §3.2/§3.6 pointing tocritical-thinking.md. §4 seven steps carry loop-back + off-ramp branches; §4.5 plan-review conditional. Registered: posture trigger inrules/critical-thinking.md, router intemplates/agent-guide/index.md.tpl, dependencies inSKILL.md.
Changed
rules/critical-thinking.mdALWAYS gains a posture line pointing to the newtask-planning.md(portable-pure, no project path).