Skip to content

feat(companion): present meeting capture truth - #76

Open
zts212653 wants to merge 3 commits into
mainfrom
feat/f317-b-meeting-status
Open

zts212653 wants to merge 3 commits into
mainfrom
feat/f317-b-meeting-status

Conversation

@zts212653

@zts212653 zts212653 commented Oct 9, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • add a required, bounded CompanionMeetingState projection to Host-owned companion state; it carries lifecycle/share/pause truth plus an optional verified source label, but no meeting IDs, capture thread, ASR/PCM/chunk diagnostics, participants, selectors, or control commands
  • render that truth as one read-only line in the call bar, name card, chat, subtitles, and settings; idle hides, uncertainty stays visible, and stopped is a one-shot 10-second acknowledgement or ends earlier on Host idle
  • publish the exact-version chain as contract 0.1.0-beta.26, SDK 0.1.0-beta.22, and companion 0.1.0-alpha.22, with catalog identity bound to the exact local pack

Product / authority boundary

This is the F317 B consumer of the landed meeting-control state. sharing means the capture is connected to this companion call; it is never treated as proof that speech was heard or transcribed. The renderer receives no new command and cannot select an owner, call, meeting, source, or app.

Visible copy follows the frozen one-shot design decision:

  • 听会中 · {source} for running + sharing
  • 会议记录中 · 未接入通话 · {source} for running without sharing
  • explicit paused / stopped / unconfirmed / needs-source states

The status phrase never truncates; only the source label may ellipsize. The collapsed subtitle card remains 420×210.

Verification

  • RED observed before implementation: the prior schema rejected the new required meeting state and the renderer tests failed on the absent meeting module
  • exact Node 24.18.0 contract suite: 389/389 pass; generate:check, typecheck, and build pass
  • SDK typecheck + suite: 313/313 pass, including state pass-through with no meeting command
  • companion typecheck + suite: 170/170 pass
  • companion Playwright layout: 9/9 pass, including the longest state phrase, source-only ellipsis, fixed 420×210 subtitle geometry, and unclipped controls
  • fresh packed npm consumer: pass (167s)
  • packed desktop-window consumer: pass
  • author dogfood at http://127.0.0.1:3891/index.html?skin=xianxian-codex: connected from the real preview fixture into the call bar and subtitle panel; DOM metrics and screenshots confirmed the longest phrase remains whole while the long source truncates
  • exact companion pack: sha512-7le73ak9F8fdFWzPG/11oN3HVfTaJT1dd193GyX39LRT0SjnJi3wvLj0SMFKjsGc6MNQbz5kQHCTB/pG2JUPdw== / c2ad9ef5d763dec7dbe87e9e484e1da0708555f1

Review delta

The first formal local review approved 95939d6 with no P1/P2 and one optional layout P3. That source-room issue was fixed at 51c9eb5, which also added guards that keep meeting state call-scoped outside an active call and reject Unicode line/bidi controls in sourceLabel. The second review found that the full-width row let CSS auto-placement move chat/settings controls; 1e4ffc2 pins the reusable inline action group to row 1 / column 4. Browser geometry now guards both the 7px status spacing and same-row controls while common source labels remain fully visible. Missing or unknown meeting states remain contract-invalid instead of gaining a renderer fallback.

Local macOS full catalog:check also exercised this package but stops earlier on the existing GenOffice catalog tarball digest, whose packed bytes are platform-specific. The new companion catalog entry was separately schema-validated and byte-compared to the exact Node 24.18.0/npm 11.16.0 pack above; CI remains the cross-platform catalog gate.

Risk

  • behavior: medium — adds stateful stopped acknowledgement timing and five synchronized read-only surfaces
  • data/security: low — presentation-only, no persistence or secrets; closed schema rejects raw coordinates and diagnostics
  • contract: high — meeting is required for this exact prerelease chain
  • irreversible: low — one commit and prerelease-only versions; no production data mutation

[小太阳·砚砚/gpt-5.6-sol🐾]

Why: F317 meeting capture must reach the desktop companion as a bounded Host-owned status without exposing raw capture diagnostics or giving the renderer meeting control authority.

[小太阳·砚砚/gpt-5.6-sol🐾]
@zts212653
zts212653 requested a review from mindfn as a code owner October 9, 2026 14:56
Why: Chat and settings must keep a common verified meeting source readable beside the fixed status phrase, while the public label boundary should reject line and bidi control spoofing.

[小太阳·砚砚/gpt-5.6-sol🐾]
Why: A full-width meeting status row must not let CSS auto-placement detach chat and settings controls from their connection header.

[小太阳·砚砚/gpt-5.6-sol🐾]
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