[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ENHF62C7G6BC4YG44RWFB0":3,"skill-same:01M6ENHF62C7G6BC4YG44RWFB0":196},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":50,"install":51,"resources":63},"01M6ENHF62C7G6BC4YG44RWFB0","autobuild",null,"End-to-end autopilot for a single brief — pre-flight, \u002Fdev-builder, fresh-subagent reviewers, push, open PR, mark **PR:** line on feature branch. Stops at the human merge gate.","launchpathventures\u002Fditto-os","launchpathventures","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F248658966?v=4","01M6ENF40K8DMPD2Q4YBJX3EWK","01M6ENF4541FAB13MQFNS8RMK8",1,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002Flaunchpathventures\u002Fditto-os\u002Fblob\u002Fmain\u002F.catalyst\u002Fskills\u002Fautobuild\u002FSKILL.md",[],[5,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"builder","line","name","fresh","autopilot","end","feature","human","gate","merge","branch","subagent","merge gate","open","brief","open pr","push","dev","pr","2026-11-10 10:12:30",false,"---\nname: autobuild\ndescription: End-to-end autopilot for a single brief — pre-flight, \u002Fdev-builder, fresh-subagent reviewers, push, open PR, mark **PR:** line on feature branch. Stops at the human merge gate.\nargument-hint: \"[brief-name]\"\ndisable-model-invocation: true\n---\n\n## Why This Skill Exists\n\nDriving each `**Status:** ready` brief to a reviewable PR is mechanical work: read brief → pre-flight check → implement → review → fix → push → PR → flip status. `\u002Fautobuild` chains those steps so the user's leverage stays on planning and merge-time taste, not dispatching commands between phases.\n\nThis is the **within-brief autopilot**. Pair with `\u002Fdrain-queue` for cross-brief autopilot.\n\nInspired by gstack's \"cognitive gearing via artifact handoff\" — each phase reads the output of the previous phase from disk (the brief file, the diff, the dev-review output). No in-memory state to lose.\n\nCompanion brief: `docs\u002Fbriefs\u002F188-cross-brief-autopilot.md`. Doctrine: `docs\u002Fadrs\u002F035-brief-state-doctrine.md`.\n\n## Repo Context\n\n- Read `@CLAUDE.md` — Ditto conventions, especially §How Work Gets Done, §Critical separation, §Engine Core\n- Read `@docs\u002Fdev-process.md` §Autopilot — usage and invariants\n- Read `@docs\u002Fstate.md` — current state, in-flight work\n- Read `@docs\u002Finsights\u002F` — at minimum 017 (security architectural), 043 (Builder flags \u002F Architect fixes), 180-spike-test, 180-steprun-guard, 190 (migration journal)\n- Read `@AGENTS.md` — repo conventions\n\n## Pre-conditions\n\nHard requirements before `\u002Fautobuild` proceeds:\n\n1. Working tree is clean (`git status --porcelain` empty)\n2. Exactly one brief at `**Status:** in_progress` exists in `docs\u002Fbriefs\u002F`, OR `$ARGUMENTS` names a specific brief file (with `**Status:** ready` or `in_progress`)\n3. Current branch is NOT `main` — must be on a feature branch dedicated to this brief (caller's responsibility; `\u002Fdrain-queue` handles this automatically by renaming `claim-tmp` → `feature\u002F\u003Cslug>` after a successful claim)\n4. Remote is reachable (`git fetch` succeeds)\n\nIf any pre-condition fails, stop and report — do not try to \"fix it up.\" Autonomous work depends on crisp pre-conditions.\n\n## Execution — 10-step pipeline\n\nSteps run in order. On any failure, stop and leave state intact for human inspection — the brief stays at `**Status:** in_progress` so a human can pick it up.\n\n### 1. Resolve the brief\n\n- If `$ARGUMENTS` provided, match against `docs\u002Fbriefs\u002F*.md`\n- Otherwise find the single `**Status:** in_progress` brief\n- Read the brief in full. Treat its §What Changes table and §Acceptance Criteria as the contract\n- Extract the brief's slug (e.g. `188-cross-brief-autopilot`) — this is the filename without `.md`\n\n### 2. Pre-flight hard-stops\n\nScan the brief BEFORE invoking `\u002Fdev-builder`. If any of these match, hard-stop immediately with brief left at `**Status:** in_progress`:\n\n**Drizzle journal hard-stop** (`docs\u002Finsights\u002F190-migration-journal-concurrency.md`). Scan §What Changes for any of:\n- `drizzle\u002Fmeta\u002F_journal.json`\n- `drizzle\u002Fmigrations\u002F`\n- `packages\u002Fcore\u002Fsrc\u002Fdb\u002Fschema\u002F`\n- `src\u002Fdb\u002Fschema\u002F`\n\nIf matched, surface to human: \"Brief touches DB schema\u002Fmigration; the Drizzle journal is a concurrency bottleneck. Manual build required.\"\n\n**DB migration hard-stop.** Scan §What Changes and §Smoke Test for:\n- `pnpm db:push`\n- `pnpm db:migrate`\n- `drizzle-kit push`\n- `drizzle-kit migrate`\n- `supabase db push`\n\nIf matched, surface to human: \"Brief requires DB migration; autonomous migration is forbidden. Manual build required.\"\n\n**External-side-effect spike-test note** (`docs\u002Finsights\u002F180-spike-test-every-new-api.md`). Scan §What Changes for additions to `src\u002Fengine\u002Fintegration-spike.test.ts` or new external API integration. Do not hard-stop — `\u002Fdev-builder` already enforces the spike-test requirement — but record a flag for the final report so the human knows to verify the spike was run.\n\n**Pre-flight scope note:** these hard-stops cover **DB-related risk only**. Other classes of dangerous brief content (`package.json` `dependencies`\u002F`devDependencies` mods, `.github\u002Fworkflows\u002F*.yml`, `.env*` mods, `next.config.*`, `vite.config.*`, `tsconfig.*`) rely entirely on the `**Status:** ready` human gate (the trust boundary; see `docs\u002Fadrs\u002F035-brief-state-doctrine.md`).\n\n### 3. Invoke `\u002Fdev-builder`\n\nSingle role-contract delegation for Implement+Verify. `\u002Fdev-builder.md` lines 81-86 already mandate `pnpm run type-check`, `pnpm test`, `pnpm test:e2e`, `pnpm test:e2e:auto`, and the brief's smoke test. **Do NOT enumerate or short-circuit** these in `\u002Fautobuild`'s body — that would silently weaken the contract and create the maker-checker bypass this skill is designed to prevent.\n\nPass `\u002Fdev-builder` the full brief and the entire codebase context (no narrowed snippet) so its caller-impact analysis MUST (`.claude\u002Fcommands\u002Fdev-builder.md` line 27) is preserved.\n\nIf `\u002Fdev-builder` fails (test failure, smoke-test failure, ambiguity flagged): stop, leave brief at `Status: in_progress`, report.\n\n### 4. Spawn fresh-subagent `\u002Fdev-reviewer` (architecture review)\n\nMUST spawn a NEW agent via the Agent \u002F Task tool. NOT inline in the Builder's conversation. Pass the subagent:\n- The role contract: `.claude\u002Fcommands\u002Fdev-reviewer.md`\n- The diff: `git diff origin\u002Fmain` output\n- `docs\u002Farchitecture.md`\n- `docs\u002Freview-checklist.md`\n- The brief\n\nThe subagent runs the 12-point architecture checklist + extensions and returns a structured PASS\u002FFLAG\u002FFAIL report. Do NOT carry over assumptions from the Builder's context — the fresh-context Reviewer is the maker-checker invariant per CLAUDE.md §Critical separation.\n\n### 5. Spawn fresh-subagent `\u002Fdev-review` (exhaustive bug audit)\n\nMUST spawn a SECOND new agent via the Agent \u002F Task tool. Pass:\n- The role contract: `.catalyst\u002Fskills\u002Fdev-review\u002FSKILL.md` + `.catalyst\u002Fskills\u002Fdev-review\u002Freferences\u002Fdev-review-checklist.md`\n- The diff\n- The brief\n\nThe subagent runs the 5-pass exhaustive audit and returns CRITICAL\u002FHIGH\u002FMEDIUM\u002FLOW findings. The two reviewers (Step 4 architecture + Step 5 exhaustive) catch different classes of issue — both are mandatory.\n\n### 6. Fix P0\u002FP1 findings with iterative re-review (max 3 attempts)\n\nLoop until the branch is clean of P0\u002FP1 (CRITICAL\u002FHIGH from \u002Fdev-review; FAIL from \u002Fdev-reviewer), or escalate after 3 passes. This matches `\u002Fdrain-queue` Step F's cap and non-convergence guard, applied at the pre-PR gate so architectural noise doesn't spill into open PRs.\n\nSet `attempt = 1, max_attempts = 3`. Track the P0\u002FP1 finding set across attempts to detect non-convergence.\n\n**Loop:**\n\n1. **Fix P0\u002FP1 findings.** In the same conversation (the Builder, not a fresh agent — fixes are not architectural decisions). P2\u002FP3 (MEDIUM\u002FLOW; FLAG) are NOT fixed in this loop — they accumulate for Step 8's PR body under `### Known follow-ups` and get picked up by `\u002Fdrain-queue`'s Step F post-PR.\n2. **Re-run the full `\u002Fdev-builder` verify list** per `.claude\u002Fcommands\u002Fdev-builder.md` lines 81-86 (type-check + `pnpm test` + `pnpm test:e2e` + `pnpm test:e2e:auto` + smoke test). Do NOT re-run a subset — partial verification after fixes is exactly the contract weakening the §Role-contract preservation constraint forbids. If any verify step regresses and cannot be resolved in this pass, stop the loop and treat as failure: brief stays `Status: in_progress`, NO PR opened, report.\n3. **Re-spawn fresh-subagent `\u002Fdev-reviewer` AND fresh-subagent `\u002Fdev-review`** — new Agent\u002FTask invocations, NOT inline in the Builder's conversation. The maker-checker invariant survives because each pass uses fresh-context subagents; inlining would carry over assumptions from the fix-writing conversation and defeat Brief 188's §Role-contract preservation constraint.\n4. **Check convergence:**\n   - **No P0\u002FP1 findings remain** → exit loop, proceed to Step 7 (push + PR)\n   - **P0\u002FP1 remain AND `attempt \u003C max_attempts`** → increment `attempt`, loop to 1\n   - **P0\u002FP1 remain AND `attempt == max_attempts`** → exit loop, go to **Escalation** below\n5. **Non-convergence guard:** if the exact same P0\u002FP1 finding set appears in two consecutive passes with no reduction, treat as non-convergent — go to **Escalation** immediately even if attempts remain. Stuck-loops are architectural and need a human.\n\n**Escalation** (max attempts reached or non-convergent): stop, leave brief at `Status: in_progress`, PR NOT opened, report to human with:\n- Count of unresolved P0\u002FP1 by severity per reviewer\n- Whether the failure mode was \"capped at 3 passes with findings still present\" or \"didn't converge (same set 2 passes in a row)\"\n- Number of passes attempted\n- Feature branch name so the human can pick it up manually\n\nThe first-pass-clean case (no P0\u002FP1 from the initial reviewers at Steps 4\u002F5) exits the loop immediately at Step 4 above — no extra reviewer spawns paid.\n\n**Cost note:** in the worst case this triples the pre-PR reviewer cost (3× fresh-subagent `\u002Fdev-reviewer` + 3× fresh-subagent `\u002Fdev-review` + 3× full verify re-runs). Most briefs exit on pass 1 (no P0\u002FP1 from initial review). Briefs that hit 3 passes are precisely the briefs worth spending on before opening a PR — the alternative is a human fighting the same fight on a dirty PR.\n\n### 7. Commit and push the feature branch\n\n- Stage only files relevant to the brief (never `git add -A` blindly)\n- Commit message: one-line summary matching the brief, followed by the brief filename\n  ```\n  \u003Ctype>(\u003Cscope>): \u003Csummary>\n\n  Brief: docs\u002Fbriefs\u002F\u003Cslug>.md\n  ```\n- Push with `-u origin feature\u002F\u003Cslug>` to set upstream\n\n### 8. Open PR\n\n- Base: `main`\n- Head: `feature\u002F\u003Cslug>`\n- Title: under 70 chars, matches brief summary\n- Body MUST contain (in order):\n  1. **Summary** — 1–3 bullets\n  2. **Test plan** — bulleted markdown checklist\n  3. `brief:\u003Cslug>` token on its own line — load-bearing for `\u002Fdrain-queue`'s GC pass and dependency-eligibility query (parsed via regex from PR body)\n  4. `Brief: docs\u002Fbriefs\u002F\u003Cslug>.md` line — link to the brief\n  5. `### Known follow-ups` (if any P2\u002FP3 findings exist)\n- Use `gh pr create --base main` with HEREDOC body\n\n### 9. Add `**PR:** \u003Curl>` line to the brief on the FEATURE BRANCH\n\nThis is informational documentation, NOT a load-bearing signal. The authoritative in-flight signal is `gh pr list` (queried by `\u002Fdrain-queue`'s GC pass). The `**PR:**` line survives any merge strategy because it's part of the feature branch's diff.\n\n- In-place edit `docs\u002Fbriefs\u002F\u003Cslug>.md`: insert a new line `**PR:** \u003Curl>` directly under the `**Status:**` line. Status itself stays `in_progress`.\n- `git add docs\u002Fbriefs\u002F\u003Cslug>.md`\n- `git commit -m \"chore(brief): add PR link to \u003Cslug>\"`\n- `git push origin feature\u002F\u003Cslug>` — feature branch only, NOT to `main`\n\n**Branch hygiene:** the autopilot stays on `feature\u002F\u003Cslug>` after this step. No checkout dance to `claim-tmp` or anywhere else. Step 10 (Report) runs from the feature branch context.\n\n### 10. Report\n\nOutput to the user (last message, since intermediate messages collapse):\n- PR URL\n- Brief now at `**Status:** in_progress` with `**PR:** \u003Curl>` line on the feature branch\n- Reviewer findings: count by severity per reviewer\n- P2\u002FP3 follow-ups noted in the PR body (if any)\n- Any spike-test flag from step 2 (\"Builder added external API integration; verify spike test ran\")\n- Any questions parked in the brief (if `\u002Fdev-builder` flagged ambiguities mid-build)\n\n## Guardrails\n\n- **Never merge the PR.** The merge is the human taste gate — it's where `Status: in_progress` becomes `complete` (via `\u002Fdrain-queue`'s next GC pass).\n- **Never run migrations** (`pnpm db:push`, `drizzle-kit migrate`, `supabase db push`) — pre-flight step 2 hard-stops.\n- **Never modify files outside the brief's scope.** If you notice drift, record it in `docs\u002Finsights\u002F` (per `docs\u002Finsights\u002F043-knowledge-maintenance-at-point-of-contact.md`: Builder flags, Architect fixes) and move on.\n- **Never `--force`, `--no-verify`, or `reset --hard`.** If you're tempted, stop and ask.\n- **Stop on first real failure.** Cascading past a broken state corrupts the queue.\n- **Maker-checker is procedurally enforced via fresh subagents.** Steps 4 and 5 MUST use the Agent \u002F Task tool, NOT inline review in the Builder's conversation.\n- **`\u002Fautobuild` does NOT enumerate `\u002Fdev-builder`'s verify steps.** Step 3 invokes `\u002Fdev-builder` and trusts its MUST list. Adding a redundant verify step here weakens the contract.\n- **`\u002Fautobuild` does NOT push to `origin\u002Fmain`.** Step 9 pushes to the feature branch. The only push to `origin\u002Fmain` in the autopilot system is `\u002Fdrain-queue`'s claim and GC pass.\n\n## Failure Modes\n\n| Symptom | Action |\n|---------|--------|\n| Pre-condition fails | Report and exit without touching anything |\n| Pre-flight hard-stop (drizzle\u002Fmigration) | Brief stays `Status: in_progress`; report; exit |\n| `\u002Fdev-builder` ambiguity-flagged | Question parked in brief by Builder; brief stays `Status: in_progress`; exit |\n| Tests\u002Fbuild fail (per `\u002Fdev-builder`'s contract) | Brief stays `Status: in_progress`; report with failure detail; exit |\n| Reviewer P0\u002FP1 not converged in 3 passes (or non-convergent set) | Brief stays `Status: in_progress`; PR NOT opened; report with pass count + failure mode + branch name; exit |\n| Verify step regresses inside Step 6 fix loop and can't be resolved in same pass | Brief stays `Status: in_progress`; PR NOT opened; report; exit |\n| `gh pr create` fails | Branch is pushed; report and exit so user can open PR manually |\n| Multiple `Status: in_progress` briefs (no `$ARGUMENTS`) | Ask user to pick one; never guess |\n","## Why This Skill Exists\n\nDriving each `**Status:** ready` brief to a reviewable PR is mechanical work: read brief → pre-flight check → implement → review → fix → push → PR → flip status. `\u002Fautobuild` chains those steps so the user's leverage stays on planning and merge-time taste, not dispatching commands between phases.\n\nThis is the **within-brief autopilot**. Pair with `\u002Fdrain-queue` for cross-brief autopilot.\n\nInspired by gstack's \"cognitive gearing via artifact handoff\" — each phase reads the output of the previous phase from disk (the brief file, the diff, the dev-review output). No in-memory state to lose.\n\nCompanion brief: `docs\u002Fbriefs\u002F188-cross-brief-autopilot.md`. Doctrine: `docs\u002Fadrs\u002F035-brief-state-doctrine.md`.\n\n## Repo Context\n\n- Read `@CLAUDE.md` — Ditto conventions, especially §How Work Gets Done, §Critical separation, §Engine Core\n- Read `@docs\u002Fdev-process.md` §Autopilot — usage and invariants\n- Read `@docs\u002Fstate.md` — current state, in-flight work\n- Read `@docs\u002Finsights\u002F` — at minimum 017 (security architectural), 043 (Builder flags \u002F Architect fixes), 180-spike-test, 180-steprun-guard, 190 (migration journal)\n- Read `@AGENTS.md` — repo conventions\n\n## Pre-conditions\n\nHard requirements before `\u002Fautobuild` proceeds:\n\n1. Working tree is clean (`git status --porcelain` empty)\n2. Exactly one brief at `**Status:** in_progress` exists in `docs\u002Fbriefs\u002F`, OR `$ARGUMENTS` names a specific brief file (with `**Status:** ready` or `in_progress`)\n3. Current branch is NOT `main` — must be on a feature branch dedicated to this brief (caller's responsibility; `\u002Fdrain-queue` handles this automatically by renaming `claim-tmp` → `feature\u002F\u003Cslug>` after a successful claim)\n4. Remote is reachable (`git fetch` succeeds)\n\nIf any pre-condition fails, stop and report — do not try to \"fix it up.\" Autonomous work depends on crisp pre-conditions.\n\n## Execution — 10-step pipeline\n\nSteps run in order. On any failure, stop and leave state intact for human inspection — the brief stays at `**Status:** in_progress` so a human can pick it up.\n\n### 1. Resolve the brief\n\n- If `$ARGUMENTS` provided, match against `docs\u002Fbriefs\u002F*.md`\n- Otherwise find the single `**Status:** in_progress` brief\n- Read the brief in full. Treat its §What Changes table and §Acceptance Criteria as the contract\n- Extract the brief's slug (e.g. `188-cross-brief-autopilot`) — this is the filename without `.md`\n\n### 2. Pre-flight hard-stops\n\nScan the brief BEFORE invoking `\u002Fdev-builder`. If any of these match, hard-stop immediately with brief left at `**Status:** in_progress`:\n\n**Drizzle journal hard-stop** (`docs\u002Finsights\u002F190-migration-journal-concurrency.md`). Scan §What Changes for any of:\n- `drizzle\u002Fmeta\u002F_journal.json`\n- `drizzle\u002Fmigrations\u002F`\n- `packages\u002Fcore\u002Fsrc\u002Fdb\u002Fschema\u002F`\n- `src\u002Fdb\u002Fschema\u002F`\n\nIf matched, surface to human: \"Brief touches DB schema\u002Fmigration; the Drizzle journal is a concurrency bottleneck. Manual build required.\"\n\n**DB migration hard-stop.** Scan §What Changes and §Smoke Test for:\n- `pnpm db:push`\n- `pnpm db:migrate`\n- `drizzle-kit push`\n- `drizzle-kit migrate`\n- `supabase db push`\n\nIf matched, surface to human: \"Brief requires DB migration; autonomous migration is forbidden. Manual build required.\"\n\n**External-side-effect spike-test note** (`docs\u002Finsights\u002F180-spike-test-every-new-api.md`). Scan §What Changes for additions to `src\u002Fengine\u002Fintegration-spike.test.ts` or new external API integration. Do not hard-stop — `\u002Fdev-builder` already enforces the spike-test requirement — but record a flag for the final report so the human knows to verify the spike was run.\n\n**Pre-flight scope note:** these hard-stops cover **DB-related risk only**. Other classes of dangerous brief content (`package.json` `dependencies`\u002F`devDependencies` mods, `.github\u002Fworkflows\u002F*.yml`, `.env*` mods, `next.config.*`, `vite.config.*`, `tsconfig.*`) rely entirely on the `**Status:** ready` human gate (the trust boundary; see `docs\u002Fadrs\u002F035-brief-state-doctrine.md`).\n\n### 3. Invoke `\u002Fdev-builder`\n\nSingle role-contract delegation for Implement+Verify. `\u002Fdev-builder.md` lines 81-86 already mandate `pnpm run type-check`, `pnpm test`, `pnpm test:e2e`, `pnpm test:e2e:auto`, and the brief's smoke test. **Do NOT enumerate or short-circuit** these in `\u002Fautobuild`'s body — that would silently weaken the contract and create the maker-checker bypass this skill is designed to prevent.\n\nPass `\u002Fdev-builder` the full brief and the entire codebase context (no narrowed snippet) so its caller-impact analysis MUST (`.claude\u002Fcommands\u002Fdev-builder.md` line 27) is preserved.\n\nIf `\u002Fdev-builder` fails (test failure, smoke-test failure, ambiguity flagged): stop, leave brief at `Status: in_progress`, report.\n\n### 4. Spawn fresh-subagent `\u002Fdev-reviewer` (architecture review)\n\nMUST spawn a NEW agent via the Agent \u002F Task tool. NOT inline in the Builder's conversation. Pass the subagent:\n- The role contract: `.claude\u002Fcommands\u002Fdev-reviewer.md`\n- The diff: `git diff origin\u002Fmain` output\n- `docs\u002Farchitecture.md`\n- `docs\u002Freview-checklist.md`\n- The brief\n\nThe subagent runs the 12-point architecture checklist + extensions and returns a structured PASS\u002FFLAG\u002FFAIL report. Do NOT carry over assumptions from the Builder's context — the fresh-context Reviewer is the maker-checker invariant per CLAUDE.md §Critical separation.\n\n### 5. Spawn fresh-subagent `\u002Fdev-review` (exhaustive bug audit)\n\nMUST spawn a SECOND new agent via the Agent \u002F Task tool. Pass:\n- The role contract: `.catalyst\u002Fskills\u002Fdev-review\u002FSKILL.md` + `.catalyst\u002Fskills\u002Fdev-review\u002Freferences\u002Fdev-review-checklist.md`\n- The diff\n- The brief\n\nThe subagent runs the 5-pass exhaustive audit and returns CRITICAL\u002FHIGH\u002FMEDIUM\u002FLOW findings. The two reviewers (Step 4 architecture + Step 5 exhaustive) catch different classes of issue — both are mandatory.\n\n### 6. Fix P0\u002FP1 findings with iterative re-review (max 3 attempts)\n\nLoop until the branch is clean of P0\u002FP1 (CRITICAL\u002FHIGH from \u002Fdev-review; FAIL from \u002Fdev-reviewer), or escalate after 3 passes. This matches `\u002Fdrain-queue` Step F's cap and non-convergence guard, applied at the pre-PR gate so architectural noise doesn't spill into open PRs.\n\nSet `attempt = 1, max_attempts = 3`. Track the P0\u002FP1 finding set across attempts to detect non-convergence.\n\n**Loop:**\n\n1. **Fix P0\u002FP1 findings.** In the same conversation (the Builder, not a fresh agent — fixes are not architectural decisions). P2\u002FP3 (MEDIUM\u002FLOW; FLAG) are NOT fixed in this loop — they accumulate for Step 8's PR body under `### Known follow-ups` and get picked up by `\u002Fdrain-queue`'s Step F post-PR.\n2. **Re-run the full `\u002Fdev-builder` verify list** per `.claude\u002Fcommands\u002Fdev-builder.md` lines 81-86 (type-check + `pnpm test` + `pnpm test:e2e` + `pnpm test:e2e:auto` + smoke test). Do NOT re-run a subset — partial verification after fixes is exactly the contract weakening the §Role-contract preservation constraint forbids. If any verify step regresses and cannot be resolved in this pass, stop the loop and treat as failure: brief stays `Status: in_progress`, NO PR opened, report.\n3. **Re-spawn fresh-subagent `\u002Fdev-reviewer` AND fresh-subagent `\u002Fdev-review`** — new Agent\u002FTask invocations, NOT inline in the Builder's conversation. The maker-checker invariant survives because each pass uses fresh-context subagents; inlining would carry over assumptions from the fix-writing conversation and defeat Brief 188's §Role-contract preservation constraint.\n4. **Check convergence:**\n   - **No P0\u002FP1 findings remain** → exit loop, proceed to Step 7 (push + PR)\n   - **P0\u002FP1 remain AND `attempt \u003C max_attempts`** → increment `attempt`, loop to 1\n   - **P0\u002FP1 remain AND `attempt == max_attempts`** → exit loop, go to **Escalation** below\n5. **Non-convergence guard:** if the exact same P0\u002FP1 finding set appears in two consecutive passes with no reduction, treat as non-convergent — go to **Escalation** immediately even if attempts remain. Stuck-loops are architectural and need a human.\n\n**Escalation** (max attempts reached or non-convergent): stop, leave brief at `Status: in_progress`, PR NOT opened, report to human with:\n- Count of unresolved P0\u002FP1 by severity per reviewer\n- Whether the failure mode was \"capped at 3 passes with findings still present\" or \"didn't converge (same set 2 passes in a row)\"\n- Number of passes attempted\n- Feature branch name so the human can pick it up manually\n\nThe first-pass-clean case (no P0\u002FP1 from the initial reviewers at Steps 4\u002F5) exits the loop immediately at Step 4 above — no extra reviewer spawns paid.\n\n**Cost note:** in the worst case this triples the pre-PR reviewer cost (3× fresh-subagent `\u002Fdev-reviewer` + 3× fresh-subagent `\u002Fdev-review` + 3× full verify re-runs). Most briefs exit on pass 1 (no P0\u002FP1 from initial review). Briefs that hit 3 passes are precisely the briefs worth spending on before opening a PR — the alternative is a human fighting the same fight on a dirty PR.\n\n### 7. Commit and push the feature branch\n\n- Stage only files relevant to the brief (never `git add -A` blindly)\n- Commit message: one-line summary matching the brief, followed by the brief filename\n  ```\n  \u003Ctype>(\u003Cscope>): \u003Csummary>\n\n  Brief: docs\u002Fbriefs\u002F\u003Cslug>.md\n  ```\n- Push with `-u origin feature\u002F\u003Cslug>` to set upstream\n\n### 8. Open PR\n\n- Base: `main`\n- Head: `feature\u002F\u003Cslug>`\n- Title: under 70 chars, matches brief summary\n- Body MUST contain (in order):\n  1. **Summary** — 1–3 bullets\n  2. **Test plan** — bulleted markdown checklist\n  3. `brief:\u003Cslug>` token on its own line — load-bearing for `\u002Fdrain-queue`'s GC pass and dependency-eligibility query (parsed via regex from PR body)\n  4. `Brief: docs\u002Fbriefs\u002F\u003Cslug>.md` line — link to the brief\n  5. `### Known follow-ups` (if any P2\u002FP3 findings exist)\n- Use `gh pr create --base main` with HEREDOC body\n\n### 9. Add `**PR:** \u003Curl>` line to the brief on the FEATURE BRANCH\n\nThis is informational documentation, NOT a load-bearing signal. The authoritative in-flight signal is `gh pr list` (queried by `\u002Fdrain-queue`'s GC pass). The `**PR:**` line survives any merge strategy because it's part of the feature branch's diff.\n\n- In-place edit `docs\u002Fbriefs\u002F\u003Cslug>.md`: insert a new line `**PR:** \u003Curl>` directly under the `**Status:**` line. Status itself stays `in_progress`.\n- `git add docs\u002Fbriefs\u002F\u003Cslug>.md`\n- `git commit -m \"chore(brief): add PR link to \u003Cslug>\"`\n- `git push origin feature\u002F\u003Cslug>` — feature branch only, NOT to `main`\n\n**Branch hygiene:** the autopilot stays on `feature\u002F\u003Cslug>` after this step. No checkout dance to `claim-tmp` or anywhere else. Step 10 (Report) runs from the feature branch context.\n\n### 10. Report\n\nOutput to the user (last message, since intermediate messages collapse):\n- PR URL\n- Brief now at `**Status:** in_progress` with `**PR:** \u003Curl>` line on the feature branch\n- Reviewer findings: count by severity per reviewer\n- P2\u002FP3 follow-ups noted in the PR body (if any)\n- Any spike-test flag from step 2 (\"Builder added external API integration; verify spike test ran\")\n- Any questions parked in the brief (if `\u002Fdev-builder` flagged ambiguities mid-build)\n\n## Guardrails\n\n- **Never merge the PR.** The merge is the human taste gate — it's where `Status: in_progress` becomes `complete` (via `\u002Fdrain-queue`'s next GC pass).\n- **Never run migrations** (`pnpm db:push`, `drizzle-kit migrate`, `supabase db push`) — pre-flight step 2 hard-stops.\n- **Never modify files outside the brief's scope.** If you notice drift, record it in `docs\u002Finsights\u002F` (per `docs\u002Finsights\u002F043-knowledge-maintenance-at-point-of-contact.md`: Builder flags, Architect fixes) and move on.\n- **Never `--force`, `--no-verify`, or `reset --hard`.** If you're tempted, stop and ask.\n- **Stop on first real failure.** Cascading past a broken state corrupts the queue.\n- **Maker-checker is procedurally enforced via fresh subagents.** Steps 4 and 5 MUST use the Agent \u002F Task tool, NOT inline review in the Builder's conversation.\n- **`\u002Fautobuild` does NOT enumerate `\u002Fdev-builder`'s verify steps.** Step 3 invokes `\u002Fdev-builder` and trusts its MUST list. Adding a redundant verify step here weakens the contract.\n- **`\u002Fautobuild` does NOT push to `origin\u002Fmain`.** Step 9 pushes to the feature branch. The only push to `origin\u002Fmain` in the autopilot system is `\u002Fdrain-queue`'s claim and GC pass.\n\n## Failure Modes\n\n| Symptom | Action |\n|---------|--------|\n| Pre-condition fails | Report and exit without touching anything |\n| Pre-flight hard-stop (drizzle\u002Fmigration) | Brief stays `Status: in_progress`; report; exit |\n| `\u002Fdev-builder` ambiguity-flagged | Question parked in brief by Builder; brief stays `Status: in_progress`; exit |\n| Tests\u002Fbuild fail (per `\u002Fdev-builder`'s contract) | Brief stays `Status: in_progress`; report with failure detail; exit |\n| Reviewer P0\u002FP1 not converged in 3 passes (or non-convergent set) | Brief stays `Status: in_progress`; PR NOT opened; report with pass count + failure mode + branch name; exit |\n| Verify step regresses inside Step 6 fix loop and can't be resolved in same pass | Brief stays `Status: in_progress`; PR NOT opened; report; exit |\n| `gh pr create` fails | Branch is pushed; report and exit so user can open PR manually |\n| Multiple `Status: in_progress` briefs (no `$ARGUMENTS`) | Ask user to pick one; never guess |\n",{"name":5,"description":7,"argument-hint":42,"disable-model-invocation":43},"[brief-name]",true,"main","b033b1a8919dbb7c98e97cf24547a2416f65b53e",".catalyst\u002Fskills\u002Fautobuild",0,"https:\u002F\u002Fgithub.com\u002Flaunchpathventures\u002Fditto-os","https:\u002F\u002Fgithub.com\u002Flaunchpathventures","2026-06-08 19:31:48",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":43},[53,56,59],{"tool":54,"command":55},"npx","npx skills add launchpathventures\u002Fditto-os --skill autobuild",{"tool":57,"command":58},"bunx","bunx skills add launchpathventures\u002Fditto-os --skill autobuild",{"tool":60,"command":61},"pnpm","pnpm dlx skills add launchpathventures\u002Fditto-os --skill autobuild","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flaunchpathventures\u002Fditto-os\u002Fblob\u002Fmain\u002F.catalyst\u002Fskills\u002Fautobuild\u002FSKILL.md",[64,70,74,78,82,86,90,94,100,104,108,112,116,120,126,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"README.md","REFERENCE","参考文档",2772,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002FREADME.md",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"references\u002Fastro.md",2439,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Freferences\u002Fastro.md",{"path":75,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Fhugo.md",1459,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Freferences\u002Fhugo.md",{"path":79,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Fnextjs-app.md",2871,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Freferences\u002Fnextjs-app.md",{"path":83,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":84,"sourceHtmlUrl":85},"references\u002Fnextjs-pages.md",1947,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Freferences\u002Fnextjs-pages.md",{"path":87,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":88,"sourceHtmlUrl":89},"references\u002Fsveltekit.md",2362,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Freferences\u002Fsveltekit.md",{"path":91,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Fvanilla-html.md",1939,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Freferences\u002Fvanilla-html.md",{"path":95,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":98,"sourceHtmlUrl":99},"scripts\u002Fauth-probe.sh","SCRIPT","脚本",5171,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Fscripts\u002Fauth-probe.sh",{"path":101,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":102,"sourceHtmlUrl":103},"scripts\u002Ffetch-secret.sh",3025,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Fscripts\u002Ffetch-secret.sh",{"path":105,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":106,"sourceHtmlUrl":107},"scripts\u002Fpersist-skill.sh",2117,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Fscripts\u002Fpersist-skill.sh",{"path":109,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":110,"sourceHtmlUrl":111},"scripts\u002Fvalidate.sh",3721,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Fscripts\u002Fvalidate.sh",{"path":113,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":114,"sourceHtmlUrl":115},"scripts\u002Fwidget-create.sh",2437,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Fscripts\u002Fwidget-create.sh",{"path":117,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":118,"sourceHtmlUrl":119},"scripts\u002Fworker-deploy.sh",4083,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Fscripts\u002Fworker-deploy.sh",{"path":121,"resourceType":122,"resourceTypeDesc":123,"sizeBytes":124,"sourceHtmlUrl":125},"templates\u002Fworker\u002F.gitignore","OTHER","其他",89,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002F.gitignore",{"path":127,"resourceType":128,"resourceTypeDesc":129,"sizeBytes":130,"sourceHtmlUrl":131},"templates\u002Fworker\u002FLICENSE","LICENSE","许可证",1073,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002FLICENSE",{"path":133,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":134,"sourceHtmlUrl":135},"templates\u002Fworker\u002Fpackage.json",1075,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Fpackage.json",{"path":137,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":138,"sourceHtmlUrl":139},"templates\u002Fworker\u002Fpublic\u002Fpost-deploy.html",7209,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Fpublic\u002Fpost-deploy.html",{"path":141,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":142,"sourceHtmlUrl":143},"templates\u002Fworker\u002FREADME.md",9085,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002FREADME.md",{"path":145,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":146,"sourceHtmlUrl":147},"templates\u002Fworker\u002Fsrc\u002Ferrors.ts",749,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Fsrc\u002Ferrors.ts",{"path":149,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":150,"sourceHtmlUrl":151},"templates\u002Fworker\u002Fsrc\u002Findex.ts",7043,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Fsrc\u002Findex.ts",{"path":153,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":154,"sourceHtmlUrl":155},"templates\u002Fworker\u002Fsrc\u002Fobservability.ts",1140,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Fsrc\u002Fobservability.ts",{"path":157,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":158,"sourceHtmlUrl":159},"templates\u002Fworker\u002Fsrc\u002Ftypes.ts",2886,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Fsrc\u002Ftypes.ts",{"path":161,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":162,"sourceHtmlUrl":163},"templates\u002Fworker\u002Fsrc\u002Fvalidate.ts",3751,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Fsrc\u002Fvalidate.ts",{"path":165,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":166,"sourceHtmlUrl":167},"templates\u002Fworker\u002Ftest\u002Fdeploy.test.ts",2283,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Ftest\u002Fdeploy.test.ts",{"path":169,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":170,"sourceHtmlUrl":171},"templates\u002Fworker\u002Ftest\u002Fintegration.test.ts",3110,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Ftest\u002Fintegration.test.ts",{"path":173,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":174,"sourceHtmlUrl":175},"templates\u002Fworker\u002Ftest\u002Funit.test.ts",11447,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Ftest\u002Funit.test.ts",{"path":177,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":178,"sourceHtmlUrl":179},"templates\u002Fworker\u002Ftest\u002Fvalidation.test.ts",7027,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Ftest\u002Fvalidation.test.ts",{"path":181,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":182,"sourceHtmlUrl":183},"templates\u002Fworker\u002Ftsconfig.json",649,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Ftsconfig.json",{"path":185,"resourceType":96,"resourceTypeDesc":97,"sizeBytes":186,"sourceHtmlUrl":187},"templates\u002Fworker\u002Fvitest.config.ts",364,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Fvitest.config.ts",{"path":189,"resourceType":122,"resourceTypeDesc":123,"sizeBytes":190,"sourceHtmlUrl":191},"templates\u002Fworker\u002Fwrangler.toml",1385,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftemplates\u002Fworker\u002Fwrangler.toml",{"path":193,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":194,"sourceHtmlUrl":195},"tests\u002Fvalidation.md",2166,"https:\u002F\u002Fgithub.com\u002Fsanurb\u002F.dotfiles\u002Fblob\u002Fmain\u002Fconfig\u002Fpi\u002Fagent\u002Fskills\u002Fturnstile-spin\u002Ftests\u002Fvalidation.md",[197,214,233,238,243,248],{"skillNo":198,"name":199,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":201,"categories":202,"keywords":203,"publishedAt":37},"01M6ENJ12VWSMRZ4MW8550AG69","drain-queue","Cross-brief autopilot — claim the oldest ready brief whose Brief NNN deps are satisfied via atomic push, run \u002Fautobuild on each, stop when the queue is empty, blocked, or hits a failure.","https:\u002F\u002Fgithub.com\u002Flaunchpathventures\u002Fditto-os\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdrain-queue\u002FSKILL.md",[],[204,205,206,5,207,22,208,209,210,211,212,32,34,213],"drain queue","queue","deps","via","empty","claim","max","stop","ready","run",{"skillNo":215,"name":216,"nameZh":6,"description":217,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":218,"categories":219,"keywords":220,"publishedAt":37},"01M6ENHXG16WJ4PN8CJHZYNT5T","dev-review","Post-coding exhaustive review — catches integration bugs, runtime crashes, performance issues, and convention drift across all changed files","https:\u002F\u002Fgithub.com\u002Flaunchpathventures\u002Fditto-os\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdev-review\u002FSKILL.md",[],[35,221,222,223,224,225,226,227,228,229,230,231,232],"dev review","review","coding","integration","issues","performance","fix","post","runtime","across","drift","files",{"skillNo":234,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":235,"categories":236,"keywords":237,"publishedAt":37},"01M6ENHSZBZFSB69TSV2TWGRJ1","https:\u002F\u002Fgithub.com\u002Flaunchpathventures\u002Fditto-os\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fautobuild\u002FSKILL.md",[],[5,25,18,31,26,24,19,20,23,21,22,27,29,30,32,33,34,35,36,28],{"skillNo":239,"name":199,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":240,"categories":241,"keywords":242,"publishedAt":37},"01M6ENHPWYMN66EYQBV56HP9CW","https:\u002F\u002Fgithub.com\u002Flaunchpathventures\u002Fditto-os\u002Fblob\u002Fmain\u002F.catalyst\u002Fskills\u002Fdrain-queue\u002FSKILL.md",[],[205,204,32,34,213,206,5,207,22,208,209,210,211,212],{"skillNo":244,"name":216,"nameZh":6,"description":217,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":245,"categories":246,"keywords":247,"publishedAt":37},"01M6ENHM3W1A0MY44ZD8D4NWVF","https:\u002F\u002Fgithub.com\u002Flaunchpathventures\u002Fditto-os\u002Fblob\u002Fmain\u002F.catalyst\u002Fskills\u002Fdev-review\u002FSKILL.md",[],[221,222,35,223,228,229,230,231,232,227,224,225,226],{"skillNo":249,"name":250,"nameZh":6,"description":251,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":252,"categories":253,"keywords":254,"publishedAt":37},"01M6ENHBWGWPCR07Y9W1CTTMNE","typeset","Improves typography by fixing font choices, hierarchy, sizing, weight, and readability so text feels intentional. Use when the user mentions fonts, type, readability, text hierarchy, sizing looks off, or wants more polished, intentional typography.","https:\u002F\u002Fgithub.com\u002Flaunchpathventures\u002Fditto-os\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Ftypeset\u002FSKILL.md",[],[250,255,256,257,258,259,260],"type","readability","typography","use","user","text"]