Skip to content

feat(codex): submit thread feedback to OpenAI - #7949

Merged
t3dotgg merged 6 commits into
mainfrom
t3code/add-codex-feedback
Aug 23, 2026
Merged

feat(codex): submit thread feedback to OpenAI#7949
t3dotgg merged 6 commits into
mainfrom
t3code/add-codex-feedback

Conversation

@t3dotgg

@t3dotgg t3dotgg commented Aug 23, 2026

Copy link
Copy Markdown
Member

Codex users could not submit a T3 Code thread to OpenAI or get the thread ID needed to share it with OpenAI employees.

Type /feedback in an existing Codex thread to upload the conversation and Codex logs. Add an optional reason, then copy the returned thread ID on web, desktop, or mobile.

Built with GPT-5.6 Sol in the Codex harness.


Note

Medium Risk
New operate-scoped RPC uploads conversation data and Codex logs to OpenAI, and can recover stopped Codex sessions before upload. Errors are sanitized so provider details are not returned to clients.

Overview
Lets Codex users send /feedback (optional reason) in an existing thread so T3 Code uploads the conversation and logs to OpenAI and returns a shareable thread ID.

Adds provider.uploadFeedback RPC, contracts, and ProviderService.uploadFeedback. Codex-only adapters implement it via feedback/upload (classification: bug, includeLogs: true). Stopped Codex sessions are recovered before upload; other providers fail without restart. RPC requires orchestration operate scope; failures map to ProviderUploadFeedbackError without leaking provider internals.

Web and mobile intercept the command (no attachments), show local user/assistant pseudo-messages, and surface success with copy-ID or an error. Codex provider status now advertises the feedback slash command.

Reviewed by Cursor Bugbot for commit 07f159b. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add /feedback command to submit Codex thread feedback to OpenAI

  • Adds an end-to-end feedback flow: users type /feedback [reason] in a Codex-backed thread, and the client uploads the thread and logs to OpenAI via the new provider.uploadFeedback RPC, returning a shareable feedback thread ID.
  • Server side: ProviderService.uploadFeedback resolves a session (optionally recovering a stopped one), validates adapter support, and calls CodexAdapter.uploadFeedbackCodexSessionRuntime.uploadFeedback, which issues a feedback/upload request to the Codex app-server with classification: 'bug' and includeLogs: true.
  • Client side: parseCodexFeedbackCommand detects the command, submitCodexFeedback manages upload state (uploading → sent/failed/interrupted), and codexFeedbackMessage renders synthetic user/assistant messages in the timeline on both web and mobile.
  • Adds contracts types (ProviderUploadFeedbackInput, ProviderUploadFeedbackResult, ProviderUploadFeedbackError) and registers WsProviderUploadFeedbackRpc in the RPC group, requiring AuthOrchestrationOperateScope.
  • Risk: ProviderAdapterShape.uploadFeedback is optional on the base interface but required on CodexAdapterShape; any out-of-tree adapter implementations must add the method. ProviderUploadFeedbackError.message redacts the upstream cause to avoid leaking error text.

Macroscope summarized 07f159b.

@coderabbitai

coderabbitai Bot commented Aug 23, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e656af30-743f-401b-8317-d58f4ab74d2c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 23, 2026

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new Codex feedback toast in apps/web/src/components/ChatView.tsx: the "Copy ID" action bypasses the shared clipboard helper and loses its unavailable-API handling. Everything else in the web diff reuses the existing toast helper and provider slash-command plumbing, so no other consistency issues were found.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/components/ChatView.tsx Outdated
@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.4 KiB 13.4 KiB −18 B (−0.1%) 15.1 KiB
Codex Thread snapshot wire 6.9 KiB 6.9 KiB −8 B (−0.1%) 7.3 KiB
Codex Live turn WebSocket wire 6.6 KiB 6.5 KiB −10 B (−0.1%) 7.8 KiB
Codex Live turn WebSocket decoded 55.0 KiB 55.0 KiB 0 B (0.0%) 66.4 KiB
Codex Live turn messages 16 16 0 (0.0%) 21
Claude Total thread wire 13.4 KiB 13.4 KiB −11 B (−0.1%) 15.1 KiB
Claude Thread snapshot wire 6.9 KiB 6.9 KiB −5 B (−0.1%) 7.3 KiB
Claude Live turn WebSocket wire 6.5 KiB 6.5 KiB −6 B (−0.1%) 7.8 KiB
Claude Live turn WebSocket decoded 55.8 KiB 55.8 KiB 0 B (0.0%) 66.4 KiB
Claude Live turn messages 16 16 0 (0.0%) 21

Baseline: 30be311 · PR result: 07f159b · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 109.4 KiB
  • Claude decoded thread snapshot: 110.1 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the new provider feedback path against the Effect service conventions. The adapter/service layers (CodexAdapter.uploadFeedback, ProviderService.uploadFeedback, CodexSessionRuntime.uploadFeedback) follow the existing routing, span-annotation, and domain-error pass-through patterns. One issue: the new RPC-boundary error is unstructured and drops the underlying failure.

Posted via Macroscope — Effect Service Conventions

Comment thread apps/server/src/ws.ts
Comment thread packages/contracts/src/provider.ts Outdated
Comment thread apps/web/src/components/ChatView.tsx Outdated
Comment thread apps/mobile/src/state/use-thread-composer-state.ts Outdated
Comment thread apps/server/src/provider/Layers/ProviderService.ts Outdated

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit a4d66cd. Configure here.

Comment thread apps/mobile/src/state/use-thread-composer-state.ts
Comment thread apps/mobile/src/state/use-thread-composer-state.ts Outdated
@macroscopeapp

macroscopeapp Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds a new /feedback workflow across web and mobile, backed by a websocket/provider integration that uploads the Codex thread and logs to OpenAI. The cross-layer behavior and sensitive external-data transfer warrant human review.

You can add or adjust custom eligibility rules. Learn more.

Comment thread apps/server/src/provider/Layers/ProviderService.ts Outdated
@github-actions github-actions Bot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 23, 2026
Comment thread apps/mobile/src/state/use-thread-composer-state.ts Outdated
Comment thread apps/web/src/components/ChatView.tsx Outdated

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new Codex /feedback composer path in apps/web/src/components/ChatView.tsx: the in-flight upload blocks sending but is not surfaced in the composer's send affordance. The previously flagged clipboard issue is resolved now that the action routes through writeTextToClipboard.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/components/ChatView.tsx
@t3dotgg
t3dotgg merged commit 3db38b8 into main Aug 23, 2026
25 checks passed
@t3dotgg
t3dotgg deleted the t3code/add-codex-feedback branch August 23, 2026 07:00
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 23, 2026
## What's Changed
* fix(clients): reconnect after credentials fail during remote server updates by @t3dotgg in pingdotgg/t3code#7953
* feat(codex): submit thread feedback to OpenAI by @t3dotgg in pingdotgg/t3code#7949
* fix(server): stop kills lingering Claude work by @t3dotgg in pingdotgg/t3code#5891
* fix(ci): let Macroscope approve pull requests again by @t3dotgg in pingdotgg/t3code#7970


**Full Changelog**: pingdotgg/t3code@v0.0.34-nightly.20260823.1166...v0.0.34-nightly.20260823.1167

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.34-nightly.20260823.1167
pandec added a commit to pandec/t3code that referenced this pull request Aug 23, 2026
Fast-forwards main from 30be311 to f70eeee (6 commits, 47 files) and
merges it into dev. Small in commits, heavy in fork contact: 19 files
carried fork delta, giving 19 conflicts across 42 hunks.

Upstream lands Codex /feedback upload to OpenAI (pingdotgg#7949), a Claude Stop
rewrite that kills lingering work instead of only interrupting the turn
(pingdotgg#5891), settled pinned threads moving into the settled shelf (pingdotgg#7969),
and a credentials-failure reconnect during remote server updates (pingdotgg#7953).

Notable resolutions. Classification on both clients is now snoozed,
settled, pinned, Older, with the fork's Older grouping still last so it
never claims a lifecycle-owned row. ProviderService.test.ts and the mobile
send callback both had misaligned hunks and were reconstructed from each
side rather than resolved marker by marker; taking upstream there would
have dropped deliveryIntent and the bounded message window, both of which
compile. uploadFeedback takes the fork's per-thread lock. Claude's
session.exited keeps its sessionGenerationId and the usage-fiber
cancellation survives upstream's close-first teardown.

Two fixes a clean merge would not have caught: the fork's running composer
left Queue and Steer enabled while submitComposer refused them, and card
rows keep the passive pin marker because upstream's now-focusable
indicator hid itself inside the fork's focus-hide wrapper.

vp check, typecheck, and focused tests pass. Full suite green except the
documented PortScanner pair caused by a foreign dev server on [::1]:3000.

Reviewed and merged by Claude Opus 5 in Claude Code, with gpt-5.6-sol
subagents for the behavioral reviews and post-merge audits.
cloudbridgeuy pushed a commit to cloudbridgeuy/t3code that referenced this pull request Aug 23, 2026
longtngo added a commit to longtngo/t3code that referenced this pull request Aug 24, 2026
Range 2274444..f035a0f. 80 files touched by both sides; 20 conflicted,
33 hunks. Four of upstream's commits landed in subsystems this fork has
rewritten, and three of the conflicts were git splicing two unrelated
blocks onto shared scaffolding.

Competing implementations, resolved toward a hybrid superset:

- pingdotgg#5891 (stop kills lingering Claude work) rewrote `interruptTurn` into a
  single hard `stopSessionInternal`. This fork's Stop is a two-rung client
  ladder (cooperative interrupt, then a deliberate second press escalating
  to `session.stop`), so collapsing the rungs would make that band
  vestigial for Claude and charge every stop-to-redirect a cold restart.
  Kept the fork's cooperative `interruptTurn` (bounded `stopTask` sweep +
  bounded `query.interrupt()`); took upstream's hardened
  `stopSessionInternal` (`close()` at the very top, `task.completed` sweep
  over `liveTaskIds`, `stopSessions` failure collection) and kept the
  fork's bounded `Fiber.interrupt` on top. Upstream removed
  `ClaudeQueryRuntime.interrupt`/`.stopTask` OUTSIDE any conflict marker;
  both restored. Upstream's four new tests retargeted to `stopSession`,
  not deleted.
- pingdotgg#7412 (recover from provider interrupt failures) adopted on top of the
  fork's live-session gate, which settles to `stopped` rather than
  erroring when nothing is live. Its three tests only projected a session,
  so each needed a `runtimeSessions.push` to reach the path it tests.
- pingdotgg#7969 (settled pinned threads) extracted the pin markup into
  `pinIndicator` byte-identically; took the extraction, kept
  `ThreadProviderChip`.
- pingdotgg#7949 (Codex feedback) added a send-abort condition; folded into the
  fork's `shouldAbortSendBeforeOfflineQueue` helper so every abort reason
  stays in one tested place, with a case for it.
- pingdotgg#8048 (attachment uploads) and pingdotgg#7999/pingdotgg#7971 merged additively; the
  offline-outbox branch stays ahead of the new feedback branch in
  `handleSend`, since it must run before anything mutates the draft.

Three conflicts were splices, resolved by reset-and-reapply rather than
hunk surgery: `ClaudeAdapter.test.ts` and
`ProviderCommandReactor.test.ts` (two unrelated tests sharing
`makeHarness()` scaffolding) and `http.ts` (two route layers sharing an
`Effect.gen` preamble; `attachmentUploadRouteLayer` re-added whole).

Invariants: all ten re-probed against the merged tree and holding.
Migrations 47 entries, ids unique and monotonic, max 48, 34 still burned;
patches now 16 files with exactly one fork-owned and 15 byte-identical to
upstream (upstream added `@legendapp/list`); `Sidebar.tsx` still the
default; the three MessagesTimeline helpers, the Collapsible wrapper, the
steering test and `serverRuntimeStartup.reconcile.test.ts` all still
absent; four `isSendBlocked=` sites; both footer panels inside
`SidebarUtilityMenu`; both project-row entry points. Registry gains
invariants 7-9 for the decisions above.

Sweeps: resurrected 1, dropped 11, fork-loss 17, every entry named. The
one resurrection is a text-level false positive (a bare `if (` the fork
restructured, matching upstream's new attachment block verbatim). Two
real findings the sweep caught that the gate could not: the fork's
deliberate deletion of `shouldShowBranchMismatchBanner` was re-imported
in two files by an additive resolution, and `ChatMarkdown.tsx` carried a
`markdown-file-link-tooltip-scroll` class that was never defined in any
stylesheet — a pre-existing fork defect, so the tooltip's thin scrollbar
had silently fallen back to the browser default. Restored upstream's
working inline utilities.

Gate (`pnpm verify`, the fork's only gate — CI never runs here): format
clean, typecheck 0 errors, lint 23 warnings and 0 errors (all
pre-existing), tests 9873 passed / 7 skipped / 0 failed across 14
projects. Three failures were fixed en route: the third pingdotgg#7412 test above,
an invalid `status: "starting"` in the runtime-session fixture it needed,
and upstream's `entrypoint.test.ts` symlink case, which cannot pass on
macOS because `os.tmpdir()` is itself a symlink that `realpathSync`
resolves along with the fixture's own link — proven with a live probe,
fixed in the fixture only, and worth sending upstream.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
bcotrim pushed a commit to bcotrim/mognet that referenced this pull request Aug 24, 2026
Mchicao added a commit to Mchicao/t3code that referenced this pull request Aug 25, 2026
Resolved conflicts keeping both sides: fork Codex-session-import overlay
(ws.ts, rpc.ts, server.test.ts, providers-codex.md) + upstream provider
feedback upload (pingdotgg#7949) and app-approval docs (pingdotgg#8058).

Fixed two latent PR #1 type errors surfaced by tsgo:
- ContextWindowMeter.logic.ts: coalesce optional snapshot fields with ?? null
- ProviderRuntimeIngestion.ts: drop Effect.fn.Return annotation pinning the
  error channel to never (ServerSettingsError now propagates like before)
georgejabbour pushed a commit to georgejabbour/t3code that referenced this pull request Sep 1, 2026
This fork makes ProviderService.startSession refuse a working folder that is
not on disk. Every test in
apps/server/src/provider/Layers/ProviderService.test.ts therefore names a real
temporary folder through the sessionCwd helper at the top of the file.

Upstream's feat(codex): submit thread feedback to OpenAI (pingdotgg#7949) added the test
"recovers a stopped Codex session before uploading feedback" on 23 August 2026.
It starts a session in /tmp/feedback-project, a folder nothing creates, so the
guard refused it and the test failed. The rebase onto
v0.0.36-nightly.20260828.1209 stayed clean, because upstream added the test on
a line this fork never edits.

The test now takes its folder from sessionCwd, like every other test in the
file. PATCHES.md records this as the second time this exact case has appeared,
and corrects the count of test files the updater runs.

Model: Claude Opus 5 (1M context). Harness: Claude Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
georgejabbour pushed a commit to georgejabbour/t3code that referenced this pull request Sep 1, 2026
This fork makes ProviderService.startSession refuse a working folder that is
not on disk. Every test in
apps/server/src/provider/Layers/ProviderService.test.ts therefore names a real
temporary folder through the sessionCwd helper at the top of the file.

Upstream's feat(codex): submit thread feedback to OpenAI (pingdotgg#7949) added the test
"recovers a stopped Codex session before uploading feedback" on 23 August 2026.
It starts a session in /tmp/feedback-project, a folder nothing creates, so the
guard refused it and the test failed. The rebase onto
v0.0.36-nightly.20260828.1209 stayed clean, because upstream added the test on
a line this fork never edits.

The test now takes its folder from sessionCwd, like every other test in the
file. PATCHES.md records this as the second time this exact case has appeared,
and corrects the count of test files the updater runs.

Model: Claude Opus 5 (1M context). Harness: Claude Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
Ten days of main (194 commits, 640 files) re-integrated with the v2
re-architecture. The headline mechanics:

- migrations: main added 041-043 (AuthSessionClientConnection,
  ProjectionThreadLinkedPullRequest, ProjectionThreadsUnsettledAt), so the
  v2 block renumbers 041-049 → 044-052 with the migration tests shifted to
  match
- contracts: OrchestrationClientOrigin (#7774) and the origin metadata
  field live in applicationEvent.ts and re-export through the legacy
  path; ProviderApprovalOption + acceptAlways + mcp-elicitation (#8058)
  land in providerPolicy.ts; OrchestrationDispatchCommandError (#8824)
  added; the send-turn image-mime home stays chatAttachment.ts
- threadSettled: main's settle-once-on-merge semantics (#7454) and
  un-settle re-anchor (#8231) hand-merged onto the v2 duck-typed shells
  (latestRun ?? latestTurn reads); web callers pass the new
  ChangeRequestSettleSource shape
- timeline anchoring: main's #7897 (follow-up sends no longer push to the
  top) ported by scanning user rows only; the branch test now encodes the
  new semantics, as does mobile's #7969 settled-pinned shelf behavior
- vcs: branch's deleteLocalBranch coexists with main's pruneWorktrees and
  the #7674 submodule checkout tests
- ws: v2 RPC surface keeps its dispatch path; main's attachment upload
  RPCs (#8048) and client-connection analytics recording are wired;
  providerUploadFeedback (#7949) fails explicitly pending a v2 route
- approvals: main's option-driven approval buttons (#8058) render through
  the v2 canRespond gate on web and mobile
- ChatView/ChatComposer/MessagesTimeline/Sidebar/session-logic/
  threadActivity keep the branch's v2 architecture; main's v1-coupled
  deltas to those files are recorded for follow-up rather than
  force-fitted

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
#7949)

The round-10 rebase stubbed providerUploadFeedback to an explicit error
because its v1 ProviderService route died with the v2 rewrite. The route
now goes through the v2 runtime: session runtimes may expose an optional
uploadFeedback capability, the Codex adapter implements it against the
app-server's feedback/upload request, and the WS handler resolves the
thread's live provider session through ProviderSessionManagerV2 —
failing with a plain-language reason when no session has run, the session
is gone, or the driver has no feedback channel. This also un-blocks the
dormant mobile feedback UI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
brentkelly added a commit to brentkelly/t3code-orchestrator that referenced this pull request Sep 2, 2026
* feat(analytics): threads and turns now know which client started them (pingdotgg#7774)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): stop marking mixed tool runs as failed (pingdotgg#7893)

* fix(web): command-click spaced folder links (pingdotgg#6439)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* fix(chat): stop pushing follow-up messages to the top (pingdotgg#7897)

* test(desktop): remove redundant release note assertion (pingdotgg#7873)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(web): handle wide ordered-list marker edge cases (pingdotgg#7856)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ssh): restore user PATH for remote servers (pingdotgg#7213)

* fix(desktop): keep tailscale spawn defects from breaking advertised endpoints (pingdotgg#7116)

* fix(web): keep Codex service tier labels readable (pingdotgg#4503)

* fix: render workspace images in chat markdown (pingdotgg#6433)

* fix(clients): keep opening responses visible after turns settle (pingdotgg#7723)

* feat(web): add appearance contrast control (pingdotgg#7906)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(server): stop completed Codex threads from staying stuck on working (pingdotgg#7937)

* fix(mobile): preserve markdown image dimensions (pingdotgg#7940)

* fix(web): remove duplicate provider update progress (pingdotgg#7761)

* fix(server): fall back to the remote default branch instead of assuming main (pingdotgg#7078)

* fix(web): give sidebar project menu rows the same side padding as other menus (pingdotgg#7913)

* fix(clients): reconnect after credentials fail during remote server updates (pingdotgg#7953)

* feat(codex): submit thread feedback to OpenAI (pingdotgg#7949)

* fix(server): stop kills lingering Claude work (pingdotgg#5891)

* fix(ci): let Macroscope approve pull requests again (pingdotgg#7970)

* fix(clients): move settled pinned threads into the settled section (pingdotgg#7969)

* perf(ci): speed up release builds and Windows packaging (pingdotgg#7975)

* fix(web): stop tool calls from leaving a blank page in threads (pingdotgg#7971)

* fix(web): stop recovered tool failures from marking work logs red (pingdotgg#7999)

* fix(mobile): isolate markdown image requests (pingdotgg#7942)

* feat(web): redesign skills in `$` menu and in `/` menu (pingdotgg#8009)

* fix(web): restore right panel toggle clicks after closing on desktop (pingdotgg#8016)

* fix(web): keep server update banners flush with the composer (pingdotgg#8000)

* perf(web): reuse work log rows during streaming (pingdotgg#8006)

* fix(web): keep provider badge legible in dark themes (pingdotgg#7968)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(web): treat configured urls with uppercase schemes as secure (pingdotgg#8005)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(desktop): keep release notes visible while downloading (pingdotgg#6412)

* fix(web): show only providers with usage in usage views (pingdotgg#7563)

* fix(web): prevent expanded tool calls from hiding thread content (pingdotgg#8052)

* test(server): remove no-op live activity tests (pingdotgg#8056)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(web): clarify terminal sidebar grouping (pingdotgg#7967)

* fix(codex): show app access approval prompts (pingdotgg#8058)

* feat(web): upload image attachments before sending (pingdotgg#8048)

* fix(server): bound OpenCode skill discovery output (pingdotgg#7675)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(mobile): persist thread shelf collapse state (pingdotgg#5152)

* fix(mobile): restore Android tablet thread controls, clean up header (pingdotgg#5385)

* fix(mobile): land the first thread open above the composer on Android (pingdotgg#5585)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(server): check out submodules in a new worktree (pingdotgg#7674)

Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>

* fix(server): preserve merged PR badges after branch deletion (pingdotgg#6216)

* fix(server): return fresh live pull request reads (pingdotgg#6472)

* fix(web): compare client and server versions as semver, not strings (pingdotgg#7579)

* fix(web): stop follow-ups from leaving giant blank space (pingdotgg#8068)

* fix(marketing): stop automatic Vercel deployments on pull requests (pingdotgg#8070)

* chore: vouch repeat contributors (pingdotgg#8071)

* fix(server): keep the authoritative subagent model when snapshots race task_started (pingdotgg#7583)

* fix(server): honor auto-accept edits for the OpenCode provider (pingdotgg#7100)

* fix(server): run the CLI on Node versions without import.meta.main (pingdotgg#7141)

* fix(server): recover from provider interrupt failures (pingdotgg#7412)

* fix(server): recreate a thread's worktree before starting a turn (pingdotgg#7839)

* fix(server): thread delete no longer fails on already-removed worktrees (pingdotgg#8076)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): stop update notices showing through the composer (pingdotgg#8083)

* fix(web): detect outdated nightly servers (pingdotgg#8124)

* fix(web): align usage page skeleton layout (pingdotgg#8111)

* fix(web): make terminal links appear clickable only when clickable (pingdotgg#7488)

* fix(web): make Windows file links clickable in chat (pingdotgg#8081)

* fix(web): sort usage models by token count (pingdotgg#8108)

* fix: open agent file links in the file viewer (pingdotgg#8098)

* fix(server): stop routine events from rescanning thread history (pingdotgg#8150)

* fix(deps): stop pnpm installs from changing the lockfile (pingdotgg#8163)

* feat(web): settle and restore threads with a keyboard shortcut (pingdotgg#8089)

* perf(desktop): cut macOS signing calls by 81% (pingdotgg#8093)

* feat: link pull requests to threads (pingdotgg#8160)

* feat(web): safely attach HEIC photos as JPEG images (pingdotgg#8161)

Co-authored-by: mweinbach <maxweinbach5@gmail.com>

* feat(mobile): track device models and OS versions (pingdotgg#8169)

* fix(grok): bound cumulative tool output updates (pingdotgg#7279)

* fix(web): delay thread shortcut hints by 200 ms (pingdotgg#8172)

* fix(server): stop probing Cursor until enabled (pingdotgg#8175)

* docs(release): verify remote updates with database migrations (pingdotgg#8177)

* fix(server): keep provider CLIs available in the macOS service (pingdotgg#8173)

* feat(claude): compact old threads before they burn through usage (pingdotgg#8144)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(client-runtime): retry queries after connection interruption (pingdotgg#8117)

* fix(server): keep previously used providers working after upgrades (pingdotgg#8176)

* feat(desktop): build macOS previews from a PR label (pingdotgg#8182)

* fix(web): thread jump hints no longer stick after a dictation paste (pingdotgg#8189)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep grouped project renames (pingdotgg#7831)

* feat(web): reveal chat file chips in the system file manager (pingdotgg#7140)

Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* fix(server): push no longer writes a feature branch's commits to its base branch (pingdotgg#8228)

* chore(deps): bump @clerk/electron to 0.0.37 (pingdotgg#8240)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(server): fetch legacy model classification from a hosted manifest (pingdotgg#8227)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* chore(release): prepare v0.0.34

* fix(desktop): let Clerk UI receive stable auth fixes (pingdotgg#8248)

* fix(app): un-settled threads return to the top of the list (pingdotgg#8231)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(ci): cut about a minute from every release (pingdotgg#8250)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(ci): download macOS preview DMGs without signing in (pingdotgg#8243)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(codex): accept Codex 0.150 multi-agent events (pingdotgg#8346)

* chore(release): prepare v0.0.35

* fix(grok): improve skills, plans, usage, and turn reliability (pingdotgg#8358)

Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>

* fix(server): recover stale Codex approval callbacks (pingdotgg#5195)

* test(server): remove duplicate missing worktree test (pingdotgg#8252)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(server): replay all un-applied events during projection bootstrap (pingdotgg#7538)

Co-authored-by: Theo Browne <me@t3.gg>

* test: remove low-signal test files (pingdotgg#8397)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* test: prune trivial error and layout tests (pingdotgg#8400)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* Fix Android adaptive launcher icon (pingdotgg#4332)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* feat(web): split provider settings into list and editor (pingdotgg#8380)

* fix(codex): accept Codex 0.150 account plans (pingdotgg#8447)

* fix(tooling): allow ignored-only staged changes (pingdotgg#8468)

* fix(mobile): keep iOS home header stable (pingdotgg#8467)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): stop showing red x summaries for ordinary tool failures (pingdotgg#8395)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): refine Git action toast glass styling (pingdotgg#8399)

* fix(desktop): allow preview automation in agent-created threads (pingdotgg#8483)

* test(web): remove redundant cache key test (pingdotgg#8484)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(release): move nightly schedule to minute 38

Recent scheduled nightlies have been delayed or skipped.

Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.

Authored by GPT-5.6 Sol with the Codex harness.

* fix(web): stabilize the provider settings editor (pingdotgg#8472)

* fix(web): open GitHub pull requests in browser when loading fails (pingdotgg#8507)

* fix(codex): show sub-agent models (pingdotgg#8502)

* feat(analytics): report connected client platforms (pingdotgg#8481)

* feat(server): accept PDF, ZIP, and other file uploads up to 50MB (pingdotgg#8235)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): toggle thread pin from the keyboard

Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.

* fix(web): add back button to project settings (pingdotgg#8168)

* refactor(mobile): compile semantic themes for Uniwind (pingdotgg#7327)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(desktop): Cache Runtime locally on WSL Filesystem, dramatically improving launch times  (pingdotgg#5769)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>

* fix(mobile): show OpenCode model sources in picker (pingdotgg#8573)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(clients): honor project default models in new threads (pingdotgg#6011)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix(mobile): show file actions on Android (pingdotgg#8215)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix(connect): explain DPoP connection failures (pingdotgg#8351)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat(web): make the sidebar project filter a searchable combobox (pingdotgg#5931)

* fix(server): a draft can retry its first send after a failed bootstrap (pingdotgg#8226)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop): stop hidden previews draining battery (pingdotgg#8567)

* fix(desktop): oauth popups open from the browser preview (pingdotgg#8435)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): keep long task drawers usable on small screens (pingdotgg#8313)

* fix(opencode): handle child approvals, stops, and model catalogs (pingdotgg#8480)

* fix: make thread auto-settling opt-in (pingdotgg#8321)

* fix(web): stop session activity timing test from blocking releases (pingdotgg#8585)

* fix(mobile): show composer menus when starting a task (pingdotgg#8587)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): show the configured stash shortcut (pingdotgg#8437)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* feat(web): add toggleable confirmation before unpinning a thread (pingdotgg#7313)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix: restore automatic thread settling defaults (pingdotgg#8596)

* fix(mobile): restore composer glass and rounded shadows (pingdotgg#8597)

Co-authored-by: Julius Marminge <julius@mac.lan>

* Remove Messages Glass Lab experiment (pingdotgg#8599)

* chore(release): prepare v0.0.36

* Require human review for pull requests changing product defaults (pingdotgg#8603)

* fix(codex): avoid quadratic app-server input buffering (pingdotgg#8605)

* fix(mobile): stabilize iOS header item transitions (pingdotgg#8607)

Co-authored-by: Julius Marminge <julius@mac.lan>

* chore(mobile): upgrade to Expo SDK 57 (pingdotgg#8609)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(mobile): harden native header toolbar items (pingdotgg#8611)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(server): stop querying Claude context usage after turns (pingdotgg#8610)

* chore: vouch ryanrhughes (pingdotgg#8613)

* feat(web): attach PDFs, ZIPs, and other files to a turn (pingdotgg#8236)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): pass stashShortcutLabel in the mixed-attachments stash test

PRs pingdotgg#8437 and pingdotgg#8236 crossed: one made stashShortcutLabel a required
ComposerStashMenu prop, the other added a test case without it, so
main fails web typecheck.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(web): keybinding settings as settings rows (pingdotgg#8532)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat: let an environment publish themes as a file (pingdotgg#8569)

Co-authored-by: Theo Browne <me@t3.gg>

* fix(web): clean up provider settings list and editor (pingdotgg#8504)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): keep project picker popup inside the sidebar (pingdotgg#8627)

* fix(mobile): prevent header overflow and back-button artifacts (pingdotgg#8624)

* fix(server): retry automatic thread title generation (pingdotgg#8087)

* fix(client-runtime): refresh edited pull request comments (pingdotgg#8094)

* fix(web): four composer spacing defects (pingdotgg#8090)

* perf(desktop): skip duplicate browser updates (pingdotgg#8018)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): render nested markdown images correctly (pingdotgg#8501)

* fix(web): unify activity logs and composer banners (pingdotgg#8693)

* fix(mobile): reduce dev-client reload and Metro startup cost (pingdotgg#8694)

Co-authored-by: Julius Marminge <julius@mac.lan>

* revert(web): restore previous composer banners (pingdotgg#8733)

* test(web): remove tests for unreachable helpers (pingdotgg#8738)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* feat(mobile): update tool summaries and chat transitions (pingdotgg#8793)

* feat(web): play video attachments in chat (pingdotgg#8688)

* fix(web,mobile): snooze menu no longer offers the same wake time twice (pingdotgg#8741)

* fix(grok): allow model changes in existing threads (pingdotgg#8392)

Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>

* feat(mobile): pick, share, and receive files in threads (pingdotgg#8237)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): reduce title bar scroll fade height (pingdotgg#8799)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(windows): strip quotes from repaired PATH (pingdotgg#8746)

* fix(web): open agent images in expanded preview (pingdotgg#8807)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(git): follow repository instructions in generated source control text (pingdotgg#8804)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(server): stop overpricing cached Claude tokens (pingdotgg#8806)

* fix(web): keep image preview above sidebar control (pingdotgg#8811)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): keep right panel synced with agent edits (pingdotgg#8803)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web,mobile): render Codex citations and artifact templates (pingdotgg#8584)

* chore: add Windows setup script to t3.json (pingdotgg#8814)

* fix(web): fold interim turn responses (pingdotgg#8828)

* fix(web): use circle alert for failed tool calls (pingdotgg#8840)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(mobile): add offline iPhone voice input (pingdotgg#8614)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): prevent pull request metadata overlap (pingdotgg#8790)

* chore(release): prepare v0.0.37

* Add mobile composer attachment menu with video support (pingdotgg#8843)

* fix(mobile): map native menu icon colors explicitly

* fix(web): restore unified activity logs and composer banners (pingdotgg#8734)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>

* fix(web): address composer banner review follow-ups (pingdotgg#8850)

* fix(web): widen sync banners and simplify the working timer (pingdotgg#8855)

* fix(preview): improve browser recording quality (pingdotgg#8839)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): mark pull request links as external (pingdotgg#8856)

* fix(mobile): replace Callstack glass with Expo glass (pingdotgg#8862)

* fix(server): skip IDE detection in Claude probes (pingdotgg#8634)

* chore(macroscope): review diagnostic overrides (pingdotgg#8917)

Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* fix(contracts): accept CLI event origins (pingdotgg#8905)

* fix(web): hide invalid slash skill completions (pingdotgg#8904)

* fix(mobile): defer draft navigation until submission completes (pingdotgg#8914)

* chore: disable CodeRabbit review status (pingdotgg#8933)

* Delete app.json (pingdotgg#8934)

* fix(web): show scrollbar for wide markdown tables (pingdotgg#8868)

* fix(mobile): shimmer active tool rows (pingdotgg#8932)

Co-authored-by: Julius Marminge <julius@mac.lan>

* chore(deps): bump Electron to 43.4.1 (pingdotgg#8626)

* fix(chat): smooth worktree setup status (pingdotgg#8922)

* feat(mobile): add video playback with native iOS controls (pingdotgg#8919)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): prevent chat metadata overlap (pingdotgg#8851)

* fix(server): preserve usage cache outside walked roots (pingdotgg#8540)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* feat(mobile): add native image and PDF previews (pingdotgg#8959)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(server): allow long thread IDs in HTTP routes (pingdotgg#8898)

* fix(shared): preserve Windows shell PATH priority (pingdotgg#8748)

* fix(web): make WSL settings searchable (pingdotgg#8881)

* feat(web): add expand/collapse all control to the files surface (pingdotgg#8889)

* Add auto_review configuration to coderabbit.yaml

* style: format CodeRabbit configuration

* feat(mobile): upload attachments while composing (pingdotgg#8978)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(chat): keep agent activity visible between actions (pingdotgg#8984)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(server): isolate remote web session cookies (pingdotgg#8085)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat(pull-requests): link GitHub references in markdown (pingdotgg#8812)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* perf(server): reduce frequency of full tool call output being loaded into memory from db (pingdotgg#8988)

* feat(web): add pull request list filters (pingdotgg#8809)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(web): search individual settings by detail (pingdotgg#8831)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(client): render viewed images in work logs (pingdotgg#8936)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(client): use package import for markdown image helpers (pingdotgg#9010)

* test: remove static presentation snapshots (pingdotgg#9008)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* perf(server): bound snapshot activity payload memory (pingdotgg#9000)

* perf(server): cut idle CPU use and stop provider event leaks (pingdotgg#8187)

* perf(server): scan only appended transcript bytes for usage summaries (pingdotgg#9024)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>

* perf(server): cut chatty tool-update frames by 90% (pingdotgg#8368)

* fix(server): settle threads server-side (pingdotgg#8600)

* fix(clients): dedupe skills in composer menus (pingdotgg#8043)

* fix(server): stop OpenCode child sessions (pingdotgg#9005)

* perf(web): defer pull request line stats until visible (pingdotgg#6471)

Co-authored-by: Theo Browne <me@t3.gg>

* perf(server): skip full-message reads while streaming (pingdotgg#9032)

* perf(client-runtime): halve server config bootstrap traffic (pingdotgg#8367)

Reuse one server config subscription for session bootstrap and live updates.

Preserve environment theme opt-in, replay, deletion, slow subscriber recovery, and config stream failure handling.

Co-authored-by: Adamulek123 <adam.bogucki2018@gmail.com>

* fix(web): align un-settle banner action (pingdotgg#9033)

* fix(web): block type-to-focus behind open dialogs (pingdotgg#8139)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* feat(shortcuts): copy active thread reference (pingdotgg#8994)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(mobile): keep thread scroll bounds current after animations (pingdotgg#9013)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(server): cache project favicon resolution (pingdotgg#9080)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(claude): add Claude Fable 5.1 model (pingdotgg#9078)

* fix(preview): restore recording and macOS rendering after Electron 43 (pingdotgg#9001)

Co-authored-by: Guillermo Casanova <guillermo.casanova.b@gmail.com>

* feat(desktop): add configurable quit shortcut confirmation (pingdotgg#9076)

* feat(web): open project settings from thread menus (pingdotgg#8925)

* fix(chat): reuse one row for live activity (pingdotgg#9062)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(models): discover Claude models from remote manifest (pingdotgg#9084)

* Revert "fix(chat): reuse one row for live activity" (pingdotgg#9096)

* fix(web): sync sidebar PR state from open panel (pingdotgg#9092)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(web): changing projects no longer creates a draft (pingdotgg#9097)

* fix(web): keep theme placeholder text dimmer than entered text (pingdotgg#9104)

* fix(web): keep the selected environment when changing projects (pingdotgg#9102)

* docs(plans): t3o-31 upstream sync to v0.0.38

* fix(board): clear the ten pre-existing typecheck errors before the upstream sync (t3o-31 P0)

Two test fakes failed with a bare Error in the Effect failure channel, a
closure-assigned let narrowed to never, and a single-override pill read
overriddenRows[0] under noUncheckedIndexedAccess. None changed behaviour;
they were masked because the recursive typecheck never reached apps/server.

* fix(sync): the three type errors and two test failures the v0.0.38 merge caused

- BoardModelRow reads planModeEnabled from client settings, as the composer does.
- findBranchPullRequest resolves the default branch for upstream's widened PR
  cache key instead of passing null.
- The orphaned-session integration test mocks the supervisor reactor that the
  startup seam yields (new inventory row).
- The projection resume test seeds board projector watermarks into
  boards.projection_state, where t3o-26 reads them, and asserts over the union.
- searchSettings("work") now also matches upstream's worktree/network items.

* refactor(board): native title attributes become BoardHint tooltips

Upstream's new no-native-title-tooltip rule flags every intrinsic-element
title= in the board (61 sites). BoardHint wraps the styled Tooltip primitive
and renders its child as the trigger, so layout is unchanged; a nullish label
renders the child alone.

* docs(seams): record the v0.0.38 sync (t3o-31)

Merge-log row, the decisions taken (plans stay tracked, upstream's settlement
reactor accepted after audit, projector-enumeration policy, launcher protocol
note), an unmarked-edits debt table for the next sync, a marker census, the
three new upstream workflows to disable, and the runbook's per-package
verification notes.

* review(t3o-31): announce the board's status dots, and order the merge log

Round-1 nitpicks: a bare span's aria-label is not announced, so the working,
running and awaiting dots now carry role="img"; the v0.0.38 merge-log row
moves below the two 2026-08-09 rows so the table reads chronologically.

---------

Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: abcdmku <63693423+abcdmku@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: Rishet11 <154429365+Rishet11@users.noreply.github.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Naveed Iqbal <naveediqbal949@gmail.com>
Co-authored-by: Ishaan Kothari <ishaanko.mail@gmail.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Rakshith Bhat <88523594+RakshithBhat03@users.noreply.github.com>
Co-authored-by: Simone <lucenz@proton.me>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Tristan Knight <admin@snappeh.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com>
Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>
Co-authored-by: Adamulek123 <adam.bogucki2018@gmail.com>
Co-authored-by: spiky02plateau <155588579+spiky02plateau@users.noreply.github.com>
Co-authored-by: Carlos Jimenez <cjimenez@r21digital.com>
Co-authored-by: Mark Griffin <mrmg@deflexion.net>
Co-authored-by: MacKinley Smith <smithmackinley@gmail.com>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Mohtasham Murshid <154406804+MohtashamMurshid@users.noreply.github.com>
Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: Josh <gitlucky@pipelab.org>
Co-authored-by: Tradi3 <56069280+krutftw@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Ivan Malison <IvanMalison@gmail.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Gianmarco <gianmarcosimone89@gmail.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: Illia Panasenko <hello@ipanasenko.me>
Co-authored-by: Matheson Steplock <ikifar2012@users.noreply.github.com>
Co-authored-by: Anirudh Coontoor <anirudh@gosupernova.live>
Co-authored-by: Nick Anisimov <n.anisimov.23@gmail.com>
Co-authored-by: Muhammad Waleed <114993336+walid-baharwal@users.noreply.github.com>
Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
Co-authored-by: Vitaly Iegorov <vitalyiegorov@gmail.com>
Co-authored-by: Ahmed Besic <ahmed.besic2000@gmail.com>
Co-authored-by: maria <maria@kuuro.net>
Co-authored-by: Matthew Feroz <136640686+MatthewFeroz@users.noreply.github.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: Aditya Garud <153842990+yashranaway@users.noreply.github.com>
Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com>
Co-authored-by: Will Sheldon <will@autimo.com>
Co-authored-by: mic <85814106+q1@users.noreply.github.com>
Co-authored-by: Guillermo Casanova <guillermo.casanova.b@gmail.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
Ten days of main (194 commits, 640 files) re-integrated with the v2
re-architecture. The headline mechanics:

- migrations: main added 041-043 (AuthSessionClientConnection,
  ProjectionThreadLinkedPullRequest, ProjectionThreadsUnsettledAt), so the
  v2 block renumbers 041-049 → 044-052 with the migration tests shifted to
  match
- contracts: OrchestrationClientOrigin (#7774) and the origin metadata
  field live in applicationEvent.ts and re-export through the legacy
  path; ProviderApprovalOption + acceptAlways + mcp-elicitation (#8058)
  land in providerPolicy.ts; OrchestrationDispatchCommandError (#8824)
  added; the send-turn image-mime home stays chatAttachment.ts
- threadSettled: main's settle-once-on-merge semantics (#7454) and
  un-settle re-anchor (#8231) hand-merged onto the v2 duck-typed shells
  (latestRun ?? latestTurn reads); web callers pass the new
  ChangeRequestSettleSource shape
- timeline anchoring: main's #7897 (follow-up sends no longer push to the
  top) ported by scanning user rows only; the branch test now encodes the
  new semantics, as does mobile's #7969 settled-pinned shelf behavior
- vcs: branch's deleteLocalBranch coexists with main's pruneWorktrees and
  the #7674 submodule checkout tests
- ws: v2 RPC surface keeps its dispatch path; main's attachment upload
  RPCs (#8048) and client-connection analytics recording are wired;
  providerUploadFeedback (#7949) fails explicitly pending a v2 route
- approvals: main's option-driven approval buttons (#8058) render through
  the v2 canRespond gate on web and mobile
- ChatView/ChatComposer/MessagesTimeline/Sidebar/session-logic/
  threadActivity keep the branch's v2 architecture; main's v1-coupled
  deltas to those files are recorded for follow-up rather than
  force-fitted

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
#7949)

The round-10 rebase stubbed providerUploadFeedback to an explicit error
because its v1 ProviderService route died with the v2 rewrite. The route
now goes through the v2 runtime: session runtimes may expose an optional
uploadFeedback capability, the Codex adapter implements it against the
app-server's feedback/upload request, and the WS handler resolves the
thread's live provider session through ProviderSessionManagerV2 —
failing with a plain-language reason when no session has run, the session
is gone, or the driver has no feedback channel. This also un-blocks the
dormant mobile feedback UI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
Ten days of main (194 commits, 640 files) re-integrated with the v2
re-architecture. The headline mechanics:

- migrations: main added 041-043 (AuthSessionClientConnection,
  ProjectionThreadLinkedPullRequest, ProjectionThreadsUnsettledAt), so the
  v2 block renumbers 041-049 → 044-052 with the migration tests shifted to
  match
- contracts: OrchestrationClientOrigin (#7774) and the origin metadata
  field live in applicationEvent.ts and re-export through the legacy
  path; ProviderApprovalOption + acceptAlways + mcp-elicitation (#8058)
  land in providerPolicy.ts; OrchestrationDispatchCommandError (#8824)
  added; the send-turn image-mime home stays chatAttachment.ts
- threadSettled: main's settle-once-on-merge semantics (#7454) and
  un-settle re-anchor (#8231) hand-merged onto the v2 duck-typed shells
  (latestRun ?? latestTurn reads); web callers pass the new
  ChangeRequestSettleSource shape
- timeline anchoring: main's #7897 (follow-up sends no longer push to the
  top) ported by scanning user rows only; the branch test now encodes the
  new semantics, as does mobile's #7969 settled-pinned shelf behavior
- vcs: branch's deleteLocalBranch coexists with main's pruneWorktrees and
  the #7674 submodule checkout tests
- ws: v2 RPC surface keeps its dispatch path; main's attachment upload
  RPCs (#8048) and client-connection analytics recording are wired;
  providerUploadFeedback (#7949) fails explicitly pending a v2 route
- approvals: main's option-driven approval buttons (#8058) render through
  the v2 canRespond gate on web and mobile
- ChatView/ChatComposer/MessagesTimeline/Sidebar/session-logic/
  threadActivity keep the branch's v2 architecture; main's v1-coupled
  deltas to those files are recorded for follow-up rather than
  force-fitted

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
#7949)

The round-10 rebase stubbed providerUploadFeedback to an explicit error
because its v1 ProviderService route died with the v2 rewrite. The route
now goes through the v2 runtime: session runtimes may expose an optional
uploadFeedback capability, the Codex adapter implements it against the
app-server's feedback/upload request, and the WS handler resolves the
thread's live provider session through ProviderSessionManagerV2 —
failing with a plain-language reason when no session has run, the session
is gone, or the driver has no feedback channel. This also un-blocks the
dormant mobile feedback UI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
georgejabbour pushed a commit to georgejabbour/t3code that referenced this pull request Sep 3, 2026
This fork makes ProviderService.startSession refuse a working folder that is
not on disk. Every test in
apps/server/src/provider/Layers/ProviderService.test.ts therefore names a real
temporary folder through the sessionCwd helper at the top of the file.

Upstream's feat(codex): submit thread feedback to OpenAI (pingdotgg#7949) added the test
"recovers a stopped Codex session before uploading feedback" on 23 August 2026.
It starts a session in /tmp/feedback-project, a folder nothing creates, so the
guard refused it and the test failed. The rebase onto
v0.0.36-nightly.20260828.1209 stayed clean, because upstream added the test on
a line this fork never edits.

The test now takes its folder from sessionCwd, like every other test in the
file. PATCHES.md records this as the second time this exact case has appeared,
and corrects the count of test files the updater runs.

Model: Claude Opus 5 (1M context). Harness: Claude Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
georgejabbour pushed a commit to georgejabbour/t3code that referenced this pull request Sep 4, 2026
This fork makes ProviderService.startSession refuse a working folder that is
not on disk. Every test in
apps/server/src/provider/Layers/ProviderService.test.ts therefore names a real
temporary folder through the sessionCwd helper at the top of the file.

Upstream's feat(codex): submit thread feedback to OpenAI (pingdotgg#7949) added the test
"recovers a stopped Codex session before uploading feedback" on 23 August 2026.
It starts a session in /tmp/feedback-project, a folder nothing creates, so the
guard refused it and the test failed. The rebase onto
v0.0.36-nightly.20260828.1209 stayed clean, because upstream added the test on
a line this fork never edits.

The test now takes its folder from sessionCwd, like every other test in the
file. PATCHES.md records this as the second time this exact case has appeared,
and corrects the count of test files the updater runs.

Model: Claude Opus 5 (1M context). Harness: Claude Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 4, 2026
Ten days of main (194 commits, 640 files) re-integrated with the v2
re-architecture. The headline mechanics:

- migrations: main added 041-043 (AuthSessionClientConnection,
  ProjectionThreadLinkedPullRequest, ProjectionThreadsUnsettledAt), so the
  v2 block renumbers 041-049 → 044-052 with the migration tests shifted to
  match
- contracts: OrchestrationClientOrigin (#7774) and the origin metadata
  field live in applicationEvent.ts and re-export through the legacy
  path; ProviderApprovalOption + acceptAlways + mcp-elicitation (#8058)
  land in providerPolicy.ts; OrchestrationDispatchCommandError (#8824)
  added; the send-turn image-mime home stays chatAttachment.ts
- threadSettled: main's settle-once-on-merge semantics (#7454) and
  un-settle re-anchor (#8231) hand-merged onto the v2 duck-typed shells
  (latestRun ?? latestTurn reads); web callers pass the new
  ChangeRequestSettleSource shape
- timeline anchoring: main's #7897 (follow-up sends no longer push to the
  top) ported by scanning user rows only; the branch test now encodes the
  new semantics, as does mobile's #7969 settled-pinned shelf behavior
- vcs: branch's deleteLocalBranch coexists with main's pruneWorktrees and
  the #7674 submodule checkout tests
- ws: v2 RPC surface keeps its dispatch path; main's attachment upload
  RPCs (#8048) and client-connection analytics recording are wired;
  providerUploadFeedback (#7949) fails explicitly pending a v2 route
- approvals: main's option-driven approval buttons (#8058) render through
  the v2 canRespond gate on web and mobile
- ChatView/ChatComposer/MessagesTimeline/Sidebar/session-logic/
  threadActivity keep the branch's v2 architecture; main's v1-coupled
  deltas to those files are recorded for follow-up rather than
  force-fitted

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 4, 2026
#7949)

The round-10 rebase stubbed providerUploadFeedback to an explicit error
because its v1 ProviderService route died with the v2 rewrite. The route
now goes through the v2 runtime: session runtimes may expose an optional
uploadFeedback capability, the Codex adapter implements it against the
app-server's feedback/upload request, and the WS handler resolves the
thread's live provider session through ProviderSessionManagerV2 —
failing with a plain-language reason when no session has run, the session
is gone, or the driver has no feedback channel. This also un-blocks the
dormant mobile feedback UI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 5, 2026
Ten days of main (194 commits, 640 files) re-integrated with the v2
re-architecture. The headline mechanics:

- migrations: main added 041-043 (AuthSessionClientConnection,
  ProjectionThreadLinkedPullRequest, ProjectionThreadsUnsettledAt), so the
  v2 block renumbers 041-049 → 044-052 with the migration tests shifted to
  match
- contracts: OrchestrationClientOrigin (#7774) and the origin metadata
  field live in applicationEvent.ts and re-export through the legacy
  path; ProviderApprovalOption + acceptAlways + mcp-elicitation (#8058)
  land in providerPolicy.ts; OrchestrationDispatchCommandError (#8824)
  added; the send-turn image-mime home stays chatAttachment.ts
- threadSettled: main's settle-once-on-merge semantics (#7454) and
  un-settle re-anchor (#8231) hand-merged onto the v2 duck-typed shells
  (latestRun ?? latestTurn reads); web callers pass the new
  ChangeRequestSettleSource shape
- timeline anchoring: main's #7897 (follow-up sends no longer push to the
  top) ported by scanning user rows only; the branch test now encodes the
  new semantics, as does mobile's #7969 settled-pinned shelf behavior
- vcs: branch's deleteLocalBranch coexists with main's pruneWorktrees and
  the #7674 submodule checkout tests
- ws: v2 RPC surface keeps its dispatch path; main's attachment upload
  RPCs (#8048) and client-connection analytics recording are wired;
  providerUploadFeedback (#7949) fails explicitly pending a v2 route
- approvals: main's option-driven approval buttons (#8058) render through
  the v2 canRespond gate on web and mobile
- ChatView/ChatComposer/MessagesTimeline/Sidebar/session-logic/
  threadActivity keep the branch's v2 architecture; main's v1-coupled
  deltas to those files are recorded for follow-up rather than
  force-fitted

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 5, 2026
#7949)

The round-10 rebase stubbed providerUploadFeedback to an explicit error
because its v1 ProviderService route died with the v2 rewrite. The route
now goes through the v2 runtime: session runtimes may expose an optional
uploadFeedback capability, the Codex adapter implements it against the
app-server's feedback/upload request, and the WS handler resolves the
thread's live provider session through ProviderSessionManagerV2 —
failing with a plain-language reason when no session has run, the session
is gone, or the driver has no feedback channel. This also un-blocks the
dormant mobile feedback UI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 5, 2026
Ten days of main (194 commits, 640 files) re-integrated with the v2
re-architecture. The headline mechanics:

- migrations: main added 041-043 (AuthSessionClientConnection,
  ProjectionThreadLinkedPullRequest, ProjectionThreadsUnsettledAt), so the
  v2 block renumbers 041-049 → 044-052 with the migration tests shifted to
  match
- contracts: OrchestrationClientOrigin (#7774) and the origin metadata
  field live in applicationEvent.ts and re-export through the legacy
  path; ProviderApprovalOption + acceptAlways + mcp-elicitation (#8058)
  land in providerPolicy.ts; OrchestrationDispatchCommandError (#8824)
  added; the send-turn image-mime home stays chatAttachment.ts
- threadSettled: main's settle-once-on-merge semantics (#7454) and
  un-settle re-anchor (#8231) hand-merged onto the v2 duck-typed shells
  (latestRun ?? latestTurn reads); web callers pass the new
  ChangeRequestSettleSource shape
- timeline anchoring: main's #7897 (follow-up sends no longer push to the
  top) ported by scanning user rows only; the branch test now encodes the
  new semantics, as does mobile's #7969 settled-pinned shelf behavior
- vcs: branch's deleteLocalBranch coexists with main's pruneWorktrees and
  the #7674 submodule checkout tests
- ws: v2 RPC surface keeps its dispatch path; main's attachment upload
  RPCs (#8048) and client-connection analytics recording are wired;
  providerUploadFeedback (#7949) fails explicitly pending a v2 route
- approvals: main's option-driven approval buttons (#8058) render through
  the v2 canRespond gate on web and mobile
- ChatView/ChatComposer/MessagesTimeline/Sidebar/session-logic/
  threadActivity keep the branch's v2 architecture; main's v1-coupled
  deltas to those files are recorded for follow-up rather than
  force-fitted

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 5, 2026
#7949)

The round-10 rebase stubbed providerUploadFeedback to an explicit error
because its v1 ProviderService route died with the v2 rewrite. The route
now goes through the v2 runtime: session runtimes may expose an optional
uploadFeedback capability, the Codex adapter implements it against the
app-server's feedback/upload request, and the WS handler resolves the
thread's live provider session through ProviderSessionManagerV2 —
failing with a plain-language reason when no session has run, the session
is gone, or the driver has no feedback channel. This also un-blocks the
dormant mobile feedback UI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
georgejabbour pushed a commit to georgejabbour/t3code that referenced this pull request Sep 5, 2026
This fork makes ProviderService.startSession refuse a working folder that is
not on disk. Every test in
apps/server/src/provider/Layers/ProviderService.test.ts therefore names a real
temporary folder through the sessionCwd helper at the top of the file.

Upstream's feat(codex): submit thread feedback to OpenAI (pingdotgg#7949) added the test
"recovers a stopped Codex session before uploading feedback" on 23 August 2026.
It starts a session in /tmp/feedback-project, a folder nothing creates, so the
guard refused it and the test failed. The rebase onto
v0.0.36-nightly.20260828.1209 stayed clean, because upstream added the test on
a line this fork never edits.

The test now takes its folder from sessionCwd, like every other test in the
file. PATCHES.md records this as the second time this exact case has appeared,
and corrects the count of test files the updater runs.

Model: Claude Opus 5 (1M context). Harness: Claude Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
georgejabbour pushed a commit to georgejabbour/t3code that referenced this pull request Sep 5, 2026
This fork makes ProviderService.startSession refuse a working folder that is
not on disk. Every test in
apps/server/src/provider/Layers/ProviderService.test.ts therefore names a real
temporary folder through the sessionCwd helper at the top of the file.

Upstream's feat(codex): submit thread feedback to OpenAI (pingdotgg#7949) added the test
"recovers a stopped Codex session before uploading feedback" on 23 August 2026.
It starts a session in /tmp/feedback-project, a folder nothing creates, so the
guard refused it and the test failed. The rebase onto
v0.0.36-nightly.20260828.1209 stayed clean, because upstream added the test on
a line this fork never edits.

The test now takes its folder from sessionCwd, like every other test in the
file. PATCHES.md records this as the second time this exact case has appeared,
and corrects the count of test files the updater runs.

Model: Claude Opus 5 (1M context). Harness: Claude Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
georgejabbour pushed a commit to georgejabbour/t3code that referenced this pull request Sep 6, 2026
This fork makes ProviderService.startSession refuse a working folder that is
not on disk. Every test in
apps/server/src/provider/Layers/ProviderService.test.ts therefore names a real
temporary folder through the sessionCwd helper at the top of the file.

Upstream's feat(codex): submit thread feedback to OpenAI (pingdotgg#7949) added the test
"recovers a stopped Codex session before uploading feedback" on 23 August 2026.
It starts a session in /tmp/feedback-project, a folder nothing creates, so the
guard refused it and the test failed. The rebase onto
v0.0.36-nightly.20260828.1209 stayed clean, because upstream added the test on
a line this fork never edits.

The test now takes its folder from sessionCwd, like every other test in the
file. PATCHES.md records this as the second time this exact case has appeared,
and corrects the count of test files the updater runs.

Model: Claude Opus 5 (1M context). Harness: Claude Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
georgejabbour pushed a commit to georgejabbour/t3code that referenced this pull request Sep 6, 2026
This fork makes ProviderService.startSession refuse a working folder that is
not on disk. Every test in
apps/server/src/provider/Layers/ProviderService.test.ts therefore names a real
temporary folder through the sessionCwd helper at the top of the file.

Upstream's feat(codex): submit thread feedback to OpenAI (pingdotgg#7949) added the test
"recovers a stopped Codex session before uploading feedback" on 23 August 2026.
It starts a session in /tmp/feedback-project, a folder nothing creates, so the
guard refused it and the test failed. The rebase onto
v0.0.36-nightly.20260828.1209 stayed clean, because upstream added the test on
a line this fork never edits.

The test now takes its folder from sessionCwd, like every other test in the
file. PATCHES.md records this as the second time this exact case has appeared,
and corrects the count of test files the updater runs.

Model: Claude Opus 5 (1M context). Harness: Claude Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 8, 2026
Ten days of main (194 commits, 640 files) re-integrated with the v2
re-architecture. The headline mechanics:

- migrations: main added 041-043 (AuthSessionClientConnection,
  ProjectionThreadLinkedPullRequest, ProjectionThreadsUnsettledAt), so the
  v2 block renumbers 041-049 → 044-052 with the migration tests shifted to
  match
- contracts: OrchestrationClientOrigin (#7774) and the origin metadata
  field live in applicationEvent.ts and re-export through the legacy
  path; ProviderApprovalOption + acceptAlways + mcp-elicitation (#8058)
  land in providerPolicy.ts; OrchestrationDispatchCommandError (#8824)
  added; the send-turn image-mime home stays chatAttachment.ts
- threadSettled: main's settle-once-on-merge semantics (#7454) and
  un-settle re-anchor (#8231) hand-merged onto the v2 duck-typed shells
  (latestRun ?? latestTurn reads); web callers pass the new
  ChangeRequestSettleSource shape
- timeline anchoring: main's #7897 (follow-up sends no longer push to the
  top) ported by scanning user rows only; the branch test now encodes the
  new semantics, as does mobile's #7969 settled-pinned shelf behavior
- vcs: branch's deleteLocalBranch coexists with main's pruneWorktrees and
  the #7674 submodule checkout tests
- ws: v2 RPC surface keeps its dispatch path; main's attachment upload
  RPCs (#8048) and client-connection analytics recording are wired;
  providerUploadFeedback (#7949) fails explicitly pending a v2 route
- approvals: main's option-driven approval buttons (#8058) render through
  the v2 canRespond gate on web and mobile
- ChatView/ChatComposer/MessagesTimeline/Sidebar/session-logic/
  threadActivity keep the branch's v2 architecture; main's v1-coupled
  deltas to those files are recorded for follow-up rather than
  force-fitted

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 8, 2026
#7949)

The round-10 rebase stubbed providerUploadFeedback to an explicit error
because its v1 ProviderService route died with the v2 rewrite. The route
now goes through the v2 runtime: session runtimes may expose an optional
uploadFeedback capability, the Codex adapter implements it against the
app-server's feedback/upload request, and the WS handler resolves the
thread's live provider session through ProviderSessionManagerV2 —
failing with a plain-language reason when no session has run, the session
is gone, or the driver has no feedback channel. This also un-blocks the
dormant mobile feedback UI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 8, 2026
Ten days of main (194 commits, 640 files) re-integrated with the v2
re-architecture. The headline mechanics:

- migrations: main added 041-043 (AuthSessionClientConnection,
  ProjectionThreadLinkedPullRequest, ProjectionThreadsUnsettledAt), so the
  v2 block renumbers 041-049 → 044-052 with the migration tests shifted to
  match
- contracts: OrchestrationClientOrigin (#7774) and the origin metadata
  field live in applicationEvent.ts and re-export through the legacy
  path; ProviderApprovalOption + acceptAlways + mcp-elicitation (#8058)
  land in providerPolicy.ts; OrchestrationDispatchCommandError (#8824)
  added; the send-turn image-mime home stays chatAttachment.ts
- threadSettled: main's settle-once-on-merge semantics (#7454) and
  un-settle re-anchor (#8231) hand-merged onto the v2 duck-typed shells
  (latestRun ?? latestTurn reads); web callers pass the new
  ChangeRequestSettleSource shape
- timeline anchoring: main's #7897 (follow-up sends no longer push to the
  top) ported by scanning user rows only; the branch test now encodes the
  new semantics, as does mobile's #7969 settled-pinned shelf behavior
- vcs: branch's deleteLocalBranch coexists with main's pruneWorktrees and
  the #7674 submodule checkout tests
- ws: v2 RPC surface keeps its dispatch path; main's attachment upload
  RPCs (#8048) and client-connection analytics recording are wired;
  providerUploadFeedback (#7949) fails explicitly pending a v2 route
- approvals: main's option-driven approval buttons (#8058) render through
  the v2 canRespond gate on web and mobile
- ChatView/ChatComposer/MessagesTimeline/Sidebar/session-logic/
  threadActivity keep the branch's v2 architecture; main's v1-coupled
  deltas to those files are recorded for follow-up rather than
  force-fitted

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 8, 2026
#7949)

The round-10 rebase stubbed providerUploadFeedback to an explicit error
because its v1 ProviderService route died with the v2 rewrite. The route
now goes through the v2 runtime: session runtimes may expose an optional
uploadFeedback capability, the Codex adapter implements it against the
app-server's feedback/upload request, and the WS handler resolves the
thread's live provider session through ProviderSessionManagerV2 —
failing with a plain-language reason when no session has run, the session
is gone, or the driver has no feedback channel. This also un-blocks the
dormant mobile feedback UI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
georgejabbour pushed a commit to georgejabbour/t3code that referenced this pull request Sep 8, 2026
This fork makes ProviderService.startSession refuse a working folder that is
not on disk. Every test in
apps/server/src/provider/Layers/ProviderService.test.ts therefore names a real
temporary folder through the sessionCwd helper at the top of the file.

Upstream's feat(codex): submit thread feedback to OpenAI (pingdotgg#7949) added the test
"recovers a stopped Codex session before uploading feedback" on 23 August 2026.
It starts a session in /tmp/feedback-project, a folder nothing creates, so the
guard refused it and the test failed. The rebase onto
v0.0.36-nightly.20260828.1209 stayed clean, because upstream added the test on
a line this fork never edits.

The test now takes its folder from sessionCwd, like every other test in the
file. PATCHES.md records this as the second time this exact case has appeared,
and corrects the count of test files the updater runs.

Model: Claude Opus 5 (1M context). Harness: Claude Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
saphid pushed a commit to saphid/t3code that referenced this pull request Sep 8, 2026
Ten days of main (194 commits, 640 files) re-integrated with the v2
re-architecture. The headline mechanics:

- migrations: main added 041-043 (AuthSessionClientConnection,
  ProjectionThreadLinkedPullRequest, ProjectionThreadsUnsettledAt), so the
  v2 block renumbers 041-049 → 044-052 with the migration tests shifted to
  match
- contracts: OrchestrationClientOrigin (pingdotgg#7774) and the origin metadata
  field live in applicationEvent.ts and re-export through the legacy
  path; ProviderApprovalOption + acceptAlways + mcp-elicitation (pingdotgg#8058)
  land in providerPolicy.ts; OrchestrationDispatchCommandError (pingdotgg#8824)
  added; the send-turn image-mime home stays chatAttachment.ts
- threadSettled: main's settle-once-on-merge semantics (pingdotgg#7454) and
  un-settle re-anchor (pingdotgg#8231) hand-merged onto the v2 duck-typed shells
  (latestRun ?? latestTurn reads); web callers pass the new
  ChangeRequestSettleSource shape
- timeline anchoring: main's pingdotgg#7897 (follow-up sends no longer push to the
  top) ported by scanning user rows only; the branch test now encodes the
  new semantics, as does mobile's pingdotgg#7969 settled-pinned shelf behavior
- vcs: branch's deleteLocalBranch coexists with main's pruneWorktrees and
  the pingdotgg#7674 submodule checkout tests
- ws: v2 RPC surface keeps its dispatch path; main's attachment upload
  RPCs (pingdotgg#8048) and client-connection analytics recording are wired;
  providerUploadFeedback (pingdotgg#7949) fails explicitly pending a v2 route
- approvals: main's option-driven approval buttons (pingdotgg#8058) render through
  the v2 canRespond gate on web and mobile
- ChatView/ChatComposer/MessagesTimeline/Sidebar/session-logic/
  threadActivity keep the branch's v2 architecture; main's v1-coupled
  deltas to those files are recorded for follow-up rather than
  force-fitted

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
saphid pushed a commit to saphid/t3code that referenced this pull request Sep 8, 2026
pingdotgg#7949)

The round-10 rebase stubbed providerUploadFeedback to an explicit error
because its v1 ProviderService route died with the v2 rewrite. The route
now goes through the v2 runtime: session runtimes may expose an optional
uploadFeedback capability, the Codex adapter implements it against the
app-server's feedback/upload request, and the WS handler resolves the
thread's live provider session through ProviderSessionManagerV2 —
failing with a plain-language reason when no session has run, the session
is gone, or the driver has no feedback channel. This also un-blocks the
dormant mobile feedback UI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL 500-999 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant