Move managed workspace controls to sidebar - #7

Merged
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar
Jul 25, 2026
Merged

Move managed workspace controls to sidebar#7
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar

Conversation

@logancsack

@logancsacklogancsack commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Summary

  • remove the managed DevPC status/restart overlay from the global app root
  • render the workspace state and confirmed restart action as native sidebar utility controls
  • keep the controls visible in both thread sidebar variants and on settings routes

Verification

  • vp test run src/AppRoot.test.tsx src/components/ManagedDevPcStatus.test.tsx --project unit (2 passed)
  • vp run --filter @t3tools/web typecheck (passed)
  • focused vp lint --report-unused-disable-directives on all changed files (passed)
  • vp run --filter @t3tools/web build (passed)
  • git diff --check (passed)

Impact

  • UI-only managed-mode change; stock T3 surfaces are unchanged when VITE_DEVPC_MANAGED is disabled.
  • No schema, infrastructure, auth, or runtime protocol changes.
  • Production screenshot and authenticated smoke verification will be captured after the managed artifact is installed through the DevPC release pipeline.

Summary by CodeRabbit

  • New Features

    • Added managed development PC status to the settings and main sidebar footers.
    • Added workspace status indicators, including online/ready state and an accessible restart control.
    • Improved status layout and accessibility with live updates and descriptive labels.
  • Bug Fixes

    • Updated application host composition to ensure the correct browser and preview hosts are displayed.
  • Tests

    • Added coverage for workspace status rendering and restart controls.

@cursor

cursorBot commented Jul 25, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

ManagedDevPcStatus now renders an inline accessible status control and appears in both sidebar footers. AppRoot no longer mounts it globally, and its child composition test now expects three children.

Changes

Managed Dev PC status

Layer / File(s)Summary
Status component UI and coverage
apps/web/src/components/ManagedDevPcStatus.tsx, apps/web/src/components/ManagedDevPcStatus.test.tsx
Updates the status layout, adds accessibility and workspace-status attributes, replaces the text restart control with an icon button, and adds managed ready-state coverage.
Sidebar footer integration
apps/web/src/components/settings/SettingsSidebarNav.tsx, apps/web/src/components/sidebar/SidebarChrome.tsx
Renders ManagedDevPcStatus in both sidebar footer layouts.
App root composition update
apps/web/src/AppRoot.tsx, apps/web/src/AppRoot.test.tsx
Removes the global status mount and updates the expected app-root children to RouterProvider, PreviewAutomationHosts, and ElectronBrowserHost.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers:juliusmarminge

Poem

A bunny spins the restart wheel,
While status lights say “ready” bright.
From root it hops to sidebars neat,
With ears up for accessible delight.
Three hosts remain beneath the tree.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description covers the change, verification, and impact, but it does not follow the template and is missing the UI screenshots section.Rename sections to match the template and add the UI Changes section with before/after screenshots, plus a completed checklist.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main change: moving managed workspace controls from the app root into the sidebar.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/move-managed-status-sidebar

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.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:57bfad5215

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

<SidebarFooter className="p-2">
<SidebarProviderUpdatePill />
<SidebarUpdatePill />
<ManagedDevPcStatus />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve workspace state across sidebar route switches

When a managed workspace has moved away from its bootstrap ready state, navigating between a thread and Settings replaces SidebarChromeFooter with SettingsSidebarNav, unmounting this status instance and mounting a new one. Because ManagedDevPcStatus initializes from the one-time window.__DEVPC_MANAGED_BOOTSTRAP__ value and does not refresh until the first 10-second interval, each such transition temporarily reports the workspace as Online and re-enables Restart even if polling had already learned that it is restarting, stopped, or errored. Keep the polled state above these mutually exclusive sidebar variants, or refresh immediately on mount.

Useful? React with 👍 / 👎.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx`:
- Around line 9-29: Add focused tests for ManagedDevPcStatus covering
VITE_DEVPC_MANAGED disabled, asserting the component renders no markup, and
starting/error workspace states, asserting the Restart Dev PC control is
disabled. Reuse the existing bootstrap setup and import pattern while keeping
the current ready-state assertions unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6716b0b9-ad3f-4228-9c87-307eb56e7347

📥 Commits

Reviewing files that changed from the base of the PR and between c6dbd6f and 57bfad5.

📒 Files selected for processing (6)
  • apps/web/src/AppRoot.test.tsx
  • apps/web/src/AppRoot.tsx
  • apps/web/src/components/ManagedDevPcStatus.test.tsx
  • apps/web/src/components/ManagedDevPcStatus.tsx
  • apps/web/src/components/settings/SettingsSidebarNav.tsx
  • apps/web/src/components/sidebar/SidebarChrome.tsx
💤 Files with no reviewable changes (1)
  • apps/web/src/AppRoot.tsx

Comment on lines +9 to +29
describe("ManagedDevPcStatus", () => {
it("renders workspace state and restart as sidebar utility controls", async () => {
vi.stubEnv("VITE_DEVPC_MANAGED", "1");
vi.resetModules();
vi.stubGlobal("window", {
__DEVPC_MANAGED_BOOTSTRAP__: {
managed: true,
state: "ready",
ready: true,
previewUrlTemplate: "https://{port}.preview.example.test/",
},
});

const { ManagedDevPcStatus } = await import("./ManagedDevPcStatus");
const markup = renderToStaticMarkup(<ManagedDevPcStatus />);

expect(markup).toContain('data-devpc-workspace-status="ready"');
expect(markup).toContain("Dev PC · Online");
expect(markup).toContain('aria-label="Restart Dev PC"');
expect(markup).not.toContain("fixed");
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the managed-off and non-ready states.

This test only exercises VITE_DEVPC_MANAGED=1 with a ready workspace. Add focused cases asserting that the component renders nothing when managed mode is disabled and that the restart button is disabled for starting/error states.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx` around lines 9 - 29, Add
focused tests for ManagedDevPcStatus covering VITE_DEVPC_MANAGED disabled,
asserting the component renders no markup, and starting/error workspace states,
asserting the Restart Dev PC control is disabled. Reuse the existing bootstrap
setup and import pattern while keeping the current ready-state assertions
unchanged.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch: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

@logancsack
, '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

Move managed workspace controls to sidebar - #7

Merged
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar
Jul 25, 2026
Merged

Move managed workspace controls to sidebar#7
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar

Conversation

@logancsack

@logancsacklogancsack commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Summary

  • remove the managed DevPC status/restart overlay from the global app root
  • render the workspace state and confirmed restart action as native sidebar utility controls
  • keep the controls visible in both thread sidebar variants and on settings routes

Verification

  • vp test run src/AppRoot.test.tsx src/components/ManagedDevPcStatus.test.tsx --project unit (2 passed)
  • vp run --filter @t3tools/web typecheck (passed)
  • focused vp lint --report-unused-disable-directives on all changed files (passed)
  • vp run --filter @t3tools/web build (passed)
  • git diff --check (passed)

Impact

  • UI-only managed-mode change; stock T3 surfaces are unchanged when VITE_DEVPC_MANAGED is disabled.
  • No schema, infrastructure, auth, or runtime protocol changes.
  • Production screenshot and authenticated smoke verification will be captured after the managed artifact is installed through the DevPC release pipeline.

Summary by CodeRabbit

  • New Features

    • Added managed development PC status to the settings and main sidebar footers.
    • Added workspace status indicators, including online/ready state and an accessible restart control.
    • Improved status layout and accessibility with live updates and descriptive labels.
  • Bug Fixes

    • Updated application host composition to ensure the correct browser and preview hosts are displayed.
  • Tests

    • Added coverage for workspace status rendering and restart controls.

@cursor

cursorBot commented Jul 25, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

ManagedDevPcStatus now renders an inline accessible status control and appears in both sidebar footers. AppRoot no longer mounts it globally, and its child composition test now expects three children.

Changes

Managed Dev PC status

Layer / File(s)Summary
Status component UI and coverage
apps/web/src/components/ManagedDevPcStatus.tsx, apps/web/src/components/ManagedDevPcStatus.test.tsx
Updates the status layout, adds accessibility and workspace-status attributes, replaces the text restart control with an icon button, and adds managed ready-state coverage.
Sidebar footer integration
apps/web/src/components/settings/SettingsSidebarNav.tsx, apps/web/src/components/sidebar/SidebarChrome.tsx
Renders ManagedDevPcStatus in both sidebar footer layouts.
App root composition update
apps/web/src/AppRoot.tsx, apps/web/src/AppRoot.test.tsx
Removes the global status mount and updates the expected app-root children to RouterProvider, PreviewAutomationHosts, and ElectronBrowserHost.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers:juliusmarminge

Poem

A bunny spins the restart wheel,
While status lights say “ready” bright.
From root it hops to sidebars neat,
With ears up for accessible delight.
Three hosts remain beneath the tree.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description covers the change, verification, and impact, but it does not follow the template and is missing the UI screenshots section.Rename sections to match the template and add the UI Changes section with before/after screenshots, plus a completed checklist.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main change: moving managed workspace controls from the app root into the sidebar.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/move-managed-status-sidebar

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.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:57bfad5215

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

<SidebarFooter className="p-2">
<SidebarProviderUpdatePill />
<SidebarUpdatePill />
<ManagedDevPcStatus />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve workspace state across sidebar route switches

When a managed workspace has moved away from its bootstrap ready state, navigating between a thread and Settings replaces SidebarChromeFooter with SettingsSidebarNav, unmounting this status instance and mounting a new one. Because ManagedDevPcStatus initializes from the one-time window.__DEVPC_MANAGED_BOOTSTRAP__ value and does not refresh until the first 10-second interval, each such transition temporarily reports the workspace as Online and re-enables Restart even if polling had already learned that it is restarting, stopped, or errored. Keep the polled state above these mutually exclusive sidebar variants, or refresh immediately on mount.

Useful? React with 👍 / 👎.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx`:
- Around line 9-29: Add focused tests for ManagedDevPcStatus covering
VITE_DEVPC_MANAGED disabled, asserting the component renders no markup, and
starting/error workspace states, asserting the Restart Dev PC control is
disabled. Reuse the existing bootstrap setup and import pattern while keeping
the current ready-state assertions unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6716b0b9-ad3f-4228-9c87-307eb56e7347

📥 Commits

Reviewing files that changed from the base of the PR and between c6dbd6f and 57bfad5.

📒 Files selected for processing (6)
  • apps/web/src/AppRoot.test.tsx
  • apps/web/src/AppRoot.tsx
  • apps/web/src/components/ManagedDevPcStatus.test.tsx
  • apps/web/src/components/ManagedDevPcStatus.tsx
  • apps/web/src/components/settings/SettingsSidebarNav.tsx
  • apps/web/src/components/sidebar/SidebarChrome.tsx
💤 Files with no reviewable changes (1)
  • apps/web/src/AppRoot.tsx

Comment on lines +9 to +29
describe("ManagedDevPcStatus", () => {
it("renders workspace state and restart as sidebar utility controls", async () => {
vi.stubEnv("VITE_DEVPC_MANAGED", "1");
vi.resetModules();
vi.stubGlobal("window", {
__DEVPC_MANAGED_BOOTSTRAP__: {
managed: true,
state: "ready",
ready: true,
previewUrlTemplate: "https://{port}.preview.example.test/",
},
});

const { ManagedDevPcStatus } = await import("./ManagedDevPcStatus");
const markup = renderToStaticMarkup(<ManagedDevPcStatus />);

expect(markup).toContain('data-devpc-workspace-status="ready"');
expect(markup).toContain("Dev PC · Online");
expect(markup).toContain('aria-label="Restart Dev PC"');
expect(markup).not.toContain("fixed");
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the managed-off and non-ready states.

This test only exercises VITE_DEVPC_MANAGED=1 with a ready workspace. Add focused cases asserting that the component renders nothing when managed mode is disabled and that the restart button is disabled for starting/error states.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx` around lines 9 - 29, Add
focused tests for ManagedDevPcStatus covering VITE_DEVPC_MANAGED disabled,
asserting the component renders no markup, and starting/error workspace states,
asserting the Restart Dev PC control is disabled. Reuse the existing bootstrap
setup and import pattern while keeping the current ready-state assertions
unchanged.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch: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

@logancsack
, '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

Move managed workspace controls to sidebar - #7

Merged
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar
Jul 25, 2026
Merged

Move managed workspace controls to sidebar#7
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar

Conversation

@logancsack

@logancsacklogancsack commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Summary

  • remove the managed DevPC status/restart overlay from the global app root
  • render the workspace state and confirmed restart action as native sidebar utility controls
  • keep the controls visible in both thread sidebar variants and on settings routes

Verification

  • vp test run src/AppRoot.test.tsx src/components/ManagedDevPcStatus.test.tsx --project unit (2 passed)
  • vp run --filter @t3tools/web typecheck (passed)
  • focused vp lint --report-unused-disable-directives on all changed files (passed)
  • vp run --filter @t3tools/web build (passed)
  • git diff --check (passed)

Impact

  • UI-only managed-mode change; stock T3 surfaces are unchanged when VITE_DEVPC_MANAGED is disabled.
  • No schema, infrastructure, auth, or runtime protocol changes.
  • Production screenshot and authenticated smoke verification will be captured after the managed artifact is installed through the DevPC release pipeline.

Summary by CodeRabbit

  • New Features

    • Added managed development PC status to the settings and main sidebar footers.
    • Added workspace status indicators, including online/ready state and an accessible restart control.
    • Improved status layout and accessibility with live updates and descriptive labels.
  • Bug Fixes

    • Updated application host composition to ensure the correct browser and preview hosts are displayed.
  • Tests

    • Added coverage for workspace status rendering and restart controls.

@cursor

cursorBot commented Jul 25, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

ManagedDevPcStatus now renders an inline accessible status control and appears in both sidebar footers. AppRoot no longer mounts it globally, and its child composition test now expects three children.

Changes

Managed Dev PC status

Layer / File(s)Summary
Status component UI and coverage
apps/web/src/components/ManagedDevPcStatus.tsx, apps/web/src/components/ManagedDevPcStatus.test.tsx
Updates the status layout, adds accessibility and workspace-status attributes, replaces the text restart control with an icon button, and adds managed ready-state coverage.
Sidebar footer integration
apps/web/src/components/settings/SettingsSidebarNav.tsx, apps/web/src/components/sidebar/SidebarChrome.tsx
Renders ManagedDevPcStatus in both sidebar footer layouts.
App root composition update
apps/web/src/AppRoot.tsx, apps/web/src/AppRoot.test.tsx
Removes the global status mount and updates the expected app-root children to RouterProvider, PreviewAutomationHosts, and ElectronBrowserHost.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers:juliusmarminge

Poem

A bunny spins the restart wheel,
While status lights say “ready” bright.
From root it hops to sidebars neat,
With ears up for accessible delight.
Three hosts remain beneath the tree.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description covers the change, verification, and impact, but it does not follow the template and is missing the UI screenshots section.Rename sections to match the template and add the UI Changes section with before/after screenshots, plus a completed checklist.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main change: moving managed workspace controls from the app root into the sidebar.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/move-managed-status-sidebar

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.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:57bfad5215

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

<SidebarFooter className="p-2">
<SidebarProviderUpdatePill />
<SidebarUpdatePill />
<ManagedDevPcStatus />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve workspace state across sidebar route switches

When a managed workspace has moved away from its bootstrap ready state, navigating between a thread and Settings replaces SidebarChromeFooter with SettingsSidebarNav, unmounting this status instance and mounting a new one. Because ManagedDevPcStatus initializes from the one-time window.__DEVPC_MANAGED_BOOTSTRAP__ value and does not refresh until the first 10-second interval, each such transition temporarily reports the workspace as Online and re-enables Restart even if polling had already learned that it is restarting, stopped, or errored. Keep the polled state above these mutually exclusive sidebar variants, or refresh immediately on mount.

Useful? React with 👍 / 👎.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx`:
- Around line 9-29: Add focused tests for ManagedDevPcStatus covering
VITE_DEVPC_MANAGED disabled, asserting the component renders no markup, and
starting/error workspace states, asserting the Restart Dev PC control is
disabled. Reuse the existing bootstrap setup and import pattern while keeping
the current ready-state assertions unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6716b0b9-ad3f-4228-9c87-307eb56e7347

📥 Commits

Reviewing files that changed from the base of the PR and between c6dbd6f and 57bfad5.

📒 Files selected for processing (6)
  • apps/web/src/AppRoot.test.tsx
  • apps/web/src/AppRoot.tsx
  • apps/web/src/components/ManagedDevPcStatus.test.tsx
  • apps/web/src/components/ManagedDevPcStatus.tsx
  • apps/web/src/components/settings/SettingsSidebarNav.tsx
  • apps/web/src/components/sidebar/SidebarChrome.tsx
💤 Files with no reviewable changes (1)
  • apps/web/src/AppRoot.tsx

Comment on lines +9 to +29
describe("ManagedDevPcStatus", () => {
it("renders workspace state and restart as sidebar utility controls", async () => {
vi.stubEnv("VITE_DEVPC_MANAGED", "1");
vi.resetModules();
vi.stubGlobal("window", {
__DEVPC_MANAGED_BOOTSTRAP__: {
managed: true,
state: "ready",
ready: true,
previewUrlTemplate: "https://{port}.preview.example.test/",
},
});

const { ManagedDevPcStatus } = await import("./ManagedDevPcStatus");
const markup = renderToStaticMarkup(<ManagedDevPcStatus />);

expect(markup).toContain('data-devpc-workspace-status="ready"');
expect(markup).toContain("Dev PC · Online");
expect(markup).toContain('aria-label="Restart Dev PC"');
expect(markup).not.toContain("fixed");
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the managed-off and non-ready states.

This test only exercises VITE_DEVPC_MANAGED=1 with a ready workspace. Add focused cases asserting that the component renders nothing when managed mode is disabled and that the restart button is disabled for starting/error states.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx` around lines 9 - 29, Add
focused tests for ManagedDevPcStatus covering VITE_DEVPC_MANAGED disabled,
asserting the component renders no markup, and starting/error workspace states,
asserting the Restart Dev PC control is disabled. Reuse the existing bootstrap
setup and import pattern while keeping the current ready-state assertions
unchanged.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch: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

@logancsack
, '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

Move managed workspace controls to sidebar - #7

Merged
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar
Jul 25, 2026
Merged

Move managed workspace controls to sidebar#7
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar

Conversation

@logancsack

@logancsacklogancsack commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Summary

  • remove the managed DevPC status/restart overlay from the global app root
  • render the workspace state and confirmed restart action as native sidebar utility controls
  • keep the controls visible in both thread sidebar variants and on settings routes

Verification

  • vp test run src/AppRoot.test.tsx src/components/ManagedDevPcStatus.test.tsx --project unit (2 passed)
  • vp run --filter @t3tools/web typecheck (passed)
  • focused vp lint --report-unused-disable-directives on all changed files (passed)
  • vp run --filter @t3tools/web build (passed)
  • git diff --check (passed)

Impact

  • UI-only managed-mode change; stock T3 surfaces are unchanged when VITE_DEVPC_MANAGED is disabled.
  • No schema, infrastructure, auth, or runtime protocol changes.
  • Production screenshot and authenticated smoke verification will be captured after the managed artifact is installed through the DevPC release pipeline.

Summary by CodeRabbit

  • New Features

    • Added managed development PC status to the settings and main sidebar footers.
    • Added workspace status indicators, including online/ready state and an accessible restart control.
    • Improved status layout and accessibility with live updates and descriptive labels.
  • Bug Fixes

    • Updated application host composition to ensure the correct browser and preview hosts are displayed.
  • Tests

    • Added coverage for workspace status rendering and restart controls.

@cursor

cursorBot commented Jul 25, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

ManagedDevPcStatus now renders an inline accessible status control and appears in both sidebar footers. AppRoot no longer mounts it globally, and its child composition test now expects three children.

Changes

Managed Dev PC status

Layer / File(s)Summary
Status component UI and coverage
apps/web/src/components/ManagedDevPcStatus.tsx, apps/web/src/components/ManagedDevPcStatus.test.tsx
Updates the status layout, adds accessibility and workspace-status attributes, replaces the text restart control with an icon button, and adds managed ready-state coverage.
Sidebar footer integration
apps/web/src/components/settings/SettingsSidebarNav.tsx, apps/web/src/components/sidebar/SidebarChrome.tsx
Renders ManagedDevPcStatus in both sidebar footer layouts.
App root composition update
apps/web/src/AppRoot.tsx, apps/web/src/AppRoot.test.tsx
Removes the global status mount and updates the expected app-root children to RouterProvider, PreviewAutomationHosts, and ElectronBrowserHost.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers:juliusmarminge

Poem

A bunny spins the restart wheel,
While status lights say “ready” bright.
From root it hops to sidebars neat,
With ears up for accessible delight.
Three hosts remain beneath the tree.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description covers the change, verification, and impact, but it does not follow the template and is missing the UI screenshots section.Rename sections to match the template and add the UI Changes section with before/after screenshots, plus a completed checklist.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main change: moving managed workspace controls from the app root into the sidebar.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/move-managed-status-sidebar

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.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:57bfad5215

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

<SidebarFooter className="p-2">
<SidebarProviderUpdatePill />
<SidebarUpdatePill />
<ManagedDevPcStatus />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve workspace state across sidebar route switches

When a managed workspace has moved away from its bootstrap ready state, navigating between a thread and Settings replaces SidebarChromeFooter with SettingsSidebarNav, unmounting this status instance and mounting a new one. Because ManagedDevPcStatus initializes from the one-time window.__DEVPC_MANAGED_BOOTSTRAP__ value and does not refresh until the first 10-second interval, each such transition temporarily reports the workspace as Online and re-enables Restart even if polling had already learned that it is restarting, stopped, or errored. Keep the polled state above these mutually exclusive sidebar variants, or refresh immediately on mount.

Useful? React with 👍 / 👎.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx`:
- Around line 9-29: Add focused tests for ManagedDevPcStatus covering
VITE_DEVPC_MANAGED disabled, asserting the component renders no markup, and
starting/error workspace states, asserting the Restart Dev PC control is
disabled. Reuse the existing bootstrap setup and import pattern while keeping
the current ready-state assertions unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6716b0b9-ad3f-4228-9c87-307eb56e7347

📥 Commits

Reviewing files that changed from the base of the PR and between c6dbd6f and 57bfad5.

📒 Files selected for processing (6)
  • apps/web/src/AppRoot.test.tsx
  • apps/web/src/AppRoot.tsx
  • apps/web/src/components/ManagedDevPcStatus.test.tsx
  • apps/web/src/components/ManagedDevPcStatus.tsx
  • apps/web/src/components/settings/SettingsSidebarNav.tsx
  • apps/web/src/components/sidebar/SidebarChrome.tsx
💤 Files with no reviewable changes (1)
  • apps/web/src/AppRoot.tsx

Comment on lines +9 to +29
describe("ManagedDevPcStatus", () => {
it("renders workspace state and restart as sidebar utility controls", async () => {
vi.stubEnv("VITE_DEVPC_MANAGED", "1");
vi.resetModules();
vi.stubGlobal("window", {
__DEVPC_MANAGED_BOOTSTRAP__: {
managed: true,
state: "ready",
ready: true,
previewUrlTemplate: "https://{port}.preview.example.test/",
},
});

const { ManagedDevPcStatus } = await import("./ManagedDevPcStatus");
const markup = renderToStaticMarkup(<ManagedDevPcStatus />);

expect(markup).toContain('data-devpc-workspace-status="ready"');
expect(markup).toContain("Dev PC · Online");
expect(markup).toContain('aria-label="Restart Dev PC"');
expect(markup).not.toContain("fixed");
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the managed-off and non-ready states.

This test only exercises VITE_DEVPC_MANAGED=1 with a ready workspace. Add focused cases asserting that the component renders nothing when managed mode is disabled and that the restart button is disabled for starting/error states.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx` around lines 9 - 29, Add
focused tests for ManagedDevPcStatus covering VITE_DEVPC_MANAGED disabled,
asserting the component renders no markup, and starting/error workspace states,
asserting the Restart Dev PC control is disabled. Reuse the existing bootstrap
setup and import pattern while keeping the current ready-state assertions
unchanged.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch: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

@logancsack
, '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

Move managed workspace controls to sidebar - #7

Merged
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar
Jul 25, 2026
Merged

Move managed workspace controls to sidebar#7
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar

Conversation

@logancsack

@logancsacklogancsack commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Summary

  • remove the managed DevPC status/restart overlay from the global app root
  • render the workspace state and confirmed restart action as native sidebar utility controls
  • keep the controls visible in both thread sidebar variants and on settings routes

Verification

  • vp test run src/AppRoot.test.tsx src/components/ManagedDevPcStatus.test.tsx --project unit (2 passed)
  • vp run --filter @t3tools/web typecheck (passed)
  • focused vp lint --report-unused-disable-directives on all changed files (passed)
  • vp run --filter @t3tools/web build (passed)
  • git diff --check (passed)

Impact

  • UI-only managed-mode change; stock T3 surfaces are unchanged when VITE_DEVPC_MANAGED is disabled.
  • No schema, infrastructure, auth, or runtime protocol changes.
  • Production screenshot and authenticated smoke verification will be captured after the managed artifact is installed through the DevPC release pipeline.

Summary by CodeRabbit

  • New Features

    • Added managed development PC status to the settings and main sidebar footers.
    • Added workspace status indicators, including online/ready state and an accessible restart control.
    • Improved status layout and accessibility with live updates and descriptive labels.
  • Bug Fixes

    • Updated application host composition to ensure the correct browser and preview hosts are displayed.
  • Tests

    • Added coverage for workspace status rendering and restart controls.

@cursor

cursorBot commented Jul 25, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

ManagedDevPcStatus now renders an inline accessible status control and appears in both sidebar footers. AppRoot no longer mounts it globally, and its child composition test now expects three children.

Changes

Managed Dev PC status

Layer / File(s)Summary
Status component UI and coverage
apps/web/src/components/ManagedDevPcStatus.tsx, apps/web/src/components/ManagedDevPcStatus.test.tsx
Updates the status layout, adds accessibility and workspace-status attributes, replaces the text restart control with an icon button, and adds managed ready-state coverage.
Sidebar footer integration
apps/web/src/components/settings/SettingsSidebarNav.tsx, apps/web/src/components/sidebar/SidebarChrome.tsx
Renders ManagedDevPcStatus in both sidebar footer layouts.
App root composition update
apps/web/src/AppRoot.tsx, apps/web/src/AppRoot.test.tsx
Removes the global status mount and updates the expected app-root children to RouterProvider, PreviewAutomationHosts, and ElectronBrowserHost.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers:juliusmarminge

Poem

A bunny spins the restart wheel,
While status lights say “ready” bright.
From root it hops to sidebars neat,
With ears up for accessible delight.
Three hosts remain beneath the tree.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description covers the change, verification, and impact, but it does not follow the template and is missing the UI screenshots section.Rename sections to match the template and add the UI Changes section with before/after screenshots, plus a completed checklist.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main change: moving managed workspace controls from the app root into the sidebar.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/move-managed-status-sidebar

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.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:57bfad5215

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

<SidebarFooter className="p-2">
<SidebarProviderUpdatePill />
<SidebarUpdatePill />
<ManagedDevPcStatus />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve workspace state across sidebar route switches

When a managed workspace has moved away from its bootstrap ready state, navigating between a thread and Settings replaces SidebarChromeFooter with SettingsSidebarNav, unmounting this status instance and mounting a new one. Because ManagedDevPcStatus initializes from the one-time window.__DEVPC_MANAGED_BOOTSTRAP__ value and does not refresh until the first 10-second interval, each such transition temporarily reports the workspace as Online and re-enables Restart even if polling had already learned that it is restarting, stopped, or errored. Keep the polled state above these mutually exclusive sidebar variants, or refresh immediately on mount.

Useful? React with 👍 / 👎.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx`:
- Around line 9-29: Add focused tests for ManagedDevPcStatus covering
VITE_DEVPC_MANAGED disabled, asserting the component renders no markup, and
starting/error workspace states, asserting the Restart Dev PC control is
disabled. Reuse the existing bootstrap setup and import pattern while keeping
the current ready-state assertions unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6716b0b9-ad3f-4228-9c87-307eb56e7347

📥 Commits

Reviewing files that changed from the base of the PR and between c6dbd6f and 57bfad5.

📒 Files selected for processing (6)
  • apps/web/src/AppRoot.test.tsx
  • apps/web/src/AppRoot.tsx
  • apps/web/src/components/ManagedDevPcStatus.test.tsx
  • apps/web/src/components/ManagedDevPcStatus.tsx
  • apps/web/src/components/settings/SettingsSidebarNav.tsx
  • apps/web/src/components/sidebar/SidebarChrome.tsx
💤 Files with no reviewable changes (1)
  • apps/web/src/AppRoot.tsx

Comment on lines +9 to +29
describe("ManagedDevPcStatus", () => {
it("renders workspace state and restart as sidebar utility controls", async () => {
vi.stubEnv("VITE_DEVPC_MANAGED", "1");
vi.resetModules();
vi.stubGlobal("window", {
__DEVPC_MANAGED_BOOTSTRAP__: {
managed: true,
state: "ready",
ready: true,
previewUrlTemplate: "https://{port}.preview.example.test/",
},
});

const { ManagedDevPcStatus } = await import("./ManagedDevPcStatus");
const markup = renderToStaticMarkup(<ManagedDevPcStatus />);

expect(markup).toContain('data-devpc-workspace-status="ready"');
expect(markup).toContain("Dev PC · Online");
expect(markup).toContain('aria-label="Restart Dev PC"');
expect(markup).not.toContain("fixed");
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the managed-off and non-ready states.

This test only exercises VITE_DEVPC_MANAGED=1 with a ready workspace. Add focused cases asserting that the component renders nothing when managed mode is disabled and that the restart button is disabled for starting/error states.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx` around lines 9 - 29, Add
focused tests for ManagedDevPcStatus covering VITE_DEVPC_MANAGED disabled,
asserting the component renders no markup, and starting/error workspace states,
asserting the Restart Dev PC control is disabled. Reuse the existing bootstrap
setup and import pattern while keeping the current ready-state assertions
unchanged.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch: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

@logancsack
, '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

Move managed workspace controls to sidebar - #7

Merged
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar
Jul 25, 2026
Merged

Move managed workspace controls to sidebar#7
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar

Conversation

@logancsack

@logancsacklogancsack commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Summary

  • remove the managed DevPC status/restart overlay from the global app root
  • render the workspace state and confirmed restart action as native sidebar utility controls
  • keep the controls visible in both thread sidebar variants and on settings routes

Verification

  • vp test run src/AppRoot.test.tsx src/components/ManagedDevPcStatus.test.tsx --project unit (2 passed)
  • vp run --filter @t3tools/web typecheck (passed)
  • focused vp lint --report-unused-disable-directives on all changed files (passed)
  • vp run --filter @t3tools/web build (passed)
  • git diff --check (passed)

Impact

  • UI-only managed-mode change; stock T3 surfaces are unchanged when VITE_DEVPC_MANAGED is disabled.
  • No schema, infrastructure, auth, or runtime protocol changes.
  • Production screenshot and authenticated smoke verification will be captured after the managed artifact is installed through the DevPC release pipeline.

Summary by CodeRabbit

  • New Features

    • Added managed development PC status to the settings and main sidebar footers.
    • Added workspace status indicators, including online/ready state and an accessible restart control.
    • Improved status layout and accessibility with live updates and descriptive labels.
  • Bug Fixes

    • Updated application host composition to ensure the correct browser and preview hosts are displayed.
  • Tests

    • Added coverage for workspace status rendering and restart controls.

@cursor

cursorBot commented Jul 25, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

ManagedDevPcStatus now renders an inline accessible status control and appears in both sidebar footers. AppRoot no longer mounts it globally, and its child composition test now expects three children.

Changes

Managed Dev PC status

Layer / File(s)Summary
Status component UI and coverage
apps/web/src/components/ManagedDevPcStatus.tsx, apps/web/src/components/ManagedDevPcStatus.test.tsx
Updates the status layout, adds accessibility and workspace-status attributes, replaces the text restart control with an icon button, and adds managed ready-state coverage.
Sidebar footer integration
apps/web/src/components/settings/SettingsSidebarNav.tsx, apps/web/src/components/sidebar/SidebarChrome.tsx
Renders ManagedDevPcStatus in both sidebar footer layouts.
App root composition update
apps/web/src/AppRoot.tsx, apps/web/src/AppRoot.test.tsx
Removes the global status mount and updates the expected app-root children to RouterProvider, PreviewAutomationHosts, and ElectronBrowserHost.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers:juliusmarminge

Poem

A bunny spins the restart wheel,
While status lights say “ready” bright.
From root it hops to sidebars neat,
With ears up for accessible delight.
Three hosts remain beneath the tree.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description covers the change, verification, and impact, but it does not follow the template and is missing the UI screenshots section.Rename sections to match the template and add the UI Changes section with before/after screenshots, plus a completed checklist.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main change: moving managed workspace controls from the app root into the sidebar.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/move-managed-status-sidebar

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.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:57bfad5215

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

<SidebarFooter className="p-2">
<SidebarProviderUpdatePill />
<SidebarUpdatePill />
<ManagedDevPcStatus />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve workspace state across sidebar route switches

When a managed workspace has moved away from its bootstrap ready state, navigating between a thread and Settings replaces SidebarChromeFooter with SettingsSidebarNav, unmounting this status instance and mounting a new one. Because ManagedDevPcStatus initializes from the one-time window.__DEVPC_MANAGED_BOOTSTRAP__ value and does not refresh until the first 10-second interval, each such transition temporarily reports the workspace as Online and re-enables Restart even if polling had already learned that it is restarting, stopped, or errored. Keep the polled state above these mutually exclusive sidebar variants, or refresh immediately on mount.

Useful? React with 👍 / 👎.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx`:
- Around line 9-29: Add focused tests for ManagedDevPcStatus covering
VITE_DEVPC_MANAGED disabled, asserting the component renders no markup, and
starting/error workspace states, asserting the Restart Dev PC control is
disabled. Reuse the existing bootstrap setup and import pattern while keeping
the current ready-state assertions unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6716b0b9-ad3f-4228-9c87-307eb56e7347

📥 Commits

Reviewing files that changed from the base of the PR and between c6dbd6f and 57bfad5.

📒 Files selected for processing (6)
  • apps/web/src/AppRoot.test.tsx
  • apps/web/src/AppRoot.tsx
  • apps/web/src/components/ManagedDevPcStatus.test.tsx
  • apps/web/src/components/ManagedDevPcStatus.tsx
  • apps/web/src/components/settings/SettingsSidebarNav.tsx
  • apps/web/src/components/sidebar/SidebarChrome.tsx
💤 Files with no reviewable changes (1)
  • apps/web/src/AppRoot.tsx

Comment on lines +9 to +29
describe("ManagedDevPcStatus", () => {
it("renders workspace state and restart as sidebar utility controls", async () => {
vi.stubEnv("VITE_DEVPC_MANAGED", "1");
vi.resetModules();
vi.stubGlobal("window", {
__DEVPC_MANAGED_BOOTSTRAP__: {
managed: true,
state: "ready",
ready: true,
previewUrlTemplate: "https://{port}.preview.example.test/",
},
});

const { ManagedDevPcStatus } = await import("./ManagedDevPcStatus");
const markup = renderToStaticMarkup(<ManagedDevPcStatus />);

expect(markup).toContain('data-devpc-workspace-status="ready"');
expect(markup).toContain("Dev PC · Online");
expect(markup).toContain('aria-label="Restart Dev PC"');
expect(markup).not.toContain("fixed");
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the managed-off and non-ready states.

This test only exercises VITE_DEVPC_MANAGED=1 with a ready workspace. Add focused cases asserting that the component renders nothing when managed mode is disabled and that the restart button is disabled for starting/error states.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx` around lines 9 - 29, Add
focused tests for ManagedDevPcStatus covering VITE_DEVPC_MANAGED disabled,
asserting the component renders no markup, and starting/error workspace states,
asserting the Restart Dev PC control is disabled. Reuse the existing bootstrap
setup and import pattern while keeping the current ready-state assertions
unchanged.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch: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

@logancsack
, '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

Move managed workspace controls to sidebar - #7

Merged
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar
Jul 25, 2026
Merged

Move managed workspace controls to sidebar#7
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar

Conversation

@logancsack

@logancsacklogancsack commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Summary

  • remove the managed DevPC status/restart overlay from the global app root
  • render the workspace state and confirmed restart action as native sidebar utility controls
  • keep the controls visible in both thread sidebar variants and on settings routes

Verification

  • vp test run src/AppRoot.test.tsx src/components/ManagedDevPcStatus.test.tsx --project unit (2 passed)
  • vp run --filter @t3tools/web typecheck (passed)
  • focused vp lint --report-unused-disable-directives on all changed files (passed)
  • vp run --filter @t3tools/web build (passed)
  • git diff --check (passed)

Impact

  • UI-only managed-mode change; stock T3 surfaces are unchanged when VITE_DEVPC_MANAGED is disabled.
  • No schema, infrastructure, auth, or runtime protocol changes.
  • Production screenshot and authenticated smoke verification will be captured after the managed artifact is installed through the DevPC release pipeline.

Summary by CodeRabbit

  • New Features

    • Added managed development PC status to the settings and main sidebar footers.
    • Added workspace status indicators, including online/ready state and an accessible restart control.
    • Improved status layout and accessibility with live updates and descriptive labels.
  • Bug Fixes

    • Updated application host composition to ensure the correct browser and preview hosts are displayed.
  • Tests

    • Added coverage for workspace status rendering and restart controls.

@cursor

cursorBot commented Jul 25, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

ManagedDevPcStatus now renders an inline accessible status control and appears in both sidebar footers. AppRoot no longer mounts it globally, and its child composition test now expects three children.

Changes

Managed Dev PC status

Layer / File(s)Summary
Status component UI and coverage
apps/web/src/components/ManagedDevPcStatus.tsx, apps/web/src/components/ManagedDevPcStatus.test.tsx
Updates the status layout, adds accessibility and workspace-status attributes, replaces the text restart control with an icon button, and adds managed ready-state coverage.
Sidebar footer integration
apps/web/src/components/settings/SettingsSidebarNav.tsx, apps/web/src/components/sidebar/SidebarChrome.tsx
Renders ManagedDevPcStatus in both sidebar footer layouts.
App root composition update
apps/web/src/AppRoot.tsx, apps/web/src/AppRoot.test.tsx
Removes the global status mount and updates the expected app-root children to RouterProvider, PreviewAutomationHosts, and ElectronBrowserHost.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers:juliusmarminge

Poem

A bunny spins the restart wheel,
While status lights say “ready” bright.
From root it hops to sidebars neat,
With ears up for accessible delight.
Three hosts remain beneath the tree.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description covers the change, verification, and impact, but it does not follow the template and is missing the UI screenshots section.Rename sections to match the template and add the UI Changes section with before/after screenshots, plus a completed checklist.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main change: moving managed workspace controls from the app root into the sidebar.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/move-managed-status-sidebar

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.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:57bfad5215

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

<SidebarFooter className="p-2">
<SidebarProviderUpdatePill />
<SidebarUpdatePill />
<ManagedDevPcStatus />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve workspace state across sidebar route switches

When a managed workspace has moved away from its bootstrap ready state, navigating between a thread and Settings replaces SidebarChromeFooter with SettingsSidebarNav, unmounting this status instance and mounting a new one. Because ManagedDevPcStatus initializes from the one-time window.__DEVPC_MANAGED_BOOTSTRAP__ value and does not refresh until the first 10-second interval, each such transition temporarily reports the workspace as Online and re-enables Restart even if polling had already learned that it is restarting, stopped, or errored. Keep the polled state above these mutually exclusive sidebar variants, or refresh immediately on mount.

Useful? React with 👍 / 👎.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx`:
- Around line 9-29: Add focused tests for ManagedDevPcStatus covering
VITE_DEVPC_MANAGED disabled, asserting the component renders no markup, and
starting/error workspace states, asserting the Restart Dev PC control is
disabled. Reuse the existing bootstrap setup and import pattern while keeping
the current ready-state assertions unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6716b0b9-ad3f-4228-9c87-307eb56e7347

📥 Commits

Reviewing files that changed from the base of the PR and between c6dbd6f and 57bfad5.

📒 Files selected for processing (6)
  • apps/web/src/AppRoot.test.tsx
  • apps/web/src/AppRoot.tsx
  • apps/web/src/components/ManagedDevPcStatus.test.tsx
  • apps/web/src/components/ManagedDevPcStatus.tsx
  • apps/web/src/components/settings/SettingsSidebarNav.tsx
  • apps/web/src/components/sidebar/SidebarChrome.tsx
💤 Files with no reviewable changes (1)
  • apps/web/src/AppRoot.tsx

Comment on lines +9 to +29
describe("ManagedDevPcStatus", () => {
it("renders workspace state and restart as sidebar utility controls", async () => {
vi.stubEnv("VITE_DEVPC_MANAGED", "1");
vi.resetModules();
vi.stubGlobal("window", {
__DEVPC_MANAGED_BOOTSTRAP__: {
managed: true,
state: "ready",
ready: true,
previewUrlTemplate: "https://{port}.preview.example.test/",
},
});

const { ManagedDevPcStatus } = await import("./ManagedDevPcStatus");
const markup = renderToStaticMarkup(<ManagedDevPcStatus />);

expect(markup).toContain('data-devpc-workspace-status="ready"');
expect(markup).toContain("Dev PC · Online");
expect(markup).toContain('aria-label="Restart Dev PC"');
expect(markup).not.toContain("fixed");
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the managed-off and non-ready states.

This test only exercises VITE_DEVPC_MANAGED=1 with a ready workspace. Add focused cases asserting that the component renders nothing when managed mode is disabled and that the restart button is disabled for starting/error states.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx` around lines 9 - 29, Add
focused tests for ManagedDevPcStatus covering VITE_DEVPC_MANAGED disabled,
asserting the component renders no markup, and starting/error workspace states,
asserting the Restart Dev PC control is disabled. Reuse the existing bootstrap
setup and import pattern while keeping the current ready-state assertions
unchanged.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch: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

@logancsack
, '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

Move managed workspace controls to sidebar - #7

Merged
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar
Jul 25, 2026
Merged

Move managed workspace controls to sidebar#7
logancsack merged 1 commit into
mainfrom
fix/move-managed-status-sidebar

Conversation

@logancsack

@logancsacklogancsack commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Summary

  • remove the managed DevPC status/restart overlay from the global app root
  • render the workspace state and confirmed restart action as native sidebar utility controls
  • keep the controls visible in both thread sidebar variants and on settings routes

Verification

  • vp test run src/AppRoot.test.tsx src/components/ManagedDevPcStatus.test.tsx --project unit (2 passed)
  • vp run --filter @t3tools/web typecheck (passed)
  • focused vp lint --report-unused-disable-directives on all changed files (passed)
  • vp run --filter @t3tools/web build (passed)
  • git diff --check (passed)

Impact

  • UI-only managed-mode change; stock T3 surfaces are unchanged when VITE_DEVPC_MANAGED is disabled.
  • No schema, infrastructure, auth, or runtime protocol changes.
  • Production screenshot and authenticated smoke verification will be captured after the managed artifact is installed through the DevPC release pipeline.

Summary by CodeRabbit

  • New Features

    • Added managed development PC status to the settings and main sidebar footers.
    • Added workspace status indicators, including online/ready state and an accessible restart control.
    • Improved status layout and accessibility with live updates and descriptive labels.
  • Bug Fixes

    • Updated application host composition to ensure the correct browser and preview hosts are displayed.
  • Tests

    • Added coverage for workspace status rendering and restart controls.

@cursor

cursorBot commented Jul 25, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 25, 2026
@coderabbitai

coderabbitaiBot commented Jul 25, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

ManagedDevPcStatus now renders an inline accessible status control and appears in both sidebar footers. AppRoot no longer mounts it globally, and its child composition test now expects three children.

Changes

Managed Dev PC status

Layer / File(s)Summary
Status component UI and coverage
apps/web/src/components/ManagedDevPcStatus.tsx, apps/web/src/components/ManagedDevPcStatus.test.tsx
Updates the status layout, adds accessibility and workspace-status attributes, replaces the text restart control with an icon button, and adds managed ready-state coverage.
Sidebar footer integration
apps/web/src/components/settings/SettingsSidebarNav.tsx, apps/web/src/components/sidebar/SidebarChrome.tsx
Renders ManagedDevPcStatus in both sidebar footer layouts.
App root composition update
apps/web/src/AppRoot.tsx, apps/web/src/AppRoot.test.tsx
Removes the global status mount and updates the expected app-root children to RouterProvider, PreviewAutomationHosts, and ElectronBrowserHost.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers:juliusmarminge

Poem

A bunny spins the restart wheel,
While status lights say “ready” bright.
From root it hops to sidebars neat,
With ears up for accessible delight.
Three hosts remain beneath the tree.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description covers the change, verification, and impact, but it does not follow the template and is missing the UI screenshots section.Rename sections to match the template and add the UI Changes section with before/after screenshots, plus a completed checklist.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the main change: moving managed workspace controls from the app root into the sidebar.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/move-managed-status-sidebar

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.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:57bfad5215

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

<SidebarFooter className="p-2">
<SidebarProviderUpdatePill />
<SidebarUpdatePill />
<ManagedDevPcStatus />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve workspace state across sidebar route switches

When a managed workspace has moved away from its bootstrap ready state, navigating between a thread and Settings replaces SidebarChromeFooter with SettingsSidebarNav, unmounting this status instance and mounting a new one. Because ManagedDevPcStatus initializes from the one-time window.__DEVPC_MANAGED_BOOTSTRAP__ value and does not refresh until the first 10-second interval, each such transition temporarily reports the workspace as Online and re-enables Restart even if polling had already learned that it is restarting, stopped, or errored. Keep the polled state above these mutually exclusive sidebar variants, or refresh immediately on mount.

Useful? React with 👍 / 👎.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx`:
- Around line 9-29: Add focused tests for ManagedDevPcStatus covering
VITE_DEVPC_MANAGED disabled, asserting the component renders no markup, and
starting/error workspace states, asserting the Restart Dev PC control is
disabled. Reuse the existing bootstrap setup and import pattern while keeping
the current ready-state assertions unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6716b0b9-ad3f-4228-9c87-307eb56e7347

📥 Commits

Reviewing files that changed from the base of the PR and between c6dbd6f and 57bfad5.

📒 Files selected for processing (6)
  • apps/web/src/AppRoot.test.tsx
  • apps/web/src/AppRoot.tsx
  • apps/web/src/components/ManagedDevPcStatus.test.tsx
  • apps/web/src/components/ManagedDevPcStatus.tsx
  • apps/web/src/components/settings/SettingsSidebarNav.tsx
  • apps/web/src/components/sidebar/SidebarChrome.tsx
💤 Files with no reviewable changes (1)
  • apps/web/src/AppRoot.tsx

Comment on lines +9 to +29
describe("ManagedDevPcStatus", () => {
it("renders workspace state and restart as sidebar utility controls", async () => {
vi.stubEnv("VITE_DEVPC_MANAGED", "1");
vi.resetModules();
vi.stubGlobal("window", {
__DEVPC_MANAGED_BOOTSTRAP__: {
managed: true,
state: "ready",
ready: true,
previewUrlTemplate: "https://{port}.preview.example.test/",
},
});

const { ManagedDevPcStatus } = await import("./ManagedDevPcStatus");
const markup = renderToStaticMarkup(<ManagedDevPcStatus />);

expect(markup).toContain('data-devpc-workspace-status="ready"');
expect(markup).toContain("Dev PC · Online");
expect(markup).toContain('aria-label="Restart Dev PC"');
expect(markup).not.toContain("fixed");
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the managed-off and non-ready states.

This test only exercises VITE_DEVPC_MANAGED=1 with a ready workspace. Add focused cases asserting that the component renders nothing when managed mode is disabled and that the restart button is disabled for starting/error states.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@apps/web/src/components/ManagedDevPcStatus.test.tsx` around lines 9 - 29, Add
focused tests for ManagedDevPcStatus covering VITE_DEVPC_MANAGED disabled,
asserting the component renders no markup, and starting/error workspace states,
asserting the Restart Dev PC control is disabled. Reuse the existing bootstrap
setup and import pattern while keeping the current ready-state assertions
unchanged.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch: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

@logancsack