# TODOS ## NEXT PRIORITY ### P2/P3: reliability follow-ups deferrals (filed 2026-10-04, v1.91.21.0) Deferred from the approved reliability follow-ups plan (docs/designs/RELIABILITY_FOLLOWUPS_2026_10.md), each with its reason. - **Pre-push hook hang behind shard neighbors (B5)** — in CI both attempts of one free shard hung about half the `spawnSync` calls of `bun bin/gstack-redact-prepush`; four local reproductions at the failing revision (bare, the exact `--ci-run --shard 12`, 2 CPUs, HEAD) all passed. The hook's only blocking calls are `readFileSync(0)` and git `spawnSync` without a timeout. Hypothesis: an inherited pipe end keeps stdin open on the 2-vCPU runner. Next step: reproduce on a GitHub-hosted runner or Ubicloud with `strace -f` on the hook; once confirmed, give the hook's git calls a timeout. **Effort:** M. **Priority:** P2. - **Judge rubric anchors (C1, needs Garry: EVAL_POLICY)** — the pre-registered control panels (`docs/evals/judge-controls-2026-10.md`, 36 calls) showed every workflow judge separates gross breakage, but the qa workflow judge passed a /qa bundle with Phase 10 Report removed (no sample noticed) and the review judge passed /review with Step 3 removed (two of three samples noticed it and rated it minor); no positive sample scored 5 on any dimension. Missing-step coverage now lives in `test/workflow-required-steps.test.ts`. Proposal: anchor completeness/actionability 4 and 5 to named deliverables and inputs, as a pre-registered EVAL_POLICY change. **Effort:** M. **Priority:** P2. - **auto-decide-preserved: the CEO handoff line must reach the chat verbatim** — the native detector now credits the helper's AUTO_DECIDE line only when a chat message begins with it (Claude Code collapses the Bash result). One diagnostic run on the pre-verbatim wording paraphrased it; one on the verbatim wording passed. Watch the next censuses; a red here is a template miss, not a detector false red. **Effort:** S. **Priority:** P2. - **PTY sessions are cost-unknown** — `test/helpers/pricing.ts` excludes cache-write charges, so PTY trials stay `cost_known: false`. Price them from native transcript usage once pricing covers cache writes. **Effort:** S. **Priority:** P3. - **Custom SDK query providers stream no partial messages** — overlay-case, the ship hook/skip actors, workflow-boundaries and the setup-gbrain sandbox record raw events, so their ledger rows carry no stall evidence (never `provider_stall`). Let them drop `stream_event` rows and opt in to stream liveness. **Effort:** S. **Priority:** P3. - **Name PTY sessions by case** at their call sites so multi-case shards attribute ledger rows (single-case shards already do). **Effort:** S. **Priority:** P3. - **Red lines link the native-captures artifact** — they name the slice artifact; `native-captures-` embeds the job id, which the report job does not know. **Effort:** S. **Priority:** P3. - **EVAL_POLICY v2: provider_stall as INFRA** — decide with two censuses of `eval:pass-rates --reds` cause data (labels only today). **Effort:** S. **Priority:** P3 (Garry). - **Detector convert candidates (B2)** — `docs/evals/detector-inventory.md` lists 38 phrase-only checks with a structured source (top: S5 screen-first auto-decision, PTY plan_ready/silent_write from journal tool calls, setup selectors keyed on wording, the bws READY probe), and periodic "surface" checks that match the injected SKILL.md body (context-restore-*, scrape-prototype-path). **Effort:** M. **Priority:** P3. - **Retain the owned transcript tail in floor captures** — PR run 37176835584's public transcript never showed the pending Edit, so the B3 parser fix may not have been sufficient there. **Effort:** S. **Priority:** P3. - **CEO decision procedure latency** (~60 s per question: grid, save, Read-back, ask) bounds plan-ceo-mode-routing's 240 s post-selection window. Named, not cut. **Effort:** M. **Priority:** P3. - **Value-card JSON wording** — two of three qa-only judge samples still say "written JSON keeps full values" names no file. Name the JSON per mode (ship Step 7, /test-audit's sidecar) and drop the clause where no JSON carries cards. **Effort:** S. **Priority:** P3. - **Windows check of E4's private object directory** — `GIT_ALTERNATE_OBJECT_DIRECTORIES` uses `;` on Git for Windows (only matters when alternates are already set) and the `cygpath -m` conversion is unverified there. **Effort:** S. **Priority:** P3. - **Fresh /ship marathon case** — the marathon lane runs a fresh /plan-eng-review; a fresh /ship journey case is new harness work. **Effort:** M. **Priority:** P3. - **Refresh the E5/E6 duration seeds** — `codex-multiblock-live` (180 s) and `design-model-smoke` (90 s) are estimates in `scripts/paid-test-durations.json`; refresh them with `--write-durations` from their first census, and close "Periodic paid smoke for the default design model pairing" once it has run there. **Effort:** S. **Priority:** P3. - **Env-var hosts: optional runtime files outside the runtime root** — the Chrome extension lookup in /open-gstack-browser and /connect-chrome, and the prose pointers to `$GSTACK_ROOT/docs/...` and `$GSTACK_ROOT/scripts/...` (question-split guide, jargon list, question registry) name files the Codex/Factory runtime roots do not link. Executed fences are covered by `test/env-host-runtime-assets.test.ts`; these reads are not. **Effort:** S. **Priority:** P3. - **Product A/B against the stock host agent** — compare gstack end to end with the stock Claude Code/Codex agent on product outcomes (the overlay harness covers model-level deltas only). Its own project. **Effort:** L. **Priority:** P3. ### P2/P3: severe fix wave follow-ups (filed 2026-10-03, v1.91.19.0) Deferred from the approved severe fix wave (docs/designs/SEVERE_FIX_WAVE_2026_10.md), each with its reason. - ~~**Enforce the Bun floor at setup (#2815)**~~ — done in v1.91.21.0: setup refuses Bun below 1.3.3 and warns below 1.4.0; auto-update and /gstack-upgrade check the incoming floor before moving the checkout. Original note: — `engines.bun` is now `>=1.4.0` (the CI pin), but Bun does not enforce `engines` and setup never checks the version. Bun older than 1.3.3 silently ignores `--no-compile-autoload-dotenv` and `--no-env-file` (verified with 1.3.2), so D0's protection against a project's `.env`/`bunfig.toml` is silently off there. Setup should refuse or warn below the floor. **Effort:** S. **Priority:** P2. - **Windows Node CLI lane for Smart App Control (E3; #2596, #2595, #2124)** — a `dist/browse` wrapper would shadow `browse.exe` for every Windows user; launcher precedence (browse vs browse.exe vs browse.cmd under Git Bash and cmd) and the node-missing message need a Windows SAC machine to verify. **Effort:** M. **Priority:** P2. - **C8 router wording behind a routing panel** — disabled skills now leave the router, but the "When in doubt, invoke the skill" wording change (Tier 3) was not run through a routing eval panel. **Effort:** S. **Priority:** P3. - ~~**Cross-block variables on fresh-shell hosts: make-pdf `$P`**~~ — done in v1.91.21.0: env-var hosts re-derive `$P` in every block (MAKE_PDF_BIN honored). Original note: — make-pdf "exports" `$P` for later blocks, which Codex and the other env-var hosts lose between blocks (same class as `$B`/`$D`, which the shared prelude now re-derives). Add `P` to the runtime prelude or resolve it per block. **Effort:** S. **Priority:** P2. - ~~**#2709's recorded-Chromium reap never runs on Playwright 1.62**~~ — done in v1.91.21.0: the owned headless launch records the browser PID over CDP `SystemInfo.getProcessInfo`. Original note: — Playwright 1.62's `Browser` has no `process()`, so `chromiumProcInfo` is always null and the cleanup is a no-op (verified by probe). Record the PID another way (CDP `SystemInfo.getProcessInfo` or the launch server). **Effort:** S. **Priority:** P2. - **#2670's bash half in `bin/gstack-brain-sync`** — the TypeScript stage verdict now reports a 0-page artifacts source; the bash brain-sync still has no `index_failed` status file or page-count probe. **Effort:** S. **Priority:** P3. - **Navigation guard acts after the request is sent** — Playwright routing cannot see redirect hops, so a blocked hop resets the tab and fails the command after the request left. Pre-send blocking needs CDP Fetch interception, including out-of-process iframes. **Effort:** M. **Priority:** P3. - **Redaction repo allowlist (#2598)** — a per-repo `+++ b/` skip list (generated `*.svg`/`*.excalidraw`, #2827) for noise context rules cannot cover. New config surface, so out of the wave. **Effort:** M. **Priority:** P2. - **Global-discover Codex session schema (#2750)**, **ios-qa boot-token fixes (#1837, #1975; need a device)**, **absolute bun path for compiled browse spawns (#931; macOS repro unclear)** and **GitLab CI `curl | bash` (#1713)** — out of the wave's scope. **Priority:** P3 each. - **Upstream gbrain batch lookup** — a per-slug existence lookup and a separate `pending` list in `gbrain import --json`, so the landing check need not list a whole source and spawn `get` per page. **Effort:** M (upstream). **Priority:** P2. - **Memory follow-ups** — record repo identity for gbrain sources at registration (prune can prove ownership of a pre-wave source only from the same repository's main checkout); a deliberate migration of pre-wave transcripts out of `default` into per-repo sources (needs gbrain-side page moves); decide #2778's "nearest existing ancestor" attribution for deleted worktrees (risk: attributing to an unrelated parent repo like a dotfiles repo). **Priority:** P3 each. - **G2 on the TS twin** — `lib/bin-context.ts` (the Windows fallback) shares the common-dir slug keying but does not record former worktree buckets. **Effort:** S. **Priority:** P3. - **Codex follow-ups** — post-run `codex_sandbox_unavailable` telemetry (only the preflight logs it today); the Q2 first-use notice covers Codex only, not the Codex host's Claude Code outside voice; the bash-native timeout watchdog cannot reap grandchildren when `pkill` is missing; document enabling unprivileged user namespaces in common containers. **Priority:** P3 each. - **Live Codex multi-block check as a periodic paid case** — the wave ran it once by hand (fresh `CODEX_HOME`, fresh clone, `./setup --host codex`, one multi-block skill). Make it a periodic case so a regression shows up weekly. **Effort:** M. **Priority:** P2. - **/review's working-tree fingerprint under Codex's default sandbox** — the live Codex check (v1.91.19.0) showed `bin/gstack-wtree` exits 1 inside `codex exec -s workspace-write`, because Codex mounts `.git` read-only and the fingerprint writes untracked content into `.git/objects`. `gstack-review-log --start review` then fails with `cannot capture a diff review without a working-tree fingerprint` (loud, not a false pass), and `git fetch` cannot write `FETCH_HEAD`. Use a private object directory (`GIT_OBJECT_DIRECTORY` + `GIT_ALTERNATE_OBJECT_DIRECTORIES` under `$TMPDIR`) for the fingerprint, and report the fetch as stale-base coverage. **Effort:** S. **Priority:** P2. - **Closed by the wave's evals2 lane (run 37162480720):** Codex paid evals now run commands in CI (host-run job; all 8 Codex cases executed real commands), ship-exploratory-late-input no longer ends `inconclusive` (capture names the probes to rerun after an input change), plan-eng-multi-finding-batching's checker and office-hours-brain-writeback's prompt are fixed (3/3). plan-eng-review-artifact (0/4 since #3017) measured a shortcut prompt that skipped the workflow; it now drives the real interactive /plan-eng-review in a PTY. A fresh run needs more than its 600 s budget (498 s pass; 595 s timeouts in census 37174266054 and a local run), so the periodic case resumes at Test review from that census run's real Scope Challenge ledger (pass, 364 s) and the fresh run is the marathon case plan-eng-review-artifact-full. - **Gate-outcome telemetry** — count `not_run`/`unavailable` outcomes per reason code from `lib/gate-outcomes.ts` so the most common gaps get fixed first. **Effort:** S. **Priority:** P3. - **/gstack-upgrade redesign around the install registry**, a **marketplace distribution channel**, and a **placeholder convention for generated bash** (`` vs real syntax in fences). **Priority:** P3 each. - **Design CLI health subcommand** — the DESIGN SETUP probe uses `--version`; a richer `design health` could check the API key and model access too. **Effort:** S. **Priority:** P3. - **Autoplan publication hook under cmd.exe** — `scripts/resolvers/composition.ts` still registers `bash -c '