Skip to content

feat(space): refit Room around compact avatars and popovers - #109

Merged
entelecheia merged 7 commits into
mainfrom
feat/101-room-refit
Nov 10, 2026
Merged

entelecheia merged 7 commits into
mainfrom
feat/101-room-refit

Conversation

@entelecheia

@entelecheia entelecheia commented Nov 10, 2026 •

Copy link
Copy Markdown
Member

Room currently uses tall actor cards and leaves much of the viewport unused. This implements delivery 5 of #101: Room fills the available column below shell/Space controls, with only its scene scrolling. Compact avatars/two-line names replace expanded actor cards. Hover/focus opens a viewport-clamped Team-facts tooltip; click/Enter opens detail, Back restores focus, and Escape dismisses the tooltip.

Long descriptions scroll vertically without taking focus from the avatar. Wheel, arrows, PageUp/PageDown and Home/End make every fact reachable at enlarged text or short viewport heights. Switching actors starts the description at the beginning. While open, window and visualViewport resize events reposition it against the current visible viewport, including height-only changes. If the invoker leaves view the tooltip hides; closing, hiding the renderer or destroying it removes both listeners. CSS Room derives billboard spacing from measured extents, preserves Flat/Room relationship endpoints, and keeps the existing lazy WebGL overlay/fallback behavior. Team is the visible text alternative; Room retains a non-focusable screen-reader summary.

Pet inventory ids participate in Team/Flow/Board/Room/detail/popover memo signatures. Existing tokens provide consistent state colors, radius/spacing and working dots, disabled for stale data or reduced motion.

Probe alignment:

  • Packed Flat/Room fixtures now exercise floor, wall, board and shelf backgrounds and successful requests. Removed desk DOM/image expectations apply only to 3D now.
  • Actor-route mismatch findings go directly to report.findings, including checks performed after captures.
  • Added a 200%-text, 560px-high viewport case with a 200-character name/task, four maximum-length roles and long badges. It verifies full content, viewport/horizontal fit, wheel/keyboard reach to the end and retained invoker focus.

Validation at 3fff66f70377a2b02d952ced3ecc095337492ef3:

  • Focused Room/Team/Flow/Board/geometry/public/design/serving/historical compatibility suite: 106 passed. Main/N-1 types, boundary, JavaScript syntax and diff checks passed. Added height-only window/visualViewport resize regressions, no-op resize zero-write checks, offscreen hiding and listener cleanup on close/hide/destroy.
  • Limited local macOS Chromium revision smoke: 19 captures, 0 findings, covering one packed scenario, one Room/3D row/fallbacks and the new long-description case. Floor/wall/zone furniture were all used, unchanged writes were zero, and an 1880px description in a 542px scrollport reached the end by keyboard and wheel with focus still on the avatar. Screenshot inspected. Final scroll-reset behavior additionally has unit coverage.
  • The preceding head passed the reviewer's full local UI run (436 captures, zero findings) and negative control. This positioning-only amendment was checked with unit/type tests; browser checks were not repeated per review direction. Current-head hosted checks and independent OCR remain pending. Safari/VoiceOver remain unverified. Pre/post-run process checks found no orphan fixture servers. Documentation stamps remain unchanged.

Related to #101. Server cache and producer changes are outside this PR.

Copilot AI balanced review requested due to automatic review settings November 10, 2026 16:05
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-10T16:07:38.321250Z 17ff4f6 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 17ff4f6e60

ℹ️ 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".

Comment thread shell/space.js Resolved
Leaving a hovered avatar no longer closes its popover at once: a 150 ms
grace period lets the pointer cross the gap, and entering the popover or
the avatar cancels it. Leaving both closes the popover; a still-focused
avatar keeps restoring its own popover immediately.
Pinch-zoom panning scrolls the visual viewport without resizing it, so
the open popover also listens to visualViewport scroll to re-clamp or
close when its invoker leaves view; the listener is removed on close.
- Cap the popover height to the larger free side of its invoker and
  place it there, so a long popover never covers the avatar and blocks
  the click that opens its detail.
- Close the popover when its invoker is scrolled out of the scene
  scroller, not only out of the viewport.
…text

A snapshot route still fetching when its probe closed the browser context
rejected with 'Request context disposed' and aborted the whole run. That
teardown race is now ignored; other unhandled rejections still fail.
@entelecheia
entelecheia merged commit 0023db5 into main Nov 10, 2026
3 checks passed
@entelecheia
entelecheia deleted the feat/101-room-refit branch November 10, 2026 18:28
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.

2 participants