# TODOS ## NEXT PRIORITY ### P3: `/codex --effort` follow-ups (filed 2026-10-11, from the #3146 autoplan review) - **Show the effort that ran.** Step 0.5 prints `CODEX_EFFORT: (source: /codex --effort)` once, but the result footers do not repeat the effort, so it scrolls away. Add an `Effort:` line to the review, challenge and consult result footers. Blocked on skeleton bytes in `codex/SKILL.md` (cap 60,200). **Effort:** S. **Priority:** P3. - **Timeouts at high effort.** `xhigh`, `max` and `ultra` can exceed the fixed 330 s / 540 s wrappers, and the timeout copy blames prompt size or API speed. Name the effort in the timeout message and suggest a lower `--effort`; consider effort-scaled budgets. **Effort:** S. **Priority:** P3. - **Per-run effort for gate voices (#2934).** `/review`, `/ship` and plan-review outside voices take `GSTACK_CODEX_EFFORT` and `codex_effort` but have no per-request flag; the Claude Code runner takes no effort at all. Needs its own precedence and consent review. **Effort:** M. **Priority:** P3. - **`minimal` with web search.** Every `/codex` dispatch passes `web_search="cached"`, and Codex reportedly rejects that with `reasoning.effort: minimal` (openai/codex#3559, #5002). Unverified here (no Codex CLI on the release machine); the same path already ships through `codex_effort minimal`. Verify on the pinned CLI and drop web search for `minimal` if it fails. **Effort:** S. **Priority:** P3. ### P2/P3: open bugs by area after the Wave 9 triage (filed 2026-10-11) The 158 older open issues were re-checked against main 5cb5e1c (v1.91.83.0). Of the 30 still-valid bugs, Wave 9 lanes take #915, #1080, #1081, #1150, #1315 and #1675 and park #2118 and #2623 (next section). The rest stay open here: issue, root-cause file, size. Bugs already tracked elsewhere in this file point there instead of repeating it. - **Plan reviews and planning artifacts** - #280: plan-eng-review never reads the CEO plan. Its Step 0 discovery has no `ceo-plans/` lookup (only `design-html/SKILL.md.tmpl` and `bin/gstack-context-recovery` read it). Add a `gstack-ceo-plan-find` sibling of `bin/gstack-design-doc-find`; leave the per-branch review log alone. **Effort:** S. **Priority:** P3. - #542: an office-hours design doc written in host plan mode lands in `~/.claude/plans/`, which `bin/gstack-design-doc-find` never reads, so the two copies drift. Pick one authority and warn on a stale copy. **Effort:** M. **Priority:** P2. - #1048: "smallest clear diff" in `plan-eng-review/SKILL.md.tmpl` and `plan-ceo-review/SKILL.md.tmpl` has no schema-design carve-out, so it biases reviews toward JSON blobs. Add one tradeoff bullet, with a paid before/after case. **Effort:** S. **Priority:** P3. - #1791: every plan-eng-review run writes a fresh `tasks-eng-review-.jsonl` with no branch in the name and no reconciliation (`scripts/resolvers/tasks-section.ts`). Put the branch in the name and supersede earlier sets. **Effort:** M. **Priority:** P3. - #1957: /autoplan Phase 0 prints no matched-terms line for UI scope and keeps UI and DX terms in two places (`bin/gstack-autoplan-snapshot.ts`, `lib/autoplan-prompts.ts`). One shared terms module, and a `borderline` flag in the printed line. **Effort:** M. **Priority:** P3. - **Review** - #356: `/review` has no repo-convention check, so a `.bat` added to a bash-and-Make repo passes. Add it to `review/specialists/maintainability.md`. **Effort:** S. **Priority:** P3. - **Office hours and design** - #340: the approved sketch stays in a purgeable `mktemp` dir and no downstream design skill reads it (`scripts/resolvers/design.ts`). Copy it next to the design doc and have plan-design-review and design-review read it. **Effort:** S. **Priority:** P3. - **Questions** - #1319: the AskUserQuestion format (`scripts/resolvers/preamble/generate-ask-user-format.ts`) has no layout or length rule, so long briefs render as a wall of text. Add block separation and per-block caps, with a free test that includes a CJK case. **Effort:** M. **Priority:** P2. - **Setup and upgrade** - #954: vendored installs get absolute symlinks from `_link_or_copy` in `setup`. Use relative links when the source sits in the same skills dir. **Effort:** S. **Priority:** P3. - #1022: a parent repo that tracks the install dir silently reverts VERSION after each upgrade. Detect it with `git ls-files --error-unmatch` in `setup` and `gstack-doctor`, and print the `git rm --cached` commands. **Effort:** S. **Priority:** P3. - #2120: `bin/gstack-patch-names` and setup's per-skill link loops fork about four times per skill, which deadlocks x64-emulated Git Bash on Windows ARM64. Make the read path fork-free. Unverified without an ARM64 Windows host. **Effort:** M. **Priority:** P2. - #2378: update-check compares VERSION while `/gstack-upgrade` installs HEAD. Tracked under the v1.67 fix-wave deferrals ("#2378 release-tag upgrade semantics"). **Priority:** P3. - **Build** - #407: `bun build --compile` in `scripts/build.sh` writes straight to `dist/`, and Bun's rename fails on virtiofs devcontainer mounts. Compile to a local temp dir and move. Repro unconfirmed on current Bun. **Effort:** S. **Priority:** P2. - **Windows binaries** - #2124, #2595: Smart App Control blocks the locally compiled browse.exe. Tracked under "Windows follow-ups from the October fix wave"; blocked on Garry's signing account. **Priority:** P2. - **Safety hooks** - #1060: tracked as "Quote-aware masking in `check-careful.sh`" under the Oct 8 safety hooks follow-ups. **Priority:** P3. - **Sessions** - #1651 part B: tracked under the office-hours and timeline follow-ups above. **Priority:** P3. - **/cso** - #2993: tracked under the /cso capacity follow-ups above. **Priority:** P2. - **Dependency security ledgers** (not code defects; keep open until the trigger) - `.osv-scanner.toml` ignores katex 0.16.47 in lib/diagram-render (GHSA-238p-pmpm-9mq7, low) until 2027-01-31. The fix (0.18.2) is outside mermaid 11's range; when mermaid-js/mermaid#8388 ships, override katex, rebuild the bundle and drop the ignore. **Effort:** S. **Priority:** P3. - #2753 residual: html-to-docx 1.8.0 bundles its own image-size 1.x, which the package.json override cannot reach. `make-pdf --to docx` never hands it ICNS bytes (make-pdf/src/docx-images.ts), but with `--allow-network` html-to-docx downloads remote images and sizes them itself. Inline remote images before the guard for docx, or replace html-to-docx. Revisit 2026-12-15. **Effort:** M. **Priority:** P2. - **Tests and CI** - #2756: the periodic lane. Tracked under "Periodic-lane stabilization (#2756)". **Priority:** P2. - #2967: `test/redact-prepush-scan-range.test.ts` (and its rebase twin) run fixture pushes with the inherited global config, so a developer's `core.hooksPath` pre-push runs inside the fixture. Set `GIT_CONFIG_GLOBAL=/dev/null` and `GIT_CONFIG_NOSYSTEM=1` in the helper. **Effort:** S. **Priority:** P3. ### P3: parked in Wave 9 (filed 2026-10-11) Each item was decided in the Wave 9 plan and parked with its reason. Credit the reporter or contributor when it is picked up. - **Fold `triggers:` into skill descriptions (#2118)** — `scripts/gen-skill-docs.ts` folds only `voice-triggers:`, and the trimmed description keeps one sentence, so natural-language triggers never reach the listing. Parked because it conflicts with the catalog-trim design and would regenerate every skill. Mechanism when picked up: a `when_to_use:` frontmatter key for the Claude host, built from `triggers:`, deduped, and kept inside the catalog byte budget (Claude Code's 1,536-character combined listing limit); hosts that allowlist name and description get a bounded "Use when…" sentence or nothing. **Effort:** M. **Priority:** P2. - **Plan-tune signals stuck at 0.5 (#2623)** — `hosts/claude/hooks/question-log-hook.ts` logs the UI label, while `scripts/psychographic-signals.ts` looks up stable option keys, so no row ever matches. The two-line key mapping is capture plumbing only and does not fix saturation. Acceptance criteria: labels map to stable option keys at log time; `profile.inferred` records contributing events per dimension; per-event and per-session accumulation is bounded so a dimension cannot pin at 1.0; `{skill}-{slug}` ids get a hinted fallback. Needs a design call on the key source. **Effort:** M. **Priority:** P2. - **Stateless, instruction-only host mode (#3061, @m-check1B)** — hosted multi-tenant runtimes have no install, state root or helper binaries, but skill bodies still read and write `$GSTACK_STATE_ROOT`, call `bin/gstack-*` and log telemetry. Deferred to the new-hosts theme below. Requirements kept on record: tenant-owned state (a `capabilities.state: 'none'` host renders host-provided hooks instead of shell steps), named artifact hooks (`ARTIFACT_SAVE`/`ARTIFACT_FIND` per kind, `WEB_RESEARCH`, `SECRET_SCAN`, `USER_PREF`) mapped the way the gbrain resolvers already are, a generator check that fails a stateless render containing `~/.gstack`, `$GSTACK_`, `bin/gstack-*` or `--event-type`, and the `claude` host's output byte-identical. The contributor offered an office-hours overlay plus the generator check as a first PR. **Effort:** L. **Priority:** P3. - **Legacy unprefixed Cursor skill folders (#3084)** — 1.31 Cursor installs created `~/.cursor/skills//SKILL.md` links; 1.91 links `gstack-*` folders and `_prune_stale_generated` in `setup` only looks at `gstack-*` names, so Cursor can load two skills with the same name. `setup` already removes old unprefixed Claude entries; Cursor needs the same owned-link cleanup (remove only links that point into a gstack checkout). Split from #3084's data-loss fix, which Wave 9 Lane A0 ships. **Effort:** S. **Priority:** P3. - **`/retro global` says what a "session" is (#1315, third problem)** — `bin/gstack-global-discover.ts` counts transcript files and rollouts, so cron- or agent-driven repos show hundreds of "sessions" with no interactive work. Annotate the retro output that sessions are tool invocations or files, not distinct human working sessions. Problems 1 and 2 are fixed (v1.91.66.0 and Wave 9 Lane F). **Effort:** S. **Priority:** P3. - **`gbrain put` stdin pipe in `lib/code-intelligence/gbrain-adapter.ts` (#1675)** — `put` sends the document body on stdin (`#runInput(["put", slug], body)`), the same shape #1675 hit on Windows in setup-gbrain's smoke test, which Wave 9 Lane G changes to a temp file. Check gbrain's stdin handling on Windows at the pinned version first; if it is still broken, pass the body through a private temp file or the MCP `put_page` path. **Effort:** S. **Priority:** P3. ### P3: feature themes from the Wave 9 triage (filed 2026-10-11) The 73 open feature requests, grouped by theme with counted demand (issues in the theme). Each issue closes with a link to its theme here; the three largest cross-cutting themes (new hosts, provider pluralism, install footprint) stay open as tracking issues. Pick a theme up as a whole and credit every linked reporter. - **New hosts (8 issues, plus #3061 above and 9 PRs parked on Oct 8)** — Kimi CLI (#1072), Gemini CLI (#1247), Pi Agent (#1288), Claude Desktop Cowork (#1345), Letta Code (#2117), team mode for non-Claude hosts (#890), `/retro global` discovery of Antigravity (#1977) and Kimi Code / OMP sessions (#2917). Waits for the host-config work; see "Parked contributor ideas (Oct 8 triage)" for the parked host PRs. **Priority:** P3. - **Provider pluralism (7 issues, plus #3122)** — Gemini CLI as an outside-voice backend (#619), non-OpenAI image providers in `design` (#990), Codex-native `image_gen` in the `design` binary's own generate, evolve and prototype calls (#2174; design-shotgun itself already uses `$imagegen` on Codex since #2175), GPT-6 Sol/Luna tiers in Codex call routing (#2943), a `/grok` review port (#2947), Codex review token usage (#2948), Codex refresh-token recovery docs (#1542), and a configurable PR review bot instead of hard-coded Greptile in /review, /ship and /retro (#3122, folded here by decision D4). One provider seam serves all of them. **Priority:** P3. - **Install footprint and layout (7 issues)** — skills.sh distribution (#113), `~/.gstack` as the global install path (#753), a repo-local install that keeps state in the project (#1235), five compiled binaries each bundling Bun (#1245), Windows junctions instead of copies (#1877), the 1.1 GB `~/.claude/skills` footprint (#2199), and a skill-only mode (#2528). Decision D6: setup keeps the staged copy on Windows, because it works today and links change what every cleanup deletes; #1943 (@JonasFocus, junctions) and #2129 (@TTmo123, symlinks with the privilege check) are closed with credit and their designs stay here as the starting point. See also "install footprint follow-ups from the October fix wave". **Priority:** P3. - **New skills (12 issues)** — GUI kanban for plan reviews (#247), journey maps (#729), UI-doc review (#851), assumption verification `/avl` (#1058), `/a11y-check` (#1104), `/env-check` (#1106), native plan writing (#1170), `/plan-experiment` and `/review-experiment` (#1195), `/plan-status` (#1343), language-specific reviewers (#1753), `/benchmark-mobile` (#1754), session start/end skills (#2088). **Priority:** P3. - **Ship, review and safety (9 issues)** — `/review` shadowing the native command (#422), a silent-deploy-failures checklist section (#2089), Conductor TODO proposals and a /ship block on unresolved ones (#2090), a light-ship mode (#2188), auditing an issue before filing it (#2642), maintainer-gated CI versus failures in landing-report (#2766), Flutter pubspec versions with build metadata (#2833), a deterministic fact-consistency check for document skills (#2887), a dual-engine /careful guard (#2888). **Priority:** P3. - **Planning reviews (8 issues)** — marketplace-aware skill recommendations (#419), founder-signal reasoning in the YC recommendation (#513), grounded verification of paths, math and flags in spec reviews (#973), a substrate-neutral existing-capability check (#1685), `/autoplan --tier` (#1955), autoplan workspace safeguards (#1959), splitting one-way architecture forks from two-way defects (#2490), an evidence ledger for "is demand real?" (#2350). **Priority:** P3. - **State root and project identity (6 issues)** — repo-local portable context artifacts (#1161), design-doc archive and prune (#1536), umbrella directories over several repos (#1923), reclaiming per-repo `.gstack` state (#2627), nested repos declaring themselves projects (#2649), references and disposition on decision events (#2678). **Priority:** P3. - **Browser and mobile QA (6 issues)** — a remote browser via `BROWSER_WS_ENDPOINT` (#974), per-session tab isolation (#1961), an opt-in User-Agent suffix and default headers (#2459), skipping the Aside probe on Linux and Windows (#2864), activity-ring copies on caught-up reads (#2973), touch input and mobile Safari (#3058). **Priority:** P3. - **Prompt cost and skill shape (4 issues)** — a response-header template (#1376), caching preamble output within a session (#1572), the Fable 5 prompting-guide audit (#1994), per-skill benefit in `gstack-context-bill` (#2889). **Priority:** P3. - **Customization and localization (3 issues)** — locale-aware skills (#481), a tutorial on new customization dimensions (#489), a `SKILL.local.md` overlay (#1759). **Priority:** P3. - **Retro (2 issues)** — a team-scoped multi-repo retro (#402), ADR and issue awareness in the narrative (#2284). **Priority:** P3. - **CI supply chain (1 issue)** — artifact attestations for the GHCR CI images (#2003). **Priority:** P3. ### P2/P3: office-hours and timeline follow-ups (filed 2026-10-08, v1.91.54.0) Left open by the office-hours tier fix (#2801, #879, #1049, #1958, #1723, #1651 part A). - **Session markers that reflect "currently active" (#1651 part B)** — skill start touches `sessions/` only when a skill starts, so a long session with no new skill for two hours drops out of `SESSIONS: N`. Fix shape: refresh the marker per tool call from a hook. **Effort:** M. **Priority:** P3. - **Live eval for the first-session closing** — free tests run the rendered profile read and session log in order, but no paid case checks that a model follows the carried `SESSION_TIER` through Phase 6 (first run gets the introduction, second run asks about the earlier assignment). No office-hours quality judge exists either. **Effort:** M. **Priority:** P2. ### P3: Oct 8 fix wave, safety hooks follow-ups (filed 2026-10-08) Left open by the PowerShell/NotebookEdit hook fix (v1.91.47.0, #3067), each with its reason. - **Forced overwrite patterns for `/careful`** — `Set-Content -Force` / `Out-File -Force` over an existing file (and the Bash `>` overwrite twin) still pass. Deferred: the Bash side has no overwrite pattern either, and adding one is a new family for both shells, not PowerShell parity. **Effort:** S. **Priority:** P3. - **Quote-aware masking in `check-careful.sh` (#1060)** — `git commit -m "rm -rf build"` still asks. Deferred: masking quoted text inside a safety hook can open bypasses (PR #1110's `echo hi; rm -rf ~` showed how); it needs its own design with the #1110 strings as controls. **Effort:** M. **Priority:** P3. - **Hooks on Windows without Git Bash** — the frontmatter hook commands run `bash -c ...`, and Claude Code runs hook commands through PowerShell when Git Bash is absent, so the guards cannot start there. gstack requires Git Bash today; a native PowerShell hook launcher would lift that. **Effort:** M. **Priority:** P3. ### P2/P3: iOS QA fix-wave follow-ups (filed 2026-10-07, v1.91.38.0) Left open by the iPad and route-drop release, each with its reason. - **Device verification of v1.91.38.0** — the iPad bootstrap, route-drop recovery on a real Xcode 26 tunnel drop, the multiple-devices error and the `NOT READY` path were proven only against the simulated device; the changed `StateServer` passed `swiftc -parse` but no Apple-SDK build. Run `test/skill-e2e-ios-device.test.ts` and the Swift build lane on a Mac with an iPhone and an iPad. **Effort:** S. **Priority:** P2. - **`GSTACK_IOS_LAUNCH_ENV` (split from #1796, @Bmathews721)** — pass launch environment to the app through `devicectl process launch`. Nothing equivalent exists on main; land it as its own small PR with credit, then close #1796. **Effort:** S. **Priority:** P2. - **A restarted daemon still relaunches the app once** — a new daemon has no session bearer and the one-use boot token is gone. Fixing it needs either a device-side re-mint with proof of the old session or a persisted bearer under the state root, and both change the token's security model. Needs a design. **Effort:** M. **Priority:** P3. - **iPad Stage Manager and multiple scenes** — overlay and window selection (`frontmostWindow`, `searchRoots`) are unverified on iPad multi-window layouts. **Effort:** S (verify) / M (fix). **Priority:** P3. - **Stale "Session warm-start" phase in `/ios-qa`** — Phase 0 describes an `ios-qa-session.json` cache that no daemon code writes. Implement it with the state-root chain or remove the phase. **Effort:** S. **Priority:** P3. - **Sanctioned input-routing hook for SwiftUI gestures** (#1975 finding 2) — synthesized touches miss `DragGesture` on iOS 26; a documented `#if DEBUG` hook would let gesture-driven apps route `/tap` and `/swipe` to their own handlers. **Effort:** M. **Priority:** P3. ### P1/P2: /cso capacity follow-ups (filed 2026-10-08) Left open by v1.91.42.0, which lifted the snapshot file-count ceiling. - **Tracked symlinks refuse the whole /cso run** — `capture()` fails closed on any tracked symlink ("Symlink or special source file"). 5 of 8 mid-size OSS repos measured for v1.91.42.0 stop there (django, rails, terraform, grafana, vscode; 1-10 symlinks each, mostly test fixtures). Recording them as unread exclusions in the manifest, like dependency trees, is a security design call for Garry. **Effort:** M. **Priority:** P1. - **64 MiB aggregate source cap (#2993)** — files over 1 MiB are withheld from the audit but still read and counted. Stream-hash them without counting toward the cap, report them as unread coverage, and add an admission estimate to `doctor`. grafana (211 MiB) and vscode (540 MiB) hit it once symlinks are out of the way. A `GSTACK_CSO_SNAPSHOT_MAX_BYTES` knob was deferred with it. **Effort:** L. **Priority:** P2. - **`inspect` prints the whole public manifest** — about 2.8 MB of stdout for 5,000 files, more than an agent's tool output keeps. The skill reads paths from it, so trimming it is a skill-contract change with evals. **Effort:** M. **Priority:** P2. - **Repair bundles carry every transformation** — `lib/cso/verification.ts` binds the full transformation list into a 1 MiB immutable bundle. Only runtime verification writes bundles, and no qualified runtime catalog exists yet. **Effort:** M. **Priority:** P3. ### P2/P3: iOS QA fix-wave follow-ups (filed 2026-10-07, v1.91.38.0) Left open by the iPad and route-drop release, each with its reason. - **Device verification of v1.91.38.0** — the iPad bootstrap, route-drop recovery on a real Xcode 26 tunnel drop, the multiple-devices error and the `NOT READY` path were proven only against the simulated device; the changed `StateServer` passed `swiftc -parse` but no Apple-SDK build. Run `test/skill-e2e-ios-device.test.ts` and the Swift build lane on a Mac with an iPhone and an iPad. **Effort:** S. **Priority:** P2. - **`GSTACK_IOS_LAUNCH_ENV` (split from #1796, @Bmathews721)** — pass launch environment to the app through `devicectl process launch`. Nothing equivalent exists on main; land it as its own small PR with credit, then close #1796. **Effort:** S. **Priority:** P2. - **A restarted daemon still relaunches the app once** — a new daemon has no session bearer and the one-use boot token is gone. Fixing it needs either a device-side re-mint with proof of the old session or a persisted bearer under the state root, and both change the token's security model. Needs a design. **Effort:** M. **Priority:** P3. - **iPad Stage Manager and multiple scenes** — overlay and window selection (`frontmostWindow`, `searchRoots`) are unverified on iPad multi-window layouts. **Effort:** S (verify) / M (fix). **Priority:** P3. - **Stale "Session warm-start" phase in `/ios-qa`** — Phase 0 describes an `ios-qa-session.json` cache that no daemon code writes. Implement it with the state-root chain or remove the phase. **Effort:** S. **Priority:** P3. - **Sanctioned input-routing hook for SwiftUI gestures** (#1975 finding 2) — synthesized touches miss `DragGesture` on iOS 26; a documented `#if DEBUG` hook would let gesture-driven apps route `/tap` and `/swipe` to their own handlers. **Effort:** M. **Priority:** P3. ### P3: Parked contributor ideas (Oct 8 triage) Contributor PRs closed as "later" during the Oct 8 triage. Each is a reasonable idea parked until its theme is picked up; credit and reference the PR when it is. - **New hosts** — Kimi Code (#2674), Pi (#2507, the most complete), Gemini CLI (#2309, decide together with Antigravity since both use `~/.gemini`), Qoder (#2116, its `--dir` setup flag could land on its own), Grok Build (#2028), Zed (#1785, the `~/.agents/skills` collision with Codex needs a decision), Mistral Vibe (#1640), Factory Droid symlink discovery (#660, verify on a real Droid install first), Claude Code plugin marketplace (#526, once /browse, /careful and /freeze work from plugin installs). New hosts wait for the host-config work; Antigravity ships first. **Priority:** P3. - **Backup-browser (`$B`) features** — `record` video evidence (#2497), WebAuthn virtual authenticator (#2297), device/geo/locale/timezone emulation (#2064), request interception `route` (#2063, needs a deny-default allowlist design), Chromium launch overrides with a denylist (#1933), extra Chrome extensions via the existing `BROWSE_EXTENSIONS_DIR` (#1144), Flutter Web semantics for snapshots (#511). Revisit each alongside an Aside equivalent. **Priority:** P3. - **Outside voice and Codex** — a reasoning-effort knob in the model-tier config from v1.91.45.0 instead of new env vars (#2934), cross-host plugin distribution (#2723), Review Army on Codex behind a paid quality eval (#2648), the /investigate falsification prompt as a Codex outside voice (#2535), Codex install paths moving to `~/.agents/skills` as a planned migration (#2123), Codex CLI freshness in gstack-doctor's Codex row (#1861). **Priority:** P3. - **Memory and learnings** — signal-gated learnings capture with helpful/harmful counters (#2030), semantic dedup folded into `/learn prune` (#2029), docs-aware gbrain sync on the current orchestrator (#2438), a registry-independent plan-tune autonomy signal after fixing signal keys vs logged labels (#2625). **Priority:** P3. - **Ship and review** — a pre-PR upstream duplicate audit as an opt-in (#1696), preview deploy plus browser check before PR creation as a designed section (#685), the header-derived-gate testing bullet (#2860). **Priority:** P3. - **QA, design and other skills** — accessibility review folded into /design-review or /qa (#2476), per-finding QA evidence layout (#1484), a cognitive-load checklist item in the shared design checklist (#696), local-model benchmarking via an Ollama adapter (#1495), measured context-bill benefit estimates (#3021), a REMOTE_CONTROL trigger for the AskUserQuestion prose fallback if the host bug persists (#459). **Priority:** P3. ### P2/P3: Oct 7 fix-wave follow-ups (filed 2026-10-07) Left open by the Oct 7 wave (docs/designs/FOLLOWUP_WAVE_2026_10_07.md), each with its reason. - **/autoplan Bash cards in Manual mode after a background reviewer** — after a background reviewer's notice starts a new turn, the skill's allowed tools stop applying, so /autoplan's Bash calls (snapshot tool, outside voice, review log) ask in Manual mode; auto mode routes them to its classifier. Options: hook approval of exact snapshot-tool invocations, or a one-time explanation. **Effort:** M. **Priority:** P3. - **Reviewer input card for sessions started below the repo root** — skill hooks don't run inside subagents, so a reviewer reading its input from the repo's `.gstack/tmp/autoplan/` asks when the session started in a subdirectory. **Effort:** S. **Priority:** P3. - **Every-transition manual /autoplan session on 2.1.292** — the replay fixtures and the scripted live boundary (foreground and `--bg`) cover the guard; one full recorded run through every phase transition is still to do. **Effort:** S. **Priority:** P3. - **Remove the sourced Codex probe (on or after 2026-10-21)** — delete the sourcing path of `bin/gstack-codex-probe`, its deprecation line, the zsh self-locate block, the probe's entry in the zsh sourced-helper test and `test/helpers/codex-probe-sourcing.ts`. **Effort:** S. **Priority:** P3. - **Move the remaining PR and issue writers to gstack-post** — /document-release's PR body and title edit (with its own scan) and the test-failure triage issue (`--assignee`) still call gh/glab directly. **Effort:** S. **Priority:** P3. - **`gstack-doctor --json`** — machine-readable rows for CI and bug-report bots. Deferred as DX polish. **Effort:** S. **Priority:** P3. - **Doctor guard check against a named session journal** — run the guard's reader on a given journal from `gstack-doctor`. Deferred: doctor runs outside a session and the design is unclear. **Effort:** M. **Priority:** P3. - **One secret scanner for artifacts sync** — replace `bin/gstack-brain-sync`'s Python scanner (and the hook copies written by init and restore) with `lib/redact-engine.ts`. Deferred: a cross-language rewrite outside the per-file hold. **Effort:** L. **Priority:** P3. - **Timed novice install journey** — measure a fresh install to a first skill run, end to end. Deferred: outside a fix wave. **Effort:** M. **Priority:** P3. - **Native Windows Docker transport for /cso (#3028)** — `lib/cso/docker.ts` accepts only `unix:///` endpoints, so /cso on Windows reports "static assessment only" even with a trusted `docker.exe`. Add named-pipe transport with the same trust checks. **Effort:** L. **Priority:** P2. ### P2/P3: reliability follow-ups deferrals (filed 2026-10-04, v1.91.30.0) Deferred from the approved reliability follow-ups plan (docs/designs/RELIABILITY_FOLLOWUPS_2026_10.md), each with its reason. - **Free-suite git hang behind shard neighbors (B5): Bun spawnSync loses the child's exit (oven-sh/bun#34069, open upstream)** — CI shard 1 (PR runs 37242691914 and earlier) timed out `execFileSync`/`spawnSync` git calls in redact-prepush-rebase-force-push, render-sections-provenance and shared-libs-stage-actor. A watcher on Ubicloud caught it: every "hung" git is a zombie (exited, never reaped) while the `bun test` main thread runs, matching the upstream report. CI's shard-1 file list reproduces it in about 3 of 60 runs (none of 20 without pty-workspace-trust, not significant). Next step: move the git calls in shared fixture helpers to async spawn with a hard timeout, or take a Bun release that fixes #34069. **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 no longer depends on the model** — periodic run 37272185151 went red because the model led its chat with a paraphrase; a reminder beside the line measured 1/10. The Oct 6 wave shows the line through /plan-ceo-review's PostToolUse hook (system message), which measured 10/10 with the line visible in every trial while no trial's chat led with it. The native detector still credits only a chat that begins with the line; if the screen path ever stops carrying the hook message, make the detector read the hook's record instead. **Effort:** S. **Priority:** P3. - **Named red: ship-docsync-late-result on PR run 37237194905** — the model wrote its report to a mistyped shard root (`…-3GanyY` for `…-3GanyU`) at call 20, disclosed it, then wrote the real report at the right path. The authority detector is correct (the file was created outside the fixture); `test/docsync-authority.test.ts` replays the capture. If any docsync case writes to a near-miss shard path again, give the model a short stable fixture root (env var or fixed short symlink) instead of random tokens to copy, without loosening the authority check. **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. ### P1–P3: test/eval/CI audit wave follow-ups (filed 2026-10-04) From the approved 2026-10 test/eval/CI audit plan; the audit PR files these. - **Post-merge audit metrics (due merge + 7 days)** — run `bun run test:health --since-days 7` and record the PR full-fallback rate, recorded PR-lane spend per merged PR (target: down at least 50%), cancelled slice-minutes per week, push-to-verdict p50/p95 and the free flaky-pass rate in `docs/test-audit-2026-10.md` as a dated follow-up. **Effort:** S. **Priority:** P1. - **Census reliability metric (due after the fourth scheduled census after merge, about merge + 28 days)** — run `bun run test:health --since-days 28` and record expected failed trials per periodic run (target at most 1.0) and per gate census (target at most 0.5), each as raw trial failure rate, false-blocking probability and the old-policy re-aggregation. A miss opens a P1 entry here with the per-kind, per-failure-class breakdown. **Effort:** S. **Priority:** P1. - **Remove the one-release command stubs** — delete the retired package scripts (`test:evals`, `test:evals:all`, `test:e2e`, `test:e2e:all`, `test:gate`, `test:periodic`, `test:codex`, `test:codex:all`, `eval:bg`, `eval:bg:all`, `eval:flake-rank`, `eval:watch`, `test:audit`), `scripts/retired-command.ts`, `test/retired-commands.test.ts` and CONTRIBUTING.md's "Retired commands" table. They exist only to redirect old agent memories and docs. **Depends on:** the audit release shipped. **Effort:** S. **Priority:** P2. - **Reclaim `test:gate` / `test:periodic` for the sharded runner** — after the stubs are gone, point the short names at `test-paid-shards.ts` and retire the `:sharded` suffix. **Depends on:** stub removal. **Effort:** S. **Priority:** P3. - **One diff-aware command for free + paid checks** — plan `test:quick` and the paid PR profile from the same touchfile closure so one command answers "what does my diff need?". **Effort:** M. **Priority:** P3. ### P2: Windows follow-ups from the October fix wave (PR C1) - **Sign the Windows binaries so Smart App Control allows them (#2595, #2124)** — `browse`, `find-browse`, `design`, `pdf` and `gstack-global-discover` are compiled on the user's machine with `bun build --compile`, so they are unsigned and never gain reputation; Smart App Control blocks all five. PR C1 only detects and explains the block (setup hint, gstack-doctor rows, troubleshooting section). The fix is Authenticode-signed release artifacts (for example Azure Trusted Signing) that setup downloads and verifies instead of compiling, or a signed launcher. **Needs:** Garry's code-signing account and certificate decision; a Windows 11 machine with Smart App Control on to verify. **Effort:** L. **Priority:** P2. - **Find what deletes the staged CSO files during publish on #3071's machine** — PR C1 made the failure non-fatal, cleared the parent's EXIT trap before the native publisher `exec`, and records the outcome, but the root cause is unproven (one reporter; `windows-latest` CI publishes fine). Ask for `bin/.gstack-cso-build.log`, `bash -x scripts/build-cso.sh` and a Process Monitor trace of the stage directory. **Effort:** M (needs the reporter's machine). **Priority:** P3. - **Verify the Smart App Control error text on a real SAC machine** — the launch probe (`bin/gstack-launch-probe.sh`) classifies exit 126/127 and application-control messages as blocked from reporters' captures; nobody has run it on an enforcing machine. **Effort:** S. **Priority:** P3. ### P2/P3: install footprint follow-ups from the October fix wave (PR C2, v1.91.65.0) - **`scripts/ship-measure.ts` on env-var hosts** — /ship's measure loop runs `$GSTACK_ROOT/scripts/ship-measure.ts`, which imports gstack's test helpers and eval harness, so a Codex/Factory/... runtime root would need most of the development tree. It is the one `$GSTACK_ROOT` path `test/runtime-root-assets.test.ts` defers. Either make ship-measure self-contained or have the skill call it from the source checkout (`.source-path`). **Effort:** M. **Priority:** P3. - **Rendered `SKILL.md` copies inside runtime roots are discoverable** — `office-hours/SKILL.md` (#2449) and now `plan-design-review/SKILL.md` sit in `~/.codex/skills/gstack//` because skills read them as `$GSTACK_ROOT//SKILL.md`. A host that scans its skills dir recursively may list them beside `gstack-`. Pointing those reads at the sibling registry path, as /autoplan does, removes the copies; that is a prompt change and needs its evals. **Effort:** M. **Priority:** P3. - **Removing one host from a checkout** — the installed-hosts record only grows, and `gstack-uninstall` removes every install. A per-host uninstall should drop the host from `.gstack-installed-hosts` so its render is pruned; today that is a hand edit. **Effort:** S. **Priority:** P3. - **Recording an instruction-only host from setup** — Hermes, OpenClaw and GBrain renders made by hand inside an install survive only when the user adds the host to `.gstack-installed-hosts` first (setup's hint says so). A `./setup --host hermes --render`-style path would record and render in one step; it needs a product call because those tiers install nothing today. **Effort:** S. **Priority:** P3. - **Host-render backups never expire** — each install's first pruning setup moves about 36 MB of generated files to `$GSTACK_STATE_ROOT/backups/host-renders/`. Add a retention rule (for example keep 30 days) once nobody has asked for a restore. **Effort:** S. **Priority:** P3. - **Verify the Cursor-agent freeze and Claude Code's listing on a real install** — #1694's symptoms (Cursor-agent freezing above about 11 MB, Claude Code dropping skill descriptions) were measured as on-disk bytes only: 632 `SKILL.md` / 34.7 MB before, 63 / 2.5 MB after. Nobody re-ran Cursor or Claude Code against the trimmed tree. **Effort:** S. **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.30.0: setup refuses Bun below 1.3.3 and warns below 1.4.2; 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)**~~ — superseded by the fix wave's PR C1: setup and gstack-doctor now detect SAC-blocked binaries, and the fix wave decided against a launcher or shim (it cannot be called from PowerShell, and a `bun run` shim would load the caller's project `.env`/`bunfig.toml`). Signing is the follow-up below. Original note: — 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.30.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.30.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)**, **absolute bun path for compiled browse spawns (#931; macOS repro unclear)** and **GitLab CI `curl | bash` (#1713)** — out of the wave's scope. (The ios-qa boot-token items #1837 and #1975 landed in v1.91.38.0.) **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 '