fix(web): show server update progress through reconnect - #4903

Merged
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors
Jul 30, 2026
Merged

fix(web): show server update progress through reconnect#4903
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 30, 2026

Copy link
Copy Markdown
Member

The server update action currently becomes a blind pending request, while the expected restart can surface as a generic connection failure. Users cannot tell whether T3 is downloading, installing, or trying to reconnect.

This adds a typed progress stream and one environment-scoped update state machine that follows the operation through Download, Install, and Resume. Resume completes only after the replacement server reports the requested version and is ready for commands. Older servers retain the unary update fallback, and the intentional reconnect gets a fresh retry instead of inherited backoff.

The shared progress rail appears in both the chat warning and Connections. Failed stages remain visible with a retry action. The desktop surface inherits the web implementation; mobile has no existing server-update entry point.

Visual direction: https://f2ltacrf9xro.postplan.dev

Testing:

  • contracts, client-runtime, and server typechecks
  • focused authorization, self-update, environment, reconnect, update-state, version-skew, and UI tests
  • targeted lint and formatting
  • web typecheck is currently blocked on current main by unrelated FilePreviewPanel errors against @pierre/diffs/react; the focused web tests pass

Authored by GPT-5.6 Codex in the T3 Code Codex harness.


Note

Medium Risk
Touches orchestration RPC auth, self-update handoff timing, and connection supervisor retry semantics; boot-service deferred restart changes when failures are visible vs RPC success.

Overview
Adds Download → Install → Resume visibility for server self-updates instead of a blind pending button, with one shared per-environment state machine in client-runtime so chat and Connections stay in sync across navigation.

Server & contracts: New streaming RPC serverUpdateServerWithProgress emits downloading / installing and a terminal complete; capability serverSelfUpdateProgress is advertised when supported. Unary serverUpdateServer remains for older servers. Self-update accepts optional reportProgress; boot-service handoff defers systemd restart after acknowledgement (like respawn), restores the previous unit on failed restart, and logs instead of failing the RPC when restart cannot complete.

Client-runtime:updateServer drives streamed or legacy unary paths, treats transport loss after handoff as success when appropriate, enters Resume until lifecycle ready at the target version, triggers one fresh reconnect (supervisor retryNow resets backoff), and clears or surfaces failed stage state for retry.

Web UI:ServerUpdateProgress step rail in ChatView and Connections; version-mismatch banner merges with live update state; ServerUpdateAction delegates lifecycle to shared atoms and drops local spinner/timeouts.

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

Note

Show server update progress through reconnect in conversation and connections views

  • Adds a new serverUpdateServerWithProgress WebSocket RPC that streams downloading, installing, and resuming progress stages before acknowledging restart; older servers fall back to the existing unary RPC.
  • Introduces ServerUpdateState atoms in packages/client-runtime/src/state/server.ts to track update lifecycle (idle/running/failed) with stage, fromVersion, and targetVersion across the client.
  • Renders a three-step progress rail (Download → Install → Resume) in ChatView and ConnectionsSettings; suppresses environment-unavailable banners during the resuming stage.
  • The update command serializes only its handoff on the config scheduler lane, resets supervisor backoff via retryNow, and waits up to 120 seconds for the server to report the target version as ready.
  • For the boot-service path, the server acknowledges immediately and defers the systemd restart; if the restart fails it restores the previous unit file and reloads systemd without surfacing the error to the caller.
  • Behavioral Change: resolveServerConfigValue no longer always prefers the live projection — it holds the session config until the live snapshot's serverVersion matches the current server version.

Macroscope summarized 16c2f25.

@coderabbitai

coderabbitaiBot commented Jul 30, 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: 889648f8-58c3-448c-9dbd-cc10df48905c

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-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Jul 30, 2026

ghost 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 convention finding: the new streaming self-update handler recovers a known tagged failure with Effect.catchTag. Everything else in the changed Effect service scope (service definition/make/layer shape in apps/server/src/cloud/selfUpdate.ts, the new Schema.TaggedErrorClass errors and exported Schema.is predicate in packages/client-runtime, dependency acquisition via yield* EnvironmentRegistry) looks consistent with the conventions.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
@macroscopeapp

ghost commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new streaming RPC infrastructure, new UI progress tracking, and changes server restart behavior from immediate to delayed with rollback. Despite the 'fix' prefix, this is a new feature with significant runtime behavior changes across auth, server, and client that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 13cc790 to 8fa32deCompareJuly 30, 2026 08:43
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadapps/web/src/components/ServerUpdateAction.tsx
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from dfe9971 to 2e05cecCompareJuly 30, 2026 09:04
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 2e05cec to 763841aCompareJuly 30, 2026 09:16
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 6b4ca8c to 830913bCompareJuly 30, 2026 09:41
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 22d6e33 to a73bcfdCompareJuly 30, 2026 10:08

ghost 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 1 potential issue.

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 a73bcfd. Configure here.

Comment threadpackages/client-runtime/src/state/server.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR 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

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(web): show server update progress through reconnect - #4903

Merged
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors
Jul 30, 2026
Merged

fix(web): show server update progress through reconnect#4903
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 30, 2026

Copy link
Copy Markdown
Member

The server update action currently becomes a blind pending request, while the expected restart can surface as a generic connection failure. Users cannot tell whether T3 is downloading, installing, or trying to reconnect.

This adds a typed progress stream and one environment-scoped update state machine that follows the operation through Download, Install, and Resume. Resume completes only after the replacement server reports the requested version and is ready for commands. Older servers retain the unary update fallback, and the intentional reconnect gets a fresh retry instead of inherited backoff.

The shared progress rail appears in both the chat warning and Connections. Failed stages remain visible with a retry action. The desktop surface inherits the web implementation; mobile has no existing server-update entry point.

Visual direction: https://f2ltacrf9xro.postplan.dev

Testing:

  • contracts, client-runtime, and server typechecks
  • focused authorization, self-update, environment, reconnect, update-state, version-skew, and UI tests
  • targeted lint and formatting
  • web typecheck is currently blocked on current main by unrelated FilePreviewPanel errors against @pierre/diffs/react; the focused web tests pass

Authored by GPT-5.6 Codex in the T3 Code Codex harness.


Note

Medium Risk
Touches orchestration RPC auth, self-update handoff timing, and connection supervisor retry semantics; boot-service deferred restart changes when failures are visible vs RPC success.

Overview
Adds Download → Install → Resume visibility for server self-updates instead of a blind pending button, with one shared per-environment state machine in client-runtime so chat and Connections stay in sync across navigation.

Server & contracts: New streaming RPC serverUpdateServerWithProgress emits downloading / installing and a terminal complete; capability serverSelfUpdateProgress is advertised when supported. Unary serverUpdateServer remains for older servers. Self-update accepts optional reportProgress; boot-service handoff defers systemd restart after acknowledgement (like respawn), restores the previous unit on failed restart, and logs instead of failing the RPC when restart cannot complete.

Client-runtime:updateServer drives streamed or legacy unary paths, treats transport loss after handoff as success when appropriate, enters Resume until lifecycle ready at the target version, triggers one fresh reconnect (supervisor retryNow resets backoff), and clears or surfaces failed stage state for retry.

Web UI:ServerUpdateProgress step rail in ChatView and Connections; version-mismatch banner merges with live update state; ServerUpdateAction delegates lifecycle to shared atoms and drops local spinner/timeouts.

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

Note

Show server update progress through reconnect in conversation and connections views

  • Adds a new serverUpdateServerWithProgress WebSocket RPC that streams downloading, installing, and resuming progress stages before acknowledging restart; older servers fall back to the existing unary RPC.
  • Introduces ServerUpdateState atoms in packages/client-runtime/src/state/server.ts to track update lifecycle (idle/running/failed) with stage, fromVersion, and targetVersion across the client.
  • Renders a three-step progress rail (Download → Install → Resume) in ChatView and ConnectionsSettings; suppresses environment-unavailable banners during the resuming stage.
  • The update command serializes only its handoff on the config scheduler lane, resets supervisor backoff via retryNow, and waits up to 120 seconds for the server to report the target version as ready.
  • For the boot-service path, the server acknowledges immediately and defers the systemd restart; if the restart fails it restores the previous unit file and reloads systemd without surfacing the error to the caller.
  • Behavioral Change: resolveServerConfigValue no longer always prefers the live projection — it holds the session config until the live snapshot's serverVersion matches the current server version.

Macroscope summarized 16c2f25.

@coderabbitai

coderabbitaiBot commented Jul 30, 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: 889648f8-58c3-448c-9dbd-cc10df48905c

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-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Jul 30, 2026

ghost 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 convention finding: the new streaming self-update handler recovers a known tagged failure with Effect.catchTag. Everything else in the changed Effect service scope (service definition/make/layer shape in apps/server/src/cloud/selfUpdate.ts, the new Schema.TaggedErrorClass errors and exported Schema.is predicate in packages/client-runtime, dependency acquisition via yield* EnvironmentRegistry) looks consistent with the conventions.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
@macroscopeapp

ghost commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new streaming RPC infrastructure, new UI progress tracking, and changes server restart behavior from immediate to delayed with rollback. Despite the 'fix' prefix, this is a new feature with significant runtime behavior changes across auth, server, and client that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 13cc790 to 8fa32deCompareJuly 30, 2026 08:43
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadapps/web/src/components/ServerUpdateAction.tsx
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from dfe9971 to 2e05cecCompareJuly 30, 2026 09:04
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 2e05cec to 763841aCompareJuly 30, 2026 09:16
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 6b4ca8c to 830913bCompareJuly 30, 2026 09:41
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 22d6e33 to a73bcfdCompareJuly 30, 2026 10:08

ghost 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 1 potential issue.

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 a73bcfd. Configure here.

Comment threadpackages/client-runtime/src/state/server.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR 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

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): show server update progress through reconnect - #4903

Merged
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors
Jul 30, 2026
Merged

fix(web): show server update progress through reconnect#4903
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 30, 2026

Copy link
Copy Markdown
Member

The server update action currently becomes a blind pending request, while the expected restart can surface as a generic connection failure. Users cannot tell whether T3 is downloading, installing, or trying to reconnect.

This adds a typed progress stream and one environment-scoped update state machine that follows the operation through Download, Install, and Resume. Resume completes only after the replacement server reports the requested version and is ready for commands. Older servers retain the unary update fallback, and the intentional reconnect gets a fresh retry instead of inherited backoff.

The shared progress rail appears in both the chat warning and Connections. Failed stages remain visible with a retry action. The desktop surface inherits the web implementation; mobile has no existing server-update entry point.

Visual direction: https://f2ltacrf9xro.postplan.dev

Testing:

  • contracts, client-runtime, and server typechecks
  • focused authorization, self-update, environment, reconnect, update-state, version-skew, and UI tests
  • targeted lint and formatting
  • web typecheck is currently blocked on current main by unrelated FilePreviewPanel errors against @pierre/diffs/react; the focused web tests pass

Authored by GPT-5.6 Codex in the T3 Code Codex harness.


Note

Medium Risk
Touches orchestration RPC auth, self-update handoff timing, and connection supervisor retry semantics; boot-service deferred restart changes when failures are visible vs RPC success.

Overview
Adds Download → Install → Resume visibility for server self-updates instead of a blind pending button, with one shared per-environment state machine in client-runtime so chat and Connections stay in sync across navigation.

Server & contracts: New streaming RPC serverUpdateServerWithProgress emits downloading / installing and a terminal complete; capability serverSelfUpdateProgress is advertised when supported. Unary serverUpdateServer remains for older servers. Self-update accepts optional reportProgress; boot-service handoff defers systemd restart after acknowledgement (like respawn), restores the previous unit on failed restart, and logs instead of failing the RPC when restart cannot complete.

Client-runtime:updateServer drives streamed or legacy unary paths, treats transport loss after handoff as success when appropriate, enters Resume until lifecycle ready at the target version, triggers one fresh reconnect (supervisor retryNow resets backoff), and clears or surfaces failed stage state for retry.

Web UI:ServerUpdateProgress step rail in ChatView and Connections; version-mismatch banner merges with live update state; ServerUpdateAction delegates lifecycle to shared atoms and drops local spinner/timeouts.

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

Note

Show server update progress through reconnect in conversation and connections views

  • Adds a new serverUpdateServerWithProgress WebSocket RPC that streams downloading, installing, and resuming progress stages before acknowledging restart; older servers fall back to the existing unary RPC.
  • Introduces ServerUpdateState atoms in packages/client-runtime/src/state/server.ts to track update lifecycle (idle/running/failed) with stage, fromVersion, and targetVersion across the client.
  • Renders a three-step progress rail (Download → Install → Resume) in ChatView and ConnectionsSettings; suppresses environment-unavailable banners during the resuming stage.
  • The update command serializes only its handoff on the config scheduler lane, resets supervisor backoff via retryNow, and waits up to 120 seconds for the server to report the target version as ready.
  • For the boot-service path, the server acknowledges immediately and defers the systemd restart; if the restart fails it restores the previous unit file and reloads systemd without surfacing the error to the caller.
  • Behavioral Change: resolveServerConfigValue no longer always prefers the live projection — it holds the session config until the live snapshot's serverVersion matches the current server version.

Macroscope summarized 16c2f25.

@coderabbitai

coderabbitaiBot commented Jul 30, 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: 889648f8-58c3-448c-9dbd-cc10df48905c

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-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Jul 30, 2026

ghost 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 convention finding: the new streaming self-update handler recovers a known tagged failure with Effect.catchTag. Everything else in the changed Effect service scope (service definition/make/layer shape in apps/server/src/cloud/selfUpdate.ts, the new Schema.TaggedErrorClass errors and exported Schema.is predicate in packages/client-runtime, dependency acquisition via yield* EnvironmentRegistry) looks consistent with the conventions.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
@macroscopeapp

ghost commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new streaming RPC infrastructure, new UI progress tracking, and changes server restart behavior from immediate to delayed with rollback. Despite the 'fix' prefix, this is a new feature with significant runtime behavior changes across auth, server, and client that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 13cc790 to 8fa32deCompareJuly 30, 2026 08:43
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadapps/web/src/components/ServerUpdateAction.tsx
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from dfe9971 to 2e05cecCompareJuly 30, 2026 09:04
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 2e05cec to 763841aCompareJuly 30, 2026 09:16
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 6b4ca8c to 830913bCompareJuly 30, 2026 09:41
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 22d6e33 to a73bcfdCompareJuly 30, 2026 10:08

ghost 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 1 potential issue.

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 a73bcfd. Configure here.

Comment threadpackages/client-runtime/src/state/server.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR 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

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): show server update progress through reconnect - #4903

Merged
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors
Jul 30, 2026
Merged

fix(web): show server update progress through reconnect#4903
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 30, 2026

Copy link
Copy Markdown
Member

The server update action currently becomes a blind pending request, while the expected restart can surface as a generic connection failure. Users cannot tell whether T3 is downloading, installing, or trying to reconnect.

This adds a typed progress stream and one environment-scoped update state machine that follows the operation through Download, Install, and Resume. Resume completes only after the replacement server reports the requested version and is ready for commands. Older servers retain the unary update fallback, and the intentional reconnect gets a fresh retry instead of inherited backoff.

The shared progress rail appears in both the chat warning and Connections. Failed stages remain visible with a retry action. The desktop surface inherits the web implementation; mobile has no existing server-update entry point.

Visual direction: https://f2ltacrf9xro.postplan.dev

Testing:

  • contracts, client-runtime, and server typechecks
  • focused authorization, self-update, environment, reconnect, update-state, version-skew, and UI tests
  • targeted lint and formatting
  • web typecheck is currently blocked on current main by unrelated FilePreviewPanel errors against @pierre/diffs/react; the focused web tests pass

Authored by GPT-5.6 Codex in the T3 Code Codex harness.


Note

Medium Risk
Touches orchestration RPC auth, self-update handoff timing, and connection supervisor retry semantics; boot-service deferred restart changes when failures are visible vs RPC success.

Overview
Adds Download → Install → Resume visibility for server self-updates instead of a blind pending button, with one shared per-environment state machine in client-runtime so chat and Connections stay in sync across navigation.

Server & contracts: New streaming RPC serverUpdateServerWithProgress emits downloading / installing and a terminal complete; capability serverSelfUpdateProgress is advertised when supported. Unary serverUpdateServer remains for older servers. Self-update accepts optional reportProgress; boot-service handoff defers systemd restart after acknowledgement (like respawn), restores the previous unit on failed restart, and logs instead of failing the RPC when restart cannot complete.

Client-runtime:updateServer drives streamed or legacy unary paths, treats transport loss after handoff as success when appropriate, enters Resume until lifecycle ready at the target version, triggers one fresh reconnect (supervisor retryNow resets backoff), and clears or surfaces failed stage state for retry.

Web UI:ServerUpdateProgress step rail in ChatView and Connections; version-mismatch banner merges with live update state; ServerUpdateAction delegates lifecycle to shared atoms and drops local spinner/timeouts.

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

Note

Show server update progress through reconnect in conversation and connections views

  • Adds a new serverUpdateServerWithProgress WebSocket RPC that streams downloading, installing, and resuming progress stages before acknowledging restart; older servers fall back to the existing unary RPC.
  • Introduces ServerUpdateState atoms in packages/client-runtime/src/state/server.ts to track update lifecycle (idle/running/failed) with stage, fromVersion, and targetVersion across the client.
  • Renders a three-step progress rail (Download → Install → Resume) in ChatView and ConnectionsSettings; suppresses environment-unavailable banners during the resuming stage.
  • The update command serializes only its handoff on the config scheduler lane, resets supervisor backoff via retryNow, and waits up to 120 seconds for the server to report the target version as ready.
  • For the boot-service path, the server acknowledges immediately and defers the systemd restart; if the restart fails it restores the previous unit file and reloads systemd without surfacing the error to the caller.
  • Behavioral Change: resolveServerConfigValue no longer always prefers the live projection — it holds the session config until the live snapshot's serverVersion matches the current server version.

Macroscope summarized 16c2f25.

@coderabbitai

coderabbitaiBot commented Jul 30, 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: 889648f8-58c3-448c-9dbd-cc10df48905c

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-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Jul 30, 2026

ghost 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 convention finding: the new streaming self-update handler recovers a known tagged failure with Effect.catchTag. Everything else in the changed Effect service scope (service definition/make/layer shape in apps/server/src/cloud/selfUpdate.ts, the new Schema.TaggedErrorClass errors and exported Schema.is predicate in packages/client-runtime, dependency acquisition via yield* EnvironmentRegistry) looks consistent with the conventions.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
@macroscopeapp

ghost commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new streaming RPC infrastructure, new UI progress tracking, and changes server restart behavior from immediate to delayed with rollback. Despite the 'fix' prefix, this is a new feature with significant runtime behavior changes across auth, server, and client that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 13cc790 to 8fa32deCompareJuly 30, 2026 08:43
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadapps/web/src/components/ServerUpdateAction.tsx
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from dfe9971 to 2e05cecCompareJuly 30, 2026 09:04
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 2e05cec to 763841aCompareJuly 30, 2026 09:16
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 6b4ca8c to 830913bCompareJuly 30, 2026 09:41
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 22d6e33 to a73bcfdCompareJuly 30, 2026 10:08

ghost 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 1 potential issue.

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 a73bcfd. Configure here.

Comment threadpackages/client-runtime/src/state/server.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR 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

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(web): show server update progress through reconnect - #4903

Merged
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors
Jul 30, 2026
Merged

fix(web): show server update progress through reconnect#4903
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 30, 2026

Copy link
Copy Markdown
Member

The server update action currently becomes a blind pending request, while the expected restart can surface as a generic connection failure. Users cannot tell whether T3 is downloading, installing, or trying to reconnect.

This adds a typed progress stream and one environment-scoped update state machine that follows the operation through Download, Install, and Resume. Resume completes only after the replacement server reports the requested version and is ready for commands. Older servers retain the unary update fallback, and the intentional reconnect gets a fresh retry instead of inherited backoff.

The shared progress rail appears in both the chat warning and Connections. Failed stages remain visible with a retry action. The desktop surface inherits the web implementation; mobile has no existing server-update entry point.

Visual direction: https://f2ltacrf9xro.postplan.dev

Testing:

  • contracts, client-runtime, and server typechecks
  • focused authorization, self-update, environment, reconnect, update-state, version-skew, and UI tests
  • targeted lint and formatting
  • web typecheck is currently blocked on current main by unrelated FilePreviewPanel errors against @pierre/diffs/react; the focused web tests pass

Authored by GPT-5.6 Codex in the T3 Code Codex harness.


Note

Medium Risk
Touches orchestration RPC auth, self-update handoff timing, and connection supervisor retry semantics; boot-service deferred restart changes when failures are visible vs RPC success.

Overview
Adds Download → Install → Resume visibility for server self-updates instead of a blind pending button, with one shared per-environment state machine in client-runtime so chat and Connections stay in sync across navigation.

Server & contracts: New streaming RPC serverUpdateServerWithProgress emits downloading / installing and a terminal complete; capability serverSelfUpdateProgress is advertised when supported. Unary serverUpdateServer remains for older servers. Self-update accepts optional reportProgress; boot-service handoff defers systemd restart after acknowledgement (like respawn), restores the previous unit on failed restart, and logs instead of failing the RPC when restart cannot complete.

Client-runtime:updateServer drives streamed or legacy unary paths, treats transport loss after handoff as success when appropriate, enters Resume until lifecycle ready at the target version, triggers one fresh reconnect (supervisor retryNow resets backoff), and clears or surfaces failed stage state for retry.

Web UI:ServerUpdateProgress step rail in ChatView and Connections; version-mismatch banner merges with live update state; ServerUpdateAction delegates lifecycle to shared atoms and drops local spinner/timeouts.

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

Note

Show server update progress through reconnect in conversation and connections views

  • Adds a new serverUpdateServerWithProgress WebSocket RPC that streams downloading, installing, and resuming progress stages before acknowledging restart; older servers fall back to the existing unary RPC.
  • Introduces ServerUpdateState atoms in packages/client-runtime/src/state/server.ts to track update lifecycle (idle/running/failed) with stage, fromVersion, and targetVersion across the client.
  • Renders a three-step progress rail (Download → Install → Resume) in ChatView and ConnectionsSettings; suppresses environment-unavailable banners during the resuming stage.
  • The update command serializes only its handoff on the config scheduler lane, resets supervisor backoff via retryNow, and waits up to 120 seconds for the server to report the target version as ready.
  • For the boot-service path, the server acknowledges immediately and defers the systemd restart; if the restart fails it restores the previous unit file and reloads systemd without surfacing the error to the caller.
  • Behavioral Change: resolveServerConfigValue no longer always prefers the live projection — it holds the session config until the live snapshot's serverVersion matches the current server version.

Macroscope summarized 16c2f25.

@coderabbitai

coderabbitaiBot commented Jul 30, 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: 889648f8-58c3-448c-9dbd-cc10df48905c

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-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Jul 30, 2026

ghost 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 convention finding: the new streaming self-update handler recovers a known tagged failure with Effect.catchTag. Everything else in the changed Effect service scope (service definition/make/layer shape in apps/server/src/cloud/selfUpdate.ts, the new Schema.TaggedErrorClass errors and exported Schema.is predicate in packages/client-runtime, dependency acquisition via yield* EnvironmentRegistry) looks consistent with the conventions.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
@macroscopeapp

ghost commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new streaming RPC infrastructure, new UI progress tracking, and changes server restart behavior from immediate to delayed with rollback. Despite the 'fix' prefix, this is a new feature with significant runtime behavior changes across auth, server, and client that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 13cc790 to 8fa32deCompareJuly 30, 2026 08:43
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadapps/web/src/components/ServerUpdateAction.tsx
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from dfe9971 to 2e05cecCompareJuly 30, 2026 09:04
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 2e05cec to 763841aCompareJuly 30, 2026 09:16
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 6b4ca8c to 830913bCompareJuly 30, 2026 09:41
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 22d6e33 to a73bcfdCompareJuly 30, 2026 10:08

ghost 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 1 potential issue.

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 a73bcfd. Configure here.

Comment threadpackages/client-runtime/src/state/server.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR 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

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): show server update progress through reconnect - #4903

Merged
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors
Jul 30, 2026
Merged

fix(web): show server update progress through reconnect#4903
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 30, 2026

Copy link
Copy Markdown
Member

The server update action currently becomes a blind pending request, while the expected restart can surface as a generic connection failure. Users cannot tell whether T3 is downloading, installing, or trying to reconnect.

This adds a typed progress stream and one environment-scoped update state machine that follows the operation through Download, Install, and Resume. Resume completes only after the replacement server reports the requested version and is ready for commands. Older servers retain the unary update fallback, and the intentional reconnect gets a fresh retry instead of inherited backoff.

The shared progress rail appears in both the chat warning and Connections. Failed stages remain visible with a retry action. The desktop surface inherits the web implementation; mobile has no existing server-update entry point.

Visual direction: https://f2ltacrf9xro.postplan.dev

Testing:

  • contracts, client-runtime, and server typechecks
  • focused authorization, self-update, environment, reconnect, update-state, version-skew, and UI tests
  • targeted lint and formatting
  • web typecheck is currently blocked on current main by unrelated FilePreviewPanel errors against @pierre/diffs/react; the focused web tests pass

Authored by GPT-5.6 Codex in the T3 Code Codex harness.


Note

Medium Risk
Touches orchestration RPC auth, self-update handoff timing, and connection supervisor retry semantics; boot-service deferred restart changes when failures are visible vs RPC success.

Overview
Adds Download → Install → Resume visibility for server self-updates instead of a blind pending button, with one shared per-environment state machine in client-runtime so chat and Connections stay in sync across navigation.

Server & contracts: New streaming RPC serverUpdateServerWithProgress emits downloading / installing and a terminal complete; capability serverSelfUpdateProgress is advertised when supported. Unary serverUpdateServer remains for older servers. Self-update accepts optional reportProgress; boot-service handoff defers systemd restart after acknowledgement (like respawn), restores the previous unit on failed restart, and logs instead of failing the RPC when restart cannot complete.

Client-runtime:updateServer drives streamed or legacy unary paths, treats transport loss after handoff as success when appropriate, enters Resume until lifecycle ready at the target version, triggers one fresh reconnect (supervisor retryNow resets backoff), and clears or surfaces failed stage state for retry.

Web UI:ServerUpdateProgress step rail in ChatView and Connections; version-mismatch banner merges with live update state; ServerUpdateAction delegates lifecycle to shared atoms and drops local spinner/timeouts.

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

Note

Show server update progress through reconnect in conversation and connections views

  • Adds a new serverUpdateServerWithProgress WebSocket RPC that streams downloading, installing, and resuming progress stages before acknowledging restart; older servers fall back to the existing unary RPC.
  • Introduces ServerUpdateState atoms in packages/client-runtime/src/state/server.ts to track update lifecycle (idle/running/failed) with stage, fromVersion, and targetVersion across the client.
  • Renders a three-step progress rail (Download → Install → Resume) in ChatView and ConnectionsSettings; suppresses environment-unavailable banners during the resuming stage.
  • The update command serializes only its handoff on the config scheduler lane, resets supervisor backoff via retryNow, and waits up to 120 seconds for the server to report the target version as ready.
  • For the boot-service path, the server acknowledges immediately and defers the systemd restart; if the restart fails it restores the previous unit file and reloads systemd without surfacing the error to the caller.
  • Behavioral Change: resolveServerConfigValue no longer always prefers the live projection — it holds the session config until the live snapshot's serverVersion matches the current server version.

Macroscope summarized 16c2f25.

@coderabbitai

coderabbitaiBot commented Jul 30, 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: 889648f8-58c3-448c-9dbd-cc10df48905c

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-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Jul 30, 2026

ghost 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 convention finding: the new streaming self-update handler recovers a known tagged failure with Effect.catchTag. Everything else in the changed Effect service scope (service definition/make/layer shape in apps/server/src/cloud/selfUpdate.ts, the new Schema.TaggedErrorClass errors and exported Schema.is predicate in packages/client-runtime, dependency acquisition via yield* EnvironmentRegistry) looks consistent with the conventions.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
@macroscopeapp

ghost commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new streaming RPC infrastructure, new UI progress tracking, and changes server restart behavior from immediate to delayed with rollback. Despite the 'fix' prefix, this is a new feature with significant runtime behavior changes across auth, server, and client that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 13cc790 to 8fa32deCompareJuly 30, 2026 08:43
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadapps/web/src/components/ServerUpdateAction.tsx
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from dfe9971 to 2e05cecCompareJuly 30, 2026 09:04
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 2e05cec to 763841aCompareJuly 30, 2026 09:16
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 6b4ca8c to 830913bCompareJuly 30, 2026 09:41
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 22d6e33 to a73bcfdCompareJuly 30, 2026 10:08

ghost 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 1 potential issue.

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 a73bcfd. Configure here.

Comment threadpackages/client-runtime/src/state/server.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR 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

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): show server update progress through reconnect - #4903

Merged
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors
Jul 30, 2026
Merged

fix(web): show server update progress through reconnect#4903
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 30, 2026

Copy link
Copy Markdown
Member

The server update action currently becomes a blind pending request, while the expected restart can surface as a generic connection failure. Users cannot tell whether T3 is downloading, installing, or trying to reconnect.

This adds a typed progress stream and one environment-scoped update state machine that follows the operation through Download, Install, and Resume. Resume completes only after the replacement server reports the requested version and is ready for commands. Older servers retain the unary update fallback, and the intentional reconnect gets a fresh retry instead of inherited backoff.

The shared progress rail appears in both the chat warning and Connections. Failed stages remain visible with a retry action. The desktop surface inherits the web implementation; mobile has no existing server-update entry point.

Visual direction: https://f2ltacrf9xro.postplan.dev

Testing:

  • contracts, client-runtime, and server typechecks
  • focused authorization, self-update, environment, reconnect, update-state, version-skew, and UI tests
  • targeted lint and formatting
  • web typecheck is currently blocked on current main by unrelated FilePreviewPanel errors against @pierre/diffs/react; the focused web tests pass

Authored by GPT-5.6 Codex in the T3 Code Codex harness.


Note

Medium Risk
Touches orchestration RPC auth, self-update handoff timing, and connection supervisor retry semantics; boot-service deferred restart changes when failures are visible vs RPC success.

Overview
Adds Download → Install → Resume visibility for server self-updates instead of a blind pending button, with one shared per-environment state machine in client-runtime so chat and Connections stay in sync across navigation.

Server & contracts: New streaming RPC serverUpdateServerWithProgress emits downloading / installing and a terminal complete; capability serverSelfUpdateProgress is advertised when supported. Unary serverUpdateServer remains for older servers. Self-update accepts optional reportProgress; boot-service handoff defers systemd restart after acknowledgement (like respawn), restores the previous unit on failed restart, and logs instead of failing the RPC when restart cannot complete.

Client-runtime:updateServer drives streamed or legacy unary paths, treats transport loss after handoff as success when appropriate, enters Resume until lifecycle ready at the target version, triggers one fresh reconnect (supervisor retryNow resets backoff), and clears or surfaces failed stage state for retry.

Web UI:ServerUpdateProgress step rail in ChatView and Connections; version-mismatch banner merges with live update state; ServerUpdateAction delegates lifecycle to shared atoms and drops local spinner/timeouts.

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

Note

Show server update progress through reconnect in conversation and connections views

  • Adds a new serverUpdateServerWithProgress WebSocket RPC that streams downloading, installing, and resuming progress stages before acknowledging restart; older servers fall back to the existing unary RPC.
  • Introduces ServerUpdateState atoms in packages/client-runtime/src/state/server.ts to track update lifecycle (idle/running/failed) with stage, fromVersion, and targetVersion across the client.
  • Renders a three-step progress rail (Download → Install → Resume) in ChatView and ConnectionsSettings; suppresses environment-unavailable banners during the resuming stage.
  • The update command serializes only its handoff on the config scheduler lane, resets supervisor backoff via retryNow, and waits up to 120 seconds for the server to report the target version as ready.
  • For the boot-service path, the server acknowledges immediately and defers the systemd restart; if the restart fails it restores the previous unit file and reloads systemd without surfacing the error to the caller.
  • Behavioral Change: resolveServerConfigValue no longer always prefers the live projection — it holds the session config until the live snapshot's serverVersion matches the current server version.

Macroscope summarized 16c2f25.

@coderabbitai

coderabbitaiBot commented Jul 30, 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: 889648f8-58c3-448c-9dbd-cc10df48905c

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-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Jul 30, 2026

ghost 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 convention finding: the new streaming self-update handler recovers a known tagged failure with Effect.catchTag. Everything else in the changed Effect service scope (service definition/make/layer shape in apps/server/src/cloud/selfUpdate.ts, the new Schema.TaggedErrorClass errors and exported Schema.is predicate in packages/client-runtime, dependency acquisition via yield* EnvironmentRegistry) looks consistent with the conventions.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
@macroscopeapp

ghost commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new streaming RPC infrastructure, new UI progress tracking, and changes server restart behavior from immediate to delayed with rollback. Despite the 'fix' prefix, this is a new feature with significant runtime behavior changes across auth, server, and client that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 13cc790 to 8fa32deCompareJuly 30, 2026 08:43
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadapps/web/src/components/ServerUpdateAction.tsx
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from dfe9971 to 2e05cecCompareJuly 30, 2026 09:04
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 2e05cec to 763841aCompareJuly 30, 2026 09:16
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 6b4ca8c to 830913bCompareJuly 30, 2026 09:41
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 22d6e33 to a73bcfdCompareJuly 30, 2026 10:08

ghost 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 1 potential issue.

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 a73bcfd. Configure here.

Comment threadpackages/client-runtime/src/state/server.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR 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

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(web): show server update progress through reconnect - #4903

Merged
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors
Jul 30, 2026
Merged

fix(web): show server update progress through reconnect#4903
t3dotgg merged 12 commits into
mainfrom
t3code/fix-relay-connection-errors

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 30, 2026

Copy link
Copy Markdown
Member

The server update action currently becomes a blind pending request, while the expected restart can surface as a generic connection failure. Users cannot tell whether T3 is downloading, installing, or trying to reconnect.

This adds a typed progress stream and one environment-scoped update state machine that follows the operation through Download, Install, and Resume. Resume completes only after the replacement server reports the requested version and is ready for commands. Older servers retain the unary update fallback, and the intentional reconnect gets a fresh retry instead of inherited backoff.

The shared progress rail appears in both the chat warning and Connections. Failed stages remain visible with a retry action. The desktop surface inherits the web implementation; mobile has no existing server-update entry point.

Visual direction: https://f2ltacrf9xro.postplan.dev

Testing:

  • contracts, client-runtime, and server typechecks
  • focused authorization, self-update, environment, reconnect, update-state, version-skew, and UI tests
  • targeted lint and formatting
  • web typecheck is currently blocked on current main by unrelated FilePreviewPanel errors against @pierre/diffs/react; the focused web tests pass

Authored by GPT-5.6 Codex in the T3 Code Codex harness.


Note

Medium Risk
Touches orchestration RPC auth, self-update handoff timing, and connection supervisor retry semantics; boot-service deferred restart changes when failures are visible vs RPC success.

Overview
Adds Download → Install → Resume visibility for server self-updates instead of a blind pending button, with one shared per-environment state machine in client-runtime so chat and Connections stay in sync across navigation.

Server & contracts: New streaming RPC serverUpdateServerWithProgress emits downloading / installing and a terminal complete; capability serverSelfUpdateProgress is advertised when supported. Unary serverUpdateServer remains for older servers. Self-update accepts optional reportProgress; boot-service handoff defers systemd restart after acknowledgement (like respawn), restores the previous unit on failed restart, and logs instead of failing the RPC when restart cannot complete.

Client-runtime:updateServer drives streamed or legacy unary paths, treats transport loss after handoff as success when appropriate, enters Resume until lifecycle ready at the target version, triggers one fresh reconnect (supervisor retryNow resets backoff), and clears or surfaces failed stage state for retry.

Web UI:ServerUpdateProgress step rail in ChatView and Connections; version-mismatch banner merges with live update state; ServerUpdateAction delegates lifecycle to shared atoms and drops local spinner/timeouts.

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

Note

Show server update progress through reconnect in conversation and connections views

  • Adds a new serverUpdateServerWithProgress WebSocket RPC that streams downloading, installing, and resuming progress stages before acknowledging restart; older servers fall back to the existing unary RPC.
  • Introduces ServerUpdateState atoms in packages/client-runtime/src/state/server.ts to track update lifecycle (idle/running/failed) with stage, fromVersion, and targetVersion across the client.
  • Renders a three-step progress rail (Download → Install → Resume) in ChatView and ConnectionsSettings; suppresses environment-unavailable banners during the resuming stage.
  • The update command serializes only its handoff on the config scheduler lane, resets supervisor backoff via retryNow, and waits up to 120 seconds for the server to report the target version as ready.
  • For the boot-service path, the server acknowledges immediately and defers the systemd restart; if the restart fails it restores the previous unit file and reloads systemd without surfacing the error to the caller.
  • Behavioral Change: resolveServerConfigValue no longer always prefers the live projection — it holds the session config until the live snapshot's serverVersion matches the current server version.

Macroscope summarized 16c2f25.

@coderabbitai

coderabbitaiBot commented Jul 30, 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: 889648f8-58c3-448c-9dbd-cc10df48905c

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-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Jul 30, 2026

ghost 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 convention finding: the new streaming self-update handler recovers a known tagged failure with Effect.catchTag. Everything else in the changed Effect service scope (service definition/make/layer shape in apps/server/src/cloud/selfUpdate.ts, the new Schema.TaggedErrorClass errors and exported Schema.is predicate in packages/client-runtime, dependency acquisition via yield* EnvironmentRegistry) looks consistent with the conventions.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts Outdated
@macroscopeapp

ghost commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces new streaming RPC infrastructure, new UI progress tracking, and changes server restart behavior from immediate to delayed with rollback. Despite the 'fix' prefix, this is a new feature with significant runtime behavior changes across auth, server, and client that warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 13cc790 to 8fa32deCompareJuly 30, 2026 08:43
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadapps/web/src/components/ServerUpdateAction.tsx
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from dfe9971 to 2e05cecCompareJuly 30, 2026 09:04
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 2e05cec to 763841aCompareJuly 30, 2026 09:16
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 6b4ca8c to 830913bCompareJuly 30, 2026 09:41
Comment threadpackages/client-runtime/src/state/server.ts Outdated
Comment threadpackages/client-runtime/src/state/server.ts
Comment threadpackages/client-runtime/src/state/server.ts
@t3dotgg
t3dotggforce-pushed the t3code/fix-relay-connection-errors branch from 22d6e33 to a73bcfdCompareJuly 30, 2026 10:08

ghost 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 1 potential issue.

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 a73bcfd. Configure here.

Comment threadpackages/client-runtime/src/state/server.ts
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL500-999 changed lines (additions + deletions).vouch:trustedPR 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

@t3dotgg