Skip to content

feat(glass-office): Connectors as the first parity-proven Basement room - #109

Merged
EmergentKnowledgeGroup merged 3 commits into
mainfrom
codex/glass-office-p5-connectors
Jul 24, 2026
Merged

feat(glass-office): Connectors as the first parity-proven Basement room#109
EmergentKnowledgeGroup merged 3 commits into
mainfrom
codex/glass-office-p5-connectors

Conversation

@EmergentKnowledgeGroup

@EmergentKnowledgeGroup EmergentKnowledgeGroup commented Jul 24, 2026

Copy link
Copy Markdown
Owner

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 the connectors route, and a lit Connectors lamp must never actually show Setup.

  • The typed room seam. resolvedActiveRoomId (already computed in App.tsx for the lamp) now also flows into AppContent and down to ConnectorsPage as a typed activeRoomId prop. 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 existing selectedRoomId/roomForTab hint mechanism — consumed, not reimplemented.
  • The pin is room-gated. officeBlocks.ts registers the hidden-by-default connectors shortcut; 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.
  • New ConnectorsPage.test.tsx seam 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 new useAppController test locks distinct Setup/Connectors identities on the shared route, including the first-registry-owner resolution on tab-only return.
  • Pin suites gain the connectors registry/pin/freed-canvas-fit/idempotent-repeat proofs; the fail-closed no-block fixture moves to the still-blockless models room.
  • New 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-byte localStorage immutability on full-canvas refusal with no connectors placement; 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 --check and repaired before commit: the editor introduced whole-file CRLF churn in App.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 via PLAYWRIGHT_BROWSERS_PATH=Z:\carsinos-codex-work\playwright-browsers):

  • npm run typecheck — PASS
  • npm run lint — PASS
  • npm 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 PASS
  • python3 scripts/validate_execass_contract.py — PASS; contracts untouched
  • git diff --check — PASS
  • Desktop/390 screenshots visually inspected under runtime/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

  • New Features
    • Updated Connectors navigation to show distinct landing views for Registry vs Setup.
    • Added a “Pin Connectors to Office” shortcut and made it persist across reloads.
    • Improved narrow-screen behavior by allowing the Connectors tab bar to wrap cleanly.
  • Bug Fixes
    • Preserved the selected Connectors tab appropriately across rerenders and navigation.
    • Correctly restricted pinning when unavailable, and kept the refusal/success messaging in sync with Office canvas space.
  • Documentation
    • Refreshed the Glass Office Connectors implementation/verification plan.

EmergentKnowledgeGroup and others added 2 commits July 24, 2026 05:06
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>
@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: e0c71e7b-85b8-4f1d-af56-36ae0bf2eb07

📥 Commits

Reviewing files that changed from the base of the PR and between 0b22cc4 and 406a9dd.

📒 Files selected for processing (4)
  • apps/mission-control/e2e/p5-connectors-slice.spec.ts
  • apps/mission-control/src/features/connectors/connectors.css
  • apps/mission-control/src/features/execassOffice/pinToOffice.test.ts
  • docs/plans/2026-07-23-glass-office-claude-resume.md
🚧 Files skipped from review as they are similar to previous changes (3)
  • apps/mission-control/src/features/execassOffice/pinToOffice.test.ts
  • apps/mission-control/e2e/p5-connectors-slice.spec.ts
  • docs/plans/2026-07-23-glass-office-claude-resume.md

📝 Walkthrough

Walkthrough

Changes

Connectors room and Office shortcut

Layer / File(s) Summary
Room identity and landing behavior
apps/mission-control/src/App.tsx, apps/mission-control/src/app/AppContent.tsx, apps/mission-control/src/features/connectors/ConnectorsPage.tsx, apps/mission-control/src/app/useAppController.test.tsx, apps/mission-control/src/features/connectors/ConnectorsPage.test.tsx
Resolved room identity reaches ConnectorsPage, which selects Registry or Setup and preserves internal tab selections across rerenders.
Office shortcut and pinning
apps/mission-control/src/features/execassOffice/officeBlocks.ts, apps/mission-control/src/features/execassOffice/PinRoomToOffice.test.tsx, apps/mission-control/src/features/execassOffice/pinToOffice.test.ts
Connectors is registered as a hidden room shortcut, with coverage for availability, pinning, and duplicate-placement prevention.
End-to-end lifecycle coverage
apps/mission-control/e2e/p5-connectors-slice.spec.ts, apps/mission-control/e2e/connectors.spec.ts
Playwright coverage verifies configuration gating, routing, canvas capacity handling, persistence, disabled-state recovery, responsive layout, diagnostics, and explicit Setup navigation.
Responsive layout and handoff updates
apps/mission-control/src/styles.css, apps/mission-control/src/features/connectors/connectors.css, docs/plans/2026-07-23-glass-office-claude-resume.md
The Connectors tab bar gains flex and wrapping constraints, and the implementation handoff documents the Connectors slice and QA requirements.

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
Loading

Possibly related PRs

Suggested reviewers: professahx

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring 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 (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately reflects the main change: adding Connectors as the first Basement room slice.
Description check ✅ Passed The description covers the summary, validation, and visual evidence; the missing template sections are non-critical.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check 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 codex/glass-office-p5-connectors

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

@coderabbitai coderabbitai Bot 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 `@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

📥 Commits

Reviewing files that changed from the base of the PR and between ce7f610 and 0b22cc4.

📒 Files selected for processing (12)
  • apps/mission-control/e2e/connectors.spec.ts
  • apps/mission-control/e2e/p5-connectors-slice.spec.ts
  • apps/mission-control/src/App.tsx
  • apps/mission-control/src/app/AppContent.tsx
  • apps/mission-control/src/app/useAppController.test.tsx
  • apps/mission-control/src/features/connectors/ConnectorsPage.test.tsx
  • apps/mission-control/src/features/connectors/ConnectorsPage.tsx
  • apps/mission-control/src/features/execassOffice/PinRoomToOffice.test.tsx
  • apps/mission-control/src/features/execassOffice/officeBlocks.ts
  • apps/mission-control/src/features/execassOffice/pinToOffice.test.ts
  • apps/mission-control/src/styles.css
  • docs/plans/2026-07-23-glass-office-claude-resume.md

Comment thread docs/plans/2026-07-23-glass-office-claude-resume.md Outdated
@EmergentKnowledgeGroup
EmergentKnowledgeGroup merged commit a6fc73b into main Jul 24, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant