Repository navigation
Description
Fixes and improvements J5 carries that belong upstream. We hold them while V2 (pingdotgg#2829) is still under heavy construction, then offer them once it settles and merges. Check this list at every upstream advance and remove items upstream fixes on its own.
Offered upstream
A daily check reads this list and reports new activity. Add a line here whenever we post something upstream.
When we offer a fix, prepare the PR and add "Watcher armed" to the item's line, with the prepared branch and whether Jackson has approved the PR text. The watcher (~/.local/share/giveback-watch/watch.sh on openclaw, every 15 minutes, as the machine participant machine:giveback-watch) messages the give-back thread when an armed item gets new activity, so we can open the PR as soon as a maintainer agrees.
- fix(server): another worktree's install no longer restarts the dev server pingdotgg/t3code#21065: dev server
--watch-path. PR, merged 2026-10-18. Fixed upstream: the 2026-10-24 advance (v0.1.3-nightly.20261024.3630) takes upstream's fix and retires FORK.md case 66. - [Bug]: Tailscale Serve mapping is hijacked by a secondary instance and left stale on unclean exit, never reconciled pingdotgg/t3code#10363:
vp run dev --sharereplaces another server's Serve mapping. Our comment, posted 2026-10-18; Julius reproduced it 2026-10-22. On 2026-10-24 we asked whether they'd take a PR limited to the dev runner's--share(comment 6387789446); waiting on a maintainer. Watcher armed. PR prepared: branchfix/dev-share-foreign-mapping(commit565871206e, base8f26ed7e27) in~/repos/pingdotgg/t3code-dev-shareon openclaw, not pushed. PR text approved by Jackson 2026-10-24 (~/.local/share/giveback-watch/prs/10363-dev-share.md); fill in the maintainer-agreement link before opening. - [Bug]: Web and desktop offer no retry while an environment is reconnecting, and the wait grows to five minutes pingdotgg/t3code#22024: no retry while an environment is reconnecting. Issue, filed 2026-10-19; we offered a PR. Julius's own fix is fix(web): offer retry while an environment reconnects pingdotgg/t3code#23194 (a "Retry now" on the banner while reconnecting); we +1'd it 2026-10-29. J5's D37 was retired 2026-10-24, when upstream's Settings › Connections gained "Retry now" (fix(connect): show which part of a T3 Connect connection failed and how to fix it pingdotgg/t3code#22171), so nothing in J5 waits on fix(web): offer retry while an environment reconnects pingdotgg/t3code#23194.
- fix(web): Reconnect on a switched-off environment switches it back on pingdotgg/t3code#24691: Reconnect on a switched-off environment switches it back on (found by B-EtterDigital on [Bug]: Web and desktop offer no retry while an environment is reconnecting, and the wait grows to five minutes pingdotgg/t3code#22024). PR, merged 2026-10-30 by maria-rcks after she verified it in a real dev environment. J5 has the same banner code and picks the fix up at the next upstream advance.
- fix(web): the welcome wizard keeps the project selection when you go back a stage pingdotgg/t3code#24719: the welcome wizard forgets the project selection when you go back a stage. PR, merged 2026-11-01 by maria-rcks after she verified it in a real dev environment; opened 2026-10-25 under the small-obvious-fix exception, with a browser test; rebased onto fix(web): onboarding import no longer hangs when the project never arrives pingdotgg/t3code#25805 on 2026-10-28; after CodeRabbit's review, a second commit gives computers added later their default selection (Jackson chose this over keeping the trade-off). Overlaps open PR fix(web): import Claude Code and Codex sessions after onboarding pingdotgg/t3code#22411. Branch
fix/welcome-wizard-keeps-import-selectionon Jacksondr5/j5code. - fix(server): device list warnings keep the hub's error detail pingdotgg/t3code#25248: device list warnings drop the hub's error detail (a hung or failing
simctlshows no cause). PR, merged 2026-11-01 by maria-rcks after she verified it in a real dev environment; opened 2026-10-25 under the small-obvious-fix exception; reproduced on macOS with a fakexcrun. Branchfix/device-list-keeps-hub-error-detailon Jacksondr5/j5code. The rest is A hungsimctlshows a network error, and the device list empties and refills pingdotgg/t3code#25707, and the hub timeout is fix(apple-utils): time out simctl calls instead of hanging expo/expo-device-hub#464. - A hung
simctlshows a network error, and the device list empties and refills pingdotgg/t3code#25707: Closed 2026-11-06 as completed, when shivamhwp merged fix(devices): keep devices listed when simulator discovery fails pingdotgg/t3code#25971 (202d5b5616: 40 s list wait, devices kept listed, hub pinned toexpo-device-hub@0.19.1, which has expo#464). a hungsimctlshows a network error and the device list empties and refills; T3's 15 s list timeout must exceed the hub's 30 s once expo#464 lands. Issue, filed 2026-10-26, offering a PR for the timeout and message once they pick which parts they want. Picked up by shivamhwp's fix(devices): keep devices listed when simulator discovery fails pingdotgg/t3code#25971 (40 s wait, keeps devices, onboarding hint); our 2026-10-30 comment there points at the published hub canary0.19.1-canary-20261029-32b4ccffor the end-to-end check. - [Bug]: Stale "Waiting on background task T3 Worktree Handoff" banner persists after a Claude worktree handoff pingdotgg/t3code#15993: a provider session closed mid-turn leaves a "Running: / Stop" row that never clears. Our comment, posted 2026-10-31 (issuecomment-6545045420): two more triggers (Settings sign-out, Permissions change plus steer), the trace to
ProviderSessionManager.releaseEntryandRunExecutionService's ingestion-failure handler, and a narrower fix than fix(server): tool calls cut off by a lost provider stream no longer wait forever pingdotgg/t3code#16749/fix(server): a session released mid-turn no longer leaves tool calls running pingdotgg/t3code#17306 (settle the run's open command and tool items on a confirmed provider loss only), offered as a PR or for a maintainer to take. Covers J5's Verify on a Cursor machine: does a Cursor sign-out break other threads' running turns? (upstream give-back) #659 finding. Same day, our follow-up (issuecomment-6545407738) corrected two points of the trace and pointed maintainers at kristianbonnici's narrowed fix(server): a session released mid-turn no longer leaves tool calls running pingdotgg/t3code#17306 (branchfix/close-tool-calls-on-lost-provider-stream,f042e4de1a, pushed after close), suggesting they reopen it rather than take a PR from us. 2026-11-02: NotReliable opened fix(server): tool calls a released session cuts off no longer keep the thread Waiting pingdotgg/t3code#29036, which interrupts cut-offcommand_execution/dynamic_toolitems fromProviderSessionManager.releaseEntry, for runtimes withbackgroundTasksEndWithProcessonly (Claude and Muse): our Claude Permissions trigger is covered, the Cursor sign-out reproduction is not (ACP runtimes are out of its scope), and it leaves thetool_callnodes alone. Macroscope approved; no maintainer response yet. Watcher armed. Our own version is kept locally only, in case they prefer it:fix/release-settles-open-tool-items(7f9bd1640d) in~/repos/pingdotgg/t3code-stuck-item, PR text/tmp/gb276/pr-15993-body.md, not approved. - When a provider conversation can't be resumed, T3 silently starts a new one pingdotgg/t3code#28178: when a provider conversation can't be resumed, T3 silently starts a new one from a summary (no timeline item). Issue, filed 2026-10-31 with a Codex reproduction, quoting T3's design docs that handoffs should be auditable; we offered a PR. Julius took it himself the same day: PR fix(server): show a context handoff when a provider conversation can't be resumed pingdotgg/t3code#28195 (same approach, the existing
handoffdivider, plus arun_startposition so it sits above the turn's message). Our prepared branchfix/resume-fallback-shows-handoff(fc10f8eaa0) in~/repos/pingdotgg/t3code-resume-visibleis parked and won't be opened. Bears on J5's D6 (native resume): when fix(server): show a context handoff when a provider conversation can't be resumed pingdotgg/t3code#28195 merges, the next advance decides whether D6 is still worth carrying. Watcher armed (to catch the close). - fix(mobile): an answered question no longer shows its raw item JSON pingdotgg/t3code#31330: on mobile, an expanded answered question shows its raw item JSON under the question and answer (web doesn't). PR, opened 2026-11-05 under the small-obvious-fix exception, one condition in
thread-work-log.tsx, with before/after from T3's own Android build. Found by J5's mobile catch-up (Mobile: a native question's answer shows a giant JSON blob #891; J5's fix is fix(mobile): an answered question reads as its question, answer and who gave it #897). Leaves the folded label to fix(web,mobile): answered questions are readable in the transcript pingdotgg/t3code#18544. Branchfix/mobile-answered-question-no-raw-jsonon Jacksondr5/j5code (333af6d24c). Watcher armed. - fix(server): archiving a thread also archives its side chats pingdotgg/t3code#32213: archiving a thread leaves its side chats running and unreachable from the app; delete already cascades. PR, opened 2026-11-06 without a separate issue (Jackson's call), as the "archive cascade" that Theo's feat: side chats beside the main thread pingdotgg/t3code#26901 listed under "Not in this PR": archive and unarchive cascade to side chats like delete does (+34/−5 server code, tests, one doc sentence), with live before/after evidence. Found by the v0.1.7 advance review; verified live 2026-11-06. The restored side chat still shows [Bug]: Stale "Waiting on background task T3 Worktree Handoff" banner persists after a Claude worktree handoff pingdotgg/t3code#15993's stuck row (left to fix(server): tool calls a released session cuts off no longer keep the thread Waiting pingdotgg/t3code#29036). Branch
fix/archive-stops-side-chatson Jacksondr5/j5code (e04a5f0f07). Watcher armed. - fix(server): a revoked or expired session's preview stream closes pingdotgg/t3code#32245: a revoked or expired session's open preview stream keeps its frames and input; the RPC socket already closes (fix(auth): show connection permissions and enforce session lifetime pingdotgg/t3code#17370). PR, opened 2026-11-07, J5's fix(preview): close streams when their session is invalidated #802 ported to
mainatd5fc29fe5c(8 lines plus tests), with a live before/after check. T3's own client closes its preview socket when the RPC socket drops, so only a client that keeps the socket open can use it; Jackson decided 2026-11-06 it's an ordinary bug, not a security report. Complements fix(cli): auth session revoke closes the session's open connections pingdotgg/t3code#24881. Branchfix/preview-stream-closes-on-revokeon Jacksondr5/j5code (7c6aff6476). Watcher armed. - fix(server): browser setup checks the kernel loaded its AppArmor profile pingdotgg/t3code#32282:
t3 browser setupreports ready when the AppArmor profile file exists but was never loaded (J5 [Bug]:j5 browser setupreports ready when the AppArmor profile file exists but was never loaded #943; hit on J5's Azure fleet, Ubuntu 24.04.5). PR, opened 2026-11-07 with Jackson's approval:sandboxBlockedchecks the kernel's loaded-profile list and falls back to the file where it's hidden; 3 unit tests and before/after VM checks (setup state, live server warning, Chrome sandboxed launch; evidence in/mnt/storage/j5/worktrees/j5code/apparmor-vm-evidence/); adversarial reviews by Opus 5.5 and GPT-6.1 Sol. The PR notes that setup now rewrites an existing file when the kernel lacks the profile (kept, Jackson 2026-11-07). Branchfix/browser-setup-loaded-profileon Jacksondr5/j5code (9b3c062941). Watcher armed. - Should T3's own MCP tools need approval on some providers but not others? pingdotgg/t3code#25274: Ideas discussion, "Should T3's own MCP tools need approval on some providers but not others?" Posted 2026-10-26, with live checks on Claude, Codex and Cursor. We offered the Codex change if they pick a direction. (A discussion: read it with
gh api graphql, notgh issue view.) Watcher armed. - fix(hub): stop booting emulators onto a port another emulator holds expo/expo-device-hub#546: the hub can boot an emulator onto a console port another emulator holds and hand back that other emulator (found by J5's mobile rig crew, 2026-10-31; handed over 2026-11-01). Draft PR opened by Jackson 2026-11-01 from branch
fix/emulator-port-in-useon Jacksondr5/expo-device-hub (head9d5a3f3e; worktree~/repos/expo/expo-device-hub-porton openclaw): allocation counts every adb emulator serial, the hub checks the AVD on the serial after boot and stops only its own spawned PID on a mismatch. Device-checked on openclaw before/after; adversarial review by GPT-6.1-Sol applied./devin reviewposted; mark ready if Devin doesn't answer the draft. Watcher armed. - fix(apple-utils): time out simctl calls instead of hanging expo/expo-device-hub#464:
execSimctlgets a 30 s timeout matching serve-sim, with its own error. PR, merged 2026-10-29 by gwdp (Expo), released inexpo-device-hub@0.19.1(stable, 2026-10-30). T3 picks it up when it bumps its pinned hub canary; fix(devices): keep devices listed when simulator discovery fails pingdotgg/t3code#25971 (shivamhwp) already waits 40 s for it.
Not yet offered
-
Expanding a folded agent message repeats its first line. Covered upstream by open PR fix(web,mobile): expanded agent and automation messages no longer repeat their first line in the header pingdotgg/t3code#29373 (zmm2025, 2026-11-02; verified live by maria-rcks the same day): when expanded, the header drops the first-line preview on web, in the web queue and on mobile, and an Automation header keeps its task title. Nothing to offer; take it at the advance once it merges (checked 2026-11-06). Reproduced live on upstream main
240446e2d9(2026-11-06). J5's own fix for the messages it reads is [Bug]: Expanding a folded agent message shows its first line twice #945 (PR fix(web): expanding an agent message no longer repeats its first line #946). -
Mobile: the workspace file preview's footer loses its border and padding.
apps/mobile/src/features/files/WorkspaceFileWebPreview.tsxputsclassName="border-t border-border px-4 py-2"onreact-native-safe-area-context'sSafeAreaView. Uniwind styles only React Native's own components unless a third-party one is wrapped withwithUniwind(upstream wraps several, e.g.Chip'sGlassView, but notSafeAreaView), so the class is dropped silently. Upstream'sThreadArrangementSheetuses the working pattern: a styledViewoutside,SafeAreaViewinside. Checked 2026-11-01 onmainat57d764ea1a: this is upstream's onlySafeAreaViewwith aclassName; from reading the code, not yet seen on a device. J5 fixed the same mistake in eight of its own modals (Mobile: archive warning sheet ignores dark mode #868). Cosmetic, very small; would fit the small-obvious-fix exception but needs before/after screenshots on a device. Found by J5's mobile archive-artifacts builder, 2026-11-01 (there, eight modals opened white in dark mode). Not offered yet. -
Native resume: V1 not-found rule. Visibility offered as When a provider conversation can't be resumed, T3 silently starts a new one pingdotgg/t3code#28178 (2026-10-31); the not-found rule itself is not offered. (2026-11-07, from the v0.1.7 review: v0.1.7 includes fix(server): Codex threads open in another client are no longer silently replaced pingdotgg/t3code#21045, which keeps the native session only for Codex's "thread in use" case; Julius's fix(server): show a context handoff when a provider conversation can't be resumed pingdotgg/t3code#28195 for the visible handoff is still open and not in v0.1.7.) V2 starts a fresh provider conversation on any resume failure. J5 restores V1's rule: start fresh only when the provider says the conversation is gone, and fail visibly otherwise. The draft PR text is in the chore(upstream): advance to V2 67a2be0 with release archives and migration bridge #262 build notes. Upstream appears to treat fresh-start as its intended recovery (see fix(server): recover Pi resumes without reusing native history pingdotgg/t3code#12933), so the PR has to argue for it; if upstream declines, fall back to making the fresh start visible.
-
Steer UX gaps (J5 retired its own steer layer in chore(upstream): advance to V2 67a2be0 with release archives and migration bridge #262).
- The steer label says "Steer now" even on providers where it means interrupt-and-restart (Cursor, OpenCode, ACP).
- There is no explanation of why steering is unavailable (preparing, starting, finalizing).
Steering while no provider turn is running sends anyway and the server rejects it with "No running provider turn found"; a pre-send guard should keep the draft and offer Interrupt or Queue.Dropped 2026-10-24 (Jackson). Covered by Explicit steer is refused with "No running provider turn found" during run startup/completion gaps pingdotgg/t3code#23271 and PR fix(server): queue explicit steer between provider turns pingdotgg/t3code#23559 (an explicit steer with no running turn queues instead).
-
Pre-approve T3's own MCP tools on every adapter. Upstream connects the
t3-codeMCP server to Codex, Claude, OpenCode, Pi and ACP sessions, but pre-approves its tools only on Claude (mcp__t3-code__*); since fix(pi): allow known read-only T3 tools without approval pingdotgg/t3code#17852 Pi also allows the read-only-annotated ones (checked 2026-10-17). Elsewhere a T3 tool call (e.g.spawn_agent,schedule_task) raises the provider's native MCP prompt. The per-adapter mechanics, and the traps, are in the reviews on closed fork PRs feat(server): OpenCode Captains propose a Crew without a native prompt #302 (OpenCode's<server>_<tool>permission rules), feat(server): Pi Captains propose a Crew without a native prompt #303 (Pi's injected extension) and feat(server): ACP Captains propose a Crew without a native prompt #304 (ACP carries no trustworthy server identity; the Antigravity metadata bypass). Related: a forked OpenCode session (Session.fork) loses T3's whole permission ruleset. From the State the Captain decision per provider adapter #233 ruling, 2026-09-26. -
TheDropped 2026-10-30 (Jackson). Upstream is fixing it: fix(server): self-update moves the t3 command to the new runtime pingdotgg/t3code#14875 (for issue Remote server self-update leaves the installed t3 CLI pointing at the previous runtime pingdotgg/t3code#14609), taken over by Julius on 2026-10-19, repoints the configured install-bin link and the firstt3command stays on the old version after an in-app update. The installer's~/.local/bin/t3links to one version's executable, and onlyt3 updaterepoints it (repointLauncherinapps/server/src/cli/update.tshas a single caller). A server self-update through the service launcher never touches the link, sot3, and any agent calling it, keeps running the previous version. Confirmed on upstream main on 2026-10-02 (e0db2a5e58). J5's fix (The j5 command stays on the old version after an in-app update #398, PR fix(cli): j5 follows the server after an in-app update #415) has the service's server repoint the installer's default link at itself afterlauncher.prepareTrial, reusingrepointLauncherunchanged; upstream could take it as is witht3forj5.t3on PATH after a fresh self-update commits, including links that lag several versions behind. When it merges, the next advance can retire J5's case 51 (and its D28 extension), after checking our laggingj5link is covered. -
The service launcher is never replaced by an in-app update. The unit or launch agent names one version's executable as the launcher, and a self-update swaps only the server, so a server that updates only from the app keeps its original launcher indefinitely: it misses launcher fixes, and any incompatible change needs a
SERVICE_LAUNCHER_PROTOCOLbump and a manual step on every machine. Proposed: after a self-update commits, the server rewrites the unit to name its own version, so the new launcher takes over at the next restart. This is a design change to offer, not a bug fix; not built yet. Tracked in Keep the service's supervisor current after an update from the app #444. -
Opening a thread writes the whole thread record.Dropped 2026-10-24 (Jackson). Upstream's background compaction (PR fix(server): compact superseded history in the background pingdotgg/t3code#19435, 2026-10-15) now deletes supersededthread.visitedexists to movelastVisitedAt, but its payload is the full thread, linked pull requests included (5–37 KB). Measured on the same database: 5,700 events, 26 MB, 500–900 a day. Proposed: a payload that carries only the visit time. An improvement to offer, not a bug fix; not built. Same code on upstream main on 2026-10-13 (380bba368a).thread.visitedevents, so the storage cost is gone; what's left needs an event-schema change for a small win. -
A
/logoutmessage signs the provider out without "Manage providers". Signing a provider out from Settings goes throughproviderAuthLogout, which requiresproviders:manage(RpcAuthorization.ts:72). A message whose text is/logoutreachesProviderAuthService.tryHandlePromptCommandfromProviderTurnStartService(line 400) with onlyorchestration:operatechecked. It signs out the provider instance's shared credential and stops every session that uses it, with no permission check. A device paired without "Manage providers" can therefore sign the server's provider account out by typing/logout. Proposed: refuse the prompt command unless the sending session holdsproviders:manage, as the Settings path does, and say so in the turn's failure. J5 hits this once people other than an Owner can write to agents (people and access, 2026-10-17). Same code on upstream main on 2026-10-17 (25159b67e3). -
t3 auth session revokeleaves the device's open socket connected. Covered upstream by open PR fix(cli): auth session revoke closes the session's open connections pingdotgg/t3code#24881 (only21mil, 2026-10-25): the CLI revokes through the running server'sPOST /api/auth/clients/revoke, the same fix proposed below. Nothing to offer; take it at the advance once it merges (checked 2026-10-31). fix(auth): show connection permissions and enforce session lifetime pingdotgg/t3code#17370 (2026-10-08) closes a session's socket on revoke:ws.tsraces the connection againstSessionStore.awaitInvalidation, which waits for aclientRemovedchange on an in-process PubSub (SessionStore.ts,revokeandawaitInvalidation). The CLI'sauth session revoke(cli/auth.ts) runs its ownEnvironmentAuthin its own process, so it saves the revocation but announces it only inside the CLI; the running server never hears it. The saved revocation takes effect at once for every fresh check: new HTTP and MCP requests and any reconnect are refused, since each verifies against the database. But a web, desktop or mobile socket already open keeps working until it reconnects, the server restarts, or the session expires (30 days by default), and the server's Connections list keeps showing it connected. A revoke from Settings → Connections runs inside the server and closes the socket at once. Before fix(auth): show connection permissions and enforce session lifetime pingdotgg/t3code#17370 no revoke closed an open socket, from the app or the CLI. J5 took fix(auth): show connection permissions and enforce session lifetime pingdotgg/t3code#17370 in its advance chore(upstream): advance to T3 Code nightly 0.1.1 (3238) for pairing access #634 (2026-10-18). J5's own wrapper (cliEnvironmentAuth, FORK.md case 79, feat(j5): people and access: everyone is a person with a level at a scope, and several people work with one agent #638) only unbinds the session from its person so it cannot renew; it is not the origin. Same command on upstream main on 2026-10-24 (80455376f0). From reading the source; not yet reproduced live. Proposed reproduction: pair a browser with a running server, find its session withauth session list, revoke it withauth session revoke <id>, and check that the open tab still loads and changes data; then reload it and see it refused, and compare with a revoke from Settings → Connections, which cuts the tab at once. Proposed fix: when a server is running for that home, the CLI revokes through it, by minting a short-livedaccess:writesession and calling the existingPOST /api/auth/clients/revoke, so no new route is needed; with no server running, it writes directly as today. J5 built the same plumbing for CLI pairing in fix(j5): j5 pair --person goes through a running server #717 (the lock, waiting for the runtime file, a full-request timeout, and an error when the server cannot be confirmed). Added here at Jackson's request (2026-10-25). Only recording it was authorized; whether to fix it in J5 or offer it upstream has not been decided. -
A disabled Merge back button never shows its tooltip. On a fork, upstream disables "Merge back" until a run has completed, and its tooltip explains why: "Complete a run in this fork before merging it back" (
apps/web/src/components/chat/ThreadRelationshipsControl.tsx). ButThreadDetailsControlstyles a disabled control withdisabled:pointer-events-none, so a disabled button gets no hover, and that explanation can never appear. The person sees only a fainter icon (opacity 0.64). Proposed: keep the tooltip reachable on a disabled control, e.g. render it witharia-disabledrather thandisabled, or put the trigger on a wrapper that still takes pointer events. Found 2026-10-31 by J5's live test of fix(web): Merge back is disabled where the server would refuse it #861, which also disables the button for people the server would refuse. Same code on upstream main on 2026-10-31 (955e2bfbb5). -
Mobile: a finished thread stays under Working until another thread changes.Already fixed upstream (checked 2026-11-01): fix(mobile): finished threads leave Working once the grace ends pingdotgg/t3code#28169 (merged 2026-10-31,apps/mobile/src/features/threads/useThreadListV2.tsmemoizesthreadListInboxReturns.observe(...)in auseMemothat listsinboxVersionas a dependency it never reads. The React Compiler memoizes on values read, so in the release build the memo is guarded only bythreadsandworkingShelfEnabled(visible in the compiled output). When a thread's 2 s exit grace expires, the tracker bumps its version and Chats re-renders but reuses the stale observation, so the thread stays in the collapsed Working section until some thread shell changes. Seen on iPhone and Android with upstream's code path (J5 Mobile (Android): Chats list doesn't show threads created elsewhere until you navigate #842); web isn't compiled with the React Compiler and is unaffected. Fix: pass the version as an argument to the observation. A test under the release compiler fails before and passes after. J5 carries it as a temporary patch in fix(mobile): a finished thread leaves the Working section after its grace #877.be58795d37) makesuseThreadListV2read the inbox version through anobserveInbox(threads, version)helper, the same fix as J5's fix(mobile): a finished thread leaves the Working section after its grace #877. Nothing to offer; at the next advance J5 takes upstream's version and drops its own.
Activity
refactor(web): adopt upstream's steer and queue UI, retiring the trut…
docs(fork): retire cases 27 and 29, link the merge process, route pat…
Jacksondr5 commentedon Sep 24, 2026
More upstream candidates from the #262 live pass (evidence). Re-check them against upstream before offering:
t3code/<id>), not the chosen branch.A repo with no remote shows "From origin/master" as the base branch.Dropped 2026-10-24 (Jackson). fix(server): new worktrees fetch their base branch's own remote pingdotgg/t3code#21032 (merged 2026-10-19) reworked this: worktrees fetch the base branch's own remote and fall back to the local branch, and the label became "From (remote)", left unconditional on purpose ("Only the server can determine a local branch's configured remote"). What remains (no-remote repos, unpushed branches) is rare and harmless, and upstream just chose that wording, so it isn't worth raising.Parked 2026-10-24: the restart-marker and "New thread on " items. Both look fixed or reworked on upstream main
80455376f0(the sidebar Working status by PR pingdotgg#17028; the branch handling reads right in code). Re-test on current upstream before offering either.Jacksondr5 commentedon Sep 25, 2026
Give-back candidate (Jackson, 2026-09-25): on environment-wide settings pages (upstream's Providers, and J5's Personas and Skills catalog), the new settings scope line still says "Applying settings for " when a project is selected, even though those settings can't be scoped to a project (only keys in
PROJECT_SCOPED_SERVER_SETTING_KEYScan). Suggest that upstream hide or disable the project picker, or reword the line, on pages whose settings are environment-wide.Dropped 2026-10-24 (Jackson). The Providers page is now partly per-project (providers can be switched per project, pingdotgg#17879), so it is no longer a clean example. What remains (Diagnostics, and J5's own Personas and Skills pages) is cosmetic.
Jacksondr5 commentedon Sep 29, 2026
Added: Dead agent-device daemon reused by the device hub (#364, PR #369).
LocalDeviceHost.ensureAgentReadyreturns the cached agent-device endpoint without a health check, so after the daemon exits everydevice_openhands out a dead--config. The fix probes/healthbefore reuse and restarts the daemon. Still present onupstream/main.🤖 Generated with Claude Code
Jacksondr5 commentedon Sep 30, 2026
Update: the dead agent-device daemon fix (#364, #369) was closed without merging, so J5 isn't carrying it. It's no longer part of this give-back list.
Posted by an AI agent on Jackson's behalf.
Jacksondr5 commentedon Oct 5, 2026
Give-back candidate: A hung
simctlbreaks device listing, behind a generic error. Seen 2026-10-04 on Jackson's Mac, after CoreSimulatorService had been up for about 2 days and stopped answering. Everysimctlcall hung, includingsimctl help. Restarting the service fixed it.What the person saw:
simctlnot answering, never reached the person.simctlfailed instead of hanging, the hub returnedsimulators: []witherrors.refreshinDeviceService.tsreplaced the host's devices with that empty list, then the next good call brought them back.simctl list devices --jsonprocesses piled up, one every refresh. We counted 15, some orphaned (ppid 1) by earlier hub runs.Where it belongs:
execSimctlcallsexecFile("xcrun", ["simctl", ...])with no timeout, so a wedged CoreSimulator holds/api/devicesopen indefinitely. This is still the case in 0.12.0, the version upstream pins as ofupstream/maina1d9d72aef. Suggest a timeout that kills the child, and an error sayingsimctldid not respond.apps/server/src/device/DeviceService.tsand therequest_failedtext inpackages/contracts/src/device.ts, unchanged onupstream/maina1d9d72aef):hubJsonmaps a timeout, a bad status and a decode failure all to the samerequest_failedmessage. Telling a timeout apart ("The device hub did not answer within 15 s") would have pointed straight at the simulator service.errors, consider keeping the host's last known devices, with the error as detail, instead of showing none.J5 carries no fix for this. The person-side fix is
killall -9 com.apple.CoreSimulator.CoreSimulatorService(with Simulator.app quit). Re-check against upstream and expo-device-hub before offering.Posted by an AI agent on Jackson's behalf.
Partly offered upstream 2026-10-25: pingdotgg#25248 shows the hub's error detail. The timeout message, the emptying list and the expo-device-hub timeout are drafted, not yet filed.
Jacksondr5 commentedon Oct 8, 2026
Candidate: the welcome wizard forgets the folder selection when you jump back to a stage by name
Not posted upstream. Recorded here for the give-back pass.
components/onboarding/WelcomeWizard.tsxsince refactor(web): onboarding goes back to upstream's three stages #457, apart from branding and the "Providers" wording (FORK.md case 39). J5's older wizard kept the selection in its own import session, which refactor(web): onboarding goes back to upstream's three stages #457 removed.mainstill behaves this way, and whether upstream already tracks it.Offered upstream 2026-10-25: pingdotgg#24719 (reproduced on upstream
90c455ff8f).Jacksondr5 commentedon Oct 10, 2026
Removed: revoking a client does not close the sockets it already has open. Fixed upstream by pingdotgg#17370 (merged 2026-10-09): the
/wsroute now closes a session's socket when it is revoked or expires. J5 picks it up at the next upstream advance; until then J5's copy still has the gap.Posted by an AI agent on Jackson's behalf.
Jacksondr5 commentedon Oct 12, 2026
Candidate: a server's name cannot be set, so two servers on one machine report the same name
Not posted upstream. Recorded here for the give-back pass.
resolveServerEnvironmentLabelnames a server after its machine (friendly name, hostname, cwd base name) with no override, so two servers on one host show the same label in Connections and at/.well-known/t3/environment.J5CODE_SERVER_NAME, read before the host lookups. Upstream could take it as aT3CODE_variable or aserveflag.Posted by an AI agent on Jackson's behalf.
Dropped 2026-10-30 (Jackson). Not worth offering: the upstream request (issue pingdotgg#13057, now Ideas discussion pingdotgg#23118, 10 upvotes) asks for much more (account-wide names, rename/restore in the UI, deregistering stale environments), and pingdotgg#18924 (PixPMusic, open) already adds a persisted host-name setting in Settings → Sharing & access, editable from mobile. If pingdotgg#18924 lands, J5 can retire D32 (
J5CODE_SERVER_NAME), since each J5 server has its own home and so its own setting.Jacksondr5 commentedon Oct 12, 2026
Candidate:
node --watch src/bin.tsrestarts the dev server when another pnpm worktree installs (not posted upstream): on Linux a bare--watchwatches about 1,200 loaded files undernode_modules/.pnpmthat pnpm hardlinks from its shared store, so a second worktree's install or removal changes their link count and restarts the server; J5 narrowed it to--watch-path=src --watch-path=../../packagesin #550 (issue #544, FORK.md case 66), measured there, and upstreammainwas not checked for an existing fix or issue.Jacksondr5 commentedon Oct 12, 2026
Give-back candidate from #551 (live-test home generator, #546): ask upstream to export a replay seam from
apps/server/src/orchestration-v2/testkit.Today the function that replays one fixture variant,
runFixtureProvider, is private toOrchestratorReplayFixtures.integration.test.ts, and so is the driver-to-harness lookup beside it. J5's generator carries an adapted copy (about 70 lines,replayFixtureinapps/server/src/j5/test-support/liveTestHome.ts).A seam that would remove the copy: one exported function, roughly
replayFixture({ fixture, variant, databaseLayer, projectId, cwd, clockStartMs }), which the test file would call too. The copy differs from the original in four ways: a file database, a caller-supplied project id (the fixture allocates one that nothing creates), a caller-supplied cwd, and a settable clock (replays otherwise start in 1970). The fork and merge-back scenarios live in their own test files and are not inORCHESTRATOR_REPLAY_FIXTURES, so they are out of reach either way.Dropped 2026-10-24 (Jackson). Upstream PR pingdotgg#22717 (2026-10-21) now exports most of this:
runReplayFixtureintestkit/ProviderReplayFixtures.ts, and each provider's replay harness from its adapter testkit. At the next upstream advance, shrink J5's copy to glue around those instead of asking upstream.Jacksondr5 commentedon Oct 12, 2026
Give-back candidate from the live-testing work (#546, PR #556), 2026-10-12:
vp run dev --sharecan replace another server'stailscale servemapping.scripts/lib/dev-share.tsclears whatever is mapped on the web port before serving it, and on exit the mapping is removed.scripts/dev-runner.tspicks a worktree's web port from 5734 to 8733 by hashing the path and probes only loopback for a free port, so a port that is in use only as a tailnet HTTPS listener looks free.Suggested change upstream: do not clear a mapping whose target is a different local port, or refuse to share when the port already carries a mapping this process did not make. J5's
setup-agent-live-test --for-devguards against it in its own code; upstream's files are not edited.Jacksondr5 commentedon Oct 12, 2026
Removed: a queued message from a capped caller runs at the receiver's raised modes. Jackson, 2026-10-18: not offered upstream. It is a narrow edge case. The person has to raise the thread's modes deliberately while the message waits in the queue in plain view, and then want only that one message held back. (Found in #498 / PR #560.)
Posted by Claude Opus 5.5, an AI agent, on Jackson's behalf.
Jacksondr5 commentedon Oct 18, 2026
Offered upstream on 2026-10-17:
node --watchrestarts the dev server when another worktree installs: fix(server): another worktree's install no longer restarts the dev server pingdotgg/t3code#21065. The fix was re-measured on upstream16918b57d6(Linux, Node 24.14 and 24.22) and reviewed by GPT-6.1-Sol. On macOS the bug does not occur, because pnpm clones store files on APFS, and the fix is harmless there.vp run dev --sharereplaces another server's mapping: reproduced on upstream16918b57d6and reported on [Bug]: Tailscale Serve mapping is hijacked by a secondary instance and left stale on unclean exit, never reconciled pingdotgg/t3code#10363 (comment), with J5's guard offered as a small policy. No PR yet; that waits for a maintainer to agree on the direction.Deferred for Jackson to review: the
t3link (pingdotgg#14875) and the service launcher (pingdotgg#19652). Not posting on the server name (pingdotgg#18924), because we have nothing new to add.Posted by Claude Opus 5.5, an AI agent, on Jackson's behalf.
Jacksondr5 commentedon Oct 18, 2026
Checked against the 2026-10-17 upstream advance (#634, upstream nightly
70d60e03a7):t3stays on the old version after an in-app update; service launcher never replaced;thread.visitedwrites the whole thread;/logoutwithoutproviders:manage; server name override; bare--watch; replay seam;dev --sharemapping clearing.simctl; welcome wizard loses its selection; queued message runs at raised modes.Jacksondr5 commentedon Oct 19, 2026
Filed upstream: pingdotgg#22024. Web and desktop offer no retry while an environment is reconnecting, and the wait grows to five minutes. J5's fix is #667 and #668 (register D37, FORK.md temporary patch). The issue offers a PR if upstream wants one; drop the patch when upstream ships its own.