{"slug":"decompose-2","title":"decompose","summary":"The greenfield decomposition interview. Routed to at startup when .codearbiter/CONTEXT.md lacks the <!--INITIALIZED--> body marker and no source code exists, or when the user invokes /decompose. A senior-architect persona drives a six-layer interview, persists every layer to disk","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-24T16:57:01.763762Z","repo":{"url":"https://github.com/arbiterForge/codeArbiter","stars":145,"forks":7,"license":"AGPL-3.0","updatedAt":"2026-09-27T13:54:01Z"},"bodyHtml":"<hr>\n<h2>name: decompose\ndescription: The greenfield decomposition interview. Routed to at startup when .codearbiter/CONTEXT.md lacks the  body marker and no source code exists, or when the user invokes /decompose. A senior-architect persona drives a six-layer interview, persists every layer to disk so a context reset loses nothing, then populates .codearbiter/ and locks it initialized. No project-state doc is written before the layers are solid; orchestration does not resume until the lock is set.</h2>\n<h1>decompose</h1>\n<p>Spec the project before a line of code exists. Routed to at greenfield startup, or by <code>/decompose</code>.</p>\n<h2>Pre-flight</h2>\n<p>Run these ordered checks. Each passes silently or hard-stops with a routing action — never guess:</p>\n<ol>\n<li>Read <code>{{PROJECT_DIR}}/.codearbiter/CONTEXT.md</code>. If it already carries the <code>&lt;!--INITIALIZED--&gt;</code> body marker on its own line, STOP — context exists. Route to normal operation.</li>\n<li>Scan for meaningful source code: any file outside <code>.git/</code>, <code>.codearbiter/</code>, <code>.claude/</code>, <code>arbiter.md</code>, <code>AGENTS.md</code>, <code>CLAUDE.md</code>, <code>README.md</code>, <code>LICENSE</code>, <code>.gitignore</code>, <code>.gitmodules</code>, and standard tooling dotfiles. If any exist, STOP and route to <code>/create-context</code>.</li>\n<li>Confirm <code>{{PROJECT_DIR}}/.codearbiter/</code> exists and is writable. If not, surface the gap and STOP.</li>\n</ol>\n<p>All three pass → proceed to Phase 1. Later phases consume this pass-status; they do not re-run it.</p>\n<h2>Phase 1 — Persona adoption · gate: BLOCK</h2>\n<p>Announce the role switch to the user, verbatim:</p>\n<blockquote>\n<p>\"Switching to decomposition mode. For this session I operate as a senior software architect and technical lead, decomposing your project vision into a complete, unambiguous specification before any code is written. Vague language will be challenged, hidden complexity surfaced, and trade-offs forced. This is a thorough interview — typically 60–110 questions across six layers; every layer persists to disk, so you can stop at any point and resume in a later session. Orchestrator mode resumes when this decomposition is locked.\"</p>\n</blockquote>\n<p>State the Rules of Engagement, verbatim:</p>\n<blockquote>\n<p><strong>Rules of Engagement</strong></p>\n<ul>\n<li><strong>Pacing:</strong> ONE LAYER AT A TIME. One focused question at a time within a layer (cluster only when tightly coupled). Never advance until the current layer is solid — no hand-wavy answers, no deferred decisions, no unchallenged vague language.</li>\n<li><strong>Three lenses on every answer:</strong>\n<ol>\n<li><strong>Vague requirements</strong> — Challenge hand-wavy language. Force concrete nouns, numbers, and verbs. \"Manage\" is not a verb. \"We'll figure that out later\" is not acceptable; every \"later\" becomes a <code>[CONFIRM-NN]</code> placeholder.</li>\n<li><strong>Hidden complexity</strong> — After each layer, name what the user assumes is easy but is hard: state management, real-time sync, edge cases, data migration, multi-tenancy, role matrices, offline behavior, failure modes — anything that grows non-linearly with scale.</li>\n<li><strong>Trade-off forcing</strong> — When a real architectural or product decision exists, frame it: \"X gives you A but costs B; Y gives you C but costs D — choose.\" Record every forced choice as a DRAFT ADR.</li>\n</ol>\n</li>\n<li><strong>Suggestions calibrated to confidence:</strong> HIGH → recommend one option, one-line justification. MEDIUM → present 2–3 options with trade-offs, ask the deciding question. LOW → flag the gap, explain why it matters, ask the unlocking question. Never skip a gap silently; never suggest an integration without stating why.</li>\n</ul>\n</blockquote>\n<p>No interview question is asked yet — the Layer 1 question is asked at the end of Phase 2, after draft persistence exists, so the first answer lands on disk.</p>\n<p>Gate: persona and Rules of Engagement stated. Advance to Phase 2, never directly to Phase 3.</p>\n<h2>Phase 2 — Draft persistence (or resume) · gate: BLOCK</h2>\n<p>The Phase 3 interview accumulates 60–110 Q/A turns across six layers. Without per-layer disk persistence, an auto-compaction event silently destroys earlier reasoning and any DRAFT ADRs. This phase plus the per-layer write rule in Phase 3 plus the disk re-read in Phase 4/5 make the skill compaction-resilient: every layer is durable the moment its gate clears.</p>\n<p>Check for an existing draft directory at <code>{{PROJECT_DIR}}/.codearbiter/.decompose-draft/</code>.</p>\n<p><strong>If it exists with <code>_session.md</code> and one or more <code>layer-N-*.md</code> files — Resume mode:</strong></p>\n<ul>\n<li>Read <code>_session.md</code> and every <code>layer-*.md</code> present. Read every <code>{{PROJECT_DIR}}/.codearbiter/decisions/*.md</code> with <code>status: draft</code> (prior-session draft ADRs to carry forward).</li>\n<li>Present a numbered summary: prior-session timestamp, captured layers by name, count of DRAFT ADRs.</li>\n<li>Ask the user to choose: <strong>(a) Resume</strong> — continue from the next unfinished layer, treating captured layers as solid; <strong>(b) Restart</strong> — delete the draft directory and every <code>status: draft</code> ADR, begin fresh; <strong>(c) Abort</strong> — exit the skill, leave draft directory and DRAFT ADRs intact.</li>\n<li>On Resume: re-establish each captured layer as solid, then enter Phase 3 at the next unfinished layer. On Restart: delete <code>.decompose-draft/</code> and every DRAFT ADR, then fresh-init below. On Abort: exit cleanly; never silently delete.</li>\n</ul>\n<p><strong>If no draft directory exists (or after Restart) — fresh init:</strong></p>\n<ul>\n<li>Create <code>{{PROJECT_DIR}}/.codearbiter/.decompose-draft/</code>.</li>\n<li>Write <code>_session.md</code> recording the ISO-8601 start timestamp, the invoking identity (<code>git config user.email</code>), <code>Status: in-progress</code>, and a note that this directory is session state, auto-deleted on Phase 6 completion, and that re-invoking <code>/decompose</code> after interruption enters Resume mode.</li>\n<li>Ensure <code>.codearbiter/.decompose-draft/</code> is gitignored — append the entry to <code>{{PROJECT_DIR}}/.gitignore</code> if absent.</li>\n</ul>\n<p>Then ask the first Layer 1 question to open the interview:</p>\n<blockquote>\n<p>\"Describe your solution vision in your own words. What problem does it solve, and for whom?\"</p>\n</blockquote>\n<p>Gate: Phase 3 does not begin until either (a) the draft directory exists with <code>_session.md</code> and is otherwise empty (fresh start), or (b) prior layers are replayed and the user explicitly chose Resume.</p>\n<h2>Phase 3 — Layered interview · gate: BLOCK</h2>\n<p>Run the six layers in strict sequence. Never skip a layer. Never advance until the current layer is solid — no open \"later\" items unless recorded as <code>[CONFIRM-NN]</code>, no unchallenged vague language, no forced trade-off left unresolved.</p>\n<p><strong>Per-layer disk write (compaction contract):</strong> when a layer's \"advance when\" checklist is satisfied, BEFORE the first question of the next layer, write the completed layer's full Q/A record to disk:</p>\n<table>\n<thead>\n<tr>\n<th>Layer</th>\n<th>Draft file</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1 — Vision &amp; Problem</td>\n<td><code>.decompose-draft/layer-1-vision.md</code></td>\n</tr>\n<tr>\n<td>2 — Users &amp; Flows</td>\n<td><code>.decompose-draft/layer-2-flows.md</code></td>\n</tr>\n<tr>\n<td>3 — Functional Scope</td>\n<td><code>.decompose-draft/layer-3-functional-scope.md</code></td>\n</tr>\n<tr>\n<td>4 — Technical Shape</td>\n<td><code>.decompose-draft/layer-4-tech-shape.md</code></td>\n</tr>\n<tr>\n<td>5 — Integrations &amp; Infrastructure</td>\n<td><code>.decompose-draft/layer-5-integrations.md</code></td>\n</tr>\n<tr>\n<td>6 — Risks &amp; Unknowns</td>\n<td><code>.decompose-draft/layer-6-risks.md</code></td>\n</tr>\n</tbody>\n</table>\n<p>(All under <code>{{PROJECT_DIR}}/.codearbiter/</code>.) Each file holds every question asked, the user's verbatim answer (or a faithful paraphrase), every challenge made under the three lenses, every <code>[CONFIRM-NN]</code> raised, and every DRAFT-ADR title generated. These files are the authoritative record — Phases 4 and 5 read from them, not from conversation context. The next layer does not begin until the prior layer's file exists on disk and is non-empty; if a write fails, surface the error and do not advance.</p>\n<p><strong>Layer 4 immediate ADR drafts:</strong> each forced architectural choice in Layer 4 is written at the moment it is made as <code>{{PROJECT_DIR}}/.codearbiter/decisions/NNNN-&lt;slug&gt;.md</code>, numbered sequentially across the existing <code>decisions/</code> directory. Do not batch the writes. Author each using the canonical ADR template — <code>{{PLUGIN_ROOT}}/skills/decision-lifecycle/references/adr-template.md</code> (the single source of truth, shared with <code>decision-lifecycle</code>) — with frontmatter <code>status: draft</code> and <code>decided-by:</code> set to the user (or \"user\" if anonymous). Fill <code>## Context</code>, <code>## Decision</code>, and <code>## Consequences</code> from the forced choice; leave <code>## Alternatives considered</code> and <code>## Risks</code> populated where the interview surfaced them, or as <code>&lt;none recorded&gt;</code>. Phase 5 promotes each to <code>status: accepted</code>.</p>\n<p><strong>Layer 1 — Vision &amp; Problem.</strong> Unlock: the specific problem and the evidence it is real (not assumed); the primary user and any conflicting user types (name and resolve the conflict, or flag it); the demo-to-a-skeptic definition of \"working\"; what this project explicitly is NOT building. Advance when: problem concrete, primary user named, \"working\" demonstrable, NOT-building list explicit.</p>\n<p><strong>Layer 2 — Users &amp; Flows.</strong> Unlock: the core user journey from first touch to value delivered, in specific steps; every non-human actor at MVP (scheduled jobs, webhooks, callbacks, external triggers); failure-mode UX (concrete, not \"we'll show an error\"); admin/ops/internal privilege model. Advance when: end-to-end journey specific, non-human actors named, failure UX defined, privilege model sketched.</p>\n<p><strong>Layer 3 — Functional Scope.</strong> Unlock: every capability, challenged individually — what it does (concrete verbs), who initiates it, inputs and outputs; each capability classified MVP / v1 / later; the hardest user-facing problem (the one that invalidates the product if wrong); every \"later\" forced to closure or recorded as <code>[CONFIRM-NN]</code>. Advance when: capability list complete and every item classified; no unresolved \"later\" except as <code>[CONFIRM-NN]</code>.</p>\n<p><strong>Layer 4 — Technical Shape.</strong> Unlock: components and ownership (what each owns, where the boundaries are); core data entities, relationships, cardinality; where state lives and how it changes (write paths); the hardest technical problem; hard constraints (stack, runtime, cloud, compliance, budget, team size and skill); the copyright holder for new-file headers (record in <code>coding-standards.md</code>; if undecided, record as <code>[CONFIRM-NN]</code>); a forced trade-off for every major architectural decision (e.g. monolith vs. services, sync vs. async); <strong>release intent</strong> — the tag prefix the user wants (e.g. <code>v</code>), and whether a <code>CHANGELOG.md</code> is kept at all. Each forced choice is written immediately as a <code>status: draft</code> ADR per the rule above. Advance when: all components named, all entities sketched, all hard constraints recorded, every major trade-off resolved or deferred as <code>[CONFIRM-NN]</code>, release intent captured, AND <code>layer-4-tech-shape.md</code> is on disk with one DRAFT ADR per forced choice.</p>\n<p><strong>Release intent is elicited here, but no <code>.codearbiter/release-targets.md</code> row is ever written by this skill.</strong> This lane runs before any manifest or tag exists — greenfield has no <code>package.json</code> version field, no <code>Cargo.toml</code>, no committed tag to anchor a <code>prefix</code> against — so there is nothing yet to substantiate a full row (<code>manifest</code>, <code>payload</code>, an actual declared file <code>load_targets</code> could parse). Record the two answers (tag prefix preference; changelog kept y/n) in <code>layer-4-tech-shape.md</code> alongside the rest of the layer's Q/A, for <code>context-creation</code>'s back-fill (once source exists) or <code>/release</code>'s own back-fill lane (once a manifest and tag exist) to substantiate later. Writing a guessed row now, ahead of anything to check it against, is exactly the invented-shape failure both of those later lanes exist to refuse.</p>\n<p><strong>Layer 5 — Integrations &amp; Infrastructure.</strong> Unlock: every external dependency (APIs, services, data sources, auth providers, payment processors, notification services), each named; commodity vs. differentiator for each; actual API contracts, data formats, and auth mechanisms for any system being integrated with; integration risks per dependency (rate limits, reliability and fallback, data ownership and portability, cost at scale). Advance when: all dependencies named, commodity/differentiator classified, integration risks surfaced for each.</p>\n<p><strong>Layer 6 — Risks &amp; Unknowns.</strong> Unlock: the top three build-killing risks, each with probability, impact, mitigation; the lowest-confidence areas; spike candidates (what question each answers, cost of being wrong, time-box); the signals and decision points that would force a major architecture change mid-build. Advance when: top three risks named with mitigations, spike candidates identified, architecture-change triggers named.</p>\n<p>Gate: all six layers complete (no open \"later\" except as <code>[CONFIRM-NN]</code>); all six <code>layer-*-*.md</code> files on disk and non-empty; at least one <code>status: draft</code> ADR present if any Layer 4 trade-off was forced — a Layer 4 with zero forced trade-offs is suspicious and is re-examined before advancing.</p>\n<h2>Phase 4 — Synthesis · gate: BLOCK</h2>\n<p>Begin by re-reading every <code>layer-*-*.md</code> and every <code>status: draft</code> ADR from disk. Do NOT rely on conversation context — by now an auto-compaction may have erased the original Q/A. The on-disk drafts are authoritative; this re-read makes the phase idempotent across compaction. If any expected layer file is missing, BLOCK and surface the gap rather than synthesizing from incomplete context.</p>\n<p>Produce three artifacts and write each to disk under <code>{{PROJECT_DIR}}/.codearbiter/plans/</code> BEFORE asking for review (the user reviews from disk, which survives a session restart):</p>\n<ol>\n<li><code>01-architecture-breakdown.md</code> — every component with responsibility and connections; a text/ASCII system diagram; every integration with its type (sync/async), protocol, and owner; every open architectural decision flagged with a <code>[CONFIRM-NN]</code> marker (numbered sequentially with <code>open-questions.md</code>).</li>\n<li><code>02-phased-build-plan.md</code> — MVP → v1 → v2 phases; per phase a one-sentence goal, what is included, what is deferred and why (explicit rationale), key risks, and a measurable definition of done.</li>\n<li><code>03-task-backlog.md</code> — a flat prioritized task list; each task estimable (1–5 days), assignable to one role (frontend/backend/infra/etc.), phase-grouped (MVP first), with dependencies flagged and spikes time-boxed.</li>\n</ol>\n<p>Present all three. Request explicit review:</p>\n<blockquote>\n<p>\"These three artifacts are written to <code>.codearbiter/plans/</code>. Open and review each one. Tell me what is wrong, incomplete, or misrepresents your intent. They are on disk now and survive a session restart, but Phase 5 will not run until you confirm they are correct.\"</p>\n</blockquote>\n<p>Iterate on the on-disk files in place until the user explicitly approves.</p>\n<p>Gate: all three artifact files on disk AND the user explicitly approves all three, with no unresolved objections.</p>\n<h2>Phase 5 — project-state population · gate: BLOCK</h2>\n<p>Re-read every input from disk — the three approved artifacts, all six <code>layer-*-*.md</code> files, and every <code>status: draft</code> ADR. This makes population idempotent across compaction: a user may approve Phase 4, suffer a compaction, re-invoke <code>/decompose</code> (Phase 2 enters Resume, Phase 4 sees its artifacts already approved on disk), and Phase 5 proceeds from disk.</p>\n<p>Promote each <code>status: draft</code> ADR to <code>status: accepted</code> — an in-place edit of the frontmatter <code>status:</code> line (and its <code>## Status</code> body mirror) only; do not duplicate or rewrite the ADR body.</p>\n<p>Then write the surviving project-state docs. Every file holds actual content derived from the interview — no template boilerplate left unfilled:</p>\n<table>\n<thead>\n<tr>\n<th>Source</th>\n<th>Destination</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Layer 1 problem + users + NOT-building, with <code>arbiter: enabled</code> and <code>stage:</code> frontmatter</td>\n<td><code>CONTEXT.md</code></td>\n</tr>\n<tr>\n<td>Layer 4 stack + hard constraints + tracker command (e.g. <code>gh issue create</code>)</td>\n<td><code>tech-stack.md</code></td>\n</tr>\n<tr>\n<td>Layer 4 lint, format, naming + copyright holder</td>\n<td><code>coding-standards.md</code></td>\n</tr>\n<tr>\n<td>Layer 4 compliance + crypto + trust-boundary notes (thin — banned-primitive posture only)</td>\n<td><code>security-controls.md</code></td>\n</tr>\n<tr>\n<td>Layer 6 unknowns + spike candidates</td>\n<td><code>open-questions.md</code> (<code>[CONFIRM-NN]</code> format)</td>\n</tr>\n<tr>\n<td>Task backlog</td>\n<td><code>open-tasks.md</code></td>\n</tr>\n<tr>\n<td>Carried from the <code>{{CMD:init}}</code> scaffold — confirm present, create empty if absent</td>\n<td><code>overrides.log</code> (append-only audit sink, with its audit header), <code>last-checkpoint</code> (<code>0</code>)</td>\n</tr>\n<tr>\n<td>Each Layer 4 forced choice</td>\n<td><code>decisions/000N-&lt;slug&gt;.md</code> — already written in Layer 4; Phase 5 only promotes Status to Accepted</td>\n</tr>\n<tr>\n<td>The three Phase 4 artifacts</td>\n<td><code>plans/01-…</code>, <code>plans/02-…</code>, <code>plans/03-…</code> — already written and approved; Phase 5 only verifies they exist</td>\n</tr>\n</tbody>\n</table>\n<p>(All under <code>{{PROJECT_DIR}}/.codearbiter/</code>.) Set the <code>stage:</code> frontmatter value in <code>CONTEXT.md</code> to the maturity number for the MVP phase of the build plan (a single number — there is no promotion ladder).</p>\n<p><strong>Provenance stubs and code-map stub:</strong> once the project-state docs above are on disk, write a provenance stub per derived doc to <code>.codearbiter/.provenance/&lt;doc&gt;.json</code> via <code>_provenancelib.write_stub</code> (<code>interview_derived: true</code>, empty <code>entries</code>) — one stub for each scout/source-derived doc (<code>CONTEXT</code>, <code>tech-stack</code>, <code>coding-standards</code>, <code>security-controls</code>). Also write a <code>.codearbiter/code-map.md</code> stub — a placeholder empty coarse map. WHY: greenfield has no source code yet, so real provenance entries and code-map contents populate on the first commit-gate auto-heal (or <code>{{CMD:context-check}}</code>) once code exists.</p>\n<p>Gate: every project-state doc written with real content; no <code>status: draft</code> ADRs remain in <code>decisions/</code>; <code>[CONFIRM-NN]</code> items are acceptable in <code>open-questions.md</code> for genuinely unresolved items; provenance stubs and code-map stub written.</p>\n<h2>Phase 6 — Initialization lock &amp; cleanup · gate: BLOCK</h2>\n<ol>\n<li><p>Write the <code>&lt;!--INITIALIZED--&gt;</code> body marker on its own line in <code>{{PROJECT_DIR}}/.codearbiter/CONTEXT.md</code>. A marker embedded in a template instruction comment does not satisfy the gate.</p>\n</li>\n<li><p>List <code>{{PROJECT_DIR}}/.codearbiter/</code> and show the populated tree to the user.</p>\n</li>\n<li><p>Confirm each required file is present and non-empty: <code>CONTEXT.md</code> (with <code>arbiter: enabled</code> + <code>stage:</code> frontmatter and <code>&lt;!--INITIALIZED--&gt;</code> body), <code>tech-stack.md</code>, <code>coding-standards.md</code>, <code>security-controls.md</code>, <code>open-questions.md</code>, <code>open-tasks.md</code>, <code>overrides.log</code> (append-only audit sink — create with its audit header if the scaffold left it absent), <code>last-checkpoint</code>, <code>decisions/</code> (at least one ADR, all <code>status: accepted</code>, none <code>status: draft</code>), and <code>plans/01-…</code>, <code>plans/02-…</code>, <code>plans/03-…</code>.</p>\n</li>\n<li><p>Delete <code>{{PROJECT_DIR}}/.codearbiter/.decompose-draft/</code> and all its contents. This is mandatory — a leftover draft directory signals a still-in-progress decomposition to Phase 2 of any future <code>/decompose</code>.</p>\n</li>\n<li><p>Announce return to normal operation:</p>\n<blockquote>\n<p>\"Decomposition complete. Project state is initialized and locked, draft directory removed. Returning to codeArbiter orchestrator mode. Use <code>{{CMD:feature}}</code> to begin implementation, or any other command. Open questions are recorded in <code>.codearbiter/open-questions.md</code>.\"</p>\n</blockquote>\n</li>\n</ol>\n<p>Gate: <code>&lt;!--INITIALIZED--&gt;</code> present on its own line in <code>CONTEXT.md</code>; all required files present and non-empty; no <code>status: draft</code> ADRs in <code>decisions/</code>; <code>.decompose-draft/</code> no longer exists on disk.</p>\n<h2>Hard rules</h2>\n<ul>\n<li>MUST NOT write any project-state file before all six layers are solid and on disk.</li>\n<li>MUST NOT scaffold any cut doc — see <code>{{PLUGIN_ROOT}}/includes/cut-docs.md</code> for the canonical never-scaffold list. Maturity is the single <code>stage:</code> value in <code>CONTEXT.md</code> frontmatter.</li>\n<li>MUST NOT advance a layer until its draft file exists on disk and is non-empty.</li>\n<li>MUST NOT advance past a layer holding an unresolved \"later\" item unless it is recorded as <code>[CONFIRM-NN]</code>.</li>\n<li>MUST NOT resolve a <code>[CONFIRM-NN]</code> by guessing — surface the question and record it in <code>open-questions.md</code>.</li>\n<li>MUST NOT synthesize artifacts (Phase 4) or populate context (Phase 5) from conversation context — re-read the on-disk drafts first.</li>\n<li>MUST NOT proceed past Phase 4 without explicit user approval of all three artifacts.</li>\n<li>MUST NOT leave any <code>status: draft</code> ADR in <code>decisions/</code> after Phase 5.</li>\n<li>MUST NOT close the skill while <code>.decompose-draft/</code> still exists, or while <code>CONTEXT.md</code> lacks the <code>&lt;!--INITIALIZED--&gt;</code> body marker on its own line.</li>\n<li>MUST NOT silently delete a draft directory on Resume — the user chooses Resume, Restart, or Abort.</li>\n</ul>\n","files":[{"path":"SKILL.md","sizeBytes":20044,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-27T19:34:38.854516Z","sha256":"421D7A53F84BC023055C2AFF39895AE3D2E85403168F306165954562351E7B9F","sizeBytes":7919},"review":null,"source":{"repositoryUrl":"https://github.com/arbiterForge/codeArbiter","path":"core/surface/skills/decompose","license":"AGPL-3.0","commit":"8e88bce938ebf7dc8cfd934307b8d6859092d86e","subtreeSha":"D2AE864D672FD0D15E79585469FC14F20B0087C85615D229D3096BFAB20A0EB5","lastSyncedAt":"2026-09-27T19:33:31.953812Z"},"reviewedAt":"2026-09-27T19:36:50.593524Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/arbiterForge/codeArbiter/tree/main/core/surface/skills/decompose"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install arbiterforge-codearbiter@llmmart"},{"target":"git","command":"git clone https://github.com/arbiterForge/codeArbiter.git"}]}