---
# MASTER_PLAN — Pickle Rick Engineering Lifecycle

**Updated 2026-06-02.** Live ledger the babysitter (`prds/babysitter.md`) drains each tick — kept lean on purpose (re-read every 30 min). Shipped releases + closed-finding detail live in `MASTER_PLAN-archive.md` and `git log`.

**2026-06-02 — FULLY DRAINED (incl. feature epics).** Bug bundles + feature epics all shipped/closed. B-SMAF v1.92.2 (closer partial-ship babysitter-completed). B-HERMES (row 16) closed ALREADY SHIPPED. B-CBI (row 17) shipped **v1.93.0** (grok + kimi native-CLI backends, measure-first, closer self-shipped through a manager-relaunch). B-GFR2 (row 18) closed: its original 27 'outside T0–T15' carve-outs (commit 7bf3263) are already remediated (eslint green, 0 marker carve-outs); the 15 newer 'HT-1 reviewed' carve-outs are accepted reviewed debt in core orchestrator files — operator decided NOT to refactor (low-value/high-churn). **15 releases this session (v1.89.0–v1.93.0).** Residue (NON-actionable): B-DWF-2 ⏸️ shelved + #25 R-CSI external-gated.

**2026-06-06 — NEW P1 filed (B-ORSR, drain row 28). Plan no longer fully drained.** The LOA-907 babysitting session (`2026-06-04-0204150f`, loanlight-api, codex, 26 tickets) shows that even with B-GNXR v1.101.0 shipped, the pipeline parks on `closer_handoff_terminal` after a **single** non-progressing iteration and needs a human recovery on essentially every non-trivial ticket — design-level over-sensitivity the point-fixes don't address. The run produced good work (incl. 7 HIGH data-flow parity fixes in anatomy-park) but carried autonomy on a babysitter. Source/plan: `prds/p1-bug-bundle-b-orsr-oversensitive-recovery-statemachine.md` (#100 R-CHTS + #101 R-ONPD + #102 R-PDUP + #103 R-SFRS).

## Status

| Item | Value |
|---|---|
| Version (source/deployed) | **v1.96.0** — 2026-06-03 |
| Latest GitHub release | v1.96.0 (v1.81.1..v1.96.0 all tagged) |
| Active pipeline | **NONE — FULLY DRAINED (incl. feature epics).** Last shipped: **B-GEMINI** ✅ v1.95.0 (row 20) — gemini 0.32.1 native-CLI Shape-B backend (measure-first; `buildGeminiWorkerInvocation` + `resolveGeminiModel` + `state.gemini_model` + ENOENT handler + `--teams` reject; INV-SWARM-OFF/INV-MCP-DEFER/INV-TRANSPARENT). Closer self-shipped through a 1/20 manager relaunch. **gemini was the last installed unwired agentic CLI → the clean autonomous backend-drop-in drain is now EXHAUSTED** (remaining backend work is operator-gated: DeepSeek Shape-B needs an OpenCode/OpenClaw harness choice + binary install; Shape-D kimi-swarm research-delegate is moot — measurement disproved the opaque-server-swarm premise; per-instance MCP follow-ups are unrequested polish). Prior: **B-MFW** ✅ v1.94.0 (row 19) — MCP forwarding to workers/managers/refinement (`--mcp-config` Option A for claude, Option-D setup-time snapshot for codex, `worker_mcp_config_resolved` event, real-subprocess integration proof + AC-8 trap door); judges stay sandboxed, `--ignore-user-config` intact. Prior: **B-CBI** ✅ v1.93.0 (row 17) — grok + kimi native-CLI Shape-B backends, measure-first per instance, closer self-shipped through a manager-relaunch (2/20). B-GFR2 (row 18) closed: original 27 carve-outs remediated (eslint green); 15 residual reviewed carve-outs left as accepted debt per operator (core-orchestrator churn not worth it). **15 releases this session (v1.89.0–v1.93.0); 3 stale findings closed (B-MONITOR/R-PSAI/B-HERMES); 1 workflow bug found+fixed (B-DWF soak). Prior residue: B-DWF-2 ⏸️ SHELVED (row 13): its hard-gate soak surfaced a real workflow bug (ManifestSchema `format:date-time` rejected by Workflow-runtime AJV) → **FIXED standalone in `e1c322f2`** (landed on main; improves the opt-in workflow); the post-fix re-soak got all 3 analysts green but stalled on undefined synthesis input paths (soak-harness invoked the workflow without `args` — workflow code is correct). Retiring the safe-default legacy refinement path is low-value + not justified on a soak that can't cleanly validate → shelved, legacy path retained (zero regression). The soak's findings were converted to shipped hardening: **v1.92.1** tags the date-time fix + a fail-fast arg-validation guard in `refine-analyze.js`. **12 releases shipped this session (v1.89.0–v1.92.1); 2 stale findings closed; 1 workflow bug found+fixed via soak.** Residue = NON-actionable: B-DWF-2 (needs a reliable soak harness that passes `args` before re-attempt) + #25 R-CSI (external-event-gated forensics). |
| Codex backend | `gpt-5.4` |

**Priority directive:** drain bug bundles before feature epics; P1 > P2 > P3. All feature epics (R-PGI v1.83.0 / R-PIAP v1.84.0 / R-DC v1.85.0) are shipped.

**Autonomy directive (2026-05-30):** the babysitter drains the ENTIRE plan with zero operator interaction — including the full release cycle (`git push` + `gh release create`), gated only on a green release gate + clean tree. Nothing here should require operator interaction. Sole permitted residue: external-event-gated work (#25 R-CSI needs a real concurrent-session incident to analyze).

---

## Drain Queue

The ordered worklist. Each tick the babysitter takes the top non-blocked row, launches its PRD (or authors one from the source in **Open Findings**, then launches), ships it through release, and repeats. Bugs before features, P1 > P2 > P3.

| # | Bundle | Pri | Open findings | PRD / source | Size |
|---|--------|-----|---------------|--------------|------|
| 38 | **B-V2RG** v2 release-gate findings (4 fixed in-flight + 3 open) | P2 | release takeover surfaced parseVersion test-drift (fixed c8d893ad), gate-wiring canonical drift (c57a8e08), CI shallow-checkout (c77f9950), CI c=8 oversubscription (R-TCC-1 3a3619d5); OPEN: review-hammer cross-file blind spot, codegraph handshake serialization, b0111894 install.sh gap | `prds/bug-v2-release-gate-findings.md` | M |
| 37 | **B-PDBL** phantom-Done backfill on inferred completion + dirty-tree relaunch block | P1 | C9 completion_commit_inferred drove 3433 phantom-Done backfills → 1.9MB state.json (toward 20MB freeze); trim-recovery then FATAL-blocked by C10 dirty-tree at relaunch; babysitter made C9 completion explicit + trimmed activity (7322→156) + committed C10 (d6e4732a) + relaunched (iter 9, 19 done); fix = promote-once inferred→explicit + cap activity + dirty-tree self-heal | `prds/bug-phantom-done-backfill-on-inferred-completion-plus-dirty-tree-relaunch-block.md` | M |
| 36 | **B-XSPA** external SIGTERM → premature phase-advance on partial build | P1 | 2nd external SIGTERM (01:58Z) killed the pickle phase at 16/25; pipeline-runner read exit-0 and ran citadel+anatomy on a 60%-built bundle (R1/wiring/reviews unbuilt); anatomy auto-commit orphaned C6; babysitter reattached C6 (46db064a) + reset to PHASE 1 PICKLE + relaunched (iter 4); fix = gate pickle-completion on all-tickets-Done, not mux exit code | `prds/bug-external-sigterm-premature-phase-advance.md` | L |
| 35 | **B-XCOF** external cancel orphans committed ticket + marks Failed | P2 | external SIGTERM to pipeline-runner wrote the cancel marker, marked the already-committed C3 ticket Failed, and reset HEAD off its good commit ac5c4f51 (orphaned); babysitter ff-only reattached + marked Done + relaunched (iter 80); fix = cancel teardown must not Failed-flip/reset a committed ticket, deploy H1 auto-reattach to the resume seam | `prds/bug-external-cancel-orphans-committed-ticket-marks-failed.md` | M |
| 34 | **B-HRPW** post-rate-limit research-to-plan wedge + cross-session signature pollution | P2 | thin post-resume quota wedged large H1 producing only research across 5 spawns; zero_progress reached 4 (1-2 iters from a B-LERD run-exit); NEW: a concurrent peer session dirty prds/ files polluted this session's last_source_signature; babysitter cleared counter + relaunched (iter 68); fix = scope signature to ticket paths + phase-aware/rate-limit-grace no-progress | `prds/bug-h1-research-plan-wedge-and-cross-session-signature-pollution.md` | M |
| 33 | **B-MRSW** mid-pipeline re-login strands completed worker | P2 | operator /login+/model mid-run hung the in-flight H4 worker after it finished conformance; 46m verified work stranded behind a 0%-CPU idle mux; babysitter verified+committed (9c647ed3) + relaunched; fix = CPU-based liveness watchdog routes to the now-shipped silent-death salvage path | `prds/bug-midflight-relogin-strands-completed-worker.md` | M |
| 32 | **B-RLAR** rate-limit no-park/no-auto-resume | P1 | runner spawn-burns into a known five_hour wall, charges zero-progress to innocent tickets (composes with B-LERD), and never resumes at reset — 6h13m runtime lost 2026-06-11; babysitter committed in-flight H3 work (e4b6cdda) + relaunched | `prds/bug-rate-limit-no-park-no-auto-resume.md` | M |
| 31 | **B-LERD** ladder_exhausted exits run on Done ticket + citadel prd_path gap | P1 | mux exited stranding 24 Todo tickets behind a completed one (2026-06-11); WMW counter blind to Done status; citadel precondition unmet on --paused-created sessions; babysitter relaunched | `prds/bug-ladder-exhausted-exits-run-on-done-ticket.md` | M |
| 30 | **B-RFCB** validator forward-created citation blindness (readiness gate + refinement symbol auditor) | P2 | 3 incidents one session: symbol-audit 25 phantoms (run 1) + 5 residual incl. `(forward-created))` parse bug (run 2) + readiness 30/30 false positives → READINESS HALT; creation-heavy skip applied 2026-06-10; fix = extend R-FRA-6 shared module (bundle-creation index, grammar hardening, all-checker annotation honor) | `prds/bug-readiness-forward-created-citation-blindness.md` | M |
| ~~3~~ | **B-PNTR** ✅ SHIPPED v1.89.0 | — | #77 closed | `prds/p2-remove-non-tmux-pickle-loop.md` — extracted `_pickle-manager-prompt.md`, removed bare `/pickle`, schema-neutral. Closer caught + fixed a latent FATAL deploy bug (template was deployed one level too deep for the runtime resolver; added explicit install.sh cp). | done |
| ~~4~~ | **B-R-MMTR** ✅ SHIPPED v1.89.1 | — | #28 + #19 closed | `prds/p1-bug-fix-bundle-r-mmtr-closeout.md` — R-ICDM-2..7 conformance audits (already-shipped intactness confirmed) + R-MMTRH heal-script + closer. Schema-neutral. Closer (babysitter-completed) stripped a spurious reliability trailer from 273a2d68 that failed audit-fix-commits. | done |
| ~~4b~~ | **B-E2E** ✅ SHIPPED v1.89.6 | — | #19 R-MMTR-6 closed | `prds/p2-bug-fix-bundle-b-e2e-mmtr6.md` (built max-turns-relaunch E2E test: 6A fixture/6B harness/6C 3-scenario test/6D CI gate; schema-neutral). Source: `p1-mmtr-6-decompose-e2e-into-sub-tickets.md`. B-WEDGE mooted original fan-out AC. Closer (this session) serialized `install-ui-principles.test.js` to close a latent real-install concurrency flake (`ln: tsc: File exists` under parallel tier load); full gate (fast 5450✓ / integration 405✓ / expensive✓) green. | done |
| ~~5~~ | **B-GATE** ✅ SHIPPED v1.89.2 | — | #39 + #40 closed | `prds/p2-bug-fix-bundle-b-gate-verify-command-safety.md` — host-tool preflight (#39) + zsh shell-glob safety (#40) via shared `verify-command-safety.ts` wired into `ac-phase-gate.ts`/`convergence-gate.ts`, forward-protection lint, trap-door pins. Schema-neutral. Closer (this session) fix-forwarded a `containsUnquotedGlobHazard` eslint-complexity error and stripped a worker-hallucinated `Resolves: prds/p1-vsge.md` trailer from the R-VSGE-2 commit that failed audit-fix-commits. | done |
| ~~6~~ | **B-PPCD** ✅ SHIPPED v1.89.3 | — | #85 closed | `prds/p2-bug-fix-bundle-b-ppcd-pipeline-citadel-phase-list-drift.md` (doc-only: citadel-omitting 3-phase claim → real 4-phase in `pickle-pipeline.md` + `persona.md`; schema-neutral). Closer (babysitter) reconciled two `pickle-pipeline-skill.test.js` pins coupled to the old wording: trimmed line-1 description to ≤80 chars (kept citadel) and updated the Step 4 `--skip-*` regex to the 4-flag form. | done |
| ~~7~~ | **B-ACSG** ✅ SHIPPED v1.89.4 | — | #84 closed | `prds/p2-bug-fix-bundle-b-acsg-ac-shape-gate.md` (NARROW H1+H3: loosen field-bound matcher + `PICKLE_AC_GATE_DEBUG`, PRD-advisory/ticket-normative decouple + `--skip-ac-shape-gate`, LOA-727 regression fixture + monotonicity + negative-corpus, trap-door pin; schema-neutral). Closer (babysitter, this session) ff-reattached an orphaned R-ACSG-3 commit (spurious worker Failed-flip), fix-forwarded a missing `ac_shape_gate_bypassed` entry in `activity-logger.test.js`'s expected-events list, and ran the full gate (fast/integration-serial/expensive all green). | done |
| ~~8~~ | **B-WEDGE** ✅ SHIPPED v1.89.5 | P2 | #30 R-RSU | `prds/p2-bug-fix-bundle-b-wedge-rsu.md` (refinement over-collapse: analyst-prompt fan-out guidance + non-throwing over-collapse guard + regression; schema-neutral). Source: `p2-pickle-refine-section-umbrella-granularity-bug.md`. INDEPENDENT of B-ACSG. **SHIPPED v1.89.5 (2026-06-01).** | ~5 |
| ~~9~~ | **B-MONITOR** ✅ ALREADY SHIPPED v1.80.2 | — | #29 closed | NO BUNDLE NEEDED — stale finding note. All R-MWCL-1..7 shipped v1.80.2 (`7a22bfe1` etc.); pipeline anatomy/szechuan layout is correct via R-MDS `respawnMonitorWindowForMode`(phase→microverse) + `inferModeFromStep` render-tick (`monitor.ts:335`). Evidence: `prds/B-MONITOR-residual-assessment.md`. | done |
| ~~10~~ | **B-LSOF** ✅ SHIPPED v1.90.0 | — | #37e closed | `prds/p2-bug-fix-bundle-b-lsof-launch-git-probe.md` (extract fail-OPEN `probeConcurrentGitAccess` from cancel.ts lsof/pgrep pattern + advisory launch-time wire-in + `concurrent_git_access_detected` event; advisory-only). All 3 worker tickets self-completed (5.1/5.2/5.TD Done); closer babysitter-completed: full gate green at low concurrency (fast 5473✓ / integration 779✓ / expensive 13✓), recompiled a 1-line trap-door-comment drift in `git-utils.js`, **bumped MINOR (1.90.0) not the PRD's PATCH guess** — the new `concurrent_git_access_detected` event is a new event surface. | done |
| ~~11~~ | **R-PSAI** ✅ ALREADY SHIPPED v1.75.0 | — | #12 closed | NO BUNDLE NEEDED — stale finding. All 7 ACs (R-PSAI-1..7: scope auto-inference clause, Step 8 scope report, branch-divergence safety prompt, `lock-scope.js` recovery, `ensureMonitorWindow` watchdog, docs, regression tests) shipped v1.75.0 via `a159f959` (ticket `e789b21c`, 2026-05-09). Re-launched 2026-06-01 (session f2c93f0e) → workers found everything present, produced only 6 README doc lines. Verified in HEAD: scope clause (7), `lock-scope.js`, watchdog test, scope-inference regression tests (2). | done |
| ~~11b~~ | **B-LASP** ✅ SHIPPED v1.90.1 | — | #87 closed | `prds/p2-bug-fix-bundle-b-lasp-log-activity-schema-resolution.md`. Original framing wrong: install.sh has no schema logic and excludes `src/`, and the extension-root schema is a 112B `$ref` stub the resolver can't deref — so the deployed tree had **no real schema bytes**. The first R-LASP-1 attempt (root-first) loaded the hollow stub via naive `JSON.parse`, silently disabling validation and reddening `log-activity-gate-payload.test.js`. Closer re-scoped + re-shipped: resolver `[src/types-first, root-second]` (`922cdec2`) + install.sh copies the real schema to the deployed root, overwriting the stub; deploy-parity regression test `aaa6ae98` (R-LASP-2). Full gate green (fast 5476✓ c=4 / integration 13✓ / expensive✓). | done | ~2 |
| ~~12~~ | **B-DWF** (impl) ✅ SHIPPED v1.91.0 | P2 | (feature) | `prds/p2-dynamic-workflow-conversion-refine-prd-council.md`. R-DWF-1 spike PASSED; **R-DWF-2/4/5 shipped v1.91.0** (refine-analyze.js + council-round.js workflows + SUBAGENT_PAYLOAD_SCHEMA + skill wiring + tests, behind kill-switches; old subprocess paths remain default). R-DWF-5 mux-integration done at skill level (no mux-runner.ts edit → §27 B-PNTR concern moot). Full gate green (fast 5492 / integration 779 / expensive 13). **REMAINING (follow-up B-DWF-2):** R-DWF-3 (retire `spawn-refinement-team.ts` + watcher) is soak-gated — needs one green real-PRD soak of the workflow path first; R-DWF-6 (docs) depends on R-DWF-3. Allowlist additions = deployment-time operator decision. | done |
| 13 | **B-DWF-2** ⏸️ SHELVED | P3 | (feature — R-DWF-3/6) | `prds/p3-bug-fix-bundle-b-dwf2-retire-refinement-subprocess.md`. Hard-gate soak (R-DWF-3-SOAK) run twice: attempt 1 found a real workflow bug (`ManifestSchema format:date-time` rejected by Workflow-runtime AJV) → **FIXED standalone in `e1c322f2`** (on main); attempt 2 ran all 3 analysts green but the synthesis stalled on undefined input paths (soak-harness wiring, not workflow code). **SHELVED** — retiring the safe-default legacy refinement path is low-value and not justified on a soak that can't cleanly validate; legacy path retained (zero regression; workflow stays opt-in/default-off). **Re-attempt prereq:** a reliable soak harness that wires PRD/session/refinement paths + confirms the workflow emits a valid manifest end-to-end. | shelved |
| ~~14~~ | **B-DSEK** ✅ SHIPPED v1.92.0 | P3 | (feature) | `prds/deepseek-integration.md` — `'deepseek'` third backend (Anthropic-compat shim, honest identity; Shape A). 3 tickets: backend type+builder+dispatch (`5bdb9b0b`), 4-spawn-site env overlay (`8f6e4584`), setup.ts guards (`e2c1dc0d`). Launched directly (no refinement — PRD Technical Design mapped cleanly to tickets). Ticket-3 spurious-fail self-recovered. Closer (babysitter) fix-forwarded a complexity-16 eslint error via `resolveRemediatorCodexModel` extraction. Full gate green (fast 5507 / integration 779 / expensive 13). | done |
| ~~15~~ | **B-SMAF** ✅ SHIPPED v1.92.2 | — | #91 + #92 + #93 closed | `prds/p2-bug-fix-bundle-b-smaf-scoped-microverse-out-of-scope-autofix.md` (authored 2026-06-02 from the bug report). R-SMAF-1: scope-aware clean-tree precondition in `microverse-runner.ts` — `preflightAutoCommit` evaluates dirtiness only over `allowed_paths` via `filterByScope`, ignoring out-of-scope changes (`b1d406c4`). R-RSBI-2: `resolve-scope.ts` resolves git toplevel via `git rev-parse --show-toplevel` before `repoRoot`; split conflated dirty+no-git abort copy (`b829b643`). R-APXG-3: bounded the anatomy-park post-convergence exit gate via `POST_CONVERGENCE_GATE_DEFERRAL_LIMIT=3` (`4de60b79`). Schema-neutral → **PATCH** (no new event/flag — only an internal const). Closer (this session) fix-forwarded an eslint complexity-16 error on `handleWorkerMode` by extracting `handlePostConvergenceGateDeferral`; full gate green (fast 5516✓ c=4 / integration 781✓ / expensive 13✓). | done |
| ~~16~~ | **B-HERMES** ✅ ALREADY SHIPPED | — | — | `prds/hermes-integration.md`. NO BUNDLE NEEDED — verify-first confirmed shipped (R-PSAI class). hermes fully integrated in HEAD: `Backend` type + `BACKENDS` array include `'hermes'` (types/index.ts:160/164); `buildWorkerInvocation` hermes branch (backend-spawn.ts); 4 state fields (`hermes_toolsets/provider/model/max_turns`); generic dispatch at spawn sites via `buildWorkerInvocation(execBackend)`; `--teams` rejected for non-claude (setup.ts:658); dedicated tests `hermes-smoke.test.js` (10 assertions) + `hermes-lifecycle.test.js`; deployed in `backend-spawn.js`. | done |
| ~~17~~ | **B-CBI** ✅ SHIPPED v1.93.0 | P2 | (feature — R-CBI grok+kimi) | `prds/p2-bug-fix-bundle-b-cbi-grok-kimi-native-cli-backends.md`. grok 0.2.17 + kimi 1.38.0 wired as first-class Shape-B backends. R-CBI-GROK-1 measure (`be03f540`) → GROK-2 implement (`855d25c0`, `--no-subagents` swarm-off); R-CBI-KIMI-1 measure (`47a06505`) → KIMI-2 implement (`a73f1325`, INV-SWARM-OFF via `--agent-file kimi-no-swarm.yaml` since kimi has no `--no-subagents`). Both: `resolve{Grok,Kimi}Model`, `state.{grok,kimi}_model`, `*_binary_missing` ENOENT handler, `--teams` rejected by non-claude guard, honest identity. Closer (this session) fix-forwarded the AC-BUNDLE-17 gap — GROK-2/KIMI-2 added State fields without `INVARIANT:` clauses in `extension/CLAUDE.md`, masked by worker truncated test:fast, surfaced at the full gate. Full gate green (fast c=4 / integration / expensive). | done |
| ~~18~~ | **B-GFR2** ✅ CLOSED (original scope remediated) | P3 | — | `prds/god-functions-remediation-phase-2.md`. The 27 'outside T0–T15' carve-outs (commit 7bf3263) are GONE — remediated by attrition across later bundles; `grep "outside T0–T15" src/` = 0, eslint passes clean. PRD as-written is stale (R-PSAI class). A different set of 15 'HT-1 reviewed' complexity/max-lines carve-outs accumulated since (core files: mux-runner completion/timeout handlers w/ R-APMW-6/R-OMS-1 ordering sensitivity, spawn-morty, dot-builder, backend-spawn) — each individually justified/behavior-preserving/eslint-green. **Operator decided 2026-06-02: do NOT refactor them** (low-value cosmetic carve-out removal vs high churn/risk to the live orchestrator). Accepted reviewed debt. | done |
| ~~19~~ | **B-MFW** ✅ SHIPPED v1.94.0 | P2 | R-MFW (MCP forwarding) | `prds/p2-bug-fix-bundle-b-mfw-mcp-forwarding-to-workers.md` (authored 2026-06-02 from `prds/p2-mcp-forwarding-to-workers.md`). Workers/managers/refinement were MCP-blind (Linear-blindness; LOA-789). Unblocked by B-CBI v1.93.0. 7 tickets + closer all shipped: R-MFW-1 settings schema (`worker_mcp_config_path` + `worker_mcp_snapshot_servers`, `95587546`) → -2 claude `--mcp-config` Option A + shared `resolveMcpConfigPath` (`a4e3b797`) → -3 codex Option-D stub (`-c` injection infeasible; defers to snapshot; `--ignore-user-config` intact, `413db073`) → -4 setup-time MCP snapshot Option D (`2e7c7be2`/`28043c33`) → -5 refinement forwarding (`2385c2f4`) → -6 `worker_mcp_config_resolved` event (`bc8642c5`) → -7 real-subprocess MCP integration test + AC-8 trap door (`a8d0815f`, AC-MFW-7-1 proven green: live `claude -p` worker invoked a forwarded echo MCP server). Judges sandboxed (INV-SANDBOX-JUDGE); `--ignore-user-config` intact (INV-IGNORE-USER-CONFIG). Schema-neutral MINOR. Closer reconciled 2 stale tests (activity-event count 179→180; gitnexus-mcp omission test made hermetic vs R-MFW-2's `~/.claude.json` fallback) + cleared 3 c=8 concurrency flakes. Full gate green (fast c=4 5567/0 / integration 405/0 / expensive 14/0). Unblocks citadel NEW-T6 + R-PTG-7. | done |
| ~~20~~ | **B-GEMINI** ✅ SHIPPED v1.95.0 | P2 | R-CBI-GEMINI | `prds/p2-bug-fix-bundle-b-gemini-native-cli-backend.md` (authored 2026-06-02 from the R-CBI contract). gemini 0.32.1 (installed, unwired) wired as a first-class Shape-B backend — the canonical next `instances:` entry after grok+kimi (B-CBI v1.93.0). Measure-first: R-CBI-GEMINI-1 captured the `--help` surface (C1–C8 + swarm-disable flag, commit `da7025fc`) → R-CBI-GEMINI-2 implemented `buildGeminiWorkerInvocation` (`--approval-mode default --output-format stream-json -p`, INV-SWARM-OFF) + `resolveGeminiModel` + `state.gemini_model` + `gemini_binary_missing` ENOENT handler + `--teams` reject + AC-BUNDLE-17 INVARIANT clause + 12-assertion `gemini-backend.test.js` (commit `8dfa6856`; orphaned by a spurious worker Failed-flip, recovered via ff-only reattach). INV-SWARM-OFF / INV-MCP-DEFER / INV-TRANSPARENT inherited. Schema-neutral MINOR (new backend enum + state field). Full gate green (tsc/eslint/7 audits; fast c=4 5579/0, integration 405/0, expensive 14/0; CI-gated deploy soak self-skipped locally per design). | done |
| ~~22~~ | **B-CXOR** ✅ SHIPPED v1.96.0 | — | #94 R-CXOR closed | `prds/p1-bug-fix-bundle-b-cxor-codex-orphan-reset-2026-06-03.md`. Codex orphan-reset fix (from the `0ff3f112` incident). 3 tickets + closer all landed on CLAUDE backend: R-CXOR-1 post-iteration HEAD-regression detect+recover + `worker_head_regression_detected` event (`ac3bd250`) → R-CXOR-2 reject `completion_commit==baseline` as evidence (`1cbe4078`/`810a1457`) → R-CXOR-3 backend-agnostic git-boundary parity for codex + trap-door (`5e943e8e`/`1cbbad51`). Closer (babysitter takeover — manager stalled after R-CXOR-3 before the closer): fix-forwarded the stale `VALID_ACTIVITY_EVENTS` expected-list (180→181, `0e2a2887`). Full gate green (tsc/eslint/7 audits; fast 5589/0 c=2, integration 378/0 +1 isolation-clean heal-script timeout flake, expensive 14/0). Codex `/pickle-pipeline` now lands real work or fails loud — never orphan-advances. | done |
| ~~21~~ | **HS-SWEEP** — subsystem hardening sweep ✅ SHIPPED v1.97.0 | — | (sweep) | Operator-requested 2026-06-03. All **14 subsystems** hardened via per-subsystem `/anatomy-park` → `/szechuan-sauce` (standalone skills, scoped, claude backend, 600s szechuan judge timeout per #95 R-SJWT). Real bugs caught: **HS-6** completion_commit CRITICAL data-loss (`99910586`); **HS-11** ~10 CRITICAL/HIGH R-WSRC/tsc-gate command-parser security bypasses (&&/newline/git -C/-c/quoted-verb/env-prefix/boolean-flag/tilde-HOME); **HS-12** 4 CRITICAL Citadel audit-crash availability fixes; **HS-13** 2 HIGH (metrics-drops-4/7-backends + status recoverable-read); **HS-14** 2 HIGH council-publish markdown-injection. Plus dozens of DRY/deslop fixes across HS-1..5/7..10. Batched on main, single MINOR release **v1.97.0** (full gate green: tsc/eslint/7-audits/fast/integration/expensive; node-modules-reuse test synced to landed completion-commit behavior). Filed **#95 R-SJWT** (szechuan judge whole-tree timeout). Per-subsystem detail in **§ Subsystem Hardening Sweep** below. | done |

| ~~23~~ | **B-SJWT** — szechuan judge whole-tree scope ✅ SHIPPED v1.98.0 | P2 | #95 R-SJWT | `prds/p2-bug-fix-bundle-b-sjwt-szechuan-judge-whole-tree-scope.md` (authored 2026-06-04 from #95, surfaced during HS-SWEEP). Scoped szechuan judge scores the whole `extension/` tree not `allowed_paths` → judge_timeout + score-inflation. R-SJWT-1 scope judge prompt to allowed_paths; R-SJWT-2 default timeout 300→600; R-SJWT-3 convergence-to-0 regression + trap door; closer. Distinct from (shipped) #47 R-SJET spawn-hang. Schema-neutral MINOR. **SHIPPED v1.98.0 2026-06-04** (session `922b5750`): R-SJWT-1 (`eae41782`) + R-SJWT-2 (`cc005d9b`) + R-SJWT-3 (`2ef9c95b`) + C-SJWT-CLOSER (`4062f97b`) all Done; full gate green; bumped `92e17948`; released `v1.98.0`. | done |
| ~~26~~ | **HS-SWEEP-2** — full-system review hammer (post-B-HRP) ✅ SHIPPED v1.100.0 (all 14 subsystems anatomy+szechuan converged; 5 security fixes [HS-8 2 HIGH scope-resolver, HS-11 2 CRITICAL R-WSRC-3 redirect bypasses, HS-12 1 CRITICAL citadel diamond-cycle] + ~24 deslop; full gate green, AC-MFW-7-1 expensive-tier flake passed isolated) | P2 | (operator-requested 2026-06-04) | Per-subsystem `/anatomy-park` → `/szechuan-sauce` across all 14 subsystems of `extension/` (same HS-1..14 mapping + paths as § Subsystem Hardening Sweep below), claude backend, scoped (`--scope paths:<subsystem globs>`, `--target extension`). Now that **#95 R-SJWT** scopes the szechuan judge to `allowed_paths` (v1.98.0), scoped szechuan converges to 0 cleanly (no 600s workaround). Standalone phases (citadel NOT invoked — that runs only in /pickle-pipeline). Babysitter drives tick-by-tick: launch HS-N anatomy → converge → HS-N szechuan → converge → HS-(N+1). Real bugs land as commits; clean subsystems converge 0-finding. Single MINOR release at sweep end. Progress tracked in § HS-SWEEP-2 Progress. | ~28 phases |
| ~~24~~ | **B-HRP** — citadel fix-forward (replace halt-gate with remediation feed) ✅ SHIPPED v1.99.0 | P2 | (PR-review-gap analysis) | `prds/p2-feature-bundle-b-hrp-human-review-parity-automated-detection.md` (revised 2026-06-04 per operator: simplify, don't add brittleness). **Reframed from "add 15 detectors" to "stop citadel halting."** Today `pickle → citadel(HALTS) → anatomy → szechuan`; citadel is the only halting phase, sitting in front of two fix-forward loops. R-HRP-1: citadel never halts — findings convert to a `GateResult` and feed the EXISTING `spawn-gate-remediator` (same fixer finalize-gate uses), pipeline auto-fixes + continues. R-HRP-2: `CitadelFinding[]→GateFailure[]` adapter. R-HRP-3: leak detections (schema drift, auth/flag parity, test-authenticity, stale-ref, banned constructs/casts, PII) added as plain analyzers feeding that ONE path — no severity clamp/flags needed since nothing halts. R-HRP-4: fail-open guards for the 3 extended UNwrapped analyzers. **NET-DELETES complexity**: citadel halt path + severity-threshold, the old draft's Medium-clamp/`warn|block` flags/`B-HRP-PROMOTE`, 2 worker-gate shell scripts, redundant szechuan/anatomy prompt rows. Correctness gates (test/tsc/lint/convergence) still block broken code — only the conformance *halt* is removed. Schema-neutral MINOR. **status: draft — design finalized (operator chose reform-in-place); ready to launch.** | ~6 |
| 27 | **B-GNXR** — Remove GitNexus integration entirely (root-fix R-GNDT) + pipeline-runner robustness | P2 | #96 R-GNDT (resolved-by-removal) + #97 R-PFNP + #98 R-PRNF + #99 R-WCUC | `prds/p2-bug-fix-bundle-b-gnxr-gitnexus-removal.md` (authored 2026-06-04 from the LOA-907 bug report). **REPOINTED from B-GNDT (fix-in-place) → B-GNXR (full removal)** per operator decision 2026-06-04: rather than teach the graph-preflight to run non-mutatingly, **remove the GitNexus integration entirely** — kills #96 R-GNDT at the root (no `gitnexus analyze` mutator → no `CLAUDE.md`/`AGENTS.md` stat-drift → no `pipeline-runner` self-brick). Full teardown: `services/graph-preflight.ts` + setup/pipeline call sites, spawn-morty/spawn-refinement-team GitNexus context + MCP injection (B-MFW generic MCP forwarding preserved), `graph_preflight_*` activity events, `.claude/skills/gitnexus/`, command refs (council-of-ricks/portal-gun/help-pickle), docs (CLAUDE.md/AGENTS.md/COMMANDS.md/README.md/roadmap.md/internals.md), `.gitnexus/` index dir + `mcp__gitnexus__*` perms. Kept (GitNexus-independent robustness): **#97 R-PFNP** (dirty-tree ignore matches docs/prds at any depth) + **#98 R-PRNF** (readiness-halt = hard pickle failure, never report a zero-build run as `completed`). 7 removal tickets + 2 robustness tickets + closer. Schema-neutral MINOR (removes events/skills/feature; old state.json stays readable). Supersedes `p2-pipeline-graph-intelligence` + `p2-codegraph-integration`. **✅ SHIPPED v1.101.0 (2026-06-05) — all 10 work tickets landed (R-GNXR-1..7, R-PFNP-8, R-PRNF-9, R-WCUC-10); closer-takeover: worker committed R-PRNF-9 impl `d53f20e5` but exhausted iters before tests → babysitter authored AC-PRNF-9 regression tests + reconciled activity-events graph_preflight removal, full gate green (fast 5646/0, integration 792/0, expensive 14/0), bumped 1.100.0→1.101.0, install.sh, push, release. Closes #96/#97/#98/#99.** | ~10 |
| 28 | **B-ORSR** — over-sensitive recovery state machine + decomposition/scope flakiness | **P1** | #100 R-CHTS + #101 R-ONPD + #102 R-PDUP + #103 R-SFRS | `prds/p1-bug-bundle-b-orsr-oversensitive-recovery-statemachine.md` (authored 2026-06-06 from the LOA-907 babysitting session `2026-06-04-0204150f`). **DESIGN-LEVEL parent of B-GNXR** — even with R-WCUC/R-PRNF/R-PFNP/R-GNDT shipped (v1.101.0), the pipeline parked + waited for an operator on essentially every non-trivial ticket of a 26-ticket epic (`closer_handoff_terminal` on `consecutive_failed_iterations==1`). Replace the single-iteration terminal park with a native recovery ladder (commit-and-continue / fix-forward-trivial / execute-converged-plan / auto-split / escalate→`recovery_exhausted`); split the `oversized_no_progress` taxonomy (`plan_converged_uncommitted` vs `no_work_produced`); reconcile phantom split-original roster duplicates at order 996–999 (R-PDUP); add a refiner decomposition-quality flag for `large`/open-ended tickets (R-ONPD, recurrence ≥6× in one epic); scope-fenced interface change → repo-wide consumer sweep + no-disown-self-introduced-break guard (R-SFRS). **NOT schema-neutral** (new `exit_reason` set + `recovery_attempts[]` ledger → schema bump + back-compat read). Composes ON TOP of B-GNXR; does NOT re-implement it. Operationalizes memory `feedback_pickle_rick_autonomy_north_star`. **✅ SHIPPED v1.102.0 (2026-06-06) — claude/closer authority.** All 7 work tickets landed: R-ORSR-1 (1b8f122e), R-ORSR-2 RecoveryController+ladder+7/7 guard-clear parity wired at the closer_handoff authority (ebc4c239), R-ORSR-3 oversized taxonomy `plan_converged_uncommitted` (3baf038b), R-ORSR-4 phantom split-original auto-close w/ explicit completion_commit (c119b78c), R-ORSR-5 refiner decomposition-quality flag (337c5157), R-ORSR-6 no-self-disown (in R-ORSR-2 commits), R-ORSR-7 recovery-ladder e2e suite 6/6 INV green (3067b9c3). Achieved schema-neutral at v5 (`recovery_attempts[]` optional+defaulted via normalizeV5StateDefaults — NO bump needed; MINOR version). Full gate green (fast 5710/0 @c4, integration 803/0, expensive 14/0). **Heavily babysitter-driven** (the R-CHTS/R-ONPD bug it fixes wasn't live, so its own large tickets parked repeatedly — recovered via clear-tracker-nudge / recompile-commit catch-22 break / 0-byte-log hand-build-via-subagent; see [[project_b_orsr_recovery_state_machine_ship]]). **DEFERRED → #104 R-CHTS-CODEX (row 29):** the codex no-progress authority seam (`haltOrRecoverCodexNoProgress`) is built but its 4 `codex_manager_no_progress` halt sites are not yet routed through it. Closes #100/#101/#102/#103. | ~8 |
| 29 | **B-CHTS-CODEX** — wire the codex no-progress authority through the RecoveryController seam | P2 | #104 R-CHTS-CODEX | Deferred from B-ORSR R-ORSR-2 (shipped v1.102.0 with the claude/closer authority only). The recovery ladder seam `haltOrRecoverCodexNoProgress` is BUILT in `extension/src/bin/mux-runner.ts` (~:3733) but its 4 `codex_manager_no_progress` halt sites do NOT yet call it, so codex-backend pipelines still park on the over-sensitive trigger (the original LOA-907 incident was codex). Wire each of the 4 sites through the seam — branch `advanced`→relaunch / `recovery_exhausted`→honest terminal / `halt`→existing park — then REMOVE the `eslint-disable-next-line @typescript-eslint/no-unused-vars` babysitter checkpoint comment above the function (it becomes used). Add a codex-authority integration test (scripted worker, no real codex). Schema-neutral, MINOR. **✅ SHIPPED v1.103.0 (2026-06-06)** — babysitter hand-built via subagent (4317939c): all 4 codex_manager_no_progress halt sites (processCompletionBranch inactive/error + runMuxRunnerMain inactive/error) wired through `haltOrRecoverCodexNoProgress` (advanced→relaunch / recovery_exhausted→terminal / halt→park); eslint-disable removed (seam now used). Regression-guarded 228/228 (iteration-outcome+microverse-codex+mux-runner), parity 10/10, scripted codex-authority integration test 3/3, full gate green (fast 5710/0 @c4, integration 806/0, expensive 14/0). Completes B-ORSR's codex authority (the original LOA-907 incident was codex). Closes #104. | ~2 |
| 30 | **B-WMNP** ✅ SHIPPED v1.105.1 — wmw-auto-skip no-progress loop (source-blind + uncapped + relaunch order-deadlock) | P2 | #106 R-WMNP | **✅ SHIPPED v1.105.1 (2026-06-09) — 4 tickets, MANAGER-HAND-BUILT (the build's own claude -p workers died silently from the v1.105.0 worker-spawn regression #108; the mux MANAGER hand-built all 4). Landed: AC-1 source-delta progress signal (computeSourceTreeSignature OR'd w/ artifact count, 91df2637), AC-2 per-ticket cap repopulation (d1fc233b), AC-3 clear current_ticket on no-progress flip (0678d80d), AC-4 route wmw-auto-skip through RecoveryController ladder (d26eb66b). Babysitter release gate caught + fixed 1 audit-test-isolation drift (PICKLE_DATA_ROOT sandbox in wmnp-source-progress test, 2d814158). Full gate green (tsc0/eslint0err/7 audits, test:fast 5807/0 @c4, integration 417/0, expensive 14/0), bump 1.105.0→1.105.1 PATCH, install.sh deployed, push, gh release v1.105.1. Closes the wmw-wedge that hit T3 + 05e86ab7 during R-RGED #105.** `prds/p2-bug-fix-bundle-r-wmnp-no-progress-cap-orderdeadlock.md` (authored 2026-06-08 from live babysitting incident, session `2026-06-08-ce6ae444`, ticket `1c1d094c` during the R-RGED #105 build). **Uncovered path of shipped #99 R-WCUC + #100 R-CHTS:** R-WCUC commits only *gate-PASSING* uncommitted work; R-ORSR's ladder fires only on `closer_handoff_terminal`. The `wmw-auto-skip` no-progress trigger flips a **near-green** ticket `Failed/oversized_no_progress` and **respawns in-phase** (never reaching the recovery ladder), the per-ticket cap is **perpetually skipped** (`stale cache, max_iter=undefined`) so the loop is unbounded, and `current_ticket` is left set → relaunch **order-deadlock**. 4 ACs (source-delta progress signal, repopulate per-ticket cap, clear current_ticket on flip, route through ladder) + lint/typecheck. Schema-neutral MINOR. | ~5 |
| 31 | **B-MWIS** ✅ SHIPPED v1.105.0 — mux-runner worker-exit idle-stall (silent hang, completed work stranded) | **P1** | #107 R-MWIS | **✅ SHIPPED v1.105.0 (2026-06-09) — 3 tickets, ZERO recoveries, mux exited success 69m. Landed: AC-R-MWIS-1 process-exit primary completion signal (b63bd763), AC-R-MWIS-2 mux idle-stall watchdog + mux_idle_stall_detected event + self-recovery (7e352679), AC-R-MWIS-3 commit-completed-work-on-exit (036a05eb). Babysitter release gate caught + fixed 1 drift (activity-logger.test.js event-count 180→181, 7a268aca — the /pickle-tmux build had no closer phase to catch it). Full gate green (tsc0/eslint0err/7 audits, test:fast 5797/0 @c4, integration 417/0, expensive 14/0), bump 1.104.0→1.105.0 (40cc405e→c80265eb), install.sh deployed the fix LIVE, push, gh release v1.105.0. The idle-stall that needed 3 manual recoveries during R-RGED #105 is now fixed in the runtime.** `prds/p1-bug-fix-bundle-r-mwis-mux-worker-exit-idle-stall.md` (authored 2026-06-08 from live babysitting incident, session `2026-06-08-ce6ae444`, ticket `548559f1` T5 during the R-RGED #105 build). **Distinct from #99/#106 — the mux reaches NO detector:** a worker exited after producing the complete gate-passing AC-6 deliverable (22/22 green, uncommitted), but the mux-runner sat at **0% CPU idle** and never observed the exit — no `Iteration N+1`, no respawn, no auto-skip, no event, ~30min silence, no rate-limit/breaker/error; the worker's session log was 0 bytes (silent exit). Root hypothesis: worker-completion keys on a log-emitted token/stop-hook instead of the child-process exit code, so a 0-byte-log exit hangs the wait forever. 4 ACs (process-exit as PRIMARY completion signal, mux idle watchdog + `mux_idle_stall_detected` event, commit completed work on exit path via #99, lint/typecheck). Schema-neutral MINOR (1 new event). | ~5 |
| 32 | **B-WPEX** ⏸️ MONITOR (no live repro; analysis: not a v1.105.0 regression) — worker spawns died silently (0-byte logs) during B-WMNP build | P3-monitor | #108 R-WPEX | **⏸️ MONITOR (reconciled 2026-06-09, downgraded from P1):** no actionable worker-spawning bundle remains to repro it (B-HERMES + B-DWF were verify-only dead PRDs, zero workers); code analysis is decisive it is NOT the R-MWIS mux exit-handler (the 0-byte `worker_session` is spawn-morty's domain, not the mux pipe), likely transient API load during B-WMNP's concurrent build. REOPEN as P1 only if real workers die silently on an idle system. `prds/p1-bug-fix-bundle-r-wpex-worker-silent-death.md` (filed 2026-06-09 from B-WMNP #106 build, session `2026-06-08-f5131cfa`). During B-WMNP (first bundle on the v1.105.0 runtime) every `claude -p` WORKER spawn died silently (0-byte `worker_session` logs, zero artifacts, ~3-4min then exit) → circuit_open; the mux MANAGER worked fine + HAND-BUILT all 4 tickets (how B-WMNP shipped). **NEEDS A REAL-WORKER REPRO before fixing** — two candidates: (1) v1.105.0 R-MWIS `b63bd763` exit-primary completion (`proc.on('exit')`+250ms drain) truncating healthy workers — but static review shows a `settled` guard + `'close'` short-circuit, so NOT obviously a regression; (2) transient load (this session ran 3 bundles + many bg test suites over ~7h). Repro = launch the next bundle on v1.105.1 + watch worker output; if workers still die idle → confirm candidate 1 + fix (keep `'close'` primary, `'exit'`+30-60s fallback for no-hang, NOT 250ms; preserve R-MWIS mux-silent-worker-exit invariant). Workaround: manager hand-build (functional but slow). 3 ACs. | ~3 |
| 33 | **B-ITIH** ✅ SHIPPED v1.106.0 — integration-testing isolation + timeout/coverage hardening | P2 | #109 R-ITIH | `prds/p2-bug-fix-bundle-r-itih-integration-test-isolation-hardening.md` (filed 2026-06-09 from a read-only agent-team re-examination of the integration-testing approach, triggered by a live R-WTIV incident). **The active data-loss vector is ALREADY FIXED (`7bfa27f6`):** `gate-skip-activity-events.test.js` wrote `working_dir: REPO_ROOT` + spawned the real mux-runner, whose gate-passing exit path ran `git -C REPO_ROOT add -A && commit` + `resetToSha` against the real repo (swept the operator's uncommitted tree into a rogue `fix(ok0001)` commit; recovered). This bundle closes the CLASS + the systemic debt the incident exposed: 6 ACs — (1) audit-test-isolation.sh working-tree guard [priority], (2) mux-runner.ts validate-or-halt instead of `\|\| process.cwd()` + PICKLE_TEST_MODE git-mutation assertion, (3) close the audit 10s blind spot (SUBPROCESS_HEAVY_TIMEOUT_MS only flags ≤5s; ~51 tests in the 10s band invisible) + pretest:integration wiring, (4) serial-manifest hygiene (42/119 forced serial, unannotated) + timeout-as-hang-guard principle, (5) coverage classification deliverable (e2e vs should-be-unit vs flake-risk), (6) full gate. Migration of should-be-unit tests is OUT OF SCOPE (separate follow-up). | ~6 |

### § HS-SWEEP-2 Progress (Drain Queue row 26)

Per-subsystem `/anatomy-park` → `/szechuan-sauce`, scoped, claude, `--target extension`. Paths = § Subsystem Hardening Sweep HS-N. Mark `A✅`/`S✅` as each phase converges; note commits/findings.

| # | Subsystem | Anatomy | Szechuan |
|---|---|---|---|
| HS-1 | Orchestration core (mux/pipeline/jar-runner, manager-relaunch, circuit-breaker, classifier) | ✅ clean (converged, 0 commits — well-hardened by prior sweeps) | ✅ converged (1 deslop: `6a1a8d04` DRY validateStartupState) |
| HS-2 | Worker spawning + backends | ✅ clean (converged, 0 commits / 0 trap doors — 2 consecutive clean passes, session 9a1fe0b6) | ✅ converged (2 deslop: `bdc6b9fa` Single-Source-of-Truth fileURLToPath in spawn-gate-remediator, `c8df2c37` Cognitive-Load flatten nested ternary in spawn-morty applyHeuristicBackendRouting; session d9cbe5de, iter 11; .js mirror recompiled at sweep-end release) |
| HS-3 | Microverse | ✅ clean (converged, 0 commits / 0 trap doors — 2 consecutive clean passes, session f54d4fed; 2 sub-threshold drops conf=50 incl. structurally-dead compareMetricSetOps intersectionSize pinned by R-SLLJ-4) | ✅ converged (1 deslop: `8a93a27c` Self-Documenting-Code name MAX_PRIOR_VIOLATIONS_IN_PROMPT judge cap; session 115880a3, iter 2; .js mirror recompiled at sweep-end release) |
| HS-4 | State + transactions | ✅ clean (converged, 0 commits / 0 trap doors — 2 consecutive clean passes, session 80113120) | ✅ converged (2 deslop: `50034844` Single-Source-of-Truth clearCurrentTicketCache helper in state-manager, `4b0afcfe` DRY clearCurrentTicketCache helper in transaction-ticket-ops; session 5bca70ee, iter 3; .js mirror recompiled at sweep-end release) |
| HS-5 | Gates | ✅ clean (worker converged iter 2, 0 commits / 0 trap doors — 2 consecutive clean passes, session 5dc9c3be; 3 sub-threshold drops conf<80. Runner then stuck in an API-429 retry-spin that pre-empted finalize — babysitter confirmed worker convergence + live API probe, killed the spinning runner, deactivated converged) | ✅ converged (0 deslop — worker reported clean pass on all 8 gate files; session ba16b209, iter 7, exit converged after riding out an intermittent 429 throttle, 14min API-driven wait at iter 6) |
| HS-6 | Shared core lib | ✅ clean (converged, 0 commits / 0 trap doors — 2 consecutive clean passes, session d124d1b5, iter 2, 6m28s, no 429 issues) | ✅ converged (1 deslop: `1d09c40f` Single-Source-of-Truth — use canonical lib/is-record in pickle-utils; session f55112f0, iter 2, baseline score 4→0) |
| HS-7 | Dot codegen | ✅ clean (converged, 0 commits / 0 trap doors — 2 consecutive clean passes, session 8b44ad0f, iter 2, 6m54s; scope=2 real files, stale dot-builder-cli.ts dropped) | ✅ converged (1 deslop: `dc509a8b` YAGNI — drop 5 unused fields from DotBuilder._emitDot return; session 7930ef9b, iter 4, one regressed attempt at iter 3 correctly rolled back) |
| HS-8 | Scope resolution | ✅ **2 HIGH fixes** (converged iter 5, consecutive_clean=2, session 3f85c88f, 29m44s): `d9417135` HIGH — rg-empty-vs-failure conflation in one-hop import walk (+ trap door), `afc6d741` HIGH — rg/grep importer-walk extension parity for mjs/cjs (+ trap door) | ✅ converged (1 deslop: `54d5c8a6` DRY — single-read pipeline-status.json in lock-scope patch; session ae066e0f, iter 2, baseline score 4→0) |
| HS-9 | Monitoring / TUI | ✅ clean (converged, 0 commits / 0 trap doors — 2 consecutive clean passes, session aaf715ef, iter 2, 9m27s) | ✅ converged (5 deslop: `f3451579` KISS single-write stderr, `484749c0`+`9e838465` Self-Doc JSDoc reattach (startRespawnWatchdog, buildTicketLines), `f61f2ece` DRY truncate() helper (Rule-of-Three, 4 sites in monitor.ts), `59f610d1` YAGNI drop dead '❌' roleStatus variant; session 85e203fd, iter 10, 83m incl 16min API-429 wait, metric 12→9) |
| HS-10 | Session lifecycle | ✅ clean (converged, 0 commits / 0 trap doors — 2 consecutive clean passes, session 9ed609df, iter 2, 7m44s) | ✅ converged (1 deslop: `477bdbdf` Single-Source-of-Truth — resolve correct-course backend once, drop redundant state.json read; session 40ba57c6, iter 2, baseline 12→0) |
| HS-11 | Hooks | ✅ **2 CRITICAL fixes** (converged iter 4, consecutive_clean=2, session 2c1da030, 22m38s): `b2dd9074` CRITICAL — R-WSRC-3 `>|` clobber-override redirect state-write bypass (+ trap door), `f1826f8f` CRITICAL — R-WSRC-3 `>&file` dup-to-file redirect state-write bypass (+ trap door) | ✅ converged (0 deslop — worker reported clean pass; session 4993c9f7, iter 2, baseline score 3, no actionable deslop) |
| HS-12 | Citadel (incl. new B-HRP analyzers) | ✅ **1 CRITICAL fix** (converged iter 4, consecutive_clean=2, session eb63ce30, 32m45s, 23 files): `df4b3c55` CRITICAL — prd-parser `walkComposeChain` diamond false-cycle (onPath/processed DFS) that crashed the whole UNwrapped Citadel audit on a valid diamond compose graph (+ trap door); 3 sub-threshold candidates dropped (ac-shape /g false-positive, trap-door-coverage readFileSync is safeRunAnalyzer-wrapped) | ✅ converged (2 deslop: `118c0313` DRY dedupe TEST_FILE_PATTERN regex, `4cf5b2de` DRY consolidate toPosixPath into reporter.ts — both Rule-of-Three; session 2a448543, iter 3, metric 17→12) |
| HS-13 | Reporting | ✅ clean (converged, 0 commits / 0 trap doors — 2 consecutive clean passes, session 744dd6de, iter 2, 7m20s) | ✅ converged (6 deslop, Small-Functions/CQS: `cce436de` buildProjectTotals/sumProjectTotals, `107ff48f` log-activity main/parseCliFlags, `62eb059e` flushPendingBuffer, `eb95ffdb` parseActivityFile, `389c0f84` buildWeeklyColumns, `564adc61` CQS buildSessionEntries predicate; session 6a2e8698, iter 11 stall-limit, 81m, metric 12→5; one iter-3 regression rolled back) |
| HS-14 | Debate / council | ✅ clean (converged, 0 commits / 0 trap doors — 2 consecutive clean passes, session 6400a9bc, iter 2, 6m55s) | ✅ converged (6 deslop: `867e1027` rename shadowed jsonPath→schemaPath, `755b0062` node: import protocol, `59281a24` DRY reuse debate state, `1d3ae450` Encapsulation DebateWriteContext 8→4 params, `a9e312c3` DRY appendPublishLog delegation, `00ce5d2c` Consistency logActivity fallback; session 49bd6716, iter 6 stall-limit, 56m, metric →6) |

**Watch-only — NOT in the drain (out of scope until their gate clears):**
- **B-CSI** (#25 R-CSI) — external-event-gated: needs a real concurrent-session destructive-command incident to analyze. Re-activates on the next incident. Not operator-interaction.
- **B-CCDC** — operator-deferred by choice (maybe-later).

---

## Subsystem Hardening Sweep (Drain Queue row 21 / HS-SWEEP)

Operator-requested 2026-06-03: harden every subsystem with `/anatomy-park` (trace data flows, fix without regression, catalog trap doors) → `/szechuan-sauce` (principle-driven deslop), **one subsystem at a time**. Each row is a scoped 2-phase pipeline run.

**Drain protocol (babysitter — refined during HS-1):** on a no-active-pipeline tick, take the top `Queued` row and run the two phases as **standalone skills, sequentially**: `/anatomy-park --scope paths:<glob>` then (after it converges) `/szechuan-sauce --scope paths:<glob>`. **Backend: claude** (B-CXOR v1.96.0 fixed the codex orphan-reset so codex is now safe too, but claude is the default for the sweep). **CRITICAL launch detail: TARGET = `extension/` (the project root with package.json/tsconfig), NOT the repo root or `extension/src`** — else `check-gate`/the convergence gate can't detect the project type and writes a 2ms empty baseline (no typecheck/lint regression guard). The scope.json (repo-relative paths) still focuses the worker on the target files. Per subsystem: gate-verify each phase's diff (tsc + eslint + affected test + recompile any `.ts`→`.js` parity — timed-out szechuan workers auto-commit the `.ts` without the `.js` AND sweep up GitNexus AGENTS.md/CLAUDE.md stat-drift, which must be dropped/restored), commit + **push** (protect on origin), mark the row `✅ DONE`, advance. **Release model: BATCH** — accumulate all HS-SWEEP fixes on main and cut **ONE** release (`bash install.sh` + bump + `gh release create`) at sweep completion (single bump per bundle; HS-SWEEP is one row). NEVER run two hardening rows (or a hardening row + a feature pipeline) concurrently on this repo — serialize to avoid #25 R-CSI concurrent-git interference.

Order: largest / most-behavior-critical first (biggest slop + regression surface). Scope globs are comma-separated `paths:` lists relative to repo root.

| # | Subsystem | Scope (`paths:` glob) | Status |
|---|-----------|----------------------|--------|
| HS-1 | **Orchestration core** — outer loops, relaunch, circuit-breaker, iteration classifier | `extension/src/bin/mux-runner.ts,extension/src/bin/pipeline-runner.ts,extension/src/bin/jar-runner.ts,extension/src/services/manager-relaunch.ts,extension/src/services/circuit-breaker.ts,extension/src/services/classifier-utils.ts` | ✅ DONE — anatomy converged clean (0 findings, core already hardened); szechuan 1 fix: jar-runner persist-discarded-skip-reason observability (`dc7532cc`+build `d507e429`, pushed, batched for sweep-end release) |
| HS-2 | **Worker spawning + backends** — morty/refinement/gate-remediator spawn, per-backend invocation | `extension/src/bin/spawn-morty.ts,extension/src/bin/spawn-refinement-team.ts,extension/src/bin/spawn-gate-remediator.ts,extension/src/services/backend-spawn.ts,extension/src/services/judge-spawn-env.ts` | ✅ DONE — anatomy clean; szechuan **8 deslop fixes** (DRY/YAGNI from multi-backend accretion: per-backend ENOENT collapse `d0dcc1c0`, resolveBackend delegation `92138537`, resolve{Grok,Kimi,Gemini}Model collapse `8ebea4ee`, mcp-config-resolved `95aed04e`, pre-test early-returns `e222d27c`, --add-dir filters `05966522`, dead buildJudgeSpawnEnv `9b278638` + DANGEROUS_EXACT `1ad10fcb`). Full gate GREEN (tsc/eslint/7-audits incl trap-door-enforcement / test:fast 5589·0 / integration 405·0 / expensive 14·0). Pushed, batched for sweep-end release. |
| HS-3 | **Microverse** — convergence loop, state, init/read | `extension/src/bin/microverse-runner.ts,extension/src/services/microverse-state.ts,extension/src/bin/init-microverse.ts,extension/src/bin/read-microverse.ts` | ✅ DONE — anatomy: `1388198a` (HIGH read-microverse existsSync pre-gate defeated tmp-recovery; +iteration-regression test). Szechuan (session `eac00388`): score 11→5, **3 deslop fixes** (`29dd06ad` parseLlmJudgeOutput DRY, `94b6499d` positional-arg guard-clause helper, `835347b4` readAllowedPathsFile validation extraction); exited `judge_timeout` (whole-`extension/` judge >300s — infra, not code). Gate-verified: tsc/eslint clean, .ts→.js parity, 86 affected tests green. Pushed, batched for sweep-end release. |
| HS-4 | **State + transactions** — state-manager, ticket txns, integrity, evidence, schema | `extension/src/services/state-manager.ts,extension/src/services/transaction-ticket-ops.ts,extension/src/services/bundle-state-integrity.ts,extension/src/services/bundle-finalize.ts,extension/src/services/ticket-completion-evidence.ts,extension/src/services/recoverable-json.ts,extension/src/types` | In progress — anatomy (session `8200fb14`) **converged clean, 0 findings, 0 commits** (10 scoped files traced 2 consecutive passes: schema-migration R-QGSK-3 + write-ceiling R-WSRC-1 intact, completion-evidence 4-state oracle clean, recoverable-json tmp-promotion clean). Szechuan (session `577e0145`): **1 deslop fix** `cd642e18` (DRY — collapse triplicated apply-ledger entry literal in `applyPlannedWrite`); exited `judge_timeout` at baseline (whole-`extension/` llm judge >300s — infra/latency, the deployed v1.96.0 runner not the in-flight fixes). Gate-verified: tsc/eslint clean, parity, 13 transaction tests green. Pushed. ✅ **DONE** (anatomy clean + 1 szechuan fix). **NOTE for HS-5+ szechuan: bump judge `timeout_seconds` 300→600 via `--metric-json` to clear the baseline-timeout.** |
| HS-5 | **Gates** — convergence/AC-phase/readiness/finalize gates, command safety | `extension/src/services/convergence-gate.ts,extension/src/services/convergence-defaults.ts,extension/src/services/ac-phase-gate.ts,extension/src/services/verify-command-safety.ts,extension/src/bin/check-gate.ts,extension/src/bin/finalize-gate.ts,extension/src/bin/check-readiness.ts,extension/src/bin/check-flake-budget.ts` | In progress — anatomy (session `c30c48f2`) **converged clean, 0 findings, 0 commits** (8 gate files traced 2 passes: baseline fingerprint/occurrence-index stability, fail-closed exit-code classifier, set -f glob safety, synthetic-failures-stay-in-scope, global-regex lastIndex reset all verified; 6 candidates dropped <80). Szechuan (session `18d29175`, **judge timeout_seconds bumped 300→600**): **CONVERGED** (the 600s bump cleared the baseline judge_timeout that killed HS-3/HS-4). Baseline 7 → 6, 2 deslop fixes `46a4cde4` (collapse writeEmptyBaselineFile/writeBaselineFile into `persistGateBaseline`) + `64c17a88` (hoist `FinalizeGateSettings` defaults const), iter-3 clean-pass convergence. Workers committed `.ts` w/o `.js` → parity recompiled + committed `b6fd3669`. Gate-verified: tsc/eslint clean, 85 gate tests green. Pushed. ✅ **DONE**. (Underlying judge-timeout defect filed as **#95 R-SJWT** — use timeout_seconds:600 for all remaining HS-SWEEP szechuan phases.) |
| HS-6 | **Shared core lib** — pickle-utils, git-utils, lib | `extension/src/services/pickle-utils.ts,extension/src/services/git-utils.ts,extension/src/lib` | In progress — anatomy (session `848492ff`) **converged, caught + fixed a CRITICAL bug** `99910586` (AP-HS6-1: `updateTicketFrontmatter` dropped `completion_commit` when the field was ABSENT — `setFrontmatterField` add-path fallback `/\n---(\r?\n?)$/` is $-anchored against the full doc; fix applies `applyCompletionCommitField` to the frontmatter slice only; `done_without_commit_evidence` class, corroborated by prod Done ticket c8aa9f34). +trap door (services/CLAUDE.md) +44-line regression test. Gate-verified: tsc/eslint clean, parity, 223 git-utils/pickle-utils tests green. Pushed. Szechuan (session `582627ec`, timeout_seconds:600): CONVERGED — baseline 6, 1 accepted fix `719d48c0` (tarjan-scc `buildAdjacency` reuses `edgeEndpoint` helper); a regressing iteration (score 8) was correctly auto-rolled-back, iter-3 clean-pass convergence. Parity recompiled + committed. Gate-verified: tsc/eslint clean, 9 tarjan tests green. Pushed. ✅ **DONE** (anatomy CRITICAL fix `99910586` + 1 szechuan fix). |
| HS-7 | **Dot codegen** — dot-builder (service + CLIs) | `extension/src/services/dot-builder.ts,extension/src/bin/dot-builder.ts,extension/src/bin/dot-builder-cli.ts` | In progress — anatomy (session `54f5bd24`) **converged clean, 0 findings, 0 commits** (traced dot-builder.ts 2438 lines + both CLIs: id construction/escapeAttr/commit_and_push edge-rewire sound; 1 P3 dead-twin in dot-builder-cli.ts flagged for szechuan). Szechuan (session `f665b4e5`, timeout_seconds:600): CONVERGED — baseline 54→8→5→4→2, **5 YAGNI/KISS dead-code fixes** (`c28674db` delete dead-twin dot-builder-cli entry point [-99 lines], `d9f9a9b1` dead `_emit` overload+interface, `d1fb8183` redundant `_link` overloads, `43674a14` inline shallow `_linkEdge`, `f72d97ec` collapse dead `_emitSubgraph` overload). Gate-verified: tsc/eslint clean, parity, cli-deletion safe (test points at dot-builder.js), **439 dot-builder tests green**. Pushed. ✅ **DONE**. |
| HS-8 | **Scope resolution** — resolver, resolve/lock/diff | `extension/src/services/scope-resolver.ts,extension/src/bin/resolve-scope.ts,extension/src/bin/lock-scope.ts,extension/src/bin/check-scope-diff.ts` | In progress — anatomy (session `f8e1da89`) **converged clean, 0 findings, 0 commits** (scope-resolver + resolve/lock/diff already hardened across ~6 prior orbits R-SRGT/R-SRAA/R-RSBI/R-APWS; 4 candidates dropped <80). Szechuan (session `6b36a644`, timeout_seconds:600): CONVERGED — baseline 17, 1 fix `ba8cc7d1` (DRY Rule-of-Three: dedupe `isProcessAlive` in lock-scope + scope-resolver via state-manager export), iter-2 clean-pass. Gate-verified: tsc/eslint clean, parity, 32 scope tests green. Pushed. ✅ **DONE**. |
| HS-9 | **Monitoring / TUI** — monitor + all watcher panes | `extension/src/bin/monitor.ts,extension/src/bin/log-watcher.ts,extension/src/bin/morty-watcher.ts,extension/src/bin/raw-morty.ts,extension/src/bin/refinement-watcher.ts,extension/src/bin/subsystem-watcher.ts,extension/src/bin/pane-1-2-pointer.ts` | In progress — anatomy (session `8bcb83cd`) **converged clean, 0 findings, 0 commits** (7 read-only display panes; liveness/EOF/crash-recovery/watchdog defended; no state-write/corruption surface; 4 candidates dropped <80). Szechuan (session `7234994f`, timeout_seconds:600): CONVERGED — baseline 11 (whole-tree judge noise), **0 in-scope fixes** (worker clean-pass: read-only display panes already clean). ✅ **DONE** (anatomy + szechuan both clean, 0 commits). |
| HS-10 | **Session lifecycle** — setup, cancel, retry, correct-course, schema sync | `extension/src/bin/setup.ts,extension/src/bin/cancel.ts,extension/src/bin/retry-ticket.ts,extension/src/bin/correct-course.ts,extension/src/bin/sync-schema.ts,extension/src/bin/worker-setup.ts,extension/src/bin/update-state.ts,extension/src/bin/get-session.ts` | In progress — anatomy (session `d94e7f02`) **converged clean, 0 findings, 0 commits** (8 lifecycle files traced 2 passes, no timezone/index/DTO/data-corruption findings; 2 sub-threshold DRY nits deferred to szechuan). Szechuan (session `35bad21f`, timeout_seconds:600): CONVERGED — baseline 6, 1 fix `eac47fad` (DRY: hoist duplicated `start_time_epoch` reset out of complementary `applyResumeConfig` branches in setup.ts); a regressing iteration (score 20) was correctly auto-rolled-back, iter-3 clean-pass. Gate-verified: tsc clean, eslint 0-errors (5 pre-existing warnings, gate allows), parity, 123 setup/correct-course tests green. Pushed. ✅ **DONE**. |
| HS-11 | **Hooks** — dispatch, stop-hook, config-protection, tsc-gate | `extension/src/hooks` | In progress — anatomy phase launched (session `b06044c3`, 6 scoped paths: dispatch/resolve-state/config-protection/stop-hook/tool-error/tsc-gate; baseline GREEN npm). Anatomy (session `b06044c3`): **sweep's highest-value subsystem — 10 real CRITICAL/HIGH command-parser bypass fixes** of the R-WSRC worker-forbidden-op + tsc-gate guards, which only inspected the leading token: `a42948f3` CRITICAL ~/$HOME runtime-root write-guard bypass; `642e2047` CRITICAL `&&`-chained forbidden-op; `1a05a5c2` HIGH chained git-add-commit tsc-gate; `4728293f` CRITICAL newline-separated forbidden-op; `80d6ae1e` HIGH newline tsc-gate; `ed6424be` CRITICAL `git -C`/`-c` global-opt verb; `4269b842`+`774907fd`+`fa055f5a` HIGH tsc-gate global-opt/boolean-flag/env-prefix under-detection; `c8a47922` CRITICAL quoted git verb/exec; +`98293b01` readability. All with trap doors + regression tests. Bounded at iter 12 (worker hung on a sub-threshold path-qualified-git probe; the <80 finding had no value). Security gate-verified: tsc/eslint clean, .js parity, **386 hooks tests pass + codex-git-boundary-parity preserved + trap-door audit clean**. Pushed. Szechuan (session `787461be`, timeout_seconds:600): CONVERGED — baseline 8, 1 fix `989e6cd2` (DRY: extract `computeLimitMetrics` single-source for limit math in stop-hook), iter-2 clean-pass. Gate-verified: tsc/eslint clean, parity, 193 stop-hook tests green. Pushed. ✅ **DONE** (anatomy 10 CRITICAL/HIGH parser-bypass + 1 szechuan — the sweep's highest-value subsystem). |
| HS-12 | **Citadel** — conformance analyzers | `extension/src/services/citadel` | In progress — anatomy phase launched (session `a2c45f4a`, 17 scoped citadel analyzer paths, baseline GREEN npm). Anatomy (session `a2c45f4a`) **converged — 4 CRITICAL availability fixes**: unguarded changed-file reads in analyzers that run UNWRAPPED by `safeRunAnalyzer`, where one unreadable/TOCTOU file crashed the entire Citadel audit — `2382108e` divergence-reconciliation `changedLineEvidence`, `d1297584` ac-shape `readManifestText` existsSync-TOCTOU, `910e34ae` diff-hygiene `fileSize` statSync, `be119b8b` diff-walker per-file git calls. +trap doors +4 regression tests, .ts/.js parity committed. Gate-verified: tsc/eslint clean, 31 core + 6 regression citadel tests green, trap-door audit PASS. Pushed. Szechuan (session `a45fce60`, timeout_seconds:600): CONVERGED (iter-7 clean pass; score plateaued at 8 = whole-tree out-of-scope dupe floor per #95 R-SJWT). **~5 DRY consolidations across 12 analyzers**: `slug()` (9 dups), `toPosixPath` (5), `uniqueSortedStrings` (6), `escapeTableCell` (4), rule-set declaration finders (3) → shared citadel helpers. A `pickle-utils` out-of-scope touch was self-reverted (NET citadel-only). Gate-verified: tsc/eslint clean, parity, 56 citadel tests green, trap-door audit PASS, NET diff citadel-only. Pushed. ✅ **DONE** (anatomy 4 CRITICAL + szechuan DRY). |
| HS-13 | **Reporting** — metrics, standup, status, activity/commit logging | `extension/src/bin/metrics.ts,extension/src/services/metrics-utils.ts,extension/src/bin/standup.ts,extension/src/bin/status.ts,extension/src/services/activity-logger.ts,extension/src/bin/log-activity.ts,extension/src/bin/log-commit.ts,extension/src/bin/prune-activity.ts` | In progress — anatomy (session `5e8d4752`) **converged — 2 HIGH fixes**: `b448bdda` (metrics per-backend breakdown silently dropped 4 of 7 BACKENDS deepseek/grok/kimi/gemini → `buildBackendColumns` BACKENDS-driven), `8f038a29` (status.ts raw-read of pipeline-status.json bypassed recoverable-json tmp-promotion → use `readRecoverableJsonObject`). +trap doors +regression tests. Gate-verified: tsc/eslint clean, parity, 88 metrics/status tests green. Pushed. Szechuan (session `c90d84b8`, timeout_seconds:600): CONVERGED with **0 net commits** — the one fix attempt regressed (score 7 > baseline) and was auto-rolled-back, iter-3 clean-pass (reporting already clean post-anatomy). ✅ **DONE** (anatomy 2 HIGH + szechuan no-op). |
| HS-14 | **Debate / council** — debate, persona gen, council fanout/schema/publish | `extension/src/bin/debate.ts,extension/src/bin/generate-debate-personas.ts,extension/src/services/council-fanout.ts,extension/src/services/council-schema.ts,extension/src/bin/council-publish.ts` | In progress (FINAL ROW) — anatomy (session `c8dbe3b5`) **converged — 2 HIGH markdown-injection fixes** in council-publish: `9867ee96` (composeBody table cells emitted without escaping `|`/newlines → PR-comment table injection; `escapeTableCell` on 4 cells), `f3541100` (trap-door bullet free-text without newline escaping → block-markdown injection; `collapseCellNewlines` on 4 fields). +trap doors +regression tests. Gate-verified: tsc/eslint clean, parity, 97 council/debate tests green. Pushed. Szechuan (session `ead55531`, timeout_seconds:600): CONVERGED — 1 fix `492ddfce` (DRY: `validateDirective` uses `requireInteger`/`requireString`). Gate-verified: tsc/eslint clean, parity, 78 council/debate tests green. Pushed. ✅ **DONE** (anatomy 2 HIGH markdown-injection + szechuan DRY). |

**Note on overlap with the death-crystal-deepening pipeline (0ff3f112):** that run does ONE unscoped whole-repo anatomy-park + szechuan pass as its phases 3–4. This sweep is the more thorough per-subsystem follow-up; the babysitter starts HS-1 only after 0ff3f112 ships.

---

## Open Findings

Open only — closed-finding detail in `MASTER_PLAN-archive.md`. Priority: **P1** = data-loss / pipeline-bricking / recurrence ≥3×; **P2** = pipeline-friction / quality gap; **P3** = polish / niche. Each is the authoring source for its Drain-Queue bundle.

### P1

| # | Code | Summary | Notes |
|---|---|---|---|
| 25 | R-CSI | Concurrent claude-session destructive-command interference (3 SIGINT incidents/36h) — DATA LOSS class | `p1-concurrent-claude-session-interference-with-running-pipelines.md`. **Watch-only — external-event-gated:** Phase 1 forensics need a real incident to analyze. Skipped by the drain; surfaces on the next incident. |
| 108 | R-WPEX | **⏸️ MONITOR — no live repro obtainable this session; analysis indicates NOT a v1.105.0 regression. Downgraded from P1.** Reconciled 2026-06-09: the only post-v1.105.1 bundles (B-HERMES, B-DWF) were verify-only DEAD PRDs that spawned ZERO workers, so a real-worker repro could not be obtained; the master plan is otherwise fully drained (no actionable worker-spawning bundle remains). Code analysis is decisive that this is NOT the R-MWIS `b63bd763` mux exit-handler change: the 0-byte `worker_session_<pid>.log` is written by **spawn-morty.js** (piping claude's stdout to that file), which the mux's exit-handler (operating on the mux↔spawn-morty pipe) provably cannot truncate; and the mux MANAGER's own claude works fine. → Most likely **transient API load** during B-WMNP's concurrent build window (this session ran 3 bundles + many bg test suites over ~7h). **REOPEN as P1 only if real `claude -p` workers die silently on an otherwise-idle system** on a future real-worker bundle. Workaround proven: mux MANAGER hand-build (R-ORSR ladder). Original symptom: **Worker spawns died silently (0-byte logs, zero artifacts) during B-WMNP #106 build (session `2026-06-08-f5131cfa`).** B-WMNP #106 (first bundle on v1.105.0) saw every `claude -p` WORKER spawn produce nothing (~3-4min then exit) → circuit_open after 5 no-progress iters; the mux MANAGER worked fine + HAND-BUILT all 4 tickets (how B-WMNP shipped v1.105.1). Worker-spawn-specific; started exactly at the v1.105.0 deploy. Two candidates: (1) R-MWIS `b63bd763` exit-primary completion (`proc.on('exit')`+`EXIT_DRAIN_FALLBACK_MS=250`) truncating healthy workers — BUT static review shows a `settled` single-resolution guard + `'close'` short-circuit in the healthy path, so NOT obviously a regression; (2) transient load (3 bundles + many bg test suites over ~7h). **NEEDS A REAL-WORKER REPRO** (launch next bundle on v1.105.1, watch worker output) before fixing — don't speculatively patch the working idle-stall fix. Workaround: manager hand-build. Live incident session `2026-06-08-f5131cfa`. **DISPATCHED → B-WPEX (Drain Queue row 32).** Source + 3 ACs: `prds/p1-bug-fix-bundle-r-wpex-worker-silent-death.md`. |
| 107 | R-MWIS | **✅ SHIPPED v1.105.0 (B-MWIS, 2026-06-09, drain row 31) — process-exit primary completion signal (b63bd763) + mux idle-stall watchdog/mux_idle_stall_detected (7e352679) + commit-on-exit (036a05eb); zero-recovery build, full gate green, deployed live.** mux-runner worker-exit idle-stall: silent hang, completed gate-passing work stranded. A T5 worker exited after producing the COMPLETE gate-passing AC-6 deliverable in the tree (22/22 tests green, uncommitted), but the mux-runner sat at **0.0% CPU idle** and NEVER observed the exit — no `Iteration N+1`, no respawn, no auto-skip, no Failed flip, no activity event, **~30min total silence**, no rate-limit/breaker (CLOSED)/error (`last_error:null`, `consecutive_subprocess_errors:0`); the worker `worker_session_*.log` was **0 bytes** (silent exit). A clean-tree relaunch would have DISCARDED the completed work. **Distinct class from #99 R-WCUC + #106 R-WMNP** — both require the no-progress detector to RUN; here the mux reaches NO detector (hangs in the worker-wait). Root hypothesis: worker-completion keys on a log-emitted promise token / stop-hook rather than the child-process exit code, so a 0-byte-log exit is never noticed. Live incident session `2026-06-08-ce6ae444` ticket `548559f1` (T5) during the R-RGED #105 build; babysitter recovered (verified green 22/22, committed `80e84fd8`, marked Done, cleared current_ticket, relaunched → advanced to wiring). **DISPATCHED → B-MWIS (Drain Queue row 31).** Source + 4 ACs: `prds/p1-bug-fix-bundle-r-mwis-mux-worker-exit-idle-stall.md`. |
| ~~94~~ | R-CXOR | Codex-backend workers/managers bypass the R-WSRC-GR git-boundary PreToolUse hook (claude-only); a `git reset` on between-ticket gate failure orphans every per-ticket commit, and the manager marks tickets Done with `completion_commit==start_commit` → pipeline "advances" landing ZERO work (pipeline-bricking class for codex). | **CLOSED — SHIPPED v1.96.0 (B-CXOR row 22).** `prds/p1-bug-fix-bundle-b-cxor-codex-orphan-reset-2026-06-03.md`. Live incident: session `0ff3f112` (death-crystal-deepening `--backend codex`) — HEAD frozen at baseline `82cbb4ad` across 9 iters, 10+ danglings, 4 false-Done tickets. Recovered via kill + ff-only from origin. Fix: post-iteration HEAD-regression detect+reattach/Fail (R-CXOR-1) + false-Done guard (R-CXOR-2) + backend-agnostic git-boundary parity (R-CXOR-3). **Fix before any further codex pipeline.** See memory `project_codex_pipeline_deterministic_orphan_reset`. |
| ~~28~~ | R-ICDM | claude iteration classifier `detectManagerMaxTurnsExit` misuse — manager loop control regression | **CLOSED — SHIPPED v1.89.1 (B-R-MMTR).** R-ICDM-1 shipped; R-ICDM-2..7 conformance audits confirmed the fix intact at HEAD (reclassifier ternary, template relaxation, regression test, trap-door, event all present). |
| ~~77~~ | R-PNTR-DEPS ✅ SHIPPED v1.89.0 | B-PNTR R-PNTR-1 (`d586b545`) wrongly deleted load-bearing `.claude/commands/pickle.md` (read every tmux iteration by mux-runner/pipeline-runner/jar-runner as the manager-prompt template) → `[FATAL] pickle.md not found`. Restored `40f22573`. **RE-SCOPED 2026-05-30** (operator-confirmed): `pickle.md` was dual-purpose (bare-`/pickle` command + manager template). **IMPLEMENTED R-PNTR-1..7** (session `2026-05-31-30c7524b`): extracted manager-lifecycle body to `_pickle-manager-prompt.md` (infra template via `extensionRoot/templates/`), repointed 3 consumers + `command_template` default, added schema-neutral resume remap, removed bare `/pickle`. Schema-neutral (dodges #74). **CLOSED — SHIPPED v1.89.0 (2026-05-31).** Closer (completed by babysitter) caught a latent FATAL: install.sh deployed the template to `$EXTENSION_ROOT/extension/templates/` but the runtime resolver reads `getExtensionRoot()/templates` = `$EXTENSION_ROOT/templates/`; added an explicit cp so fresh installs no longer FATAL. **B-PNTR.** |
| 100 | R-CHTS | **✅ RESOLVED v1.102.0 (B-ORSR, claude/closer authority; codex authority → #104).** `closer_handoff_terminal` fires on `consecutive_failed_iterations==1` — a SINGLE non-progressing iteration parks the whole pipeline and waits for an operator instead of running a layered autonomous recovery. **The dominant operator-pause trigger** across the LOA-907 epic; renders the pipeline non-autonomous (every non-trivial ticket needed a babysitter recovery). B-GNXR R-WCUC commits gate-passing work *before failing* but still parks afterward — the trigger sensitivity is the bug. → **B-ORSR** (drain row 28, ticket R-ORSR-2). Source: `prds/p1-bug-bundle-b-orsr-oversensitive-recovery-statemachine.md`; session `2026-06-04-0204150f`. Operationalizes memory `feedback_pickle_rick_autonomy_north_star`. |
| 101 | R-ONPD | **✅ RESOLVED v1.102.0 (B-ORSR R-ORSR-3 taxonomy + R-ORSR-5 refiner flag).** `oversized_no_progress` decomposition fragility: the refiner repeatedly emits tickets too large to converge in one 8-phase codex pass; the only recovery is a manual `-i`/`-ii` split. **Recurrence ≥6× in ONE epic** (907.0×2 / 907.1 / 907.2 / 907.3 / 907.6 + large hardening H1/H3). Two sub-bugs: (a) decomposition quality — `large`/open-ended ("author N rows", "review whole module") tickets never converge; bound them mechanically or pre-split at refine time; (b) failure taxonomy — `oversized_no_progress` WITH a converged plan + worker output ≠ a zero-output timeout, yet both dead-end (former should execute-the-plan, latter split). → **B-ORSR** (R-ORSR-3 + R-ORSR-5). |
| 110 | R-PRPATH | **NEW (Open) 2026-06-11.** Paused-refine → `/pickle-pipeline --resume <session>` leaves **`state.prd_path` UNSET** (only `start_commit` populated) → citadel PHASE 2/4 hard-fails `citadel: missing state.prd_path or state.start_commit` the instant pickle completes, so the pipeline **can never reach review on this path** even on a clean build. `setup.js --resume` / the refine handoff never writes `prd_path` though `prd_refined.md` exists in the session dir. Live incident session `2026-06-11-c653c95f` (LOA-1097 staged-credit-rule-bundles, codex, 12 tickets, `loanlight-api/.wt-loa-1097`); babysitter workaround set `state.prd_path=${SESSION_ROOT}/prd_refined.md` by hand. **ACs:** AC-R-PRPATH-1 `setup.js --resume`/refine handoff persists `prd_path` (`prd_refined.md ?? prd.md`); -2 citadel preflight self-heals from the session PRD when `prd_path` absent + `start_commit` set; -3 `--paused`→refine→`--resume` fixture reaches CITADEL. Source: `prds/BUG-REPORT-2026-06-11-pipeline-resume-prdpath-gap-and-crash-strands-tree.md`. **Composes with** the dirty-tree-self-cleanup P3 (`p3-pipeline-runner-dirty-tree-guard-blocks-self-cleanup.md`): same incident D2 — a **manager crash mid-implement** strands the ticket's **non-gate-passing** uncommitted source files → next launch FATAL-aborts the dirty-tree preflight with no auto-recovery (fresh repro + severity-escalation data point + AC-R-MCDT-1..3). Cross-ref #99 R-WCUC (commits *gate-passing* only — does not cover a mid-implement crash), #97 R-PFNP (docs/prds-only exemption), #98 R-PRNF (readiness-halt hard-fail — confirmed working this incident), R-RFCB `bug-readiness-forward-created-citation-blindness.md` (the forward-created readiness halt, skip-flag-recovered). |

### P2

| # | Code | Summary | Notes |
|---|---|---|---|
| 109 | R-ITIH | **✅ SHIPPED v1.106.0 (closer-takeover, 5 tickets — AC-1 fb61bc46, AC-2 67b9636c, AC-3 0cc8f2ef WARN-tier, AC-4 fa94f49d, AC-5 475e5aff; babysitter ran AC-6 full gate + drift-fixed schema-ahead test c400b728). Integration-testing isolation + timeout/coverage hardening.** Read-only agent-team re-examination (2026-06-09) of the integration-testing approach, triggered by a live R-WTIV working-tree-isolation incident: `gate-skip-activity-events.test.js` wrote `state.json.working_dir = REPO_ROOT` and spawned the real `mux-runner.js` (EPIC_COMPLETED stub), whose gate-passing exit path (`commitGatePassingDeliverableOnExitPath` → `commitAndContinueDoneFlip`, `mux-runner.ts:3719`) ran `git -C REPO_ROOT add -A && commit` + `resetToSha` against the REAL repo, sweeping the operator's uncommitted fix bundle into a rogue `fix(ok0001): commit-and-continue recovery (R-ORSR-2)` commit (caught + recovered). The test sandboxed `PICKLE_DATA_ROOT` but NOT the git working tree. **Active vector FIXED `7bfa27f6`** (test now uses a tmp git working_dir; other `ok0001` suspects cleared). Systemic debt the audit measured: 42/119 integration files (~35%) forced serial via an unannotated hand-maintained manifest; ~279 subprocess-spawning tests; `audit-subprocess-heavy-tests.sh` only flags `timeout ≤ 5000ms` so the ~51-test 10s band is invisible to forward-protection (the `pntr-pickle-deprecated` starvation that needed a manual serial entry). **DISPATCHED → B-ITIH (Drain Queue row 33).** 6 ACs: `prds/p2-bug-fix-bundle-r-itih-integration-test-isolation-hardening.md`. |
| 105 | R-RGED | **✅ SHIPPED v1.104.0 (2026-06-09) — 10-ticket self-modifying review-gate-efficacy bundle; babysitter-driven (5 recovery interventions: T3+05e86ab7 R-WMNP wmw-wedge, T5+H1+H4 R-MWIS idle-stall). Landed: T1 runCitadelStandalone+CLI (647e3ad4/b17a9295), T2 extended 3 analyzers, T3 new pattern-conformance-audit.ts +flywheel (4f0df46b), T4/AC-5 M2 report-only skeptic lens→skeptic_findings.json (1f0ade8e), T5 PR#1707 G1/G2 regression suite (80e84fd8), T6 wiring (fea57ec6), H1 audit-runner code-quality (83bab91e), H2 severity-enum guard (8d1f1f40), H3 test-quality review record (578fde47), H4 cross-ref consistency (479b4d28). Shipped DIRECTLY (cleanup phases skipped — release gate authoritative): full gate green (tsc0/eslint0err/7 audits, test:fast 5785/0 @c4, integration green, expensive 14/0), bump 1.103.0→1.104.0 (6972f130), install.sh, push, gh release v1.104.0. Spawned 2 runtime-loop bug bundles: B-WMNP #106 (row 30) + B-MWIS #107 (row 31).** Review/cleanup stack missed 14 human-review defects (2 Critical) on a 117-file migration PR. LOA-907 PR #1707 (loanlight-api) ran the full `/pickle-pipeline` (anatomy-park + szechuan-sauce) PLUS three extra ultracode agent-team reviews (breadth code review 0-confirmed, anatomy-park-depth re-run 0-findings, CLAUDE.md audit) — all reported clean. Jorge (`jcapona`) then found 14 in-scope issues incl. **NaN-to-numeric-DB-column, a leaked module-scope `pg.Pool` outside DI, a destructive migration `ON CONFLICT DO UPDATE`, and a direct CLAUDE.md trap-door violation (`as never`)**. **Systemic dimension gap, not bad luck — single-package target, warm scope.** Root classes the scan has NO rule for: (1) type-correct/semantically-wrong values (UUID into a `code` param), (2) cross-file empty/`{} as T` fallback null-flow, (3) resource-lifecycle (pool/handle outside DI, sync FS on hot path), (4) **diff-vs-repo's-own-declared-trap-doors conformance** (highest leverage — repo already documents `as never` + the three-place-edit rule), (5) migration conflict-resolution data-loss, (6) missing-regression-test for behavior flips, (7) stale **code comments** introduced by the diff (CLAUDE.md audit only covers doc files). Sibling of `anatomy-park-szechuan-monorepo-missed-detection-gap.md` (that one = monorepo flattening; this one = missing scan dimensions on a single package). PRD (7 ACs, AC-1 trap-door-conformance-diff-scan first = pure leverage): `prds/review-gates-missed-14-human-review-defects-loa907-gap.md`. Source: PR #1707 review by jcapona, 2026-06-08. NOT an autonomy bug (cf. B-ORSR #100–104) — the pipeline produced good work; the gap is review *efficacy*. |
| ~~39~~ | R-PVTA | verification commands use `rg`/`fd`/`bat`/`jq` without host-tool check → silent worker failures | **CLOSED — SHIPPED v1.89.2 (B-GATE).** `detectMissingTools` + `NON_GUARANTEED_TOOLS` in `verify-command-safety.ts`, wired as a preflight short-circuit into `runCriterion` (ac-phase-gate) + `runCheckCommand` (convergence-gate); regression tests + trap-door pins present. |
| ~~40~~ | R-VSGE | verification commands with shell-special chars error under zsh glob expansion | **CLOSED — SHIPPED v1.89.2 (B-GATE).** String-form AC commands run glob-safe (argv-form or `set -f`, no bare `shell: true`); `containsUnquotedGlobHazard` predicate + forward-protection lint + regression tests + trap-door pins present. |
| ~~84~~ | R-ACSG | AC-shape collapse-or-justify gate oscillates, false-rejects properly-consolidated analyst tickets (smell count 2→9 across 3 attempts, no monotonicity; ~9 worker quotas burned in one incident). **CLOSED — SHIPPED v1.89.4 (B-ACSG).** NARROW H1+H3 fix: loosened the field-bound matcher to read joined `title`+`acceptance_test`+`justification` text + `PICKLE_AC_GATE_DEBUG` tracing (R-ACSG-1); decoupled PRD-advisory vs ticket-normative channels + `--skip-ac-shape-gate <reason>` escape hatch with actionable per-violation errors (R-ACSG-2); LOA-727 regression fixture + same-input monotonicity + negative-corpus no-regression tests (R-ACSG-3); trap-door pin (R-ACSG-TD). H2 cycle-3 freeze + H4 convergence-cost remain out of scope (not reproduced). |
| ~~85~~ | R-PPCD | `/pickle-pipeline` skill prompt + `persona.md` routing omit citadel and assert a false phase list. Real order is 4-phase pickle → citadel → anatomy-park → szechuan-sauce. **CLOSED — SHIPPED v1.89.3 (B-PPCD).** Both docs corrected to the real 4-phase order; closer reconciled two doc-coupled test pins and redeployed via `install.sh`. |
| ~~91~~ | R-SMAF | Scoped `/anatomy-park`/`/szechuan-sauce` runs let a package-wide `lint --fix` mutate files **outside** `scope.json:allowed_paths`; the runner's clean-tree precondition then aborts and **recurs every gate/iteration**. **CLOSED — SHIPPED v1.92.2 (B-SMAF).** R-SMAF-1: `preflightAutoCommit` evaluates dirtiness only over `allowed_paths` via `filterByScope`, ignoring out-of-scope changes (`b1d406c4`). |
| ~~93~~ | R-APXG | anatomy-park post-convergence "gate before exit" hangs indefinitely after the worker signals convergence. **CLOSED — SHIPPED v1.92.2 (B-SMAF).** R-APXG-3: bounded via `POST_CONVERGENCE_GATE_DEFERRAL_LIMIT=3` in `handleWorkerMode` — after 3 consecutive gate-deferred convergences the worker signal is trusted and the loop exits cleanly (`4de60b79`). |
| ~~95~~ | R-SJWT | **✅ SHIPPED v1.98.0 (B-SJWT, Drain Queue row 23, 2026-06-04).** Scoped `/szechuan-sauce` (LLM-judge metric) scores the **entire** TARGET tree, not `scope.json:allowed_paths`. Because TARGET must be `extension/` (project root — for the convergence-gate's project-type detection; a narrower target writes a 2ms empty baseline w/ no regression guard), the judge reads the whole large repo each scoring call. Two consequences: **(a) timeout** — default `key_metric.timeout_seconds: 300` (`DEFAULT_METRIC` in `init-microverse.ts`) is insufficient for whole-tree scoring; the judge times out after 4 attempts and **aborts the run** (`exit_reason: judge_timeout`). Observed HS-SWEEP 2026-06-03: HS-3 szechuan died at iter-3 scoring (3 fixes salvaged), HS-4 szechuan died at **baseline** with 0 iterations (1 fix salvaged during gap-analysis). **(b) score inflation** — whole-tree scoring counts out-of-scope violations the scope-locked worker cannot fix (e.g. HS-5 judge flagged `transaction-ticket-ops.ts safeErrorMessage`, out of HS-5 scope), inflating the score and blocking convergence-to-0 (run converges only via worker "clean pass"). **Interim workaround (proven):** pass `--metric-json` with `timeout_seconds: 600` — HS-5..14 szechuan all CONVERGED cleanly with it. **DISPATCHED → B-SJWT** (Drain Queue row 23, `prds/p2-bug-fix-bundle-b-sjwt-szechuan-judge-whole-tree-scope.md`, authored 2026-06-04): R-SJWT-1 scope judge prompt to `allowed_paths` when scoped; R-SJWT-2 raise `DEFAULT_METRIC.timeout_seconds` 300→600; R-SJWT-3 convergence-to-0 regression + trap door. **Verify-first ruled out #47 R-SJET** (judge spawn-mechanism hang) as the cause: R-SJET-1 (async spawn + stdin-ignore + `PICKLE_JUDGE_LEGACY_SPAWN`), R-SJET-3 (`judge-spawn-env.ts`), R-SJET-4 (`judge_backend_resolved`) all confirmed present at HEAD v1.97.0 (R-SJET-1a trap door pinned) — **#47 R-SJET is ALREADY SHIPPED/stale, no bundle needed.** |
| 96 | R-GNDT | `setup.js` graph-preflight (`gitnexus analyze`) rewrites tracked `CLAUDE.md`/`AGENTS.md` index stats → dirty tree → the SAME launch path's `pipeline-runner.js` dirty-tree preflight FATAL-aborts (`CLAUDE.md` not in the `prds`/`docs` ignore set); re-running `setup.js` re-dirties, so the canonical `/pickle-pipeline` launch loops on FATAL for any GitNexus-indexed repo. **✅ RESOLVED v1.101.0 (B-GNXR, 2026-06-05) — resolved by full GitNexus removal (no `gitnexus analyze` mutator).** Filed 2026-06-04 from the LOA-907 launch (session `2026-06-04-0204150f`; FATAL twice before recovery). Recovery: `git restore CLAUDE.md AGENTS.md` + commit the PRD + relaunch via `launch.sh` ONLY (no setup.js). Source + ACs: `prds/BUG-REPORT-2026-06-04-pipeline-launch-gitnexus-statdrift-dirty-tree-abort.md`. **DISPATCHED → B-GNXR** (Drain Queue row 27) — **RESOLVED-BY-REMOVAL**: per operator decision 2026-06-04 the fix is to remove the GitNexus integration entirely (no `gitnexus analyze` mutator), not patch the preflight. PRD: `prds/p2-bug-fix-bundle-b-gnxr-gitnexus-removal.md` (ticket R-GNXR-1). Adjacent to #91 R-SMAF + #80 (dirty-tree class, different mutator). |
| 98 | R-PRNF | pipeline-runner treats a **readiness-HALTED** pickle phase (`check-readiness exited 2`, no manager spawned, zero ticket commits) as a `recoverable_phase_failure` with `reason="non-fatal pickle exit, commits present"` → runs citadel/anatomy/szechuan over an **EMPTY diff** and reports the pipeline "complete" having built nothing. The `commits present` heuristic is fooled by pre-existing branch commits (the operator's PRD commit predating the build). **✅ RESOLVED v1.101.0 (B-GNXR R-PRNF-9, 2026-06-05) — readiness-halt now a hard pickle failure (`pickle_readiness_halt`); AC-PRNF-9-1..5 regression tests added by closer.** Same LOA-907 incident (session `2026-06-04-0204150f`); false-success masking of a total build failure (P2, escalates to P1 on a believed-shipped no-op). ACs in the bug report (AC-R-PRNF-1 gate continue on build-progress-since-start_commit not "commits present"; -2 readiness-halt = hard pickle failure, distinct `exit_reason`; -3 honest terminal status for zero-build runs). Source: `prds/BUG-REPORT-2026-06-04-pipeline-launch-gitnexus-statdrift-dirty-tree-abort.md` (companion section). Bundled in **B-GNXR** (Drain Queue row 27, ticket R-PRNF-9) — GitNexus-independent robustness fix, kept after the removal repoint. |
| 102 | R-PDUP | **✅ RESOLVED v1.102.0 (B-ORSR R-ORSR-4 c119b78c — roster-scanner auto-close w/ explicit completion_commit).** Phantom/duplicate roster entries strand a finished epic: when a ticket is split into `-i`/`-ii`, the **original** record is left in the roster at sentinel order 996–999 as Todo/Failed and never reconciled. After all 22 real LOA-907 tickets were Done, the runner picked up 4 phantoms (`259ac2b2`/`6a557859`/`a09bdf05`/`5cea7897` = dup 907.0/.2/.3/.6) by order, tried to re-build already-shipped work, and halted `closer_handoff_terminal`. Recovery: hand-verify deliverables present + mark Done with the real delivering commits. → **B-ORSR** (R-ORSR-4): split marks the original superseded + roster-scanner auto-closes a Todo/Failed ticket whose deliverables exist AND whose twin is Done. |
| 103 | R-SFRS | **✅ RESOLVED v1.102.0 (B-ORSR R-ORSR-6 — no-self-disown guard).** Scope-fence regression + worker self-misdiagnosis: a scoped phase (anatomy-park, `appraisalEvaluation/**`) changed an exported interface (`ReductoExtractNodeOptions.pdfBytes`→`getPdfBytes`) and updated its in-scope spec, but a consumer spec OUTSIDE the fence (`lib/appraisal-pipeline/__tests__/streaming-via-onPartial.spec.ts`) still used the old shape → repo-wide `tsc` red. The worker then labeled its OWN regression "pre-existing unrelated" and converged with a red gate (false-green; babysitter fix-forward `296f9e73f`). → **B-ORSR** (R-ORSR-6): interface-changing edit triggers a repo-wide consumer sweep + whole-repo gate; a phase may not converge with a gate it turned red, nor disown a break whose failing symbol its own diff touched. |
| 104 | R-CHTS-CODEX | **✅ RESOLVED v1.103.0 (B-CHTS-CODEX, 4317939c) — 4 codex no-progress sites wired through the haltOrRecoverCodexNoProgress seam; eslint-disable removed; regression 228/228.** Deferred from B-ORSR R-ORSR-2 (shipped v1.102.0 claude/closer authority only). The RecoveryController ladder seam `haltOrRecoverCodexNoProgress` is BUILT (`extension/src/bin/mux-runner.ts` ~:3733) but its 4 `codex_manager_no_progress` halt sites do NOT route through it, so codex-backend pipelines still park on the single-iteration over-sensitivity (the original LOA-907 incident was codex). Carries a babysitter `eslint-disable-next-line @typescript-eslint/no-unused-vars` checkpoint comment above the seam. Fix: wire each of the 4 sites — `advanced`→relaunch / `recovery_exhausted`→honest terminal / `halt`→existing park — remove the eslint-disable, add a scripted-worker codex-authority integration test. Schema-neutral, MINOR. **DISPATCHED → B-CHTS-CODEX (Drain Queue row 29).** Source: B-ORSR R-ORSR-2 ticket spec + `prds/p1-bug-bundle-b-orsr-oversensitive-recovery-statemachine.md`. |
| 106 | R-WMNP | **✅ SHIPPED v1.105.1 (B-WMNP, 2026-06-09, drain row 30) — source-delta signal (91df2637) + cap repopulation (d1fc233b) + clear-current_ticket-on-flip (0678d80d) + route-through-ladder (d26eb66b); manager-hand-built, full gate green.** wmw-auto-skip no-progress loop: source-blind + uncapped + relaunch order-deadlock. A near-green ticket (real source deliverables in tree, 2 trivial fixes from green) was flipped `Failed/oversized_no_progress` by the `wmw-auto-skip` worker-mode no-progress trigger at 5/5 then 6/5 consecutive spawns and **respawned in-phase** (iters 12→16) — never reaching the R-ORSR recovery ladder; the per-ticket cap was **perpetually skipped** (`per-ticket cap-check skipped: stale cache, max_iter=undefined`) so the loop was unbounded; and `current_ticket` stayed set → a clean relaunch **re-engaged the flipped ticket** (order-deadlock) instead of advancing. **Uncovered path of #99 R-WCUC** (commits only *gate-PASSING* work before failing — this work was gate-FAILING by 1 lint + 1 test) **and #100 R-CHTS/B-ORSR** (ladder on `closer_handoff_terminal` only). Live incident session `2026-06-08-ce6ae444` ticket `1c1d094c` (T3, new `pattern-conformance-audit.ts`) during the R-RGED #105 build; babysitter recovered (fixed `(?!\s*EXCLUDED\.)` lookahead + dead initializer, committed `4f0df46b`, cleared current_ticket, relaunched → advanced to T4). **DISPATCHED → B-WMNP (Drain Queue row 30).** Source + 4 ACs: `prds/p2-bug-fix-bundle-r-wmnp-no-progress-cap-orderdeadlock.md`. |

### P3

| # | Code | Summary | Notes |
|---|---|---|---|
| ~~92~~ | R-RSBI | `resolve-scope.js` base inconsistency: the same `--scope paths:<glob>` resolved against `packages/api` for one run but the repo root for another → `SCOPE_EMPTY_PATHS`. Plus the abort copy conflated "dirty (out-of-scope)" with "no `.git` found". **CLOSED — SHIPPED v1.92.2 (B-SMAF).** R-RSBI-2: `resolve-scope.ts` resolves git toplevel via `git rev-parse --show-toplevel` before `repoRoot`; dirty+no-git abort copy split into two distinct messages (`b829b643`). |
| 97 | R-PFNP | `pipeline-runner.js` dirty-tree preflight ignore-prefix matches only **top-level** `docs/`/`prds/`; a PRD authored at a nested path (`packages/api/docs/prd/…`) is NOT exempted and blocks launch even though it's the docs/PRD churn the ignore set exists for. **✅ RESOLVED v1.101.0 (B-GNXR R-PFNP-8, 2026-06-05) — dirty-tree preflight matches docs/prds segments at any depth.** Secondary to #96 R-GNDT (same LOA-907 incident). Fix: match the path segment `docs/`/`prds/` at any depth, or make the ignore globs configurable (AC-R-PFNP-1). Source: `prds/BUG-REPORT-2026-06-04-pipeline-launch-gitnexus-statdrift-dirty-tree-abort.md`. Bundled in **B-GNXR** (Drain Queue row 27, ticket R-PFNP-8) — GitNexus-independent robustness fix, kept after the removal repoint. |
| 99 | R-WCUC | mux-runner no-progress detector fails a ticket `oversized_no_progress` (→ `closer_handoff_terminal`, pause) even when the worker has ALREADY produced complete, **gate-passing** output in the tree (just uncommitted) — keying on *commits landed* not *tree changes passing the gates* — so completed+verified work is **discarded** (wiped by the next clean-tree relaunch). **✅ RESOLVED v1.101.0 (B-GNXR R-WCUC-10, 2026-06-05) — commit gate-passing uncommitted worker output before failing.** LOA-907 session `2026-06-04-0204150f`, ticket 907.1 (full scaffold PASSED typecheck + buildGraph spec yet marked Failed; babysitter committed `1ecd3b915`). **FREQUENCY 2026-06-05:** `oversized_no_progress` is the DOMINANT codex failure — 907.0/907.1/907.2/907.2-ii/907.3 all hit it; only trivial single-file tickets converged → **6 babysitter recoveries in the first ~9 non-trivial tickets; codex pipeline effectively non-autonomous.** (907.5 = gate-FAILING variant: 5 fully-implemented nodes were 9 mechanical type-casts from green yet would have been discarded — concrete proof for AC-R-WCUC-2 preserve-diff + a worker last-mile design flaw; see bug report "Update 2026-06-05b".) Flags a separate codex-lifecycle-convergence investigation (8-phase lifecycle eats the 2400s budget pre-commit). ACs: AC-R-WCUC-1 commit gate-passing uncommitted work before failing; -2 preserve gate-failing diffs; -3 split failure_reason (`work_uncommitted` vs `no_work_produced`). Adjacent to #98 R-PRNF. Source: `prds/BUG-REPORT-2026-06-05-no-progress-discards-uncommitted-worker-output.md`. Bundled in **B-GNXR** (Drain Queue row 27, ticket R-WCUC-10). |
| ~~12~~ | R-PSAI | `/pickle-pipeline` ignores branch/subset signals in operator kickoff | **CLOSED — ALREADY SHIPPED v1.75.0 (`a159f959`, ticket `e789b21c`).** Stale finding. All 7 ACs present in HEAD (scope auto-inference clause + Step 8 report + branch-divergence safety prompt + `lock-scope.js` recovery + `ensureMonitorWindow` watchdog + docs + regression tests). 2026-06-01 re-launch produced only 6 README doc lines (no real work). |
| ~~19~~ | R-MMTR | claude manager max-turns family closeout pending | **CLOSED — SHIPPED v1.89.1 (B-R-MMTR).** R-MMTR-1/5 shipped; 2/3/4 healed close-by-evidence (commits in main); 7 closer ran (babysitter). Residual R-MMTR-6 oversized E2E ticket → **B-E2E** row 4b, ✅ SHIPPED v1.89.6 — residual fully closed. |
| ~~29~~ | R-MWCL | monitor `inferMonitorMode` falls through to `'pickle'` for szechuan/anatomy | **CLOSED — SHIPPED v1.80.2.** Stale "3..7 residual" note: all R-MWCL-1..7 shipped v1.80.2. inferMonitorMode returning 'pickle' is inert by design — pipeline anatomy/szechuan layout is driven by `state.step` via R-MDS `respawnMonitorWindowForMode` + `inferModeFromStep` (`monitor.ts:335`→microverse); regression `monitor-mode-transition.test.js`. No bundle needed. |
| ~~37e~~ | R-PIWG-5 | git-isolation residual: `lsof` launch-time concurrent-access probe | **CLOSED — SHIPPED v1.90.0 (B-LSOF).** Fail-OPEN `probeConcurrentGitAccess` extracted to `git-utils.ts`, advisory wire-in at `setup.ts` launch, new `concurrent_git_access_detected` event (warn-only), trap-door pin. |
| ~~87~~ | R-LASP | Deployed `bin/log-activity.js` resolved the activity schema via a `src/types/…` path install.sh never creates → ENOENT, fail-open. **CLOSED — SHIPPED v1.90.1 (B-LASP).** Resolver now `[src/types-first, root-second]` + install.sh copies the real schema to the deployed root (overwriting the 112B `$ref` stub) + deploy-parity regression test. Verified: deployed `log-activity.js` loads the schema (0 ENOENT). |

---

## Feature Epics

**Shipped:** R-PGI v1.83.0 · R-PIAP v1.84.0 · R-DC v1.85.0. PRDs retained in `prds/`.
**Queued:** _(none — all feature epics shipped/closed/shelved.)_ B-DWF (R-DWF) impl **✅ SHIPPED v1.91.0** (row 12: `refine-analyze.js` + `council-round.js` workflows + `SUBAGENT_PAYLOAD_SCHEMA` + skill wiring + tests, behind default-off kill-switches); the R-DWF-3/6 remainder is **⏸️ SHELVED as B-DWF-2** (row 13, soak-harness prereq unmet). `prds/p2-dynamic-workflow-conversion-refine-prd-council.md`.

### Deferred future epics

**Promoted to the Drain Queue 2026-06-02** (per operator — babysitter drains these after the bug bundles): `hermes-integration.md` → **row 16 B-HERMES** — **✅ VERIFIED ALREADY-SHIPPED (2026-06-09): dead PRD, closed as B-HERMES v1.92.2 (`28da8336`); hermes backend wired + 20/20 tests green; only the PRD's explicitly-deferred out-of-scope follow-ups (`--hermes-*` setup flags) remain. Manager emitted EPIC_COMPLETED, no work.** `p2-cli-backend-integration-pattern.md` (R-CBI, grok + kimi) → **row 17 B-CBI** — **✅ VERIFIED ALREADY-SHIPPED (2026-06-09): grok + kimi backends wired (`buildGrokWorkerInvocation`/`buildKimiWorkerInvocation` in spawn-morty, both in dispatch, grok-backend.test.js + kimi-backend.test.js present).** `god-functions-remediation-phase-2.md` → **row 18 B-GFR2** — REAL WORK (27 pre-existing god-functions w/ eslint-disable carve-outs to refactor + remove; P3). (`deepseek-integration.md` shipped as B-DSEK v1.92.0; `openrouter-multi-provider-workers.md` deleted 2026-05-30 — text-only, no tool use.)
**Remaining actionable feature epics (2026-06-09 — reconciled):** NONE. B-DWF was re-launched as a fresh build (session `2026-06-09-029117fa`) but a residual check confirmed it is **already shipped/shelved** — the "launch next" pointer was stale (never reconciled against rows 12/13). Impl R-DWF-2/4/5 **✅ SHIPPED v1.91.0** (row 12; workflows + schema + skill wiring + tests committed `285faf65`/`b07df25d`/`4fdccfbb`/`e1c322f2`/`9d8de9dd`, present on disk + gate-green); the R-DWF-3/6 remainder is **⏸️ SHELVED as B-DWF-2** (row 13; legacy refinement path deliberately retained for zero regression, re-attempt gated on a reliable soak harness). B-GFR2 (P3) is **✅ CLOSED** (row 18, operator declined the cosmetic carve-out refactor). Plan fully drained; sole residue is #25 R-CSI (external-event-gated). Manager emitted `EPIC_COMPLETED`, no implementation work (B-HERMES/B-CBI class). #108 R-WPEX cannot use B-DWF as a live repro (no actionable worker tickets remain) — it needs a different real-worker bundle.

- **Methodology PRDs — ALREADY SHIPPED (skills present, treat as design refs):** `portal-gun.md`, `pickle-debate.md`, `pickle-microverse.md` — corresponding `.claude/commands/*.md` exist; not pending work (residual-verify if ever re-opened).
- **Design docs (no ship target):** `citadel.md`, `pickle-dot-codegen-builder.md`, `council-of-ricks-catalog-mode-and-publish-fixes.md`, `plumbus-generative-audit-frames.md`, `pickle-agent-teams.md`, `smart-iteration-handoff.md`, `tool-error-retry-tracking.md` — design references, no implementation target.

---

## Engineering Rules

Detail in `extension/CLAUDE.md` + `prds/citadel.md`. Quick form:

1. **Atomic PRs** — one ticket per PR, independently revertible.
2. **Full release gate** — `cd extension && npx tsc --noEmit && npx eslint src/ --max-warnings=-1 && npx tsc && npm test` (+ audit scripts + `RUN_EXPENSIVE_TESTS=1 npm run test:expensive`). Green before tag.
3. **Source-of-truth** — edit `extension/src/*.ts` + `.claude/commands/*.md`; `bash install.sh` to deploy. Never edit `~/.claude/pickle-rick/`.
4. **Trap-door preservation** — every `extension/CLAUDE.md` invariant has an enforcing test.
5. **Hook decisions** — `"approve"` / `"block"` only.
6. **CLI guard** — `if (process.argv[1] && path.basename(process.argv[1]) === 'foo.js') { ... }`.
7. **Error handling** — `const msg = err instanceof Error ? err.message : String(err);` at boundaries.
8. **Versioning** — semver in `extension/package.json`; single bump per bundle at the closer.
9. **No dirty release** — all changes committed before tag; compiled JS matches TS source.
10. **Greenfield** — no legacy aliases, no backward-compat shims.

---

## Quick Reference

```bash
/pickle-status                       # formatted current session
/pickle-metrics                      # token/commit/LOC report
/pickle-prd                          # interview then PRD
/pickle-refine-prd <prd>             # 3-cycle decomposition
/pickle-tmux <prd>                   # launch ticket pipeline (tmux, all sizes)
/pickle-pipeline <prd>               # pickle, citadel, anatomy-park, szechuan-sauce
gh release create vX.Y.Z             # tag + publish
```

**Resume an active loop:** `node ~/.claude/pickle-rick/extension/bin/setup.js --tmux --resume <SESSION_ROOT>`.
Closer manager handoff runbook: `docs/closer-ticket-manager-handoff.md`. Babysitter: `prds/babysitter.md`.
