feat(glass-office): Connectors as the first parity-proven Basement room - #109
Merged
Merged
Conversation
Register the hidden-by-default connectors room-shortcut Office block (id "connectors", roomId "connectors") and add the minimum typed resolved-room seam so the two Basement rooms sharing the connectors route stay honest: selecting Connectors lands on connector management (Registry) and selecting Setup lands on the existing Setup surface. - The resolved stable room id flows App -> AppContent -> ConnectorsPage as a typed prop; a render-time adjustment keyed to an actual room-id change forces the landing surface, so internal tab clicks never move the lamp and unrelated rerenders never reset the user's tab. No route-name or display-label guesses. - PinRoomToOffice rides the existing tab-bar row and renders only under the Connectors room identity: the Setup room gets its own block in a later slice, and one door must never ambiguously open both rooms. The four honest disabled/unsupported/error/loading panels expose no pin. - New ConnectorsPage seam suite proves both landings, tab retention across unrelated rerenders, reland only on a real room change, the room-gated pin with zero connector mutations, and all four honest states. A shared-route useAppController test locks distinct Setup/Connectors identities on one route. - Pin suites gain the connectors registry entry, pin, and freed-canvas fit/repeat proofs; the no-block fail-closed fixture moves to the still-blockless models room. - New p5-connectors-slice e2e proves lamps exist only while the Connectors page is enabled, exact one-lamp identity for both rooms, landing surfaces through lamp clicks and the Office shortcut, byte-for-byte config immutability on full-canvas refusal, pin success/repeat, live mounted-Office hide/show sync, reload persistence, ops-toggle disabled/restored door truth without a clearing click, C and S room marks at 390px, console cleanliness, and no horizontal overflow. The quick-setup e2e now enters Setup deliberately; the full import/convert/publish/assign/auth lifecycle is unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
🚧 Files skipped from review as they are similar to previous changes (3)
📝 WalkthroughWalkthroughChangesConnectors room and Office shortcut
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant AppShell
participant AppContent
participant ConnectorsPage
participant OfficeCanvas
AppShell->>AppContent: provide resolved activeRoomId
AppContent->>ConnectorsPage: pass activeRoomId
ConnectorsPage->>ConnectorsPage: select Setup or Registry
ConnectorsPage->>OfficeCanvas: request Connectors shortcut pin
OfficeCanvas-->>ConnectorsPage: return pin status
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
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 `@docs/plans/2026-07-23-glass-office-claude-resume.md`:
- Around line 5-7: Fix the Markdown lint violation in the PR list by preventing
“#108.” from starting as a hash-prefixed token: keep PR `#108` on the preceding
line or add appropriate spacing while preserving the list content.
🪄 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: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 4aa641cf-ac0b-4b1e-a47a-ec44a3f9bb5f
📒 Files selected for processing (12)
apps/mission-control/e2e/connectors.spec.tsapps/mission-control/e2e/p5-connectors-slice.spec.tsapps/mission-control/src/App.tsxapps/mission-control/src/app/AppContent.tsxapps/mission-control/src/app/useAppController.test.tsxapps/mission-control/src/features/connectors/ConnectorsPage.test.tsxapps/mission-control/src/features/connectors/ConnectorsPage.tsxapps/mission-control/src/features/execassOffice/PinRoomToOffice.test.tsxapps/mission-control/src/features/execassOffice/officeBlocks.tsapps/mission-control/src/features/execassOffice/pinToOffice.test.tsapps/mission-control/src/styles.cssdocs/plans/2026-07-23-glass-office-claude-resume.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The first bounded P5 slice: the Connectors room joins the shared room path, together with the minimum stable-room identity seam the resume doc calls out — two Basement rooms (
connectors,setup) share theconnectorsroute, and a lit Connectors lamp must never actually show Setup.resolvedActiveRoomId(already computed inApp.tsxfor the lamp) now also flows intoAppContentand down toConnectorsPageas a typedactiveRoomIdprop. A render-time adjustment keyed to an actual room-id change (the same adjust-during-render pattern the page already uses for pagination clamps) forces the landing surface:connectors→ Registry,setup→ Setup, from an explicit landing map with no route-name or display-label guesses. Internal tab clicks never move the lamp (proven), and unrelated rerenders never reset the user's tab (proven). Shared-route lamp ownership itself is the existingselectedRoomId/roomForTabhint mechanism — consumed, not reimplemented.officeBlocks.tsregisters the hidden-by-defaultconnectorsshortcut;PinRoomToOffice roomId="connectors"rides the existing tab-bar row (zero added height) and renders only under the Connectors room identity — the Setup room gets its own block in a later slice, and one door must never ambiguously open both rooms. The four honest disabled/unsupported/error/loading panels expose no pin.ConnectorsPage.test.tsxseam suite (the page had no component test): both landings, tab retention across unrelated rerenders, reland only on a real room change (including leave-and-return), the room-gated pin with zero connector mutations, and all four honest states with exact copy. A newuseAppControllertest locks distinct Setup/Connectors identities on the shared route, including the first-registry-owner resolution on tab-only return.modelsroom.e2e/p5-connectors-slice.spec.ts: both lamps exist only while the Connectors page is enabled; exact one-lamp identity for each room; landings proven through lamp clicks and through the Office shortcut return; internal-tab-click lamp stability; no pin under the Setup identity; byte-for-bytelocalStorageimmutability on full-canvas refusal with noconnectorsplacement; pin success then honest already-pinned repeat; live mounted-Office hide/show sync without a route remount; reload persistence; ops-toggle disabled door refusal in-bounds and cleared on restore without a click; "C" and "S" room marks at 390px; console-error and horizontal-overflow assertions.connectors.spec.ts: the quick-setup test now enters the Setup surface deliberately (the Connectors room honestly lands on management); the full import → convert → publish → assign → auth → health/interaction lifecycle runs unchanged and green — nothing weakened.Also caught by
git diff --checkand repaired before commit: the editor introduced whole-file CRLF churn inApp.tsx/AppContent.tsx(mixed-EOL files); both were restored byte-exactly from HEAD and the four seam lines re-applied surgically — their diffs are 1 and 3 added lines.Boundaries held: no connector state copied, no second mutation path, Extensions remains a read-only mirror, contracts untouched, frontend-only scope.
Validation
From
apps/mission-control/(Playwright viaPLAYWRIGHT_BROWSERS_PATH=Z:\carsinos-codex-work\playwright-browsers):npm run typecheck— PASSnpm run lint— PASSnpm run test:unit -- --run— 449/449 PASS (new ConnectorsPage seam 5/5, shared-route identity test, extended pin suites; Staff/History regression anchors included)npm run build— PASS (pre-existing chunk-size warning only)npx playwright test e2e/connectors.spec.ts e2e/p5-connectors-slice.spec.ts e2e/p4-history-slice.spec.ts— PASS (lifecycle unweakened; History anchor re-proven on this head)npm run test:e2e:core— 37/37 PASSpython3 scripts/validate_execass_contract.py— PASS; contracts untouchedgit diff --check— PASSruntime/qa/p5-connectors-slice/: Registry landing with pin, full-canvas refusal copy, Office shortcut naming The Basement, disabled door refusal beside live Trenches doors, restored door with no stale label, 390px with active "C" and visible "S" marks and no horizontal overflow🤖 Generated with Claude Code
Summary by CodeRabbit