Skip to content

Bridge tracer: Lark audio and video playback in Channel bubbles #1023

Open

Description

@DoodleBears

Parent

#1020 — Authorized Bridge media in Channel history. Coordination: #48.

What to build

Human explicitly prepares and plays qualified Lark/Feishu audio and video inside the original bubble, with original download and truthful native metadata/format fallbacks.

Acceptance criteria

  • Qualify supported native audio and video items and their real resource associations. Introduce shared bubble playback controls through these working behaviors; do not claim support from MIME/extension guesses alone.
  • No autoplay. Show known duration and existing platform transcript with provenance; no transcript does not prevent supported playback. Use an actual qualified video poster only when available.
  • Retain original audio/video download. Browser format refusal, missing poster, unavailable provider bytes and transfer failure are distinct visible states. Do not add model transcription, generated posters or arbitrary transcoding.
  • Record native platform capability limitations from primary evidence; an unverified platform/media pair remains incomplete, not an unsupported declaration by assumption.
  • Deliver one production-shaped path through qualified Provider intake, canonical Source Event, realtime and historical Channel projection, authorized Host media access and operable bubble UI. Do not start a competing receiver or a second message store.
  • Preserve external author, source-name button/Modal, message boundary and known item ordering. Multiple and mixed media remain one native message; unknown ordering/metadata is honest. Provider URLs, tokens, AES keys and credentials remain private.
  • Human Channel access resolves trusted media authorization without choosing or borrowing a Bot identity. Recheck placement, source/media identity, current Channel access and independent valid source authorization during acquisition and serving.
  • Visible-image previews acquire on visibility; audio/video and file actions acquire on explicit action. Reuse existing Host Attachment management; keep the default 25 MiB bound, cancellation and bounded concurrency. Display loading, too-large, unsupported, failure and retry states honestly.
  • After acquisition, refresh and Host restart retain authorized history access. Ordinary Bridge reception stop allows acquired-media viewing but no new acquisition through that stopped path. Unbind/media revocation prevents acquisition and serving through that authorization; independent valid paths remain independent. Do not resurrect Content Purge content.
  • Human viewing creates no Bot Observation, model-context change, Inbox admission, wake or external send authority. Inbox-only creates no Channel history. Bot understanding and own-identity permissions remain unchanged.
  • Complete focused observable regression coverage and real platform/media E2E: receive a uniquely identifiable native message, inspect actual bytes/preview/play/download as applicable, refresh/restart, and demonstrate relevant stop/revoke/error recovery. Mock payloads, flags and HTTP success alone are not platform proof.
  • Provide GitHub-renderable matched before/after light/dark screenshots, relevant playback/recovery recording and usable Human verification steps. Follow DSH tokens/primitives and keyboard/accessibility conventions; keep private chat content and secrets out of evidence.
  • Update applicable canonical English/Chinese user guidance and bilingual release ledgers for delivered behavior; do not edit generated docs. Deliver one issue-linked PR with task claim/trace and review-risk classification, then pause for Human QA before expanding dependent slices. Merge/deployment require separate authorization.

Blocked by

Planning and authority

Project: V1.1 · IM Identities & Messaging (#10). Milestone: v1.2, explicitly selected by Human; Project title does not override milestone. Human approved ticket granularity and blocking edges before publication. This publication does not claim implementation or take over existing WeChat work.

Activity

  1. added this to the v1.2 milestone on Oct 6, 2026
  2. added
    ready-for-agentFully specified, ready for an AFK agent
    area:fullstackEnd-to-end Host and Client implementation
    feature:channelChannel chat, timeline, composer, and navigation
    feature:messagingMessaging module and external providers
    scope:tracerHuman-testable implementation slice
    on Oct 6, 2026
  3. removed this from the v1.2 milestone on Oct 11, 2026
  4. 8 remaining items

  5. DoodleBears commented on Oct 16, 2026

    @DoodleBears
    ContributorAuthor

    Guarded QA2 attempt: generic-file case verified, native video still pending

    Task: codex/local/01a13902-0d72-7872-ac0f-440e152155d5. Core #1950 remains at 5e9f2a9f067aea06f629bfa1c72bbabd178e338d; Provider #31 remains at f889a5808a342bb9b4abf586f115e57cb44b2b6b. No code changes in this attempt.

    On 2026-10-16 the browser recovered enough to verify the signed-in Human and designated QA2 group. A guarded isolated receiver used the exact candidate and official DeepSeek Flash: a real DM returned MODEL_OK, and the actual Lark group rendered exactly one GROUP_VIDEO_OK and one VIDEO_A_OK with matching accepted Outbox receipts. The Human uploaded the 6-second synthetic MP4 through the real Image & video menu and quoted it with a native Bot mention. Lark delivered it as a generic file, without native video metadata. Channel projection correctly remained file; a live CLI playback request refused with audio-codec-unsupported and wrote no output. Managed-file and attachment-binding counts stayed zero. This is a real generic-file negative case, not native-video playback acceptance. Switching to Lark's newer web interface was followed by browser timeout and explicit no-automation-host errors. The candidate identity was unbound and its exact owned Host stopped; QA2 is released. No other receiver was changed.

    Final full CI remains green. Native video/manual decoded playback, installed-product E2E, matched visual evidence and first-slice Human QA remain open. Audio and direct media are outside this tracer. #1023 remains open and both PRs remain draft.

  6. DoodleBears commented on Oct 16, 2026

    @DoodleBears
    ContributorAuthor

    Newer Lark Web checked: native video input still required

    Task codex/local/01a13902-0d72-7872-ac0f-440e152155d5; Core #1950 and Provider BotHarness/dsh-im#31 remain at their existing heads and draft state.

    The built-in browser recovered. The signed-in Human/organization and designated QA2 group were verified again. The newer Lark Web interface's Image & Video picker explicitly accepted .mp4; it uploaded the same valid 6-second H.264/AAC synthetic clip under the new marker LARK_1023_VIDEO_20261016_B.mp4.

    Both the visible result and a read-only native message-list query for the designated group confirmed a Human-authored msg_type=file, with no duration or native cover. This independently confirms that this particular Web upload did not produce the required native video message. It does not establish universal Lark Web limitations or qualify video playback.

    No QA2 receiver was started in this attempt. The previous candidate remains stopped and unbound. A native video sent through the Lark desktop/mobile client is now needed as the real parent fixture; after that, the agent can perform the genuine quoted Bot mention and remaining UI/byte/lifecycle checks through the built-in browser. No broader permission, competing receiver, product publication or merge has occurred.

    Native-video and installed-product E2E remain incomplete. Conditional merge authorization has been received for these two PRs after all their acceptance and CI gates pass; #1023 must remain open for the remaining audio/direct-media scope.

  7. DoodleBears commented on Oct 16, 2026

    @DoodleBears
    ContributorAuthor

    Genuine native video intake verified; Lark monthly API quota blocks remaining E2E

    Task codex/local/01a13902-0d72-7872-ac0f-440e152155d5. Core #1950 and Provider #31 retain their existing heads. No code change in this attempt.

    The Human supplied two genuine native videos through the Lark client. The latest parent was quoted with a real Bot mention through the built-in browser. The candidate retained the canonical Source Event with the exact native parent, 6000 ms duration, video/unknown primary and image/unknown native cover; IDs were checked against the platform parent. Official DeepSeek Flash DM succeeded. However, the native identity endpoint returned HTTP 429 / 99991403, "This month's API call quota has been exceeded" (token authentication still returned 200/code 0). The result Outbox failed provider-unavailable with zero send attempts and no receipt. Managed-file and Attachment-binding counts stayed zero. No playback, download or installed-product media success is claimed. The exact task-owned receiver was unbound and stopped; QA2 is released. The remaining native gates require restoration of the Lark API quota.

    This is Lark platform quota exhaustion, not model-provider quota or a browser-connection failure. Existing native video parents are retained for a fresh uniquely marked quote after quota recovery. Manual decoded playback, original bytes, lifecycle, installed-product E2E and visual/Human QA remain pending. Both PRs remain draft and #1023 stays open. Conditional merge authorization applies after acceptance and CI gates pass.

  8. modified the milestones: v1.3, v2.0 on Oct 24, 2026
  9. DoodleBears commented on Nov 3, 2026

    @DoodleBears
    ContributorAuthor

    Video slice delivered by #1950 with BotHarness/dsh-im#31 and verified natively on 2026-11-03. Audio remains open.

  10. DoodleBears commented on Nov 3, 2026

    @DoodleBears
    ContributorAuthor

    Video delivered by #1950 with BotHarness/dsh-im#31, and audio by #3354 with BotHarness/dsh-im#35. Both verified on Lark QA1 on 2026-11-03.

  11. moved this from Todo to Done in Roadmapon Nov 3, 2026
  12. DoodleBears commented on Nov 3, 2026

    @DoodleBears
    ContributorAuthor

    Reopening, since closing was premature. #1950 and #3354 cover only audio and video quoted as the parent of a Bot-mentioned request. Still missing: directly sent native audio and video messages (not quoted), playback on mobile (which shows the original file only), and the remaining acceptance items such as stop and revoke recovery evidence.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent:activeOne or more coding-agent tasks currently claim this issue; see claim comments for task IDsarea:fullstackEnd-to-end Host and Client implementationfeature:channelChannel chat, timeline, composer, and navigationfeature:messagingMessaging module and external providersready-for-agentFully specified, ready for an AFK agentscope:tracerHuman-testable implementation slice

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions