Skip to content

feat(companion): report first visible subtitle - #78

Merged
zts212653 merged 7 commits into
mainfrom
feat/f317-b-text-visible-receipt
Oct 12, 2026
Merged

zts212653 merged 7 commits into
mainfrom
feat/f317-b-text-visible-receipt

Conversation

@zts212653

Copy link
Copy Markdown
Owner

Summary

  • add the closed presentation.observe / first_text_visible bridge command and typed SDK method
  • report the first Host-correlatable assistant subtitle only after a post-mutation frame and current document, panel, viewport, CSS, and overflow-clipping checks
  • cover the official companion's live transcript, durable call transcript, and compact recent-message projections without exposing subtitle text, credentials, media, session IDs, generation, or owner identity
  • keep Host acknowledgement honest: invalid_request permanently rejects that reference for the current call; transient failures use bounded retry and settle as unknown instead of backfilling a later success

This PR is intentionally stacked on #76. Its base is feat/f317-b-meeting-status; it does not reuse #76's review or release approval.

Trust boundary

The renderer observation is untrusted. It proves only that a correlated DOM node passed the package's checks after an animation frame. It does not prove compositor paint, OS-window visibility, or that a person read the subtitle. The Host remains authoritative for the current call/session/generation, reference ownership, stale/foreign rejection, and idempotency.

Bridge version is raised to 1.4.0, so older Hosts reject the package rather than silently ignoring the new observation.

Prerelease candidates

  • @clowder-ai/plugin-contract@0.1.0-beta.27
    • integrity: sha512-9OUPBpJXcIcHXVaUCi90l8shJEVFhA1+bpLVwvwqmGPlJovLjVeAqql2D+vxG7Qpc2/CYlsOa0jdpvgu2gIiSQ==
    • shasum: ba185507b46311508c8db569f5bb8cb4a44c508b
  • @clowder-ai/plugin-sdk@0.1.0-beta.23
    • integrity: sha512-LhdJecUUvrBnzqEP82blpw24Fx9ahU277J6zntkoDj/ACDByo5WtRzlSDm7IX8LL1Hnbwr/kMzSNLrr6AxweLg==
    • shasum: d1bcf1e1ac07ab76fc6404ef720cf9388c47c0e0
  • @clowder-ai/companion@0.1.0-alpha.23
    • integrity: sha512-uJimgsfGi9p6DROxQYFlB3CYj3mwkmTqHJzaR/NkGslLqE5LgXjJ6FLkORr0DEPnJjNoALyk2DDkhQ+Cg0XkTw==
    • shasum: 5f5aaa9e51ef864db131b7af96450e4848c6652c

All three artifacts were packed with Node 24.18.0, npm 11.16.0, and zlib 1.3.1-e00f703. These versions are not yet published.

Verification

  • plugin contract: generated source current, typecheck/build, 391 tests
  • plugin SDK: typecheck/build, 315 tests
  • official companion: typecheck/build, 185 tests
  • real Chromium journey: 10 tests, including hidden-to-visible single-shot behavior
  • packed desktop-window consumer and fresh npm consumer
  • exact-toolchain package identity and companion catalog match
  • repository guards: 39 tests
  • independent non-author exact-HEAD review approved

Additional browser probes cover recycled DOM rows, permanent rejection memory, bounded transient failures, a 64-reference rejection cap, current-call reset, offscreen/overflow clipping, and empty subtitle deltas.

zts212653 and others added 6 commits October 9, 2026 07:55
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🐾]
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🐾]
Why: F317 needs a bounded renderer observation only after assistant text reaches a visible call surface so the Host can correlate first-visible timing without receiving subtitle text, media, credentials, or renderer-selected session authority.

[小太阳·砚砚/gpt-5.6-sol🐾]
Why: Resolve visible text identity from the current projection, bound Host rejection retries, and keep the public observation boundary consistent before publishing the prerelease.

[小太阳·砚砚/gpt-5.6-sol🐾]
Why: A Host-declared permanent rejection must survive transcript polling so one stale reference cannot create unbounded requests within the same call.

[小太阳·砚砚/gpt-5.6-sol🐾]
@zts212653
zts212653 requested a review from mindfn as a code owner October 12, 2026 14:28
@zts212653
zts212653 changed the base branch from feat/f317-b-meeting-status to main October 12, 2026 22:52
Why: attach the squash-merged #76 main history to #78 without changing any reviewed file. The new main tree equals the old feature base tree.

[小太阳·砚砚/gpt-6.1-sol🐾]
@zts212653
zts212653 merged commit 385b11e into main Oct 12, 2026
3 checks passed
zts212653 pushed a commit that referenced this pull request Oct 12, 2026
Why: attach the squash-merged #78 main history to #79 without changing any reviewed file. The new main tree equals the old feature base tree.

[小太阳·砚砚/gpt-6.1-sol🐾]
mindfn added a commit to mindfn/clowder-ai-plugins that referenced this pull request Oct 12, 2026
Why: Absorb accepted main zts212653#78 behavior and regenerate the combined contract without downgrading unpublished C1 versions or rewriting consumer pins and lock. Preserve both catalog histories and replace only the unpublished Companion alpha.26 pack identity. The exact aggregate candidate now requires its integration gate; old CI and installed receipts remain historical.
mindfn added a commit to mindfn/clowder-ai-plugins that referenced this pull request Oct 12, 2026
Why: Main zts212653#79 introduced only Companion presentation and candidate metadata after the verified zts212653#78 integration cut. Preserve C1 versions and pins, retain all catalog rows, update only the unpublished alpha.26 artifact, and validate current Companion unit/type/browser behavior without repeating the unchanged contract/SDK aggregate gate.
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