{
 "summaries": {
  "inventory": "Verified inventory matches ground truth with one correction: .gemini/rules/autopus/ has 10 rules (not 13) — missing deferred-tools.md, project-identity.md, spec-quality.md vs .claude/.\n\nTIER A (GLOBAL — injected every session): CLAUDE.md (177 lines), AGENTS.md (155 lines), 13 rules files (926 lines total). Combined Tier A load: ~1258 lines per session. Top 3 by size: spec-quality.md (197), context7-docs.md (148), objective-reasoning.md (81).\n\nTIER B (LAZY — loaded on invocation): 44 skills in .claude/skills/autopus/ (7203 lines) + SKILL.md (2813 lines) = 10016 lines across 45 files. 16 agent files (2845 lines). Top 3 skills: agent-pipeline.md (654), idea.md (507), browser-automation.md (340). Top 3 agents: spec-writer.md (326), validator.md (278), tester.md (273).\n\nTIER C (RUNTIME — executed not injected): 8 hook files (575 sh lines + 109 README + 87 task-created-validate.sh = 684 total). settings.json fires two hooks on every Bash call (PreToolUse: auto check --arch 30s; PostToolUse: auto react check 60s). MCP: context7 + sequential-thinking (npx-launched, lazy).\n\nMulti-platform duplication: .codex/ mirrors .claude/ rules (13 files) and adds 17 codex-specific auto-*.md prompt files. .gemini/ has 10/13 rules + 16 agents. All installed copies are overwritten by /auto sync — source of truth is ADK templates.\n\nKey inventory-level flags for deeper audit: (1) spec-quality.md (197 lines) is globally injected but only relevant during SPEC authoring workflows — candidate to move to lazy skill. (2) worktree-safety.md (74 lines) is globally injected but only relevant during parallel multi-agent pipelines — candidate to merge into worktree-isolation skill. (3) lore-commit content exists in three separate layers: rule (global 50 lines) + skill (lazy 99 lines) + pre-commit-lore.sh hook (54 lines runtime). (4) SKILL.md at 2813 lines is a monolith; Codex splits this into 17 separate files. (5) modelOverrides.op = 'claude-opus-4-6' may be a stale model ID.",
  "globalTax": "The 1258-line Tier-A global context budget has four high-signal problems. First, spec-quality.md (197 lines, 16% of budget) and context7-docs.md (148 lines, 12%) are deep procedural references that fire only during SPEC authoring or /auto go pipeline runs, yet load on every session — both are already referenced by lazy-loaded skills/agents when needed, making the global injection pure token tax (CONVERT). Second, worktree-safety.md (74 lines) duplicates gc.auto=0 flag, 3/6/12s backoff, and lock list that already exist in the lazy worktree-isolation.md skill (CONVERT). Third, CLAUDE.md ADK tail and AGENTS.md each re-state language-policy, file-size-limit, and subagent-delegation that are already present as dedicated rule files — a triple-injection on every turn (SHRINK the tails). Fourth, branding.md contains a factually stale language-policy description ('commits in ko, responses in ko') that contradicts autopus.yaml which sets all three language settings to en, and references a template file (templates/shared/branding-formats.md.tmpl) that does not exist on disk (SHRINK to fix). All 15 files are ADK-generated installed copies; no finding recommends direct file editing — every real fix must happen at the ADK source template or autopus.yaml so changes survive the next /auto sync. autoDietEligible is false for all findings for the same reason.",
  "skillQuality": "Skills audit found 19 findings across 45 skill files. No new rules are recommended — this is a shrink/consolidate audit only. Key problem clusters: (1) Trigger token collisions — 8 skill pairs share ambiguous trigger tokens that cause both skills to activate on the same user input: verify (verification + frontend-verify), refactor/refactoring (refactoring + ast-refactoring), worktree (worktree-isolation + git-worktrees), pipeline (agent-pipeline + ci-cd), brainstorm/아이디어 (idea + brainstorming), plan (planning + SKILL.md /auto subcommand + superpowers writing-plans). (2) Enabled superpowers plugin duplicates — 6 autopus skills have substantial overlap with the installed superpowers plugin (5.1.0): brainstorming (identical name collision), tdd vs test-driven-development, debugging vs systematic-debugging, verification vs verification-before-completion, git-worktrees vs using-git-worktrees, subagent-dev vs subagent-driven-development/dispatching-parallel-agents; plus writing-skills has an identical name collision with superpowers writing-skills. (3) Size/split candidates — 3 files exceed maintainable size as single skills: auto/SKILL.md (2813 lines), agent-pipeline.md (654 lines), idea.md (507 lines). (4) Rule duplication — lore-commit.md skill duplicates content from the globally-loaded lore-commit.md rule; the skill should be reduced to a worked example only. (5) QAMESH operational guidance is misplaced in testing-strategy.md. All findings are ADK-generated with realFixLocation pointing to ADK source/template — editing installed copies will be overwritten by /auto sync.",
  "productOverlap": "A structural class of thin, Go/Korean-flavored autopus skills now shadows more robust, auto-triggering superpowers skills. The pattern: autopus installs a skill that covers the same methodology (TDD, debugging, verification, brainstorming) with narrower scope and less rationalization-hardening, while a superpowers equivalent auto-triggers on the same user intent. Both coexist in agent context simultaneously, creating ambiguous authority. The remediation is not wholesale deletion — the Go-specific toolchain commands and Korean trigger keywords have genuine value — but shrinkage to thin extension docs that defer to the superpowers skill for behavioral discipline. Three specific items are clean deletes (git-worktrees: full duplicate; writing-skills: orphan with name collision; worktree-safety rule: fully absorbed by worktree-isolation skill). Two global rules (context7-docs, deferred-tools) carry pipeline-specific residual value (subagent-injection contract; trigger-point table) that the MCP/platform does not replace — shrink rather than delete. All findings target ADK-generated installed copies; real fixes must happen at the ADK source/template so /auto sync does not regenerate the oversized versions. autoDietEligible is false for all findings because the files are sync-regenerated. Counts: DELETE: 2, SHRINK: 5 (3 skills + 2 rules), MOVE: 1, CONVERT: 2, KEEP: 9.",
  "safety": "The most significant permission surface is the auto-approved npm/npx/node/pnpm/yarn cluster combined with skipAutoPermissionPrompt and skipDangerousModePermissionPrompt. This creates a path where any agent-produced `npx <package>` command runs with the user's OS credentials and zero confirmation. The MCP servers compound this: both context7 and sequential-thinking launch via unpinned `npx -y` at every session start — outside the permissions.allow gate entirely. Sequential-thinking is redundant with native extended thinking and should be removed (low risk). Context7 should be pinned to a specific version at the ADK template level. The per-Bash-call hooks (auto check --arch + auto react check) add a 90-second worst-case latency budget and implicit binary trust on every Bash invocation — worth scoping to relevant commands only at the ADK template level. The modelOverrides.op stale ID (claude-opus-4-6) is a low-risk correctness issue; fix directly in settings.json. All ADK-generated files (.mcp.json, hooks) require upstream template fixes to survive sync; settings.json and settings.local.json are user-owned and can be edited directly.",
  "plan": "15 items audited across the 1258-line Tier-A global-injected budget. Classification counts: KEEP 3, SHRINK 6, CONVERT 5, DELETE 0. The three missing agent inputs (skill-quality, product-overlap, safety-permission) were not present in the supplied findings array and have not been fabricated. All autoDietEligible=false: every file is an ADK-generated or ADK-managed installed copy that /auto sync would overwrite; all real fixes must happen at the ADK source/template or autopus.yaml. The single highest-value change is CONVERT spec-quality.md from a global rule to a lazy skill: at 197 lines it consumes ~16% of the entire Tier-A budget in every session while serving only /auto spec and /auto review flows — the spec-review.md skill and spec-writer.md agent already have reference pointers to it, so converting eliminates the global overhead with zero functional regression. The second-highest combined value is shrinking the ADK-generated tails in CLAUDE.md (43 lines) and AGENTS.md (155 lines), which triple-state language-policy, file-size-limit, and subagent-delegation constraints already injected by their dedicated rule files. Two factual accuracy bugs were found: branding.md line 40 describes language policy as 'commits in ko, responses in ko' while autopus.yaml sets all three to 'en'; and six references in branding.md point to templates/shared/branding-formats.md.tmpl which does not exist on the filesystem — R7-R9 are currently unenforceable. The pkg/techstack.InferMode() reference in techstack-freshness.md line 19 is a stale phantom (no /home/lucas/pkg/ directory exists). No KEEP items had problems requiring action; project-identity.md (25 lines, unique content, no duplication), file-size-limit.md (38 lines, constant-enforcement justified), and subagent-delegation.md (29 lines, constant-enforcement justified) all pass cleanly — the redundancy for the latter two is in the CLAUDE.md/AGENTS.md tails, not in the rule files themselves."
 },
 "plan": [
  {
   "path": ".claude/rules/autopus/spec-quality.md",
   "currentPurpose": "Full 5-dimension SPEC quality checklist (Q-CORR-*, Q-COMP-*, Q-FEAS-*, Q-STYLE-*, Q-SEC-*, Q-COH-* with pass/fail criteria and N/A guidance) injected into every session globally.",
   "problem": "197 lines (~16% of the entire 1258-line Tier-A budget) loaded on every session turn, including coding sessions unrelated to SPEC authoring. The checklist is on-demand reference consumed only during /auto plan, /auto spec, or /auto review flows. spec-review.md skill (lazy-loaded, line 16) already references 'content/rules/spec-quality.md as the pre-review self-check'. spec-writer agent (lines 269-277, lazy-loaded) enumerates the same Q-* IDs. Global injection is redundant with those on-demand references.",
   "evidence": "spec-quality.md = 197 lines. spec-review.md line 16: 'treat content/rules/spec-quality.md as the pre-review self-check that spec-writer should already have applied'. spec-writer.md lines 269-277 list same Q-CORR/Q-COMP/Q-FEAS/Q-STYLE/Q-SEC checks by ID. Lazy-loaded skill already provides a pointer; no session benefit from global load. Confirmed via grep on spec-review.md and spec-writer.md.",
   "recommendation": "CONVERT",
   "moveTarget": ".claude/skills/autopus/spec-review.md — promote to a standalone skill section or dedicated skill so it loads only when /auto spec or /auto review is invoked",
   "changeRisk": "medium",
   "confidence": "high",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — reclassify from rules/ to skills/ so /auto sync does not reinstall as a global rule. Change must happen in ADK template, not installed copy.",
   "autoDietEligible": false
  },
  {
   "path": ".claude/rules/autopus/context7-docs.md",
   "currentPurpose": "Procedural Context7 MCP fetch algorithm (detection heuristics, 5-step fetch, token budget tables, caching, error handling, 15 anti-patterns) injected globally every session.",
   "problem": "148 lines of pipeline procedure loaded on every session turn. Fetch procedure is only relevant at Phase 1.8 of /auto go or when debugging library errors. agent-pipeline.md skill line 254 already contains the explicit ref: 'Ref: .claude/rules/autopus/context7-docs.md for detection heuristics, token limits, and anti-patterns' — the runtime pipeline already knows where to find this when needed. Global load is a constant per-session token tax that fires on every unrelated request.",
   "evidence": "context7-docs.md = 148 lines. agent-pipeline.md line 254 confirmed via grep: 'Ref: .claude/rules/autopus/context7-docs.md for detection heuristics, token limits, and anti-patterns. Ref: .claude/rules/autopus/techstack-freshness.md for greenfield version evidence.' Pipeline already has the pointer; converting to lazy skill preserves discoverability while removing constant injection overhead.",
   "recommendation": "CONVERT",
   "moveTarget": ".claude/skills/autopus/ as a standalone skill (e.g., context7-fetch.md), referenced by agent-pipeline.md at Phase 1.8",
   "changeRisk": "medium",
   "confidence": "high",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — reclassify from rules/ to skills/ so /auto sync does not reinstall as a global rule. The agent-pipeline.md Ref pointer already provides runtime discoverability.",
   "autoDietEligible": false
  },
  {
   "path": ".claude/rules/autopus/worktree-safety.md",
   "currentPurpose": "Git worktree safety rules for parallel executor agents: GC suppression flag, prohibited commands, lock retry backoff, cleanup procedure, max-5-worktree limit.",
   "problem": "74 lines loaded on every session. Worktree rules are only relevant when /auto go spawns parallel worktrees — inert for solo coding sessions. The companion lazy-loaded skill worktree-isolation.md (216 lines) already contains the identical safety content: 'git -c gc.auto=0' pattern (lines 110, 124, 126, 155), same 3/6/12s backoff table (lines 166-172), same shared lock list (.git/refs.lock, packed-refs.lock, lines 161-162). Loading both globally is redundant.",
   "evidence": "worktree-isolation.md line 155 confirmed: 'Prepend git -c gc.auto=0 to all git commands'. Lines 166-172: exponential backoff table (3s/6s/12s). Lines 161-162: same lock file list. Rule and skill carry identical safety invariants; only the skill needs to carry them (lazy-loaded when worktrees are used).",
   "recommendation": "CONVERT",
   "moveTarget": ".claude/skills/autopus/worktree-isolation.md — merge rule's unique safety invariants (if any differ) as a 'Safety Requirements' section; the skill already contains equivalent content",
   "changeRisk": "medium",
   "confidence": "high",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — reclassify from rules/ to skills/ so /auto sync does not reinstall as a global rule.",
   "autoDietEligible": false
  },
  {
   "path": ".claude/rules/autopus/techstack-freshness.md",
   "currentPurpose": "Requires technology stack version evidence before naming frameworks in SPEC/PRD text; defines greenfield vs brownfield mode, evidence sources, required research.md table.",
   "problem": "65 lines loaded every session; rule is dormant for typical bug-fix and feature-extension sessions in existing projects. Also contains a stale reference: line 19 cites 'pkg/techstack.InferMode()' as the source contract — this package does not exist in this repo (no /home/lucas/pkg/ directory). The rule tightly couples to /auto plan SPEC workflows (lines 23-57 reference research.md, prd.md tables) which are loaded lazily by the prd.md and planning.md skills. agent-pipeline.md line 254 already has a Ref pointer to this file, making global injection redundant.",
   "evidence": "techstack-freshness.md line 19: 'Use pkg/techstack.InferMode() as the source contract'. ls /home/lucas/pkg/ returns 'no /home/lucas/pkg dir'. agent-pipeline.md line 254 confirmed: 'Ref: .claude/rules/autopus/techstack-freshness.md for greenfield version evidence.' All SPEC-workflow consumers already have the pointer; global injection is a constant tax on brownfield sessions.",
   "recommendation": "CONVERT",
   "moveTarget": ".claude/skills/autopus/prd.md or a dedicated techstack-decision skill — loaded when /auto plan or greenfield project creation is invoked",
   "changeRisk": "medium",
   "confidence": "medium",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — reclassify from rules/ to skills/; also remove or fix the pkg/techstack.InferMode() stale reference if no such package exists.",
   "autoDietEligible": false
  },
  {
   "path": ".claude/rules/autopus/doc-storage.md",
   "currentPurpose": "SPEC and brainstorm document storage matrix (root vs module scope), ID uniqueness rules, and /auto sync commit protocol — injected every session.",
   "problem": "49 lines loaded every session but only consumed when creating a new SPEC/BS or running /auto sync. For typical coding sessions this rule is inert. The storage matrix and sync protocol are consumed by planning.md skill and spec-writer agent when those flows are active. Global injection provides no benefit during non-SPEC sessions.",
   "evidence": "doc-storage.md = 49 lines. Content (SPEC placement matrix, sync commit Phases A and B) consumed only during /auto plan, spec-writer, or /auto sync invocations. No reference to doc-storage content found in non-SPEC lazy skills, confirming the rule is inert during standard coding workflows.",
   "recommendation": "CONVERT",
   "moveTarget": ".claude/skills/autopus/planning.md — add as a 'Document Storage' reference section loaded when SPEC creation is triggered",
   "changeRisk": "low",
   "confidence": "medium",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — reclassify from rules/ to skills/.",
   "autoDietEligible": false
  },
  {
   "path": "AGENTS.md",
   "currentPurpose": "Global agent roster (16 agents with one-line descriptions), Codex/OpenCode execution model notes, file-size/subagent/language-policy summaries, and platform directory paths — injected into every session.",
   "problem": "155 lines with three separate redundancy problems. (1) Platform noise: lines 12-49 document Codex/OpenCode spawn_agent/task() execution model and platform paths — entirely inert in a claude-code session and unknown to the local environment. (2) Duplicated rule summaries: lines 58-72 restate Subagent Delegation, Worker Contracts, File Size Limit — all already present in dedicated rule files and repeated again in CLAUDE.md's ADK tail. (3) Agent roster (lines 83-155): 16 agent descriptions duplicate the lazy-loaded agent files in .claude/agents/autopus/ — those are dispatched on demand and do not need to be in global context.",
   "evidence": "AGENTS.md lines 12-49: Codex/OpenCode platform specifics (spawn_agent, task(), opencode.json). AGENTS.md lines 58-72: File Size Limit IMPORTANT at line 72 and Subagent Delegation IMPORTANT at line 60 — confirmed duplicated in .claude/rules/autopus/file-size-limit.md and subagent-delegation.md which are globally injected separately. CLAUDE.md lines 161-174 also restate the same two constraints. Agent roster lines 83-155 duplicate content already in .claude/agents/autopus/ (loaded lazily). Three-way injection confirmed via grep.",
   "recommendation": "SHRINK",
   "moveTarget": "-",
   "changeRisk": "low",
   "confidence": "high",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — remove the platform-specific Codex/OpenCode sections and duplicated rule summaries from the AGENTS.md template; keep only a minimal agent index (name + one-liner) and the supervisor/phase-gate notes (lines 52-56) which are unique content not found elsewhere.",
   "autoDietEligible": false
  },
  {
   "path": "CLAUDE.md",
   "currentPurpose": "Hand-written behavioral guidelines (sections 1-10, lines 1-133, ~130 lines) encoding real recurring LLM mistakes, plus auto-generated ADK harness summary (lines 135-177, ~43 lines) restating language policy, file-size, subagent-delegation, and code review notes.",
   "problem": "The ADK-generated tail (lines 135-177) restates three constraints already present in dedicated rule files loaded globally every session: language-policy.md (36 lines), file-size-limit.md (38 lines), subagent-delegation.md (29 lines). This is a third injection of the same content (language policy also appears in AGENTS.md). The hand-written sections 1-10 are unique, encode real recurring LLM failure modes (over-engineering, skipping tests, guessing at errors), and must be kept.",
   "evidence": "CLAUDE.md lines 151-157: Language Policy block. Lines 161-163: Subagent Delegation IMPORTANT. Lines 165-173: File Size Limit IMPORTANT + Code Review. Confirmed via grep these are exact summaries of .claude/rules/autopus/language-policy.md, subagent-delegation.md, and file-size-limit.md respectively. All three rule files are injected globally in addition to this tail.",
   "recommendation": "SHRINK",
   "moveTarget": "-",
   "changeRisk": "low",
   "confidence": "high",
   "adkProvenance": "mixed",
   "realFixLocation": "ADK source/template — the auto-generated AUTOPUS:BEGIN..END block should be reduced to a short pointer (e.g., 'Active constraints: see .claude/rules/autopus/') rather than restating rule content. Sections 1-10 are hand-written and are the installed copy's source of truth — do not modify them.",
   "autoDietEligible": false
  },
  {
   "path": ".claude/rules/autopus/language-policy.md",
   "currentPurpose": "Declares per-project language settings (code_comments, commit_messages, ai_responses) and reminds all agents to check project config before producing output.",
   "problem": "Three separate accuracy and redundancy problems. (1) Triple-injection: language-policy.md (36 lines) + CLAUDE.md ADK tail (lines 151-157) + AGENTS.md (lines 24-30) all state the same IMPORTANT constraint in every session. (2) Stale example values: the 'Example' column in the Configuration table (lines 17-19) shows commit_messages=ko and ai_responses=ko, while autopus.yaml explicitly sets all three to 'en'. The column header says 'Example' but the framing is confusing — readers may treat the example as the project's actual config. (3) branding.md line 40 compounds the confusion by describing the policy as 'commits in ko, responses in ko' as a factual statement (not an example), contradicting autopus.yaml.",
   "evidence": "autopus.yaml confirmed: 'language: comments: en, commits: en, ai_responses: en'. language-policy.md lines 17-19 Example column: commit_messages=ko, ai_responses=ko. branding.md line 40: 'language-policy — language policy was applied (code comments in en, commits in ko, responses in ko)' — factual description contradicts autopus.yaml. Triple-injection confirmed in CLAUDE.md lines 151-157 and AGENTS.md lines 24-30.",
   "recommendation": "SHRINK",
   "moveTarget": "-",
   "changeRisk": "low",
   "confidence": "high",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — (1) update Example column to either match actual project config or use unambiguous placeholder values like 'en/ko (configurable)'; (2) remove redundant language policy blocks from CLAUDE.md and AGENTS.md ADK tails; (3) fix branding.md line 40 stale description (see separate branding.md entry).",
   "autoDietEligible": false
  },
  {
   "path": ".claude/rules/autopus/branding.md",
   "currentPurpose": "Tiered branding rules for when to show the Autopus octopus banner, footer, and milestone emoji across session types.",
   "problem": "Two accuracy problems. (1) Line 40 states as fact: 'language-policy — language policy was applied (code comments in en, commits in ko, responses in ko)'. autopus.yaml confirms all three are 'en' — this is a real stale factual error, not an example-column framing issue. (2) The canonical source template templates/shared/branding-formats.md.tmpl is referenced on lines 12, 25, 60, 62, 63, 64 — six references to a file confirmed absent from the filesystem (find returned no results). Rules R7-R9 mandate pointing to this file rather than duplicating content, but the file does not exist, making R7-R9 self-contradictory enforcement targets.",
   "evidence": "branding.md line 40 confirmed: 'commits in ko, responses in ko'. autopus.yaml confirmed: 'commits: en, ai_responses: en'. find /home/lucas -name 'branding-formats.md.tmpl' returned exit 1 (no file found). Six references to templates/shared/branding-formats.md.tmpl in branding.md all point to a missing artifact. Both issues are factual errors, not style issues.",
   "recommendation": "SHRINK",
   "moveTarget": "-",
   "changeRisk": "low",
   "confidence": "high",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — (1) fix line 40 footer description to match actual autopus.yaml language config ('commits in en, responses in en'); (2) either install templates/shared/branding-formats.md.tmpl alongside the rule or inline the minimal branding formats and remove the dead external references; R7-R9 are unenforceable until the template file exists.",
   "autoDietEligible": false
  },
  {
   "path": ".claude/rules/autopus/lore-commit.md",
   "currentPurpose": "Lore commit format specification (type table, trailer schema, sign-off rules) injected every session to enforce structured commit messages.",
   "problem": "50-line global rule that duplicates the 99-line lazy-loaded skill (.claude/skills/autopus/lore-commit.md). Both define the commit type table, trailer schema, and Autopus sign-off. Format enforcement is already handled at commit time by pre-commit-lore.sh hook and 'auto check --lore' — making the global rule a token overhead beyond the hook. CLAUDE.md section 9 describes commit granularity ('Semantic Commits') without mentioning Lore format, creating a minor layering gap (both apply but the reader must infer this).",
   "evidence": "lore-commit.md rule = 50 lines. lore-commit.md skill = 99 lines. Both define: commit type table, trailer schema with Constraint/Confidence/Scope-risk/Reversibility trailers, Autopus sign-off. pre-commit-lore.sh hook enforces format at commit time independently of global context load. The global rule is redundant with the skill for all /auto pipeline consumers, and with the hook for enforcement.",
   "recommendation": "SHRINK",
   "moveTarget": "-",
   "changeRisk": "low",
   "confidence": "medium",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — reduce the global rule to the IMPORTANT constraint line and a pointer to the skill ('see .claude/skills/autopus/lore-commit.md for full format'); the hook provides enforcement; the skill provides detail on-demand.",
   "autoDietEligible": false
  },
  {
   "path": ".claude/rules/autopus/objective-reasoning.md",
   "currentPurpose": "Mandates evidence-based reasoning, trade-off disclosure, assumption challenging, calibrated confidence, and disagreement protocol for all responses.",
   "problem": "81 lines globally injected. The core value is in R1-R5 rules and the prohibited-patterns list (real project-specific constraints against sycophancy and empty hedging). However, the Domain-Adaptive Role table (7 lines), the 'When to Agree' section (3 lines), and the Anti-Patterns section (4 items) restate baseline model behavior rather than project-specific constraints. They add lines without adding constraints that differ from the base model. The signal-to-noise ratio is lower than it could be for a globally-injected file.",
   "evidence": "81 lines total. R1-R5 rules (30 lines) and Prohibited Patterns list (7 items) carry genuine project-specific value — they encode real failure modes to suppress. Domain-Adaptive Role table (lines 8-14, 7 lines) describes generic evaluation criteria that apply regardless of this rule. Anti-Patterns section (lines 74-80, 4 items) largely restates the prohibited-patterns list. 'When to Agree' (3 lines) is redundant with R1.",
   "recommendation": "SHRINK",
   "moveTarget": "-",
   "changeRisk": "low",
   "confidence": "medium",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — compress to R1-R5 rules plus the Prohibited Patterns list (~40 lines); remove or merge Domain-Adaptive Role table, When to Agree, and Anti-Patterns sections which do not add project-specific constraints.",
   "autoDietEligible": false
  },
  {
   "path": ".claude/rules/autopus/deferred-tools.md",
   "currentPurpose": "Instructs the model to call ToolSearch before using deferred tools (AskUserQuestion, TaskCreate, TeamCreate, etc.) to avoid InputValidationError or degraded UI.",
   "problem": "70 lines globally injected. The IMPORTANT rule itself (call ToolSearch before deferred tools) has genuine value when /auto commands invoke interactive tools, preventing real failure modes. However, the Trigger Points table (6 rows), Degraded UI Detection recovery steps (3-step recovery), and Anti-Patterns section are operational detail that only applies during /auto pipeline runs. A 3-5 line global reminder would preserve the critical warning while moving the procedural detail to a lazy skill.",
   "evidence": "70 lines. Sections: Detection list (10 lines), IMPORTANT Rule + code block (8 lines), Trigger Points table (8 lines), Degraded UI Detection (8 lines), Anti-Patterns (5 lines). The IMPORTANT rule and Detection list are the minimal necessary global content. The Trigger Points table and Degraded UI Detection steps are operational procedures consumed only during /auto pipeline runs.",
   "recommendation": "SHRINK",
   "moveTarget": "-",
   "changeRisk": "low",
   "confidence": "medium",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — reduce global rule to the IMPORTANT notice + deferred tool list; move Trigger Points table and Degraded UI recovery steps to agent-pipeline.md skill or a standalone deferred-tools skill.",
   "autoDietEligible": false
  },
  {
   "path": ".claude/rules/autopus/project-identity.md",
   "currentPurpose": "Prevents confusing the user's product source code with the .autopus/ harness config directory. Provides a two-layer table and identification heuristics.",
   "problem": "No significant problem found. The confusion it addresses (mistaking .autopus/ for product features) is a real and recurring LLM failure mode when harnesses are installed. At 25 lines it is the smallest global rule with no duplication in other files and no stale content. Token cost is minimal relative to the clarity benefit when the confusion does occur.",
   "evidence": "25 lines total. No duplication with any other globally-injected file. No stale references found. Content is unique to this file. The two-layer table and 'How to Identify the Product' heuristics are not present in any skill or agent file.",
   "recommendation": "KEEP",
   "moveTarget": "-",
   "changeRisk": "low",
   "confidence": "high",
   "adkProvenance": "adk-generated",
   "realFixLocation": "installed copy is source of truth for KEEP decision — no change required",
   "autoDietEligible": false
  },
  {
   "path": ".claude/rules/autopus/file-size-limit.md",
   "currentPurpose": "Declares the 300-line hard limit and 200-line warning threshold for source code files, with splitting strategies and exclusion list.",
   "problem": "Content is triple-stated: file-size-limit.md (38 lines, global) + CLAUDE.md ADK tail lines 165-174 + AGENTS.md lines 70-72. The redundancy is in the CLAUDE.md and AGENTS.md tails, not in file-size-limit.md itself. The rule file is the correct canonical location; the tails are the waste. The rule itself at 38 lines is justified as a global constant-enforcement rule (applies to every coding session).",
   "evidence": "CLAUDE.md lines 165-167 and 172-174 restate file-size-limit content verbatim. AGENTS.md line 72 restates the SPEC exemption. Three-way injection confirmed. The rule file is the authoritative source; the duplicates are in the ADK-generated tails of CLAUDE.md and AGENTS.md.",
   "recommendation": "KEEP",
   "moveTarget": "-",
   "changeRisk": "low",
   "confidence": "high",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — keep file-size-limit.md as-is; reduce CLAUDE.md and AGENTS.md ADK tails to remove the redundant restatements (addressed under those entries)",
   "autoDietEligible": false
  },
  {
   "path": ".claude/rules/autopus/subagent-delegation.md",
   "currentPurpose": "Declares when to delegate to subagents (3+ files, multi-domain, 200+ lines), how to delegate, and anti-patterns.",
   "problem": "Content is triple-stated: subagent-delegation.md (29 lines, global) + CLAUDE.md ADK tail lines 161-163 + AGENTS.md lines 58-60. Same redundancy pattern as file-size-limit.md. The rule file is the correct canonical location at 29 lines; the tails are the waste.",
   "evidence": "CLAUDE.md line 163: 'IMPORTANT: Use subagents for complex tasks that modify 3+ files, span multiple domains, or exceed 200 lines of new code.' AGENTS.md line 60 mirrors the same IMPORTANT. subagent-delegation.md is the authoritative source; tails duplicate it.",
   "recommendation": "KEEP",
   "moveTarget": "-",
   "changeRisk": "low",
   "confidence": "high",
   "adkProvenance": "adk-generated",
   "realFixLocation": "ADK source/template — keep subagent-delegation.md as-is; reduce CLAUDE.md and AGENTS.md ADK tails to remove the redundant restatements (addressed under those entries)",
   "autoDietEligible": false
  }
 ],
 "adversarial": {
  "challenges": [
   {
    "path": ".claude/rules/autopus/context7-docs.md",
    "plannerRecommendation": "CONVERT",
    "challenge": "This rule contains two constraints that must hold outside the /auto pipeline and would silently lapse as a lazy skill. First: 'Subagents cannot call MCP tools — the main session MUST fetch and inject docs into subagent prompts.' This is an architectural constraint on the main session's behaviour during ad-hoc library work, not just during /auto go. A lazy skill only loads when its trigger keywords ('context7', 'doc fetch', 'MCP') appear — a session that opens with 'scaffold me a React app' or 'fix this axios error' has no pipeline and no skill trigger, so the constraint that the main session must inject would silently not apply. Second: the greenfield version-evidence chain — the rule mandates that fetched version/source_ref/checked_at metadata be copied into the Technology Stack Decision table. That cross-rule linkage to techstack-freshness must fire before the PRD names a framework, i.e., before any spec/pipeline trigger. The agent-pipeline.md Ref pointer on line 254 points to this rule as an already-installed-path reference, not as a resolvable runtime path — it is documentation of where to look, not an active load. The MCP server instructions in the session reminder provide generic 'fetch docs for library work' guidance but do NOT contain the subagent-injection contract or the version-to-stack-decision chain — those are unique to this rule.",
    "whyRiskyToReduce": "Without global injection, the main session will not know it must act as the MCP intermediary for subagents, nor that fetched version metadata must flow into the Technology Stack Decision table. Both are recurring mistakes the rule was written to prevent: subagents calling MCP directly (silent failure), and greenfield stacks named without version evidence (stale training data used).",
    "recommendedOverride": "REQUIRE_HUMAN_APPROVAL",
    "severity": "high",
    "confidence": "high"
   },
   {
    "path": ".claude/rules/autopus/techstack-freshness.md",
    "plannerRecommendation": "CONVERT",
    "challenge": "The rule must apply during ad-hoc greenfield requests — 'create a new Express API', 'start a new Python project' — where no /auto plan pipeline runs and no lazy skill trigger fires. The risk the rule prevents (selecting React 18 or Next.js 13 from training memory when current stable is different) is not gated on any pipeline phase; it fires the moment the user names a framework in a plain chat request. The agent-pipeline.md Ref on line 254 is a documentation pointer: it says 'see the rule for details' but does not load the rule. Skills trigger on keyword matching; 'greenfield' or 'techstack' are unlikely keywords in a plain user request like 'scaffold a Flask API'. Additionally, the planner's own evidence notes that the rule cites 'pkg/techstack.InferMode()' — a non-existent package — as its source contract. This is a content bug that needs fixing at the ADK source, not a reason to demote the rule to lazy. Converting to a lazy skill does not fix the stale reference; it only removes the active enforcement context.",
    "whyRiskyToReduce": "Greenfield version selection from training memory is a documented recurring LLM mistake. The rule exists because context7-docs alone is not sufficient — the version must be written into the SPEC table. Without global injection, a plain 'create a project' request bypasses both the check and the evidence-documentation requirement.",
    "recommendedOverride": "REQUIRE_HUMAN_APPROVAL",
    "severity": "high",
    "confidence": "high"
   },
   {
    "path": ".claude/rules/autopus/worktree-safety.md",
    "plannerRecommendation": "CONVERT",
    "challenge": "The rule contains a 'Prohibited Commands' section (git gc, git prune, git repack) that does NOT appear in worktree-isolation.md's R5 safety section. A grep of worktree-isolation.md confirms R5 covers GC suppression flag, shared lock retry, and failure cleanup — but the explicit prohibition list for gc/prune/repack is absent. The planner acknowledged this uncertainty with the hedge 'merge rule's unique safety invariants (if any differ).' They do differ. Beyond that content gap, the argument for CONVERT is otherwise sound: the rule's constraints only matter when parallel worktrees are active, and worktree-isolation.md loads in exactly that scenario. If the prohibited-commands section were first merged into worktree-isolation.md at the ADK source, the CONVERT would be clean.",
    "whyRiskyToReduce": "The explicit prohibition list for git gc/prune/repack is not present in the skill. Removing the rule before that content is merged creates a real gap: a main session running outside a pipeline could run git gc while worktrees are active without being told it is prohibited.",
    "recommendedOverride": "DOWNGRADE_TO_KEEP",
    "severity": "medium",
    "confidence": "high"
   },
   {
    "path": ".claude/rules/autopus/spec-quality.md",
    "plannerRecommendation": "CONVERT",
    "challenge": "The planner's discoverability claim — that spec-review.md and spec-writer.md already provide a pointer to spec-quality so the global load is redundant — is undercut by a confirmed dead reference. Both spec-review.md (lines 16, 22) and spec-writer.md (lines 269, 320) reference 'content/rules/spec-quality.md'. This path does not exist: 'content/rules/' directory is absent from the filesystem. The installed file is at '.claude/rules/autopus/spec-quality.md'. The lazy skill's pointer resolves to a missing path, not the installed rule. If the global rule is converted to a skill and the skill itself only references the non-existent content/ path, the agent would fail to load the checklist at the exact moment it is needed. The argument for CONVERT is otherwise reasonable — SPEC authoring is the only scenario that needs this content — but the discoverability chain is currently broken at the ADK source.",
    "whyRiskyToReduce": "The lazy-load discoverability path is broken: 'content/rules/spec-quality.md' does not exist. Removing global injection before the spec-writer and spec-review pointers are corrected to '.claude/rules/autopus/spec-quality.md' (or the skill is made self-contained) means the checklist will not be loaded during SPEC authoring.",
    "recommendedOverride": "DOWNGRADE_TO_KEEP",
    "severity": "medium",
    "confidence": "high"
   },
   {
    "path": "AGENTS.md",
    "plannerRecommendation": "SHRINK",
    "challenge": "The planner recommends keeping only 'agent index + supervisor notes (lines 52-56)' and removing platform sections and duplicated rule summaries. Lines 62-68 contain two guardrails that exist nowhere else in the globally-injected files: 'Worker Contracts' (mandatory return fields: owned_paths, changed_files, verification, blockers, next_required_step) and 'Review Convergence' (discovery vs. verification split; re-retries must only check open findings, not rediscover). A grep confirms these are absent from subagent-delegation.md, file-size-limit.md, language-policy.md, and CLAUDE.md. The planner's SHRINK scope does not mention preserving these two sections. If they are dropped in the shrink, the session loses two active behavioural constraints on how subagent prompts are constructed and how review loops are run. The Codex/OpenCode platform sections (lines 12-49) are genuinely inert in Claude Code sessions and the agent roster is duplicated — those are defensible reductions. But lines 62-68 are unique and load-bearing.",
    "whyRiskyToReduce": "Worker Contracts and Review Convergence are the only globally-injected source of the minimum return-field contract and the re-retry scope restriction. Removing them silently removes guardrails on worker prompt construction and infinite review loops.",
    "recommendedOverride": "DOWNGRADE_TO_SHRINK",
    "severity": "medium",
    "confidence": "high"
   },
   {
    "path": "CLAUDE.md",
    "plannerRecommendation": "SHRINK",
    "challenge": "The ADK-generated tail (lines 135-177) includes a File Size Limit block (line 167) that lists generated-file exclusions — '*_generated.go', '*.pb.go' — that are NOT present in the standalone .claude/rules/autopus/file-size-limit.md rule. If the tail is reduced to a pointer, those exclusion patterns are removed from global context. A reviewer acting on file-size-limit.md alone would not know generated files are exempt and could incorrectly flag them. The planner's finding correctly identifies triple-injection redundancy for language policy, subagent delegation, and base file-size guidance — those reductions are sound. But the generated-file exclusions are a non-redundant content addition in the CLAUDE.md tail specifically. The fix is to first add those exclusion patterns to file-size-limit.md at the ADK source, then shrink the tail.",
    "whyRiskyToReduce": "The generated-file exclusion list (*_generated.go, *.pb.go) is present in CLAUDE.md's ADK tail but absent from the canonical file-size-limit.md rule. Shrinking the tail to a pointer removes the only source of that exclusion, creating false-positive review findings on generated files.",
    "recommendedOverride": "DOWNGRADE_TO_SHRINK",
    "severity": "low",
    "confidence": "high"
   },
   {
    "path": ".claude/rules/autopus/language-policy.md",
    "plannerRecommendation": "SHRINK",
    "challenge": "The planner's three problems are all confirmed factual (triple-injection, stale Example column with ko/ko while autopus.yaml sets all en, and branding.md line 40 echoing the stale description). However, all three are content bugs, not footprint problems. The file should remain globally injected — language policy is an unconditional constraint that must apply in every session including ad-hoc ones outside any pipeline. Shrinking does not fix the stale Example column; the Example column must be corrected at the ADK source to reflect actual configured values or use clearly labelled placeholders. The triple-injection problem is best addressed by removing the duplicate blocks from CLAUDE.md and AGENTS.md tails, not by demoting the canonical rule file. The rule itself is the right vehicle; the redundancy is in the tails.",
    "whyRiskyToReduce": "Language policy is an unconditional constraint. Without global injection, it would only apply when a pipeline or skill happens to load it. A plain user request ('write a commit') processed outside any /auto command would not trigger any skill load, and the language policy would silently not apply.",
    "recommendedOverride": "DOWNGRADE_TO_KEEP",
    "severity": "medium",
    "confidence": "high"
   },
   {
    "path": ".claude/rules/autopus/branding.md",
    "plannerRecommendation": "SHRINK",
    "challenge": "The two confirmed bugs — line 40 states 'commits in ko, responses in ko' while autopus.yaml sets all to en; and six references to templates/shared/branding-formats.md.tmpl which does not exist on the filesystem — are content bugs, not size problems. Shrinking the file does not fix either error. The references to the missing template file make R7-R9 unenforceable regardless of file size. The correct resolution is to fix the stale language description and either install the template file or inline the minimal formats — both are ADK source changes. The file should remain globally injected because branding behaviour (when to show the octopus banner, what footer to append) must apply in every session response, not only when a skill trigger fires.",
    "whyRiskyToReduce": "Branding behaviour is an always-on presentation constraint. Without global injection, agents would not know when to show or suppress the banner. The dead template references and stale language description are content bugs that need correction at the ADK source independent of any size reduction.",
    "recommendedOverride": "DOWNGRADE_TO_KEEP",
    "severity": "low",
    "confidence": "medium"
   },
   {
    "path": ".claude/rules/autopus/lore-commit.md",
    "plannerRecommendation": "SHRINK",
    "challenge": "The rule must apply every time a commit is produced, including in ad-hoc sessions outside the /auto pipeline. The lazy-loaded skill loads when trigger keywords like 'lore', 'commit message', or '커밋 메시지' appear — but an executor agent implementing a feature and calling git commit within its task produces a commit without those keywords in context. The pre-commit-lore.sh hook provides after-the-fact enforcement (rejecting a malformed message), but the global rule provides before-the-fact guidance so the agent formats the message correctly on first attempt rather than having the hook reject it and requiring a retry. The planner's point that the skill duplicates the content is accurate — but the duplication is intentional: the skill provides detail for authoring, the rule ensures the constraint is present in every session context so commits don't require correction.",
    "whyRiskyToReduce": "Without global injection, executor agents operating in pipeline subagent contexts (where skill triggers don't fire) would produce plain commit messages, rely solely on the hook rejection, and require retry. The hook enforces correctness but the rule prevents the wasted attempt.",
    "recommendedOverride": "DOWNGRADE_TO_KEEP",
    "severity": "medium",
    "confidence": "medium"
   },
   {
    "path": ".claude/rules/autopus/doc-storage.md",
    "plannerRecommendation": "CONVERT",
    "challenge": "The rule's constraints — where to place SPEC files, global ID uniqueness scan, and /auto sync commit phases — are only relevant during SPEC creation or sync. The planning.md and spec-writer agent both load in those scenarios. The CONVERT argument here is the planner's most scenario-bound case: there is no ad-hoc request type outside SPEC/BS creation that triggers these constraints. Unlike context7 or techstack rules, there is no silent lapse risk: if someone is creating a SPEC, the spec-writer agent and planning skill are active. The CONVERT is defensible here. The only caveat is the ADK-overwrite note: any change must happen at the ADK source, not the installed copy.",
    "whyRiskyToReduce": "Low risk. The rule's constraints fire only in SPEC authoring flows which already load the relevant skills and agents. The main risk is the discoverability path — planning.md must be updated to embed or reference this content explicitly so it is not lost when the rule file is reclassified.",
    "recommendedOverride": "UPHOLD",
    "severity": "low",
    "confidence": "medium"
   }
  ],
  "verdict": "Of the ten planner recommendations reviewed, two CONVERTs survive adversarial scrutiny (doc-storage is genuinely scenario-bound), five face concrete challenges that require human approval or downgrade, and three have confirmed content bugs that are ADK-source fixes independent of the size question.\n\nUPHOLD (reduction is sound, proceed with ADK source change):\n- doc-storage.md CONVERT: constraints only fire in SPEC authoring flows; skill load covers it.\n\nREQUIRE_HUMAN_APPROVAL (reduction is risky without confirmed fix):\n- context7-docs.md CONVERT: unique subagent-injection contract and version-to-stack chain have no other global injection point; ad-hoc library work outside pipelines is the unguarded gap.\n- techstack-freshness.md CONVERT: greenfield version selection from training memory is an ad-hoc risk not gated on any pipeline trigger; converting to a lazy skill silently removes the check from plain user requests.\n\nDOWNGRADE_TO_KEEP (reduction requires prerequisite content migration before it is safe):\n- worktree-safety.md CONVERT: the Prohibited Commands section (git gc/prune/repack) is confirmed absent from worktree-isolation.md R5; must be merged into the skill before the rule is reclassified.\n- spec-quality.md CONVERT: spec-review.md and spec-writer.md both reference 'content/rules/spec-quality.md' — a path confirmed absent from the filesystem — not the installed rule; the discoverability chain is broken.\n- language-policy.md SHRINK: language policy is an unconditional constraint; the stale Example column is a content bug to fix at ADK source; the triple-injection problem is best solved by removing duplicates from tails, not demoting the canonical rule.\n- lore-commit.md SHRINK: executor agents produce commits in pipeline contexts without skill trigger keywords; the rule provides before-the-fact guidance that the hook cannot substitute.\n\nDOWNGRADE_TO_SHRINK (partial reduction is safe but scope must be narrowed):\n- AGENTS.md SHRINK: Worker Contracts (mandatory return fields) and Review Convergence (discovery/verification split) on lines 62-68 are unique content absent from all other globally-injected files; the planner's stated keep scope must explicitly preserve these two sections.\n- CLAUDE.md SHRINK: the ADK tail's generated-file exclusion list (*_generated.go, *.pb.go) is absent from the canonical file-size-limit.md rule; that exclusion must be added to the rule at ADK source before the tail is reduced to a pointer.\n\nCross-cutting note: branding.md's stale language description (line 40: ko/ko vs autopus.yaml en/en) and the six dead references to templates/shared/branding-formats.md.tmpl are content bugs requiring ADK source correction, not a footprint reduction target; branding must remain globally injected.\n\nThe product-overlap and safety-permission scopes supplied no planner targets; no adversarial findings are generated for those absent inputs."
 },
 "inventory_scope": "Full harness audit inventory for /home/lucas. Scope covers: CLAUDE.md, AGENTS.md, .claude/rules/autopus/ (13 files), .claude/skills/ (45 files: 44 in autopus/ + SKILL.md), .claude/agents/autopus/ (16 files), .claude/hooks/ (8 .sh + 1 README), .mcp.json, .claude/settings.json, .claude/settings.local.json, multi-platform copies in .codex/ and .gemini/. Absent/empty targets: .claude/workflows/ (does not exist), .cursor/rules/ (does not exist). Read-only audit — no files modified. Global context (.claude/projects/.../memory/MEMORY.md, user global rules) are already injected via system-reminder but are NOT part of the harness file system under .claude/; excluded from file counts."
}