[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RHDYWZ7D210AVMS8445D0":3,"skill-same:01M71RHDYWZ7D210AVMS8445D0":93},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":6,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M71RHDYWZ7D210AVMS8445D0","autospec-split",null,"Use when the user wants to split an existing tracked docs\u002Fspecs\u002F*.md design spec into GitHub issues, then stop after Phase 3.5 and hand off to \u002Fautospec-run.","berlinguyinca\u002Fautospec","berlinguyinca","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F16364?v=4","01M71R7C0SWBG05FNHQE4XQ7Y3","Gert Wohlgemuth","01M71R7C1VY5K3Q715RNDDBVGQ",3,"MIT","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-split\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"split","autospec split","autospec","user","stop","github issues","docs","spec","run","github","design spec","hand","phase","when","Existing","use","design","issues","2026-11-10 13:02:02",false,"---\nname: autospec-split\ndescription: Use when the user wants to split an existing tracked docs\u002Fspecs\u002F*.md design spec into GitHub issues, then stop after Phase 3.5 and hand off to \u002Fautospec-run.\n---\n\n# autospec-split workflow (harness-neutral)\n\nTake the following request and run the autospec existing-spec split shortcut: select a tracked `docs\u002Fspecs\u002F*.md` file, skip Phases 1-2, run Phase 3 and Phase 3.5 against that spec, then stop with the `\u002Fautospec-run` handoff.\n\nIf the request does not identify an existing spec to split, resolve the newest `docs\u002Fspecs\u002F*.md` candidate using **Existing spec mode** below. Do not brainstorm or write a new spec from `\u002Fautospec-split`; tell the user to use `\u002Fautospec-define` for new feature planning.\n\nManage your own context — never exceed 60%. Delegate to subagents whenever your harness supports it; do not investigate, write code, or design directly in the main conversation when a subagent can do it.\n\n\u003C!-- autospec-block:startup-self-update SKILL_NAME=autospec-split -->\n\n## Self-update mode\n\nIf the feature-request argument matches the regex `^\\s*update\\s*$` (case-insensitive, whitespace-padded), this skill enters self-update mode and does not run the normal pipeline:\n\n1. **Detect harness** by checking which install path exists for this skill:\n   - Claude Code: `~\u002F.claude\u002Fskills\u002Fautospec-split\u002FSKILL.md`\n   - OpenCode:    `~\u002F.config\u002Fopencode\u002Fagent\u002Fautospec-split.md`\n   - Codex CLI:   `~\u002F.codex\u002Fprompts\u002Fautospec-split.md`\n2. **Re-install the full autospec suite from `main`** by piping the canonical installer:\n   ```bash\n   curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fberlinguyinca\u002Fautospec\u002Fmain\u002Fbootstrap.sh | bash -s -- --skill all --harness all --update\n   ```\n   Run this one-liner once; it refreshes all autospec skills across all harnesses.\n3. **Show the diff** between the prior installed file(s) and the freshly fetched copy (e.g. `diff \u003C(cat \u003Cprior>) \u003C(curl -fsSL ...SKILL.md)` or the equivalent recorded by the installer).\n4. **Stop.** Do not enter Phase 0 \u002F Phase 1 \u002F any pipeline phase. Print the upgrade summary and return to the user.\n\nIf no install path is detected, print `Self-update: no installed copy of autospec-split found; run install.sh first.` and exit.\n\n## Feature request\n\n{FEATURE_DESCRIPTION}\n\n---\n\n## Existing spec mode\n\nUse this mode when the request asks to split, materialize, roadmap, decompose,\nor turn an existing spec into GitHub issues. Examples:\n`split existing spec`, `split latest spec`, `turn this spec into GitHub issues`,\n`roadmap docs\u002Fspecs\u002F2026-05-01-example-design.md`, or\n`materialize the newest spec`.\n\nDo not run Phase 1 or Phase 2 in this mode. The design already exists; this\nmode is a shortcut into Phase 3 using the same issue decomposition and Phase 3.5\nclassification path as the normal pipeline.\n\n1. **Verify repo.** Run the Phase 0 repo probes. If the current directory is\n   not a git repo with a GitHub remote, use Phase 0 bootstrap before selecting\n   a spec.\n2. **Resolve candidate specs.**\n   - If the request contains an explicit `docs\u002Fspecs\u002F*.md` path, use that file.\n   - Otherwise list tracked and untracked local files matching `docs\u002Fspecs\u002F*.md`.\n   - Sort by ISO date in the filename (`YYYY-MM-DD-...`) descending. For files\n     without a date prefix, sort after dated files by filesystem modified time.\n   - The first item is the default \"newest\" spec.\n3. **Ask on ambiguity.**\n   - If zero specs exist, stop with: `No docs\u002Fspecs\u002F*.md files found. Create or\n     point me at a spec before running existing spec mode.`\n   - If exactly one spec exists and no explicit path was provided, use it.\n   - If more than one spec exists and no explicit path was provided, ask the user\n     to confirm the default newest spec or choose another path. Show at most the\n     five newest candidates with relative paths. Do not file issues until the\n     user answers.\n4. **Verify selected spec is filed.**\n   - The selected path must be under `docs\u002Fspecs\u002F` and end in `.md`.\n   - This mode accepts an optional `--base \u003Cbranch>` flag (default `main`). The\n     base names the branch the spec must already be tracked on before Phase 3,\n     so child issues can cite a stable GitHub URL. With no flag the base is\n     `main` and every check below is byte-identical to the current behavior;\n     explore passes a sandbox branch as `--base \u003Csandbox-branch>`.\n   - The selected file must be tracked on `\u003Cbase>` before Phase 3. Verify with:\n     `git fetch origin` and `git cat-file -e \u003Cbase>:\u003Cspec-path>`.\n   - Resolve the immutable spec blob identity after the tracked check:\n     `SPEC_BLOB_OID=$(git rev-parse \u003Cbase>:\u003Cspec-path>)`. This is the\n     `source_spec_blob_oid` half of the portfolio identity\n     `sha256(canonical_source_repo || \u003Cspec-path> || $SPEC_BLOB_OID)`; if\n     `\u003Cbase>` moves and the blob changes, that is a different portfolio —\n     never rebind the run to a new blob silently.\n   - If the selected file is missing from `\u003Cbase>`, stop and tell the user:\n     `Selected spec is not on \u003Cbase> yet: \u003Cspec-path>. Land the spec first,\n     or run \u002Fautospec-define so Phase 2 can create and merge the spec PR.`\n   - Guardrail: under a non-main `--base \u003Cbranch>`, no PR or issue targets\n     `main` — child issues link the `\u003Cbase>` blob and the decomposer files\n     against `\u003Cbase>` only.\n5. **Continue at Phase 3.** Capture `{selected_spec_path}` and its GitHub URL as\n   `https:\u002F\u002Fgithub.com\u002F{repo}\u002Fblob\u002F\u003Cbase>\u002F{selected_spec_path}` (with the default\n   base this is `...\u002Fblob\u002Fmain\u002F...`, byte-unchanged). Run Phase 3 and\n   Phase 3.5 using that selected spec. Then proceed to the existing Phase 3\n   pre-impl gate.\n\n## Harness detection (run once at skill start)\n\nDetect your harness by checking available tools before dispatching work:\n\n1. **Claude Code** — the `Agent` tool with a `subagent_type` parameter is available.\n   - `TIER_A` = `opus` + `ultrathink`  (the alias, which resolves to the current Claude Opus generation)\n   - `TIER_B` = `sonnet`               (the alias, which resolves to the current Claude Sonnet generation)\n\n2. **OpenCode** — a `task` tool with model\u002Ftier configuration is available (no `subagent_type`).\n   - `TIER_A` = top-tier task model + high reasoning\n   - `TIER_B` = smaller-tier task model + medium reasoning\n\n3. **Codex CLI** — neither `Agent` nor a configurable `task` tool is available; `apply_patch` is the primary edit tool.\n   - `TIER_A` = current top GPT model + `reasoning_effort=high`\n   - `TIER_B` = the spark \u002F cost-optimized variant of the configured model when one exists, else the configured model + `reasoning_effort=medium`\n\n**Fallback rule:** If `TIER_B` is not available in your harness (model unknown, quota\u002Fcapacity failure, authorization failure, or tool call returns an error for that model), silently retry the same dispatch with `TIER_A`. Preserve the parent context on retry; for Codex native subagents, fork\u002Finherit the current conversation context and use the latest top GPT model instead of moving the work into the main session. Never ask the user.\n\nHold `TIER_A` and `TIER_B` for the entire skill run.\n\n## Required capabilities & harness adapter\n\nThis workflow assumes five capabilities. Map each one to your harness's actual tool. If a capability is missing, use the listed fallback.\n\n| Capability                  | Claude Code                          | OpenCode                                 | Codex CLI                                | Fallback if missing                                |\n|-----------------------------|--------------------------------------|------------------------------------------|------------------------------------------|----------------------------------------------------|\n| Read-only codebase research | `Agent` (subagent_type=Explore)      | `task` agent in read-only mode           | `apply_patch` read-only \u002F shell `grep`   | Do the search in-thread with `rg`\u002F`grep`           |\n| Foreground delegation       | `Agent` (subagent_type=general-purpose) | nested `task` agent, await output     | spawn nested CLI session                 | Do the work in-thread (more context cost)          |\n| Background delegation       | `Agent` with `run_in_background: true` | detached `task` agent                  | nohup'd CLI session writing to a logfile | Run the monitor in a separate terminal\u002Ftmux pane   |\n| Ask the user a question     | `AskUserQuestion`                    | inline prompt                            | inline prompt                            | Ask in the response and wait for the next turn     |\n| Self-paced future wakeup    | `ScheduleWakeup` inside a `\u002Floop`    | a recurring `task` or local `cron`       | local `cron`\u002F`launchd` calling the CLI   | The user runs a status-update prompt manually      |\n| Subagent model tier         | Tier A: `opus` + `ultrathink`; Tier B: `sonnet` + medium thinking | Tier A: top `task` model + high reasoning; Tier B: smaller-tier `task` + medium reasoning | Tier A: top GPT + `reasoning_effort=high`; Tier B: current spark\u002Fcost-optimized Codex + `reasoning_effort=medium` | Honor the per-phase tier mapping in AGENTS.md; retry the same subagent UP on unavailability |\n\u003C!-- autospec-block:harness-adapter-core -->\n\n**Persistent project notes**: write durable preferences to **`AGENTS.md`** in the repo root — this is the de-facto standard recognized by Claude Code (also reads `CLAUDE.md`), OpenCode, and Codex. If your harness has its own private memory (e.g. Claude Code's `~\u002F.claude\u002F...\u002Fmemory\u002F`), mirror the same content there. Per AGENTS.md, subagent dispatches use a **two-tier policy**: Tier A (top model + extended thinking) for spec work (research, decompose, review\u002Flabel); Tier B (cheaper model + medium thinking) for implementation work (Phase 4 implementer + LGTM review — not used by this skill). The orchestrator keeps the user's invoked model. Fall back UP the tier on quota\u002Fcapacity or other unavailability by retrying the same subagent with the stronger tier while preserving parent context.\n\n---\n\n## Phase 0 — Bootstrap repo (if missing)\n\nVerify `gh auth status` is authenticated. If not, ask the user to run `gh auth login` and stop until they confirm.\n\nProbe the working directory:\n```bash\ngit rev-parse --is-inside-work-tree 2>\u002Fdev\u002Fnull\ngit remote get-url origin 2>\u002Fdev\u002Fnull   # must contain github.com\n```\n\nIf **either** check fails — no git repo, or no GitHub remote — bootstrap a new repo:\n\n1. **Suggest a name.** Slugify the feature description: lowercase, hyphens, drop stop-words, prefix with the obvious stack if inferable (e.g. \"Go TUI for X\" → `go-tui-x`; \"Python ML pipeline that does Y\" → `py-ml-y`). Offer 1–2 candidates.\n\n2. **Ask the user once** (single interactive question; combine the three sub-questions if your harness supports it, otherwise ask sequentially):\n   - **Name** (your top suggestion as default).\n   - **Visibility**: `private` | `public` (default: private).\n   - **Owner**: enumerate via `gh org list`; default to the user's personal account.\n\n3. **Initialize locally**:\n   - If `.git` is absent: `git init -b main`.\n   - Write a stack-appropriate `.gitignore` (Go: `bin\u002F vendor\u002F *.exe *.test`; Node: `node_modules\u002F dist\u002F .next\u002F .env*`; Python: `__pycache__\u002F .venv\u002F *.egg-info\u002F build\u002F dist\u002F`; mixed\u002Funknown: skip).\n   - Write a one-line `README.md` containing the feature description.\n   - Write a starter `AGENTS.md` listing the project's coding standards (TDD non-negotiable, no DB mocks, conventional commits, branch-per-issue, no force-push) — this is the source of truth every agent reads.\n   - `git add -A && git commit -m \"chore: initial scaffold\"`.\n\n4. **Create the remote and push**:\n   ```bash\n   gh repo create \u003Cowner>\u002F\u003Cname> --\u003Cprivate|public> --source=. --remote=origin --push\n   ```\n\n5. **Verify and register**: first run `gh repo view \u003Cowner>\u002F\u003Cname> --json url,defaultBranchRef`.\n   Only after that succeeds, capture the exact slug and record verified creation evidence:\n   ```bash\n   REPO=\"\u003Cowner>\u002F\u003Cname>\"\n   SPAWNED_FROM=\"${SOURCE_SPEC_URL:-${AUTOSPEC_RUN_ID:-bootstrap:$REPO}}\"\n   REGISTRATION_JSON=$(\"${AUTOSPEC_BIN:-autospec}\" project onboard --repo-dir \"$PWD\" --repo \"$REPO\" --spawned-from \"$SPAWNED_FROM\") || {\n     printf '%s\\n' 'ERROR: managed Project repository registration failed before durable admission' >&2\n     exit 1\n   }\n   case \"$(printf '%s' \"$REGISTRATION_JSON\" | jq -r '.outcome \u002F\u002F empty')\" in\n     reconciled) ;;\n     journaled_projection_pending)\n       printf '%s\\n' 'WARNING: managed Project repository projection is durably journaled and pending' >&2 ;;\n     *) printf '%s\\n' 'ERROR: managed Project repository registration returned no supported typed outcome' >&2; exit 1 ;;\n   esac\n   ```\n   Never register when read-back fails. A typed pending outcome does not roll\n   back or recreate the verified repository; reconciliation retries the\n   journaled projection. Propagate every hard registration failure. Capture\n   `\u003Cowner>\u002F\u003Cname>` as `{repo}` for every later phase.\n\nIf a repo already exists (cwd is in a git tree with a `github.com:\u003Cowner>\u002F\u003Cname>` remote), capture that as `{repo}` and skip the bootstrap.\n\n## Phase 1 — Investigate (delegate)\n\nSpawn a **read-only research subagent** to map relevant files, schema, services. Get back a 300-word summary with file paths and line numbers. Do NOT read files directly from the main thread.\n\n> **Model tier:** Tier A (spec work) — top model with extended\u002Fmaximum thinking per AGENTS.md. Claude Code: `opus` + `ultrathink`; Codex: current top GPT + `reasoning_effort=high`; OpenCode: top task tier. Fall back UP on unavailability.\n\nIf the feature touches a remote system (DB, server, S3), run a real query against the actual data to confirm the problem statement before designing. Surface the concrete numbers in the design.\n\nFor a freshly-bootstrapped empty repo, Phase 1 may be a no-op — proceed to Phase 2.\n\n## Phase 2 — Brainstorm + design\n\n> **Spec quality is the bottleneck.** Phase 2's output drives every downstream cycle's cost; if you care about spec quality, invoke this skill with your top-tier model (Claude Code: `claude-code --model opus`; Codex: top GPT). Phase 2 itself runs in the orchestrator (no subagent dispatch) — your invocation model IS the spec model. Subagents in Phases 1, 3, 3.5 follow this lead by selecting Tier A; Phase 4 implementation work uses Tier B. See AGENTS.md.\n\nRun a structured brainstorm — one question at a time, get explicit approval after each section:\n\n1. **Architecture** — where does new code live, what existing patterns does it follow.\n2. **Interactivity \u002F API shape** — how does the user\u002Fcaller drive it; commands, keys, endpoints, fields.\n3. **Data model** — types, columns, persistence boundary.\n4. **Error handling** — failure modes, recovery, user-visible signals.\n5. **Testing** — unit \u002F integration \u002F e2e split, real services vs anything else (rule per AGENTS.md: real services).\n\nWrite the agreed design to `docs\u002Fspecs\u002FYYYY-MM-DD-\u003Ctopic>-design.md`. Self-review for placeholders, contradictions, ambiguity, scope. The spec must be implementable end-to-end by an agent reading only the spec.\n\nIf this is a fresh repo, commit the spec to `main` directly (`git add docs\u002F... && git commit -m \"docs: \u003Ctopic> design spec\" && git push`) so subsequent issues can reference it as a tracked file. This is the ONLY exemption from `autospec-guarded-merge.sh` (T16 H3): a brand-new repo has no reviewed base and no PR to gate, and the commit is the spec document alone. Every later change merges through a PR and the guarded merge.\n\nFor an existing repo, land the spec via a short-lived PR so CI can validate it:\n1. Create branch `feat\u002Fspec-\u003Ctopic>`, commit `docs\u002Fspecs\u002F...design.md`, push.\n2. `gh pr create --base main --head feat\u002Fspec-\u003Ctopic> --title \"docs: \u003Ctopic> design spec\" --body \"Source spec: docs\u002Fspecs\u002F...\"`\n3. Wait for required CI checks to pass (`gh pr checks \u003C#> --repo {repo}`).\n4. Unless `AUTOSPEC_NO_AUTOMERGE_SPEC=1` is set, admin-merge through the guarded wrapper (fence + review-quorum gate, merge pinned to the verified head; never a bare `gh pr merge`): `bash \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Fautospec-guarded-merge.sh\" --pr \u003C#> --repo {repo}`. If the env var is set, pause and ask the user to merge before continuing.\n5. Verify the spec is reachable at `https:\u002F\u002Fgithub.com\u002F{repo}\u002Fblob\u002Fmain\u002Fdocs\u002Fspecs\u002F...` before dispatching Phase 3.\n\n## Phase 3 — Decompose into linked GitHub issues (delegate)\n\nIf Existing spec mode is active, use `{selected_spec_path}` and its GitHub URL.\nOtherwise use the spec path written and merged in Phase 2. The decomposer\ndrafts issue bodies and plan inputs only; no issue may be created until the\nportfolio admission gate below verifies the primary portfolio binding.\n\nDispatch a **foreground subagent** with this prompt (substitute the spec path and `{repo}`):\n\n> **Model tier:** Tier A (spec work) — top model with extended\u002Fmaximum thinking per AGENTS.md. Claude Code: `opus` + `ultrathink`; Codex: current top GPT + `reasoning_effort=high`; OpenCode: top task tier. Fall back UP on unavailability.\n>\n> Read the selected design spec at `\u003Cspec-path>` (`\u003Cspec-github-url>`) and split it into linked GitHub issues for {repo}.\n>\n> Before drafting issues, identify the implementation **Team personality** and independent **Review counter-team** from the selected spec. If the spec lacks those sections, infer them from the request, past specs under `docs\u002Fspecs\u002F`, repository labels, and relevant memory. If confidence is low, stop and ask the operator: `What kind of team should solve this problem?` Offer exactly these five starter combinations:\n> 1. **Core product engineering** — product manager, architect, backend developer, frontend developer, test engineer.\n> 2. **Reliability\u002Fbackend** — backend developer, platform engineer, sysadmin\u002FSRE, database engineer, security advisor.\n> 3. **Frontend\u002Fproduct** — frontend developer, UX designer, accessibility reviewer, API\u002Fbackend developer, QA engineer.\n> 4. **Security-sensitive** — security advisor, architect, backend developer, platform engineer, test engineer.\n> 5. **Legacy\u002Frefactor** — architect, maintainer, backend\u002Ffrontend developer as needed, test engineer, documentation owner.\n> Derive the Review counter-team with a different emphasis that will challenge likely blind spots while staying inside the issue scope.\n>\n> Create labels (idempotent with `--force`): `auto-implement` (#0e8a16), `epic` (#b60205), plus any domain labels the spec calls for. Then draft exactly N issue bodies — first an EPIC umbrella (no `auto-implement` label, just `epic` + domain), then N-1 children. Do NOT create the issues: the portfolio admission gate below freezes these drafts into the plan and the apply transaction files every issue as `needs-classify`. After the gate files them, the umbrella body gains a checklist linking the children. Return JSON: `{umbrella, children:[…], labels_created:[…]}`. Use `gh` CLI only for label creation and read-back. Do NOT modify code. Do NOT push branches. Do NOT create PRs.\n>\n> **Label guard — Phase 3 ONLY:** Children are filed by the apply transaction with `needs-classify` plus any domain labels; `auto-implement` arrives only through final admission. Do NOT apply `needs-autospec-template`, `ctx:*`, or `reasoning:*` at child-create time. Those labels are applied exclusively by Phase 3.5 after it evaluates the child body. Applying them in Phase 3 causes Phase 3.5 to skip those children entirely, defeating classification.\n>\n> Each child body must be a **self-contained mini-spec** sized for execution by a 32B-class local LLM, with these sections in order:\n>\n> - **Goal** — 1 sentence outcome.\n> - **Source spec** — `\u003Cspec-path>` + `\u003Cspec-github-url>` of the design doc this issue derives from.\n> - **Team personality** — copy the selected team name, roles, and issue-relevant emphasis.\n> - **Review counter-team** — copy the counter-team name, roles, and issue-relevant blind spots to challenge.\n> - **Files to read first** — 3–7 entries. Each entry is one of: a path with **section anchors** (do not say \"read the whole spec\"), the closest existing-file analogue to mirror, the test file or fixture pattern to follow, or a dependency issue with a one-line summary so the LLM doesn't fetch its body. Bias toward sectional anchors over full files.\n> - **Local-LLM execution notes** — one-line context-window recommendation (`32k routine`, `64k stretch`, or `split into N subagents along \u003Ccriterion>` for issues exceeding ~30k tokens of staged context) and whether single-pass or subagent-split is recommended.\n> - **Implementation scope** and **Out of scope** as separate subsections (replaces the prior single \"Scope\" section).\n> - **Implementation outline** — file paths + function signatures + data flow.\n> - **Tests required** — TDD per AGENTS.md, real services, no DB mocks, 80%+ coverage.\n> - **Acceptance criteria** — checkbox list `[ ]` only, no prose. Each item machine-checkable.\n> - **Verification** — split into a **Primary smoke test (inner loop)** with exactly one fast command, and **Operator\u002Ffull verification** listing the remaining commands.\n> - **Branch name** — `feat\u002F\u003Cslug>`.\n> - **Dependencies** — `Depends on issue #N` lines (parsed by the monitor).\n>\n> Sizing rule: aim for ≤ 4 KB body. Issues that span more than 4 canonical tables, more than 3 packages, or schema-wide changes must be split — better to emit two children with a `Depends on` edge than one oversized child a small LLM can't hold in working memory.\n>\n> **Sizing caps (hard, per spec §3.4):**\n>\n> - **Body ≤400 words** including all sections.\n> - **Implementation outline ≤30 lines** (file paths + function signatures).\n> - **Files touched ≤3** per child issue.\n> - If a candidate child would exceed any cap, split into a parent + child pair with a `Depends on` edge.\n> - The whole spec + a single child issue body must fit comfortably in a 60–120k context window.\n>\n> Self-check each issue against the caps **before** calling `gh issue create`. If a cap is violated and a split is not feasible, surface the issue inline (print the over-cap body to the operator) instead of filing it.\n>\n> **Pre-filing lint loop (adaptive, MAX_LINT_RETRIES=5):** For each candidate child body, before calling `gh issue create`, write the body to `\u002Ftmp\u002Fdraft-\u003Cslug>.md` and run `bash \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Flint-issue.sh\" \u002Ftmp\u002Fdraft-\u003Cslug>.md`. If the exit code is non-zero, map each `RULE_ID: \u003Cdesc>` finding to an actionable directive using the table below, append all directives to the next generation prompt as cumulative context, and regenerate. Repeat up to `MAX_LINT_RETRIES=5` attempts. If attempt 5 still fails, print all 5 drafts plus accumulated findings inline and **skip** that child (do not file); continue to the next child. On pass (exit 0), include the child in the plan manifest as normal.\n\n> **Managed Project projection (mandatory):** Immediately after every successful issue\n> creation or issue edit, capture the verified URL as `ISSUE_URL` and run:\n> `bash \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Fproject-sync-issue.sh\" \"$ISSUE_URL\" \"$PWD\"`.\n> Never run this command in dry-run mode. If sync fails, print\n> `WARNING: managed Project sync failed for $ISSUE_URL` only for a verified journaled-pending outcome. A hard pre-journal failure stops decomposition after preserving the already-created issue; never create a replacement issue.\n>\n> | Finding | Directive appended to next prompt |\n> |---|---|\n> | `GOAL_VAGUE: \"improve\" used without concrete object` | `AVOID: bare verb \\`improve\\` without naming a file path, command, label, or number in the same sentence.` |\n> | `GOAL_HEDGE: \"should probably\"` | `AVOID: hedging words \\`should\u002Fmight\u002Fcould try\u002Ftry to\\`. State the outcome flatly.` |\n> | `GOAL_NOT_ONE_SENTENCE: N terminals` | `REWRITE: Goal must be exactly one sentence ending with a single . ? or !` |\n> | `AC_PROSE: line N not a checkbox` | `FORMAT: every AC line must start with \\`- [ ] \\` followed by content.` |\n> | `AC_SUBJECTIVE: \"looks clean\"` | `AVOID: subjective adjectives \\`looks\u002Ffeels\u002Fseems\u002Fclean\u002Felegant\\` in AC items. Use a \\`grep\\`\u002F\\`test\\`\u002F\\`diff\\`\u002F\\`bats\\` command instead.` |\n> | `AC_TOO_LONG: N chars` | `SHORTEN: AC item exceeds 120 chars; split into two items or compress to one assertion.` |\n> | `AC_EMPTY` | `ADD: Acceptance criteria section must contain at least one \\`- [ ] \\` checkbox item.` |\n> | `SMOKE_MULTI_LINE: N lines` | `COLLAPSE: Primary smoke test must be exactly one command line. Use \\`&&\\` to chain or move setup to Operator\u002Ffull verification.` |\n> | `SMOKE_PLACEHOLDER: contains \"\u003CTODO>\"` | `RESOLVE: Replace placeholders \\`\u003CTODO>\u002FTBD\u002FXXX\u002F...\\` with the actual command before filing.` |\n> | `SMOKE_NOT_FENCED` | `ADD: Primary smoke test section must contain exactly one fenced code block.` |\n\n### Small-LLM friendliness (applies to every child issue)\n\nChildren are written assuming the implementer is a 32B-class local model with **pre-staged context**, not a search-driven cloud agent:\n\n- Every file the implementer needs is named in **Files to read first** with a sectional anchor or a one-line reason. Do not assume the model will grep the codebase.\n- Spec docs are cited by section heading, not as \"read this 20 KB doc\".\n- Acceptance criteria are checkbox-only so the model can self-verify line-by-line.\n- One **Primary smoke test** runs in the inner loop; the heavier verification list runs once at the end.\n- If the work fans out across many tables\u002Fpackages, split it. Two 3 KB children chained by `Depends on` beat one 7 KB child a 32B model garbles at 60k tokens of working context.\n\n## Phase 3 portfolio admission gate\n\nPhase 3 files issues through the typed portfolio transaction when the\nbinary exposes it; when it does not, the documented `gh issue create` path\napplies. When the portfolio path applies, one verified primary Project must\nexist before any issue is admitted, and the apply transaction is the sole\nprovisioning\u002Fmaterialization entry point — there are no separate public\nrecord or add commands, and no bare `gh issue create` fallback for planned\nissues.\n\n**Probe the capability, do not assert it.** Binaries older than the\nportfolio commands (#3432) do not expose `portfolio`; a missing subcommand\nis a degraded capability, not a Phase 3 blocker, and the fallback must stay\nopen while the primary is unavailable:\n\n```bash\nif \"${AUTOSPEC_BIN:-autospec}\" portfolio --help >\u002Fdev\u002Fnull 2>&1; then\n  PORTFOLIO_AVAILABLE=1\nelse\n  PORTFOLIO_AVAILABLE=0\n  printf '%s\\n' 'NOTE: autospec portfolio unavailable; using gh issue create path' >&2\nfi\n```\n\nSteps 1-2 run only when `PORTFOLIO_AVAILABLE=1`. When it is 0, file the\nplanned issues through the `gh issue create` path used for draft issues\n(each starts as `needs-classify`, never `auto-implement`), and the\n`## Delivery portfolio` handoff in step 3 is omitted for that run.\n\n1. **Freeze the plan (pure validation).** Render the planned YAML manifest —\n   the immutable source spec identity (canonical source repo, the Phase 3\n   spec path — `{selected_spec_path}` in Existing spec mode, otherwise the\n   spec written and merged in Phase 2 — and its `SPEC_BLOB_OID`, resolved\n   per Existing spec mode step 4), `project_owner`, target repositories,\n   local parent sets,\n   planned children, audit node, and dependency edges — then run the\n   read-only validation before any remote mutation:\n\n   ```bash\n   \"${AUTOSPEC_BIN:-autospec}\" portfolio validate --manifest \"$MANIFEST\"\n   ```\n\n   The default `project_owner` is the source repository owner. An explicit\n   `--project-owner \u003Clogin>` from the request is passed into the typed\n   command unchanged — never derive, infer, or substitute a different owner\n   after planning; an explicit or inferred owner never falls back.\n\n   Validation is pure: manifest lint, safety lint, DAG validation, and\n   per-repository read\u002Fwrite capability probes. A non-zero exit here (the\n   probe passed, so this is a validation failure, not a missing command)\n   blocks Phase 3 — fix the manifest and re-run. A repository that cannot\n   accept issues is a blocking prerequisite, never a silently omitted lane.\n2. **Apply before filing.** The apply transaction then files, in order: the\n   primary umbrella; secondary repository trackers; implementation and\n   prerequisite children; the source-repository audit. Every issue starts as\n   `needs-classify`, never `auto-implement`, and blocked prerequisites keep\n   their blocking label:\n\n   ```bash\n   APPLY_JSON=$(\"${AUTOSPEC_BIN:-autospec}\" portfolio apply --manifest \"$MANIFEST\") || {\n     printf '%s\\n' 'ERROR: primary portfolio provisioning failed; no issue is admitted' >&2\n     exit 1\n   }\n   ```\n   No issue creation may precede this verified binding.\n3. **JSON handoff.** Parse `APPLY_JSON` with `jq`; hand the verified\n   portfolio ID and canonical Project URL into every child's\n   `## Delivery portfolio` section and into the pre-impl gate below. Pass\n   the plan's `project_owner` through unchanged.\n4. **Blocked failure handling.** Any apply failure, parent-record or\n   cross-repository graph persistence failure, or unacknowledged Project\n   projection blocks admission: stop, leave the filed issues unadmitted, and\n   report the exact blocker. Resume with the frozen manifest and its\n   checkpoints; never re-decompose a partially applied plan.\n5. **Final admission ordering.** Only after every body mutation finishes\n   (Phase 3.5 model-fit labels, shared contracts, and the post-filing\n   quality audit) does final lint and Rust safety admission transition\n   eligible nodes from `needs-classify` to `auto-implement`. Only\n   classified, lint-passing children are admitted; a child that fails the\n   post-filing quality lint stays `needs-classify` under `needs-quality-bar`.\n   The audit stays dependency-blocked until every deliverable is\n   terminal-success.\n\nCapture the umbrella + child issue numbers.\n\nPersist the relationship on GitHub and in the shared per-repository parent-state\ncache before classification. This command also posts a trusted typed\nparent-marker lifecycle comment on every child and the idempotent decomposition\ncomment on the parent. Append `--quarantined` when the umbrella's authoritative\ntyped safety decision is `SAFETY_AMBIGUOUS` or `SAFETY_BLOCK`; otherwise omit\nit. A failure is blocking because an unlinked child could merge without ever\nreconciling its parent.\n\n```bash\n_parent_slug=$(bash \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Frepo-slug.sh\" --canonical \"{repo}\")\nexport AUTOSPEC_PARENT_STATE_ROOT=\"${AUTOSPEC_PARENT_STATE_ROOT:-$HOME\u002F.autospec\u002Fparent-state\u002F$_parent_slug}\"\n\"${AUTOSPEC_BIN:-autospec}\" parent record --repo {repo} --parent \"\u003CUMBRELLA>\" --children \"\u003CCHILDREN_CSV>\"\n```\n\n## Phase 3.5 — Review and label (delegate)\n\nDispatch a **foreground subagent** to retro-review the child issues just\ncreated in Phase 3 and apply the model-fit rubric. The subagent must NOT modify\nissue titles or remove existing labels; it only adds `ctx:*` and `reasoning:*`\nlabels and patches each body with a `## Model fit` block.\n\n> **Model tier:** Tier A (spec work) — top model with extended\u002Fmaximum thinking per AGENTS.md. Claude Code: `opus` + `ultrathink`; Codex: current top GPT + `reasoning_effort=high`; OpenCode: top task tier. Fall back UP on unavailability.\n>\n> Walk every child issue created in Phase 3 (skip any issue carrying the\n> `type:tracker` label). For each:\n>\n> 1. **Stage context.** Read `gh issue view \u003CN> --repo {repo} --json title,body,labels`. The\n>    body should already contain `## Files to read first`, `## Implementation scope`, `## Team personality`, and `## Review counter-team`. If any is missing, add label\n>    `needs-autospec-template` (idempotent `gh label create --force` once at run\n>    start) and skip — do not classify or patch.\n>\n> 2. **Apply the rubric.** Pick the smallest `ctx:*` tier that holds the\n>    staged context (issue body + every file in `## Files to read first` +\n>    cited spec sections). Pick the `reasoning:*` depth required to derive\n>    (not just transcribe) the implementation.\n>\n>    **`ctx:*` — context-window axis**\n>\n>    | Label | Trigger |\n>    |---|---|\n>    | `ctx:32k`  | One canonical table or shell script; ≤3 files in *Files to read first*; short spec anchors. |\n>    | `ctx:64k`  | Multi-file change; 4-7 files staged; one trio + one installer; medium spec sections (~1-3 KB). |\n>    | `ctx:120k` | Cross-skill or cross-package; 8+ files; long spec excerpts; deep call graphs. |\n>\n>    **`reasoning:*` — reasoning-depth axis**\n>\n>    | Label | Trigger |\n>    |---|---|\n>    | `reasoning:shallow` | Mechanical: copy-and-rename, regex-replace, README transcription, runbook authoring. Verbs: *copy*, *rename*, *transcribe*, *list*. |\n>    | `reasoning:medium`  | Template-following with judgment: synthesize a SKILL.md mirroring an existing one, modify a script with new flags, write tests for a documented contract. Verbs: *mirror*, *adapt*, *integrate*, *wire*. |\n>    | `reasoning:deep`    | Novel design choices: pick a new abstraction, resolve a contradiction in the spec, reconcile cross-cutting concerns. Verbs: *design*, *reconcile*, *resolve*, *redesign*. |\n>\n>    Default for issues that lack any of these signals: `ctx:64k`,\n>    `reasoning:medium`. If unsure between two ctx tiers, prefer the larger.\n>\n> 3. **Sibling normalization.** When 5+ split children share a structural\n>    criterion (e.g. all per-source-table writers, all per-skill installers),\n>    harmonize their `ctx:*`\u002F`reasoning:*` labels so the operator can run a\n>    single profile across the whole group. Override individual classifications\n>    only when the difference is a true outlier (e.g. one sibling pulls in a\n>    schema-wide refactor that no other sibling touches).\n>\n> 4. **Apply labels.** Idempotent at run start:\n>    `gh label create ctx:32k  --color c5def5 --force --repo {repo}`,\n>    `gh label create ctx:64k  --color c5def5 --force --repo {repo}`,\n>    `gh label create ctx:120k --color c5def5 --force --repo {repo}`,\n>    `gh label create reasoning:shallow --color c2e0c6 --force --repo {repo}`,\n>    `gh label create reasoning:medium  --color c2e0c6 --force --repo {repo}`,\n>    `gh label create reasoning:deep    --color c2e0c6 --force --repo {repo}`,\n>    `gh label create needs-quality-bar --color fbca04 --force --repo {repo}`.\n>    Then per issue:\n>    `gh issue edit \u003CN> --add-label \"ctx:\u003Ctier>,reasoning:\u003Cdepth>\" --repo {repo}`.\n>\n> 5. **Patch body — `## Model fit` block.** Insert immediately before the first\n>    `## Dependencies` line (or at end of body if absent):\n>\n>    ```markdown\n>    \u003C!-- autospec-classify:begin -->\n>    ## Model fit\n>\n>    - **ctx:** `ctx:\u003Ctier>` — \u003C1-line rationale>.\n>    - **reasoning:** `reasoning:\u003Cdepth>` — \u003C1-line rationale>.\n>\n>    *Auto-classified by Phase 3.5 on YYYY-MM-DD.*\n>    \u003C!-- autospec-classify:end -->\n>    ```\n>\n>    **Idempotency:** if a `## Model fit` block already exists between the\n>    `\u003C!-- autospec-classify:begin -->` and `\u003C!-- autospec-classify:end -->`\n>    markers, replace it in place. Never stack duplicates. Apply via\n>    `gh issue edit \u003CN> --body-file \u003Ctmp>`.\n>    Legacy blocks have `## Model fit` ABOVE\n>    `\u003C!-- autospec-classify:begin -->`. Replacing only the marker-delimited\n>    region orphans that heading outside the markers, where it still counts\n>    against the budget, and adds a second one. Delete the legacy heading\n>    and everything up to the begin marker first.\n>\n> 6. **Board assignment** — read `~\u002F.autospec\u002Fproject-map.yml` and assign each\n>    just-classified child to the GitHub Projects mapped from its labels.\n>\n>    **File schema** (auto-init if missing — see below):\n>    ```yaml\n>    # ~\u002F.autospec\u002Fproject-map.yml\n>    multi_match: union          # `union` (assign to every match) or `first`\n>    mappings:\n>      ctx:32k: \u003Cproject_number>\n>      ctx:64k: \u003Cproject_number>\n>      ctx:120k: \u003Cproject_number>\n>      reasoning:shallow: \u003Cproject_number>\n>      reasoning:medium:  \u003Cproject_number>\n>      reasoning:deep:    \u003Cproject_number>\n>      \u003Cany-other-label>: \u003Cproject_number>\n>    ```\n>\n>    **Reader procedure** for each issue I:\n>    - For each label L on I, look up `mappings[L]`. Skip null \u002F missing entries.\n>    - With `multi_match: union` (default), collect all matching project numbers and assign to every one of them. With `multi_match: first`, take the first match in label-order and assign to that single project.\n>    - For each chosen `\u003CP>`: `gh project item-add \u003CP> --owner \u003Cowner> --url \u003Cissue-url>`. The `gh` command is idempotent — repeated calls do not duplicate items, so re-running Phase 3.5 is safe.\n>\n>    **Auto-init when the file is missing.** Probe `gh project list --owner \u003Cowner> --format json` to confirm the user can author projects. Probe `gh label list --repo {repo} --json name -q '.[].name'` to enumerate the repo's labels. Write a starter file with every label as a `mappings:` key and `null` project numbers, plus `multi_match: union` at the top. Print:\n>    ```\n>    Wrote ~\u002F.autospec\u002Fproject-map.yml. Edit project numbers (currently null) and re-run.\n>    ```\n>    Then **exit Phase 3.5** without assigning any boards (the labels and `## Model fit` blocks remain applied — only the assign step is deferred).\n>\n>    **Hard rules.**\n>    - Never call `gh project item-add` in `--dry-run`.\n>    - Missing file in `autospec` \u002F `autospec-split` is non-fatal at run time once auto-init has populated it; if auto-init itself fails (e.g. `gh project list` denied), warn and skip board assignment for the rest of the run.\n>\n> 7. **Dependency-edge sanity checks.** After labeling, validate the dep graph\n>    of the just-created children:\n>    - **closed-dep warning** — emit `WARN: child #\u003CN> depends on closed issue #\u003CM>` for each `Depends on #M` line where `gh issue view #\u003CM> --json state` is `CLOSED`.\n>    - **child-less tracker dep warning** — emit `WARN: child #\u003CN> depends on tracker #\u003CM> with no children` when `#\u003CM>` carries `type:tracker` and has no other open `auto-implement` deps pointing at it.\n>    - **circular sibling-dep hard fail** — exit non-zero if any cycle exists among the just-created children's `Depends on #N` edges.\n>\n> 8. **Post-filing quality audit.** For each child issue (skip `type:tracker`):\n>    - Pull body: `gh issue view \u003CN> --repo {repo} --json body -q .body > \u002Ftmp\u002Faudit-\u003CN>.md`\n>    - Run: `bash \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Flint-issue.sh\" \u002Ftmp\u002Faudit-\u003CN>.md`\n>    - On non-zero exit (lint fails):\n>      - Apply label: `gh issue edit \u003CN> --add-label needs-quality-bar --repo {repo}`\n>      - Insert `## Quality lint` block (idempotent, between `\u003C!-- autospec-quality:begin -->` and `\u003C!-- autospec-quality:end -->` markers) via `gh issue edit \u003CN> --body-file \u003Ctmp>`. A legacy block has the heading ABOVE the begin marker: delete the legacy heading and everything up to that marker first, or it keeps counting and a duplicate is added. Block format:\n>        ```markdown\n>        \u003C!-- autospec-quality:begin -->\n>        ## Quality lint\n>\n>        - **GOAL** — \u003C1-line finding>.\n>        - **AC#\u003Cn>** — \u003C1-line finding>.\n>        - **SMOKE** — \u003C1-line finding>.\n>\n>        *Auto-linted by Phase 3.5 on YYYY-MM-DD.*\n>        \u003C!-- autospec-quality:end -->\n>        ```\n>      - Comment findings: `gh issue comment \u003CN> --body \"\u003Cfindings>\" --repo {repo}`\n>    - Do NOT remove `auto-implement` label. Operator decides whether to proceed.\n>\n> 9. **Run-end summary.** Print to stdout:\n>    ```\n>    Phase 3.5 summary on {repo}\n>    - classified: N\n>    - skipped (needs-autospec-template): M\n>    - ctx:32k=A  ctx:64k=B  ctx:120k=C\n>    - reasoning:shallow=X  reasoning:medium=Y  reasoning:deep=Z\n>    - boards assigned: \u003CK> (or \"skipped — no project-map.yml\")\n>    - dep warnings: \u003Ccount>; circular cycles: \u003Ccount>\n>    ```\n\n---\n\n## Phase 3.75 — Architectural alignment (delegate)\n\nAfter Phase 3.5 has applied `ctx:*` \u002F `reasoning:*` labels and before the\npre-impl gate, run a Tier-A (opus) subagent that reads all child issue bodies\nplus the source spec and produces a `Shared contracts` summary. This prevents\neach child issue from inventing incompatible type signatures, file-layout\nconventions, and naming schemes — integration mismatches that are caught only\nin Phase 5.5.\n\nThe subagent must:\n\n1. Read the source spec and all child issue bodies (skip the umbrella\u002Ftracker).\n2. Extract all public interfaces, function signatures, data types, file paths,\n   and naming conventions mentioned across the issues.\n3. Produce a `## Shared contracts` summary as a markdown block with:\n   - Type signatures \u002F data structures used across ≥2 issues.\n   - File-layout constraints (which file owns what).\n   - Naming conventions (e.g. class names, env var prefixes).\n4. Patch each child issue body by inserting the block\n   **immediately before the first `## Dependencies` line** (append at end of body\n   only when the body has no `## Dependencies` heading):\n\n```\n\u003C!-- autospec-shared-contracts:begin -->\n## Shared contracts\n\n\u003Csummary block from step 3>\n\u003C!-- autospec-shared-contracts:end -->\n```\n\n   Never plain-append: the block's HTML markers and `## Shared contracts` heading\n   must not land inside the `## Dependencies` section — `scripts\u002Flint-issue.sh`\n   reads that section until the next `## ` heading and reports `DEPS_MALFORMED`\n   for every line that is not `Depends on issue #N` or `none` (that append\n   placement is what broke the 13 `#3112`-generation bodies). Write the block to\n   `\u002Ftmp\u002Fshared-contracts-\u003CN>.md`, insert deterministically, and apply:\n\n   ```bash\n   body=\"$(gh issue view \u003CN> --json body -q .body)\"\n   printf '%s\\n' \"$body\" | awk -v f=\u002Ftmp\u002Fshared-contracts-\u003CN>.md '\n     !done && \u002F^## Dependencies$\u002F { while ((getline line \u003C f) > 0) print line; print \"\"; close(f); done = 1 }\n     { print }\n     END { if (!done) while ((getline line \u003C f) > 0) print line }\n   ' > \u002Ftmp\u002Fbody-\u003CN>.md\n   gh issue edit \u003CN> --body-file \u002Ftmp\u002Fbody-\u003CN>.md\n   ```\n\n   After the patch, `Depends on issue #N` must remain the last line under\n   `## Dependencies`.\n   The patch is idempotent — skip if `\u003C!-- autospec-shared-contracts:begin -->` is already\n   present in the body.\n\nIf there are fewer than 2 child issues, or all child issues are in the same\nfile (no cross-issue interface), skip Phase 3.75 and log:\n`\"Phase 3.75: skipped (single-file scope)\"`\n\n---\n\n## Phase 3 pre-impl gate\n\nAfter Phase 3 decomposition completes (and Phase 3.5 review-and-label has\napplied `ctx:*` \u002F `reasoning:*` labels), end Phase 3 by asking the user\nthis verbatim question (no auto-launch — always ask explicitly, per spec\n§3.3):\n\n> `\"Spec written, N issues filed. Start \u002Fautospec-run now, defer to your external daemon, or keep refining? [run \u002F defer \u002F refine]\"`\n\nSubstitute `N` with the actual issue count from Phase 3. Default highlight\nis **`defer`** for `\u002Fautospec-split` (the plan-only skill — the user\ninvoked `\u002Fautospec-split` expecting plan-only behavior, so the gate\ndefaults to `defer`).\n\n- **`run`** — invoke `\u002Fautospec-run` in the current session.\n- **`defer`** (default for `\u002Fautospec-split`) — print\n  `\"Issues are ready. Your external monitor will pick them up. Exiting.\"`\n  and stop without launching `\u002Fautospec-run`. The just-filed `auto-implement`\n  queue persists on the GitHub side so an external daemon (or a later\n  `\u002Fautospec-run` invocation) can pick it up.\n- **`refine`** — re-enter Phase 2 from question 1 (Architecture).\n\nNo daemon auto-detection — always ask explicitly.\n\nAfter all decomposition issues are filed (and before asking the gate question),\nverify the Phase 5.5 audit child — part of the frozen plan, titled\n`\"Phase 5.5 audit + remediation — \u003Cfeature-name>\"` and filed by the apply\ntransaction with labels `priority:high,audit` — is present, then post a\ncomment on the umbrella issue linking it: `\"Phase 5.5 audit tracker: #\u003CN>\"`.\n\n## Handoff\n\nIf the gate answer was `run`, hand off to `\u002Fautospec-run --profile \u003Cname>`\nto begin implementation. If the answer was `defer`, the run ends here and\nthe queue is left for an external monitor.\n","# autospec-split workflow (harness-neutral)\n\nTake the following request and run the autospec existing-spec split shortcut: select a tracked `docs\u002Fspecs\u002F*.md` file, skip Phases 1-2, run Phase 3 and Phase 3.5 against that spec, then stop with the `\u002Fautospec-run` handoff.\n\nIf the request does not identify an existing spec to split, resolve the newest `docs\u002Fspecs\u002F*.md` candidate using **Existing spec mode** below. Do not brainstorm or write a new spec from `\u002Fautospec-split`; tell the user to use `\u002Fautospec-define` for new feature planning.\n\nManage your own context — never exceed 60%. Delegate to subagents whenever your harness supports it; do not investigate, write code, or design directly in the main conversation when a subagent can do it.\n\n\u003C!-- autospec-block:startup-self-update SKILL_NAME=autospec-split -->\n\n## Self-update mode\n\nIf the feature-request argument matches the regex `^\\s*update\\s*$` (case-insensitive, whitespace-padded), this skill enters self-update mode and does not run the normal pipeline:\n\n1. **Detect harness** by checking which install path exists for this skill:\n   - Claude Code: `~\u002F.claude\u002Fskills\u002Fautospec-split\u002FSKILL.md`\n   - OpenCode:    `~\u002F.config\u002Fopencode\u002Fagent\u002Fautospec-split.md`\n   - Codex CLI:   `~\u002F.codex\u002Fprompts\u002Fautospec-split.md`\n2. **Re-install the full autospec suite from `main`** by piping the canonical installer:\n   ```bash\n   curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fberlinguyinca\u002Fautospec\u002Fmain\u002Fbootstrap.sh | bash -s -- --skill all --harness all --update\n   ```\n   Run this one-liner once; it refreshes all autospec skills across all harnesses.\n3. **Show the diff** between the prior installed file(s) and the freshly fetched copy (e.g. `diff \u003C(cat \u003Cprior>) \u003C(curl -fsSL ...SKILL.md)` or the equivalent recorded by the installer).\n4. **Stop.** Do not enter Phase 0 \u002F Phase 1 \u002F any pipeline phase. Print the upgrade summary and return to the user.\n\nIf no install path is detected, print `Self-update: no installed copy of autospec-split found; run install.sh first.` and exit.\n\n## Feature request\n\n{FEATURE_DESCRIPTION}\n\n---\n\n## Existing spec mode\n\nUse this mode when the request asks to split, materialize, roadmap, decompose,\nor turn an existing spec into GitHub issues. Examples:\n`split existing spec`, `split latest spec`, `turn this spec into GitHub issues`,\n`roadmap docs\u002Fspecs\u002F2026-05-01-example-design.md`, or\n`materialize the newest spec`.\n\nDo not run Phase 1 or Phase 2 in this mode. The design already exists; this\nmode is a shortcut into Phase 3 using the same issue decomposition and Phase 3.5\nclassification path as the normal pipeline.\n\n1. **Verify repo.** Run the Phase 0 repo probes. If the current directory is\n   not a git repo with a GitHub remote, use Phase 0 bootstrap before selecting\n   a spec.\n2. **Resolve candidate specs.**\n   - If the request contains an explicit `docs\u002Fspecs\u002F*.md` path, use that file.\n   - Otherwise list tracked and untracked local files matching `docs\u002Fspecs\u002F*.md`.\n   - Sort by ISO date in the filename (`YYYY-MM-DD-...`) descending. For files\n     without a date prefix, sort after dated files by filesystem modified time.\n   - The first item is the default \"newest\" spec.\n3. **Ask on ambiguity.**\n   - If zero specs exist, stop with: `No docs\u002Fspecs\u002F*.md files found. Create or\n     point me at a spec before running existing spec mode.`\n   - If exactly one spec exists and no explicit path was provided, use it.\n   - If more than one spec exists and no explicit path was provided, ask the user\n     to confirm the default newest spec or choose another path. Show at most the\n     five newest candidates with relative paths. Do not file issues until the\n     user answers.\n4. **Verify selected spec is filed.**\n   - The selected path must be under `docs\u002Fspecs\u002F` and end in `.md`.\n   - This mode accepts an optional `--base \u003Cbranch>` flag (default `main`). The\n     base names the branch the spec must already be tracked on before Phase 3,\n     so child issues can cite a stable GitHub URL. With no flag the base is\n     `main` and every check below is byte-identical to the current behavior;\n     explore passes a sandbox branch as `--base \u003Csandbox-branch>`.\n   - The selected file must be tracked on `\u003Cbase>` before Phase 3. Verify with:\n     `git fetch origin` and `git cat-file -e \u003Cbase>:\u003Cspec-path>`.\n   - Resolve the immutable spec blob identity after the tracked check:\n     `SPEC_BLOB_OID=$(git rev-parse \u003Cbase>:\u003Cspec-path>)`. This is the\n     `source_spec_blob_oid` half of the portfolio identity\n     `sha256(canonical_source_repo || \u003Cspec-path> || $SPEC_BLOB_OID)`; if\n     `\u003Cbase>` moves and the blob changes, that is a different portfolio —\n     never rebind the run to a new blob silently.\n   - If the selected file is missing from `\u003Cbase>`, stop and tell the user:\n     `Selected spec is not on \u003Cbase> yet: \u003Cspec-path>. Land the spec first,\n     or run \u002Fautospec-define so Phase 2 can create and merge the spec PR.`\n   - Guardrail: under a non-main `--base \u003Cbranch>`, no PR or issue targets\n     `main` — child issues link the `\u003Cbase>` blob and the decomposer files\n     against `\u003Cbase>` only.\n5. **Continue at Phase 3.** Capture `{selected_spec_path}` and its GitHub URL as\n   `https:\u002F\u002Fgithub.com\u002F{repo}\u002Fblob\u002F\u003Cbase>\u002F{selected_spec_path}` (with the default\n   base this is `...\u002Fblob\u002Fmain\u002F...`, byte-unchanged). Run Phase 3 and\n   Phase 3.5 using that selected spec. Then proceed to the existing Phase 3\n   pre-impl gate.\n\n## Harness detection (run once at skill start)\n\nDetect your harness by checking available tools before dispatching work:\n\n1. **Claude Code** — the `Agent` tool with a `subagent_type` parameter is available.\n   - `TIER_A` = `opus` + `ultrathink`  (the alias, which resolves to the current Claude Opus generation)\n   - `TIER_B` = `sonnet`               (the alias, which resolves to the current Claude Sonnet generation)\n\n2. **OpenCode** — a `task` tool with model\u002Ftier configuration is available (no `subagent_type`).\n   - `TIER_A` = top-tier task model + high reasoning\n   - `TIER_B` = smaller-tier task model + medium reasoning\n\n3. **Codex CLI** — neither `Agent` nor a configurable `task` tool is available; `apply_patch` is the primary edit tool.\n   - `TIER_A` = current top GPT model + `reasoning_effort=high`\n   - `TIER_B` = the spark \u002F cost-optimized variant of the configured model when one exists, else the configured model + `reasoning_effort=medium`\n\n**Fallback rule:** If `TIER_B` is not available in your harness (model unknown, quota\u002Fcapacity failure, authorization failure, or tool call returns an error for that model), silently retry the same dispatch with `TIER_A`. Preserve the parent context on retry; for Codex native subagents, fork\u002Finherit the current conversation context and use the latest top GPT model instead of moving the work into the main session. Never ask the user.\n\nHold `TIER_A` and `TIER_B` for the entire skill run.\n\n## Required capabilities & harness adapter\n\nThis workflow assumes five capabilities. Map each one to your harness's actual tool. If a capability is missing, use the listed fallback.\n\n| Capability                  | Claude Code                          | OpenCode                                 | Codex CLI                                | Fallback if missing                                |\n|-----------------------------|--------------------------------------|------------------------------------------|------------------------------------------|----------------------------------------------------|\n| Read-only codebase research | `Agent` (subagent_type=Explore)      | `task` agent in read-only mode           | `apply_patch` read-only \u002F shell `grep`   | Do the search in-thread with `rg`\u002F`grep`           |\n| Foreground delegation       | `Agent` (subagent_type=general-purpose) | nested `task` agent, await output     | spawn nested CLI session                 | Do the work in-thread (more context cost)          |\n| Background delegation       | `Agent` with `run_in_background: true` | detached `task` agent                  | nohup'd CLI session writing to a logfile | Run the monitor in a separate terminal\u002Ftmux pane   |\n| Ask the user a question     | `AskUserQuestion`                    | inline prompt                            | inline prompt                            | Ask in the response and wait for the next turn     |\n| Self-paced future wakeup    | `ScheduleWakeup` inside a `\u002Floop`    | a recurring `task` or local `cron`       | local `cron`\u002F`launchd` calling the CLI   | The user runs a status-update prompt manually      |\n| Subagent model tier         | Tier A: `opus` + `ultrathink`; Tier B: `sonnet` + medium thinking | Tier A: top `task` model + high reasoning; Tier B: smaller-tier `task` + medium reasoning | Tier A: top GPT + `reasoning_effort=high`; Tier B: current spark\u002Fcost-optimized Codex + `reasoning_effort=medium` | Honor the per-phase tier mapping in AGENTS.md; retry the same subagent UP on unavailability |\n\u003C!-- autospec-block:harness-adapter-core -->\n\n**Persistent project notes**: write durable preferences to **`AGENTS.md`** in the repo root — this is the de-facto standard recognized by Claude Code (also reads `CLAUDE.md`), OpenCode, and Codex. If your harness has its own private memory (e.g. Claude Code's `~\u002F.claude\u002F...\u002Fmemory\u002F`), mirror the same content there. Per AGENTS.md, subagent dispatches use a **two-tier policy**: Tier A (top model + extended thinking) for spec work (research, decompose, review\u002Flabel); Tier B (cheaper model + medium thinking) for implementation work (Phase 4 implementer + LGTM review — not used by this skill). The orchestrator keeps the user's invoked model. Fall back UP the tier on quota\u002Fcapacity or other unavailability by retrying the same subagent with the stronger tier while preserving parent context.\n\n---\n\n## Phase 0 — Bootstrap repo (if missing)\n\nVerify `gh auth status` is authenticated. If not, ask the user to run `gh auth login` and stop until they confirm.\n\nProbe the working directory:\n```bash\ngit rev-parse --is-inside-work-tree 2>\u002Fdev\u002Fnull\ngit remote get-url origin 2>\u002Fdev\u002Fnull   # must contain github.com\n```\n\nIf **either** check fails — no git repo, or no GitHub remote — bootstrap a new repo:\n\n1. **Suggest a name.** Slugify the feature description: lowercase, hyphens, drop stop-words, prefix with the obvious stack if inferable (e.g. \"Go TUI for X\" → `go-tui-x`; \"Python ML pipeline that does Y\" → `py-ml-y`). Offer 1–2 candidates.\n\n2. **Ask the user once** (single interactive question; combine the three sub-questions if your harness supports it, otherwise ask sequentially):\n   - **Name** (your top suggestion as default).\n   - **Visibility**: `private` | `public` (default: private).\n   - **Owner**: enumerate via `gh org list`; default to the user's personal account.\n\n3. **Initialize locally**:\n   - If `.git` is absent: `git init -b main`.\n   - Write a stack-appropriate `.gitignore` (Go: `bin\u002F vendor\u002F *.exe *.test`; Node: `node_modules\u002F dist\u002F .next\u002F .env*`; Python: `__pycache__\u002F .venv\u002F *.egg-info\u002F build\u002F dist\u002F`; mixed\u002Funknown: skip).\n   - Write a one-line `README.md` containing the feature description.\n   - Write a starter `AGENTS.md` listing the project's coding standards (TDD non-negotiable, no DB mocks, conventional commits, branch-per-issue, no force-push) — this is the source of truth every agent reads.\n   - `git add -A && git commit -m \"chore: initial scaffold\"`.\n\n4. **Create the remote and push**:\n   ```bash\n   gh repo create \u003Cowner>\u002F\u003Cname> --\u003Cprivate|public> --source=. --remote=origin --push\n   ```\n\n5. **Verify and register**: first run `gh repo view \u003Cowner>\u002F\u003Cname> --json url,defaultBranchRef`.\n   Only after that succeeds, capture the exact slug and record verified creation evidence:\n   ```bash\n   REPO=\"\u003Cowner>\u002F\u003Cname>\"\n   SPAWNED_FROM=\"${SOURCE_SPEC_URL:-${AUTOSPEC_RUN_ID:-bootstrap:$REPO}}\"\n   REGISTRATION_JSON=$(\"${AUTOSPEC_BIN:-autospec}\" project onboard --repo-dir \"$PWD\" --repo \"$REPO\" --spawned-from \"$SPAWNED_FROM\") || {\n     printf '%s\\n' 'ERROR: managed Project repository registration failed before durable admission' >&2\n     exit 1\n   }\n   case \"$(printf '%s' \"$REGISTRATION_JSON\" | jq -r '.outcome \u002F\u002F empty')\" in\n     reconciled) ;;\n     journaled_projection_pending)\n       printf '%s\\n' 'WARNING: managed Project repository projection is durably journaled and pending' >&2 ;;\n     *) printf '%s\\n' 'ERROR: managed Project repository registration returned no supported typed outcome' >&2; exit 1 ;;\n   esac\n   ```\n   Never register when read-back fails. A typed pending outcome does not roll\n   back or recreate the verified repository; reconciliation retries the\n   journaled projection. Propagate every hard registration failure. Capture\n   `\u003Cowner>\u002F\u003Cname>` as `{repo}` for every later phase.\n\nIf a repo already exists (cwd is in a git tree with a `github.com:\u003Cowner>\u002F\u003Cname>` remote), capture that as `{repo}` and skip the bootstrap.\n\n## Phase 1 — Investigate (delegate)\n\nSpawn a **read-only research subagent** to map relevant files, schema, services. Get back a 300-word summary with file paths and line numbers. Do NOT read files directly from the main thread.\n\n> **Model tier:** Tier A (spec work) — top model with extended\u002Fmaximum thinking per AGENTS.md. Claude Code: `opus` + `ultrathink`; Codex: current top GPT + `reasoning_effort=high`; OpenCode: top task tier. Fall back UP on unavailability.\n\nIf the feature touches a remote system (DB, server, S3), run a real query against the actual data to confirm the problem statement before designing. Surface the concrete numbers in the design.\n\nFor a freshly-bootstrapped empty repo, Phase 1 may be a no-op — proceed to Phase 2.\n\n## Phase 2 — Brainstorm + design\n\n> **Spec quality is the bottleneck.** Phase 2's output drives every downstream cycle's cost; if you care about spec quality, invoke this skill with your top-tier model (Claude Code: `claude-code --model opus`; Codex: top GPT). Phase 2 itself runs in the orchestrator (no subagent dispatch) — your invocation model IS the spec model. Subagents in Phases 1, 3, 3.5 follow this lead by selecting Tier A; Phase 4 implementation work uses Tier B. See AGENTS.md.\n\nRun a structured brainstorm — one question at a time, get explicit approval after each section:\n\n1. **Architecture** — where does new code live, what existing patterns does it follow.\n2. **Interactivity \u002F API shape** — how does the user\u002Fcaller drive it; commands, keys, endpoints, fields.\n3. **Data model** — types, columns, persistence boundary.\n4. **Error handling** — failure modes, recovery, user-visible signals.\n5. **Testing** — unit \u002F integration \u002F e2e split, real services vs anything else (rule per AGENTS.md: real services).\n\nWrite the agreed design to `docs\u002Fspecs\u002FYYYY-MM-DD-\u003Ctopic>-design.md`. Self-review for placeholders, contradictions, ambiguity, scope. The spec must be implementable end-to-end by an agent reading only the spec.\n\nIf this is a fresh repo, commit the spec to `main` directly (`git add docs\u002F... && git commit -m \"docs: \u003Ctopic> design spec\" && git push`) so subsequent issues can reference it as a tracked file. This is the ONLY exemption from `autospec-guarded-merge.sh` (T16 H3): a brand-new repo has no reviewed base and no PR to gate, and the commit is the spec document alone. Every later change merges through a PR and the guarded merge.\n\nFor an existing repo, land the spec via a short-lived PR so CI can validate it:\n1. Create branch `feat\u002Fspec-\u003Ctopic>`, commit `docs\u002Fspecs\u002F...design.md`, push.\n2. `gh pr create --base main --head feat\u002Fspec-\u003Ctopic> --title \"docs: \u003Ctopic> design spec\" --body \"Source spec: docs\u002Fspecs\u002F...\"`\n3. Wait for required CI checks to pass (`gh pr checks \u003C#> --repo {repo}`).\n4. Unless `AUTOSPEC_NO_AUTOMERGE_SPEC=1` is set, admin-merge through the guarded wrapper (fence + review-quorum gate, merge pinned to the verified head; never a bare `gh pr merge`): `bash \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Fautospec-guarded-merge.sh\" --pr \u003C#> --repo {repo}`. If the env var is set, pause and ask the user to merge before continuing.\n5. Verify the spec is reachable at `https:\u002F\u002Fgithub.com\u002F{repo}\u002Fblob\u002Fmain\u002Fdocs\u002Fspecs\u002F...` before dispatching Phase 3.\n\n## Phase 3 — Decompose into linked GitHub issues (delegate)\n\nIf Existing spec mode is active, use `{selected_spec_path}` and its GitHub URL.\nOtherwise use the spec path written and merged in Phase 2. The decomposer\ndrafts issue bodies and plan inputs only; no issue may be created until the\nportfolio admission gate below verifies the primary portfolio binding.\n\nDispatch a **foreground subagent** with this prompt (substitute the spec path and `{repo}`):\n\n> **Model tier:** Tier A (spec work) — top model with extended\u002Fmaximum thinking per AGENTS.md. Claude Code: `opus` + `ultrathink`; Codex: current top GPT + `reasoning_effort=high`; OpenCode: top task tier. Fall back UP on unavailability.\n>\n> Read the selected design spec at `\u003Cspec-path>` (`\u003Cspec-github-url>`) and split it into linked GitHub issues for {repo}.\n>\n> Before drafting issues, identify the implementation **Team personality** and independent **Review counter-team** from the selected spec. If the spec lacks those sections, infer them from the request, past specs under `docs\u002Fspecs\u002F`, repository labels, and relevant memory. If confidence is low, stop and ask the operator: `What kind of team should solve this problem?` Offer exactly these five starter combinations:\n> 1. **Core product engineering** — product manager, architect, backend developer, frontend developer, test engineer.\n> 2. **Reliability\u002Fbackend** — backend developer, platform engineer, sysadmin\u002FSRE, database engineer, security advisor.\n> 3. **Frontend\u002Fproduct** — frontend developer, UX designer, accessibility reviewer, API\u002Fbackend developer, QA engineer.\n> 4. **Security-sensitive** — security advisor, architect, backend developer, platform engineer, test engineer.\n> 5. **Legacy\u002Frefactor** — architect, maintainer, backend\u002Ffrontend developer as needed, test engineer, documentation owner.\n> Derive the Review counter-team with a different emphasis that will challenge likely blind spots while staying inside the issue scope.\n>\n> Create labels (idempotent with `--force`): `auto-implement` (#0e8a16), `epic` (#b60205), plus any domain labels the spec calls for. Then draft exactly N issue bodies — first an EPIC umbrella (no `auto-implement` label, just `epic` + domain), then N-1 children. Do NOT create the issues: the portfolio admission gate below freezes these drafts into the plan and the apply transaction files every issue as `needs-classify`. After the gate files them, the umbrella body gains a checklist linking the children. Return JSON: `{umbrella, children:[…], labels_created:[…]}`. Use `gh` CLI only for label creation and read-back. Do NOT modify code. Do NOT push branches. Do NOT create PRs.\n>\n> **Label guard — Phase 3 ONLY:** Children are filed by the apply transaction with `needs-classify` plus any domain labels; `auto-implement` arrives only through final admission. Do NOT apply `needs-autospec-template`, `ctx:*`, or `reasoning:*` at child-create time. Those labels are applied exclusively by Phase 3.5 after it evaluates the child body. Applying them in Phase 3 causes Phase 3.5 to skip those children entirely, defeating classification.\n>\n> Each child body must be a **self-contained mini-spec** sized for execution by a 32B-class local LLM, with these sections in order:\n>\n> - **Goal** — 1 sentence outcome.\n> - **Source spec** — `\u003Cspec-path>` + `\u003Cspec-github-url>` of the design doc this issue derives from.\n> - **Team personality** — copy the selected team name, roles, and issue-relevant emphasis.\n> - **Review counter-team** — copy the counter-team name, roles, and issue-relevant blind spots to challenge.\n> - **Files to read first** — 3–7 entries. Each entry is one of: a path with **section anchors** (do not say \"read the whole spec\"), the closest existing-file analogue to mirror, the test file or fixture pattern to follow, or a dependency issue with a one-line summary so the LLM doesn't fetch its body. Bias toward sectional anchors over full files.\n> - **Local-LLM execution notes** — one-line context-window recommendation (`32k routine`, `64k stretch`, or `split into N subagents along \u003Ccriterion>` for issues exceeding ~30k tokens of staged context) and whether single-pass or subagent-split is recommended.\n> - **Implementation scope** and **Out of scope** as separate subsections (replaces the prior single \"Scope\" section).\n> - **Implementation outline** — file paths + function signatures + data flow.\n> - **Tests required** — TDD per AGENTS.md, real services, no DB mocks, 80%+ coverage.\n> - **Acceptance criteria** — checkbox list `[ ]` only, no prose. Each item machine-checkable.\n> - **Verification** — split into a **Primary smoke test (inner loop)** with exactly one fast command, and **Operator\u002Ffull verification** listing the remaining commands.\n> - **Branch name** — `feat\u002F\u003Cslug>`.\n> - **Dependencies** — `Depends on issue #N` lines (parsed by the monitor).\n>\n> Sizing rule: aim for ≤ 4 KB body. Issues that span more than 4 canonical tables, more than 3 packages, or schema-wide changes must be split — better to emit two children with a `Depends on` edge than one oversized child a small LLM can't hold in working memory.\n>\n> **Sizing caps (hard, per spec §3.4):**\n>\n> - **Body ≤400 words** including all sections.\n> - **Implementation outline ≤30 lines** (file paths + function signatures).\n> - **Files touched ≤3** per child issue.\n> - If a candidate child would exceed any cap, split into a parent + child pair with a `Depends on` edge.\n> - The whole spec + a single child issue body must fit comfortably in a 60–120k context window.\n>\n> Self-check each issue against the caps **before** calling `gh issue create`. If a cap is violated and a split is not feasible, surface the issue inline (print the over-cap body to the operator) instead of filing it.\n>\n> **Pre-filing lint loop (adaptive, MAX_LINT_RETRIES=5):** For each candidate child body, before calling `gh issue create`, write the body to `\u002Ftmp\u002Fdraft-\u003Cslug>.md` and run `bash \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Flint-issue.sh\" \u002Ftmp\u002Fdraft-\u003Cslug>.md`. If the exit code is non-zero, map each `RULE_ID: \u003Cdesc>` finding to an actionable directive using the table below, append all directives to the next generation prompt as cumulative context, and regenerate. Repeat up to `MAX_LINT_RETRIES=5` attempts. If attempt 5 still fails, print all 5 drafts plus accumulated findings inline and **skip** that child (do not file); continue to the next child. On pass (exit 0), include the child in the plan manifest as normal.\n\n> **Managed Project projection (mandatory):** Immediately after every successful issue\n> creation or issue edit, capture the verified URL as `ISSUE_URL` and run:\n> `bash \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Fproject-sync-issue.sh\" \"$ISSUE_URL\" \"$PWD\"`.\n> Never run this command in dry-run mode. If sync fails, print\n> `WARNING: managed Project sync failed for $ISSUE_URL` only for a verified journaled-pending outcome. A hard pre-journal failure stops decomposition after preserving the already-created issue; never create a replacement issue.\n>\n> | Finding | Directive appended to next prompt |\n> |---|---|\n> | `GOAL_VAGUE: \"improve\" used without concrete object` | `AVOID: bare verb \\`improve\\` without naming a file path, command, label, or number in the same sentence.` |\n> | `GOAL_HEDGE: \"should probably\"` | `AVOID: hedging words \\`should\u002Fmight\u002Fcould try\u002Ftry to\\`. State the outcome flatly.` |\n> | `GOAL_NOT_ONE_SENTENCE: N terminals` | `REWRITE: Goal must be exactly one sentence ending with a single . ? or !` |\n> | `AC_PROSE: line N not a checkbox` | `FORMAT: every AC line must start with \\`- [ ] \\` followed by content.` |\n> | `AC_SUBJECTIVE: \"looks clean\"` | `AVOID: subjective adjectives \\`looks\u002Ffeels\u002Fseems\u002Fclean\u002Felegant\\` in AC items. Use a \\`grep\\`\u002F\\`test\\`\u002F\\`diff\\`\u002F\\`bats\\` command instead.` |\n> | `AC_TOO_LONG: N chars` | `SHORTEN: AC item exceeds 120 chars; split into two items or compress to one assertion.` |\n> | `AC_EMPTY` | `ADD: Acceptance criteria section must contain at least one \\`- [ ] \\` checkbox item.` |\n> | `SMOKE_MULTI_LINE: N lines` | `COLLAPSE: Primary smoke test must be exactly one command line. Use \\`&&\\` to chain or move setup to Operator\u002Ffull verification.` |\n> | `SMOKE_PLACEHOLDER: contains \"\u003CTODO>\"` | `RESOLVE: Replace placeholders \\`\u003CTODO>\u002FTBD\u002FXXX\u002F...\\` with the actual command before filing.` |\n> | `SMOKE_NOT_FENCED` | `ADD: Primary smoke test section must contain exactly one fenced code block.` |\n\n### Small-LLM friendliness (applies to every child issue)\n\nChildren are written assuming the implementer is a 32B-class local model with **pre-staged context**, not a search-driven cloud agent:\n\n- Every file the implementer needs is named in **Files to read first** with a sectional anchor or a one-line reason. Do not assume the model will grep the codebase.\n- Spec docs are cited by section heading, not as \"read this 20 KB doc\".\n- Acceptance criteria are checkbox-only so the model can self-verify line-by-line.\n- One **Primary smoke test** runs in the inner loop; the heavier verification list runs once at the end.\n- If the work fans out across many tables\u002Fpackages, split it. Two 3 KB children chained by `Depends on` beat one 7 KB child a 32B model garbles at 60k tokens of working context.\n\n## Phase 3 portfolio admission gate\n\nPhase 3 files issues through the typed portfolio transaction when the\nbinary exposes it; when it does not, the documented `gh issue create` path\napplies. When the portfolio path applies, one verified primary Project must\nexist before any issue is admitted, and the apply transaction is the sole\nprovisioning\u002Fmaterialization entry point — there are no separate public\nrecord or add commands, and no bare `gh issue create` fallback for planned\nissues.\n\n**Probe the capability, do not assert it.** Binaries older than the\nportfolio commands (#3432) do not expose `portfolio`; a missing subcommand\nis a degraded capability, not a Phase 3 blocker, and the fallback must stay\nopen while the primary is unavailable:\n\n```bash\nif \"${AUTOSPEC_BIN:-autospec}\" portfolio --help >\u002Fdev\u002Fnull 2>&1; then\n  PORTFOLIO_AVAILABLE=1\nelse\n  PORTFOLIO_AVAILABLE=0\n  printf '%s\\n' 'NOTE: autospec portfolio unavailable; using gh issue create path' >&2\nfi\n```\n\nSteps 1-2 run only when `PORTFOLIO_AVAILABLE=1`. When it is 0, file the\nplanned issues through the `gh issue create` path used for draft issues\n(each starts as `needs-classify`, never `auto-implement`), and the\n`## Delivery portfolio` handoff in step 3 is omitted for that run.\n\n1. **Freeze the plan (pure validation).** Render the planned YAML manifest —\n   the immutable source spec identity (canonical source repo, the Phase 3\n   spec path — `{selected_spec_path}` in Existing spec mode, otherwise the\n   spec written and merged in Phase 2 — and its `SPEC_BLOB_OID`, resolved\n   per Existing spec mode step 4), `project_owner`, target repositories,\n   local parent sets,\n   planned children, audit node, and dependency edges — then run the\n   read-only validation before any remote mutation:\n\n   ```bash\n   \"${AUTOSPEC_BIN:-autospec}\" portfolio validate --manifest \"$MANIFEST\"\n   ```\n\n   The default `project_owner` is the source repository owner. An explicit\n   `--project-owner \u003Clogin>` from the request is passed into the typed\n   command unchanged — never derive, infer, or substitute a different owner\n   after planning; an explicit or inferred owner never falls back.\n\n   Validation is pure: manifest lint, safety lint, DAG validation, and\n   per-repository read\u002Fwrite capability probes. A non-zero exit here (the\n   probe passed, so this is a validation failure, not a missing command)\n   blocks Phase 3 — fix the manifest and re-run. A repository that cannot\n   accept issues is a blocking prerequisite, never a silently omitted lane.\n2. **Apply before filing.** The apply transaction then files, in order: the\n   primary umbrella; secondary repository trackers; implementation and\n   prerequisite children; the source-repository audit. Every issue starts as\n   `needs-classify`, never `auto-implement`, and blocked prerequisites keep\n   their blocking label:\n\n   ```bash\n   APPLY_JSON=$(\"${AUTOSPEC_BIN:-autospec}\" portfolio apply --manifest \"$MANIFEST\") || {\n     printf '%s\\n' 'ERROR: primary portfolio provisioning failed; no issue is admitted' >&2\n     exit 1\n   }\n   ```\n   No issue creation may precede this verified binding.\n3. **JSON handoff.** Parse `APPLY_JSON` with `jq`; hand the verified\n   portfolio ID and canonical Project URL into every child's\n   `## Delivery portfolio` section and into the pre-impl gate below. Pass\n   the plan's `project_owner` through unchanged.\n4. **Blocked failure handling.** Any apply failure, parent-record or\n   cross-repository graph persistence failure, or unacknowledged Project\n   projection blocks admission: stop, leave the filed issues unadmitted, and\n   report the exact blocker. Resume with the frozen manifest and its\n   checkpoints; never re-decompose a partially applied plan.\n5. **Final admission ordering.** Only after every body mutation finishes\n   (Phase 3.5 model-fit labels, shared contracts, and the post-filing\n   quality audit) does final lint and Rust safety admission transition\n   eligible nodes from `needs-classify` to `auto-implement`. Only\n   classified, lint-passing children are admitted; a child that fails the\n   post-filing quality lint stays `needs-classify` under `needs-quality-bar`.\n   The audit stays dependency-blocked until every deliverable is\n   terminal-success.\n\nCapture the umbrella + child issue numbers.\n\nPersist the relationship on GitHub and in the shared per-repository parent-state\ncache before classification. This command also posts a trusted typed\nparent-marker lifecycle comment on every child and the idempotent decomposition\ncomment on the parent. Append `--quarantined` when the umbrella's authoritative\ntyped safety decision is `SAFETY_AMBIGUOUS` or `SAFETY_BLOCK`; otherwise omit\nit. A failure is blocking because an unlinked child could merge without ever\nreconciling its parent.\n\n```bash\n_parent_slug=$(bash \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Frepo-slug.sh\" --canonical \"{repo}\")\nexport AUTOSPEC_PARENT_STATE_ROOT=\"${AUTOSPEC_PARENT_STATE_ROOT:-$HOME\u002F.autospec\u002Fparent-state\u002F$_parent_slug}\"\n\"${AUTOSPEC_BIN:-autospec}\" parent record --repo {repo} --parent \"\u003CUMBRELLA>\" --children \"\u003CCHILDREN_CSV>\"\n```\n\n## Phase 3.5 — Review and label (delegate)\n\nDispatch a **foreground subagent** to retro-review the child issues just\ncreated in Phase 3 and apply the model-fit rubric. The subagent must NOT modify\nissue titles or remove existing labels; it only adds `ctx:*` and `reasoning:*`\nlabels and patches each body with a `## Model fit` block.\n\n> **Model tier:** Tier A (spec work) — top model with extended\u002Fmaximum thinking per AGENTS.md. Claude Code: `opus` + `ultrathink`; Codex: current top GPT + `reasoning_effort=high`; OpenCode: top task tier. Fall back UP on unavailability.\n>\n> Walk every child issue created in Phase 3 (skip any issue carrying the\n> `type:tracker` label). For each:\n>\n> 1. **Stage context.** Read `gh issue view \u003CN> --repo {repo} --json title,body,labels`. The\n>    body should already contain `## Files to read first`, `## Implementation scope`, `## Team personality`, and `## Review counter-team`. If any is missing, add label\n>    `needs-autospec-template` (idempotent `gh label create --force` once at run\n>    start) and skip — do not classify or patch.\n>\n> 2. **Apply the rubric.** Pick the smallest `ctx:*` tier that holds the\n>    staged context (issue body + every file in `## Files to read first` +\n>    cited spec sections). Pick the `reasoning:*` depth required to derive\n>    (not just transcribe) the implementation.\n>\n>    **`ctx:*` — context-window axis**\n>\n>    | Label | Trigger |\n>    |---|---|\n>    | `ctx:32k`  | One canonical table or shell script; ≤3 files in *Files to read first*; short spec anchors. |\n>    | `ctx:64k`  | Multi-file change; 4-7 files staged; one trio + one installer; medium spec sections (~1-3 KB). |\n>    | `ctx:120k` | Cross-skill or cross-package; 8+ files; long spec excerpts; deep call graphs. |\n>\n>    **`reasoning:*` — reasoning-depth axis**\n>\n>    | Label | Trigger |\n>    |---|---|\n>    | `reasoning:shallow` | Mechanical: copy-and-rename, regex-replace, README transcription, runbook authoring. Verbs: *copy*, *rename*, *transcribe*, *list*. |\n>    | `reasoning:medium`  | Template-following with judgment: synthesize a SKILL.md mirroring an existing one, modify a script with new flags, write tests for a documented contract. Verbs: *mirror*, *adapt*, *integrate*, *wire*. |\n>    | `reasoning:deep`    | Novel design choices: pick a new abstraction, resolve a contradiction in the spec, reconcile cross-cutting concerns. Verbs: *design*, *reconcile*, *resolve*, *redesign*. |\n>\n>    Default for issues that lack any of these signals: `ctx:64k`,\n>    `reasoning:medium`. If unsure between two ctx tiers, prefer the larger.\n>\n> 3. **Sibling normalization.** When 5+ split children share a structural\n>    criterion (e.g. all per-source-table writers, all per-skill installers),\n>    harmonize their `ctx:*`\u002F`reasoning:*` labels so the operator can run a\n>    single profile across the whole group. Override individual classifications\n>    only when the difference is a true outlier (e.g. one sibling pulls in a\n>    schema-wide refactor that no other sibling touches).\n>\n> 4. **Apply labels.** Idempotent at run start:\n>    `gh label create ctx:32k  --color c5def5 --force --repo {repo}`,\n>    `gh label create ctx:64k  --color c5def5 --force --repo {repo}`,\n>    `gh label create ctx:120k --color c5def5 --force --repo {repo}`,\n>    `gh label create reasoning:shallow --color c2e0c6 --force --repo {repo}`,\n>    `gh label create reasoning:medium  --color c2e0c6 --force --repo {repo}`,\n>    `gh label create reasoning:deep    --color c2e0c6 --force --repo {repo}`,\n>    `gh label create needs-quality-bar --color fbca04 --force --repo {repo}`.\n>    Then per issue:\n>    `gh issue edit \u003CN> --add-label \"ctx:\u003Ctier>,reasoning:\u003Cdepth>\" --repo {repo}`.\n>\n> 5. **Patch body — `## Model fit` block.** Insert immediately before the first\n>    `## Dependencies` line (or at end of body if absent):\n>\n>    ```markdown\n>    \u003C!-- autospec-classify:begin -->\n>    ## Model fit\n>\n>    - **ctx:** `ctx:\u003Ctier>` — \u003C1-line rationale>.\n>    - **reasoning:** `reasoning:\u003Cdepth>` — \u003C1-line rationale>.\n>\n>    *Auto-classified by Phase 3.5 on YYYY-MM-DD.*\n>    \u003C!-- autospec-classify:end -->\n>    ```\n>\n>    **Idempotency:** if a `## Model fit` block already exists between the\n>    `\u003C!-- autospec-classify:begin -->` and `\u003C!-- autospec-classify:end -->`\n>    markers, replace it in place. Never stack duplicates. Apply via\n>    `gh issue edit \u003CN> --body-file \u003Ctmp>`.\n>    Legacy blocks have `## Model fit` ABOVE\n>    `\u003C!-- autospec-classify:begin -->`. Replacing only the marker-delimited\n>    region orphans that heading outside the markers, where it still counts\n>    against the budget, and adds a second one. Delete the legacy heading\n>    and everything up to the begin marker first.\n>\n> 6. **Board assignment** — read `~\u002F.autospec\u002Fproject-map.yml` and assign each\n>    just-classified child to the GitHub Projects mapped from its labels.\n>\n>    **File schema** (auto-init if missing — see below):\n>    ```yaml\n>    # ~\u002F.autospec\u002Fproject-map.yml\n>    multi_match: union          # `union` (assign to every match) or `first`\n>    mappings:\n>      ctx:32k: \u003Cproject_number>\n>      ctx:64k: \u003Cproject_number>\n>      ctx:120k: \u003Cproject_number>\n>      reasoning:shallow: \u003Cproject_number>\n>      reasoning:medium:  \u003Cproject_number>\n>      reasoning:deep:    \u003Cproject_number>\n>      \u003Cany-other-label>: \u003Cproject_number>\n>    ```\n>\n>    **Reader procedure** for each issue I:\n>    - For each label L on I, look up `mappings[L]`. Skip null \u002F missing entries.\n>    - With `multi_match: union` (default), collect all matching project numbers and assign to every one of them. With `multi_match: first`, take the first match in label-order and assign to that single project.\n>    - For each chosen `\u003CP>`: `gh project item-add \u003CP> --owner \u003Cowner> --url \u003Cissue-url>`. The `gh` command is idempotent — repeated calls do not duplicate items, so re-running Phase 3.5 is safe.\n>\n>    **Auto-init when the file is missing.** Probe `gh project list --owner \u003Cowner> --format json` to confirm the user can author projects. Probe `gh label list --repo {repo} --json name -q '.[].name'` to enumerate the repo's labels. Write a starter file with every label as a `mappings:` key and `null` project numbers, plus `multi_match: union` at the top. Print:\n>    ```\n>    Wrote ~\u002F.autospec\u002Fproject-map.yml. Edit project numbers (currently null) and re-run.\n>    ```\n>    Then **exit Phase 3.5** without assigning any boards (the labels and `## Model fit` blocks remain applied — only the assign step is deferred).\n>\n>    **Hard rules.**\n>    - Never call `gh project item-add` in `--dry-run`.\n>    - Missing file in `autospec` \u002F `autospec-split` is non-fatal at run time once auto-init has populated it; if auto-init itself fails (e.g. `gh project list` denied), warn and skip board assignment for the rest of the run.\n>\n> 7. **Dependency-edge sanity checks.** After labeling, validate the dep graph\n>    of the just-created children:\n>    - **closed-dep warning** — emit `WARN: child #\u003CN> depends on closed issue #\u003CM>` for each `Depends on #M` line where `gh issue view #\u003CM> --json state` is `CLOSED`.\n>    - **child-less tracker dep warning** — emit `WARN: child #\u003CN> depends on tracker #\u003CM> with no children` when `#\u003CM>` carries `type:tracker` and has no other open `auto-implement` deps pointing at it.\n>    - **circular sibling-dep hard fail** — exit non-zero if any cycle exists among the just-created children's `Depends on #N` edges.\n>\n> 8. **Post-filing quality audit.** For each child issue (skip `type:tracker`):\n>    - Pull body: `gh issue view \u003CN> --repo {repo} --json body -q .body > \u002Ftmp\u002Faudit-\u003CN>.md`\n>    - Run: `bash \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Flint-issue.sh\" \u002Ftmp\u002Faudit-\u003CN>.md`\n>    - On non-zero exit (lint fails):\n>      - Apply label: `gh issue edit \u003CN> --add-label needs-quality-bar --repo {repo}`\n>      - Insert `## Quality lint` block (idempotent, between `\u003C!-- autospec-quality:begin -->` and `\u003C!-- autospec-quality:end -->` markers) via `gh issue edit \u003CN> --body-file \u003Ctmp>`. A legacy block has the heading ABOVE the begin marker: delete the legacy heading and everything up to that marker first, or it keeps counting and a duplicate is added. Block format:\n>        ```markdown\n>        \u003C!-- autospec-quality:begin -->\n>        ## Quality lint\n>\n>        - **GOAL** — \u003C1-line finding>.\n>        - **AC#\u003Cn>** — \u003C1-line finding>.\n>        - **SMOKE** — \u003C1-line finding>.\n>\n>        *Auto-linted by Phase 3.5 on YYYY-MM-DD.*\n>        \u003C!-- autospec-quality:end -->\n>        ```\n>      - Comment findings: `gh issue comment \u003CN> --body \"\u003Cfindings>\" --repo {repo}`\n>    - Do NOT remove `auto-implement` label. Operator decides whether to proceed.\n>\n> 9. **Run-end summary.** Print to stdout:\n>    ```\n>    Phase 3.5 summary on {repo}\n>    - classified: N\n>    - skipped (needs-autospec-template): M\n>    - ctx:32k=A  ctx:64k=B  ctx:120k=C\n>    - reasoning:shallow=X  reasoning:medium=Y  reasoning:deep=Z\n>    - boards assigned: \u003CK> (or \"skipped — no project-map.yml\")\n>    - dep warnings: \u003Ccount>; circular cycles: \u003Ccount>\n>    ```\n\n---\n\n## Phase 3.75 — Architectural alignment (delegate)\n\nAfter Phase 3.5 has applied `ctx:*` \u002F `reasoning:*` labels and before the\npre-impl gate, run a Tier-A (opus) subagent that reads all child issue bodies\nplus the source spec and produces a `Shared contracts` summary. This prevents\neach child issue from inventing incompatible type signatures, file-layout\nconventions, and naming schemes — integration mismatches that are caught only\nin Phase 5.5.\n\nThe subagent must:\n\n1. Read the source spec and all child issue bodies (skip the umbrella\u002Ftracker).\n2. Extract all public interfaces, function signatures, data types, file paths,\n   and naming conventions mentioned across the issues.\n3. Produce a `## Shared contracts` summary as a markdown block with:\n   - Type signatures \u002F data structures used across ≥2 issues.\n   - File-layout constraints (which file owns what).\n   - Naming conventions (e.g. class names, env var prefixes).\n4. Patch each child issue body by inserting the block\n   **immediately before the first `## Dependencies` line** (append at end of body\n   only when the body has no `## Dependencies` heading):\n\n```\n\u003C!-- autospec-shared-contracts:begin -->\n## Shared contracts\n\n\u003Csummary block from step 3>\n\u003C!-- autospec-shared-contracts:end -->\n```\n\n   Never plain-append: the block's HTML markers and `## Shared contracts` heading\n   must not land inside the `## Dependencies` section — `scripts\u002Flint-issue.sh`\n   reads that section until the next `## ` heading and reports `DEPS_MALFORMED`\n   for every line that is not `Depends on issue #N` or `none` (that append\n   placement is what broke the 13 `#3112`-generation bodies). Write the block to\n   `\u002Ftmp\u002Fshared-contracts-\u003CN>.md`, insert deterministically, and apply:\n\n   ```bash\n   body=\"$(gh issue view \u003CN> --json body -q .body)\"\n   printf '%s\\n' \"$body\" | awk -v f=\u002Ftmp\u002Fshared-contracts-\u003CN>.md '\n     !done && \u002F^## Dependencies$\u002F { while ((getline line \u003C f) > 0) print line; print \"\"; close(f); done = 1 }\n     { print }\n     END { if (!done) while ((getline line \u003C f) > 0) print line }\n   ' > \u002Ftmp\u002Fbody-\u003CN>.md\n   gh issue edit \u003CN> --body-file \u002Ftmp\u002Fbody-\u003CN>.md\n   ```\n\n   After the patch, `Depends on issue #N` must remain the last line under\n   `## Dependencies`.\n   The patch is idempotent — skip if `\u003C!-- autospec-shared-contracts:begin -->` is already\n   present in the body.\n\nIf there are fewer than 2 child issues, or all child issues are in the same\nfile (no cross-issue interface), skip Phase 3.75 and log:\n`\"Phase 3.75: skipped (single-file scope)\"`\n\n---\n\n## Phase 3 pre-impl gate\n\nAfter Phase 3 decomposition completes (and Phase 3.5 review-and-label has\napplied `ctx:*` \u002F `reasoning:*` labels), end Phase 3 by asking the user\nthis verbatim question (no auto-launch — always ask explicitly, per spec\n§3.3):\n\n> `\"Spec written, N issues filed. Start \u002Fautospec-run now, defer to your external daemon, or keep refining? [run \u002F defer \u002F refine]\"`\n\nSubstitute `N` with the actual issue count from Phase 3. Default highlight\nis **`defer`** for `\u002Fautospec-split` (the plan-only skill — the user\ninvoked `\u002Fautospec-split` expecting plan-only behavior, so the gate\ndefaults to `defer`).\n\n- **`run`** — invoke `\u002Fautospec-run` in the current session.\n- **`defer`** (default for `\u002Fautospec-split`) — print\n  `\"Issues are ready. Your external monitor will pick them up. Exiting.\"`\n  and stop without launching `\u002Fautospec-run`. The just-filed `auto-implement`\n  queue persists on the GitHub side so an external daemon (or a later\n  `\u002Fautospec-run` invocation) can pick it up.\n- **`refine`** — re-enter Phase 2 from question 1 (Architecture).\n\nNo daemon auto-detection — always ask explicitly.\n\nAfter all decomposition issues are filed (and before asking the gate question),\nverify the Phase 5.5 audit child — part of the frozen plan, titled\n`\"Phase 5.5 audit + remediation — \u003Cfeature-name>\"` and filed by the apply\ntransaction with labels `priority:high,audit` — is present, then post a\ncomment on the umbrella issue linking it: `\"Phase 5.5 audit tracker: #\u003CN>\"`.\n\n## Handoff\n\nIf the gate answer was `run`, hand off to `\u002Fautospec-run --profile \u003Cname>`\nto begin implementation. If the answer was `defer`, the run ends here and\nthe queue is left for an external monitor.\n",{"name":5,"description":7},"main","9e7f04357ff46ab731d4f56a4ac5ca5449c13bb0","skills\u002Fautospec-split",1,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec","https:\u002F\u002Fgithub.com\u002Fberlinguyinca","Love to lead, code, cook and contribute to open source and believe that you can learn anything you set your mind too.\r\n","2026-11-11 07:09:35",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add berlinguyinca\u002Fautospec --skill autospec-split",{"tool":61,"command":62},"bunx","bunx skills add berlinguyinca\u002Fautospec --skill autospec-split",{"tool":64,"command":65},"pnpm","pnpm dlx skills add berlinguyinca\u002Fautospec --skill autospec-split","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-split\u002FSKILL.md",true,[69,75,81,85,89],{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"codex\u002Fprompt.md","REFERENCE","参考文档",44025,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-split\u002Fcodex\u002Fprompt.md",{"path":76,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":79,"sourceHtmlUrl":80},"install.sh","SCRIPT","脚本",11500,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-split\u002Finstall.sh",{"path":82,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":83,"sourceHtmlUrl":84},"opencode\u002Fagent.md",44218,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-split\u002Fopencode\u002Fagent.md",{"path":86,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":87,"sourceHtmlUrl":88},"README.md",3818,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-split\u002FREADME.md",{"path":90,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":91,"sourceHtmlUrl":92},"uninstall.sh",3939,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-split\u002Funinstall.sh",[94,105,114,123,143,167],{"skillNo":95,"name":96,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":102,"publishedAt":42},"01M71RJHYMKPTC9AAPXWQ6F4RT","trio-pass-skill","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flockstep-trio-pass\u002FSKILL.md",[99],{"categoryNo":100,"categoryName":101,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[103,104],"trio","trio pass skill",{"skillNo":106,"name":107,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":111,"publishedAt":42},"01M71RJFBQ1KAF9XM3T3Y4VMSK","duo-pass-skill","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flockstep-duo-pass\u002FSKILL.md",[110],{"categoryNo":100,"categoryName":101,"taxonomyType":21,"taxonomyTypeDesc":22},[112,113],"duo pass skill","duo",{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":120,"publishedAt":42},"01M71RJDT1TB3P9TRWR6A534FB","duo-divergence-skill","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flockstep-duo-divergence\u002FSKILL.md",[119],{"categoryNo":100,"categoryName":101,"taxonomyType":21,"taxonomyTypeDesc":22},[121,113,122],"duo divergence skill","divergence",{"skillNo":124,"name":26,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":129,"publishedAt":42},"01M71RJAC4NNEQSYBDSY3NZS73","Use when the user wants to ship a feature end-to-end across multiple commits — bootstraps repo if missing, brainstorms a design spec, decomposes into linked GitHub issues, or splits an existing spec into issues, then runs an autonomous implementation loop with auto-merge.","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec\u002FSKILL.md",[128],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[26,130,131,41,40,132,133,134,37,135,34,136,137,138,29,139,140,141,142,39],"ship a feature","end","autonomous","auto","loop","across","merge","ship","implementation loop","feature","commits","repo","missing",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":42},"01M71RJ4F9HT8PT26CKNM9XE1M","autospec-upgrade","Use when the user wants to upgrade an Angular, Next.js, or React project to the latest official versions safely — by locking observable behavior before touching versions, upgrading one major at a time with official codemods, and gating completion on mutation score rather than coverage theater.","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-upgrade\u002FSKILL.md",[],[150,26,151,152,153,154,155,156,157,37,158,159,160,161,39,162,163,164,165,166],"autospec upgrade","upgrade","mutation","coverage","official","project","time","gating","angular","react","next","at","Next.js","one","with","behavior","latest",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":178,"publishedAt":42},"01M71RJ28FJ4PM6DXHB7T5CF8H","autospec-ui-audit","Use when a React Router application needs a deterministic whole-site route inventory before UI, UX, navigation, or evidence auditing begins.","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-ui-audit\u002FSKILL.md",[173],{"categoryNo":174,"categoryName":175,"taxonomyType":176,"taxonomyTypeDesc":177},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[179,26,180,181,182,39,183,184,185,186,187,188,189,190,191,159,192,37,193],"ui audit","audit","autospec ui audit","ui","inventory","evidence","deterministic","route","ux","site","react router","navigation","application","needs","router"]