Skip to content

feat: add QA suggestions and local desktop updates - #2

Closed
sittitanaporn-a11y wants to merge 12 commits into
Type-Delta:mainfrom
sittitanaporn-a11y:feat/qa-ghost-text-and-local-update
Closed

sittitanaporn-a11y wants to merge 12 commits into
Type-Delta:mainfrom
sittitanaporn-a11y:feat/qa-ghost-text-and-local-update

Conversation

@sittitanaporn-a11y

Copy link
Copy Markdown

The branch adds opt-in QA follow-up suggestions and replaces the fork's release updater with its local Type-Delta checkout flow.

The latest two commits address the About menu feedback:

  • show the localized build date and time beside the app version
  • label the action Check and update, compare the installed commit with the fetched update branch, and report Already up to date without rebuilding

Validation:

  • vp test run apps/desktop/src/updates/LocalDesktopUpdate.test.ts apps/web/src/state/desktopLocalUpdate.test.ts
  • vp check
  • vp run typecheck
  • integrated Settings > General > About verification in an isolated web environment

Implemented with GPT-5.6 Sol through the Codex harness in T3 Code.

sittitanaporn-a11y and others added 10 commits September 3, 2026 14:15
When a turn finishes, the composer can ask the thread's own provider and
model what the user would plausibly send next. The model answers as a QA
reviewer, so the suggestion is a concrete way to validate the work rather
than generic filler. It renders as faded text in the empty composer and
Tab accepts it.

The server reads the tail of the requested thread through the existing
projection and text-generation boundaries, so no turn, event, message, or
provider session is created. Requests bind to the latest completed
assistant message and are dropped before any project lookup when the
thread is stale or active, then rechecked immediately before the provider
starts. Worktree-backed threads skip the project lookup entirely.
Truncation keeps the newest end of the transcript so the reply being
reviewed survives.

Suggestions clear as soon as the user types and stay dismissed for that
turn even if the draft is erased, so an erased draft cannot trigger a
second request. Off by default behind Settings -> General -> Next prompt
suggestions, since it sends recent messages to the selected provider.
Mobile has no toggle or request path.
The sidebar and Settings -> General -> About update actions now build the
app from a local T3 Code checkout, which is what a fork running its own
code actually needs. Pick the root of a checkout and a visible PowerShell
window walks the update: it refuses a dirty tree, fetches and merges the
tracked default branch, runs vp check and vp run typecheck, then builds
and opens the installer through the new update:local script.

The update source is upstream when that remote exists and origin
otherwise, so a fork that only tracks its own remote updates from itself.
A missing remote HEAD is repaired with git remote set-head --auto rather
than failing. Nothing is ever pushed.

The terminal stays visible so the checks and any merge conflict are the
user's to read, and the launcher passes argv and the source path through
the environment rather than building a shell command string.
Clarify that the opt-in composer feature proposes QA-focused follow-up prompts.
Label the About update button after the Type-Delta remote it tracks.
Describe the fetch, merge, verification, installer build, and install choice in Settings.
Resolve conflicts keeping both fork features alongside origin's changes:

- Settings/rpc/contracts: keep composerSuggestionEnabled and the ghost-text
  wiring beside origin's new keys (contextWindowMeter, proactivePanels,
  diffLayout, composer collapse) and provider auth/install RPC methods.
- ComposerPromptEditor/ChatComposer: fold the fork's ghost text into origin's
  resting-composer, citation-comment, and page-scroll editor refactor.
- SidebarUpdatePill (DL028): keep the fork's local-checkout update action;
  drop origin's release-notes popover and its now-orphaned test.
- LegacySidebar: rewire its update entry point to the same local-checkout
  flow so both sidebars share one update mechanism.
- FORK.md: adopt origin's DL003 heading; record LegacySidebar under DL028.

The uncommitted desktopLocalUpdate.ts draft is left on disk (untracked); it
references an unbuilt local-update-state API and is not part of this commit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bring the background local-update feature online end to end (DL028):

- Contracts/IPC/preload: DesktopLocalUpdateState (step + progressPercent),
  plus getLocalUpdateState/onLocalUpdateState/startLocalBuild on the bridge.
- Desktop main: LocalDesktopUpdates service runs the update in a hidden
  PowerShell, parses ::t3-local-update::<step> markers into state, and pushes
  it over LOCAL_UPDATE_STATE_CHANNEL. Source is resolved from packaged
  provenance (t3codeLocalUpdateSource) instead of a folder picker.
- Web: an Effect atom feeds the update pill, About buttons, and the legacy
  sidebar, rendering "N% — <step>" live; a "Build from this checkout" action
  builds without fetch/merge.
- Build: the Windows preflight now requires MSVC Spectre-mitigated libs only
  when T3CODE_DESKTOP_REQUIRE_SPECTRE is set (nothing links against them), so
  in-app "Build from this checkout" / "Update from Type-Delta" builds succeed
  on machines without that opt-in component.

The preflight change must be committed because the update flow stashes
uncommitted work before building from the clean tree; kept uncommitted, the
fix was stashed away and the build failed at the Spectre gate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…and instructions

The post-turn suggestion is no longer hardwired to "QA". A nullable
composerSuggestionModelSelection locks suggestions to one configurable model
(mirroring sourceControlWriterModelSelection); composerSuggestionLabel renames
the feature; composerSuggestionInstructions rewrites the persona and focus
rules while the JSON output contract, the one-line limit, and the
untrusted-transcript guard are always appended after them.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added size:XXL vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Sep 9, 2026
@sittitanaporn-a11y
sittitanaporn-a11y force-pushed the feat/qa-ghost-text-and-local-update branch from eee3968 to 3060ff7 Compare September 9, 2026 04:33
@sittitanaporn-a11y
sittitanaporn-a11y force-pushed the feat/qa-ghost-text-and-local-update branch from 3060ff7 to c9d3e96 Compare September 9, 2026 04:34
@Type-Delta

Copy link
Copy Markdown
Owner

Sorry, not going to happen. There are too many issues with this PR that cannot be addressed easily.

@Type-Delta Type-Delta closed this Sep 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants