T3 Code closure audit

Open issues and pull requests that overlap recent OpenCode and T3 Code fixes.

Scope: pingdotgg/t3code, all authors, all open issues, and all open pull requests including drafts. The deep review uses merges from August 25 through August 28 plus related OpenCode lifecycle and catalog work.

Final inventory snapshot: 2026-08-28 at 22:49:17 UTC. Default branch: main at 0bbecfabf189. GitHub state was read only.

519open issues screened
767open pull requests screened
8issues to close now
5pull requests to close now

Decision

Close eight issues as fixed and five pull requests as superseded. Five items need confirmation and must stay open until that proof exists. Keep the remaining related work open or narrow it to the behavior that is still missing.

No pull request is recommended for merge in this report. This audit did not close issues, close pull requests, post comments, merge code, or rerun tests.

Close now: issues

These closure recommendations are based on merged source implementation. They do not confirm that every client build or delivery channel has updated.

IssueProblemFixed byWhy it is coveredConfidenceNext action
Issue #3577 Browser preview links that open a new tab do nothing. PR #8435 The preview now enables popup handling before the Electron guest attaches. Its window-open handler routes normal target="_blank" navigation back into the preview and opens supported scripted HTTP or HTTPS popups in a hardened window. High Close as fixed by the merged preview navigation change.
Issue #4879 OpenCode Go models disappear while a thread is running. PR #8480 OpenCode no longer has periodic catalog polling. API inventory replaces lossy CLI output. A failed refresh keeps the last good catalog, and a selected missing model stays visible as unavailable. High Close as fixed. Point users to nightly .1213 or newer.
Issue #4890 Mobile cannot identify the source behind an OpenCode model. PR #8573 The shared mobile picker uses subProvider as its subtitle, searches it, and includes it in accessibility labels for new and existing threads. High Close as fixed on main by PR #8573. The icon was already fixed. This audit did not verify a mobile build or OTA rollout.
Issue #5298 Large OpenCode model output is truncated. PR #8480 Production inventory reads provider.list from a scoped OpenCode server. It no longer depends on draining models --verbose stdout. High Close as fixed by the API inventory path.
Issue #6118 Large agent output omits custom agents. PR #8480 Production inventory reads app.agents over HTTP. It no longer parses the truncated agent list stream. High Close as fixed by the API inventory path.
Issue #7807 OpenCode skill output stops at 64 KB. PR #8480 Production inventory reads app.skills from the server API. This bypasses OpenCode's CLI pipe flush limit instead of raising T3 Code's own cap. High Close as fixed. The reporter's stable build predates this change.
Issue #7853 Valid custom agents are not enumerated. PR #8480 The native app.agents response is now the inventory. T3 Code then filters only hidden and non-primary entries. This covers the legacy enumeration request. High Close as fixed. Reopen only with a current API response that still omits the agent.
Issue #8537 Codex rejects the valid self_serve_business_prolite plan. PR #8447 The Codex 0.150 schema now accepts the named plan type and maps it to the existing Business subscription label. High Close as fixed by the merged schema and label update.

Close now: pull requests

Pull requestTitleSuperseded byWhy it can closeConfidenceNext action
PR #4945 Identify OpenCode model providers on mobile. PR #8573 The merged change covers source subtitles, search, accessibility labels, and both mobile picker states. The OpenCode icon already existed. High Close as superseded.
PR #6463 Open files in the containing folder. PR #7140 The merged implementation adds the file manager action, environment routing, capability advertisement, platform-specific reveal behavior, and focused coverage. It is already in stable v0.0.35. High Close as superseded by the shipped implementation.
PR #7218 Keep provider refreshes from changing thread models. PR #8480 The merged OpenCode-specific path preserves the selected model and option values, shows a missing model as unavailable, and retains the last good catalog after refresh errors. High Close as superseded.
PR #7540 Detect and retry truncated OpenCode CLI inventory. PR #8480 The production path now uses server APIs. Retry logic for the old stdout parser cannot affect production inventory. High Close as superseded.
PR #7834 Parse OpenCode model IDs that contain spaces. PR #8480 The production API response uses string keys and IDs directly. It has no CLI slug-header regular expression. High Close as superseded.

Confirm first

ItemWhy it may be fixedWhy closure is not provedRequired proof
Issue #8386 PR #8480 removes the three concurrent CLI inventory commands and uses one scoped server. The latest reporter comment corrected the original --json theory. It points to concurrent CLI SQLite locking. The exact Windows reporter case was not run by this audit. Ask for one retest on nightly v0.0.36-nightly.20260828.1213. Close only after that result.
Issue #2644 PR #8480 adds startup admission, idle reconciliation, and prompt recovery. A clean event-stream EOF after server.connected is still ignored. The original trace ended this way. Run one current OpenCode turn and a focused clean-EOF test before closure.
PR #7471 Main has stronger generation-aware session.status idle reconciliation. The open change handles session.idle directly. Main has no handler for an idle-only event. Prove supported OpenCode versions always provide the required status event or REST state. Test an active turn that receives only session.idle.
Issue #4801 Current OpenCode versions may report different variants than the version in the issue. The merged work has no adaptive-thinking change. T3 Code still sends the selected variant through session.promptAsync. Retest Opus 5 with a current OpenCode version. Keep open if the provider returns the same error.
Issue #5401 The OpenCode merge rewrites prompt admission, idle recovery, stop handling, and error recovery. The report has a generic endpoint error. No merged test proves its Windows, OpenCode Go, plan-mode, long-continuation path. Run the supplied reproduction on nightly .1213 and a current OpenCode server.

Merged on main, not released

IssueFixExact coverageLimitNext action
Issue #6417 PR #8321 Main now uses one opt-in settlement policy: never, change-request, or inactivity. The default is never. In change-request mode, a follow-up after a pull request closes keeps the revived thread active because its user event is newer than the pull request update. The new policy does not combine immediate merged settlement with inactivity for closed pull requests. Users choose one mode. The fix is not in nightly .1213 or stable v0.0.35. Close with the next release that contains 0bbecfabf189. If closing before release, say it is fixed on main and do not claim it shipped.

Keep open

OpenCode lifecycle and requests

ItemWhat landedWhat is still missingAction
Issue #2778The original child approval case is fixed by PR #8480.The 2026-08-26 report has parent and child sessions stuck busy with no pending request. Main has no child liveness or child status reconciliation.Keep for the newer case, or split it after the original case is retested.
Issue #4795 and Issue #7113Child request routing and reconnect recovery landed.Unknown permission kinds are still discarded by clients. Pending requests are not settled during stop or teardown.Keep PR #8441 as the active implementation.
Issue #7769Root stop is bounded and race-aware.Stop aborts only the root OpenCode session. Child requests can survive.Keep and modernize PR #7770.
Issue #4713OpenCode stop and idle recovery improved.Canonical turn.aborted still does not persist the final lifecycle. Other providers and child OpenCode sessions remain in scope.Keep PR #6018 and PR #7770 in scope.
Issue #5454 and Issue #7820Live OpenCode requests can recover after reconnect.Dead sessions and stop do not write durable cancelled resolutions for pending input.Keep or replace PR #7987 with a provider-neutral fix.
Issue #5952 and Issue #5760Child approvals are routed to the parent thread.Task and todowrite parts still emit generic file or item events. They do not emit the task and plan updates used by the Agents panel and task sidebar.Keep PR #7393 for native task lifecycle. Keep todowrite work separate.
Issue #2789No relevant revert-all fix landed.The revert-all request still omits messageID.Keep until the adapter sends a valid request for the empty assistant boundary.

OpenCode catalog, runtime, and usage

ItemCurrent stateRemaining work
Issue #2736The OpenCode half is fixed by PR #8480. Cursor discovery is unchanged.Keep or split. Narrow the remaining issue to Cursor skill and command discovery.
Issue #3094 and PR #6228Main still sends the local directory to a remote OpenCode server.Rebase the open change and replace its incorrect textual loopback heuristic.
Issue #3571 and PR #7247Main sends a bare runtime suffix, but API flattening still trusts model.id instead of the provider map key.Port only map-key flattening and duplicate hosted-prefix repair, with current tests.
Issue #5241Graceful ownership and idle cleanup improved.A hard backend death cannot run a finalizer. Add startup orphan reclamation or an operating-system parent-death mechanism.
Issue #7230 and PR #7232OpenCode inventory retains last-known-good data after its own probe errors.The cross-provider timeout case, including Claude, still replaces a good snapshot. Rebase the typed timeout fix.
Issue #7754 and PR #7755New CLI inventory pollution is gone from production.Old stored agent and variant values are still unsanitized. Replace the open change with a narrow persisted-selection repair.
Issue #8388Main emits no OpenCode token-usage update.Keep the context meter work. PR #7072 remains a separate feature.
Issue #7161 and PR #7163The selected environment can refresh from the mobile thread settings sheet.Connection rows, cloud rows, the settings environments route, and onboarding still have no per-environment refresh. Narrow the open change to those entry points and success feedback.

Broader requests not fixed by recent merges

ItemWhy it stays openAction
Issue #8499The reporter reproduced the Codex subagent panel bug on stable v0.0.35 with Codex 0.150.1. That is the exact version covered by PR #8346, so that merge did not fix this report.Keep open. Retest later fixes and collect logs before assigning another cause.
PR #7869PR #8447 accepts the current named plan types. The open change also adds future unknown-enum decoding and code-generator behavior.Do not count it as fully superseded. Narrow and rebase the future-enum work, or make an explicit maintainer decision.
Issue #7281, PR #7199, and PR #7287The issue is about Claude frontmatter model and effort. The recent Codex subagent work does not cover it. The open changes include Claude adapter and subagent runtime work.Keep the Claude work separate and current.
Issue #8222 and PR #8233The issue concerns the collapsed turn-plan timeline row. The recent task badge work changes the composer drawer instead.Keep the timeline fix open.
PR #6551Main has no actual-model event per turn.Keep as unimplemented feature work. Do not select it for merge from this closure audit.
PR #7221 and PR #8456Main usage provider kinds are Claude, Codex, and Grok only. OpenCode SQLite usage is not implemented.Keep as separate feature alternatives. Do not choose one in this report.
PR #7863 and PR #8207The current SDK v2 import is an SDK namespace. It is not the native OpenCode 2 provider protocol these changes propose.Keep as separate protocol work. Do not choose one in this report.
PR #5950, PR #6577, and PR #6530Configured default agents, bounded local probes, and native steer delivery are still absent or incomplete on main.Keep and rebase each concern independently.
PR #7840 and PR #7854Child lifecycle beyond approvals and correct error-exit projection remain unlanded.Narrow the child change to unique residual behavior. Keep the error projection fix.
PR #7562Its mobile source-identification goal is covered, but selected web trigger labels remain distinct.Split or narrow to the web-only trigger work. Do not count it as a landed-fix closure.
Issue #7111 and PR #7175OpenCode-only retention does not preserve Claude slash commands after a failed probe.Keep the Claude retention fix open and separate.
Issue #6508Project defaults do not implement last-used model and runtime preferences or a global default UI.Keep as separate preference work.
Issue #8521, PR #8504, PR #8508, and PR #8543These changes cover provider editor focus and layout. Recent provider stability work does not cover those UI goals.Keep the UI work separate.
PR #8236 and PR #8237Merged PR #8235 added server support for generic attachments. It did not add the web or mobile attachment UI.Keep both client changes open.

Optional duplicate cleanup

PR #7173 can close only if maintainers keep unmerged PR #8441 as the active teardown implementation. Main does not contain this behavior. Do not call the older change fixed, and do not count it with the five landed-fix closures.

Thread settlement work

ItemWhat remainsAction
Issue #5476Open pull requests no longer auto-settle under the new policy. Working or monitoring background activity still does not block settlement. The latest maintainer comment says this part is not fixed.Keep open or split the background-liveness case.
Issue #7251The conditional inactivity-days row still uses ordinary top-level settings styling. The exact nested-row treatment from closed PR #7093 is absent.Keep until the conditional row has clear visual hierarchy.
Issue #8245Automatic settlement remains client-derived. New activity cannot emit the server event that stamps unsettledAt, so active-list ordering can still be stale.Keep. Server-persisted automatic settlement remains useful.
Issue #6368 and PR #7179A completed turn still counts as a raised hand and wakes a snoozed thread early.Keep and rebase the focused snooze fix.
Issue #7224 and PR #7227The built-in merge action still does not refresh VCS status. Change-request settlement can wait for later polling.Keep and rebase the immediate refresh fix.
Issue #5514Settlement policy does not fix thread-to-pull-request association. A reused long-lived branch can attach a new pull request to old threads.Keep the association bug separate.
PR #5290Web and desktop policy is client settings. Mobile policy is device-local. Devices can disagree.Rebase the server-owned design onto the exclusive mode and inactivity-days fields.
PR #5402Main still derives automatic settlement in each client and writes no automatic settlement event.Keep the server-persistence goal, but rewrite its old default-on policy around the new opt-in modes.
PR #8015Activity can still emit thread.unsettled when a user has explicitly pinned a thread active. That clears the active pin.Keep pending the product decision on pin lifetime.

Pull request metadata

This appendix covers the open pull requests discussed in the audit and the related candidate set captured for reconciliation. Size is additions, deletions, and changed files. Checks are the latest captured head rollup. "Other" includes skipped, neutral, pending, and status-only contexts. Bot approval is not maintainer approval and does not imply merge readiness.

Method and limits