Skip to content

[task] Screenshot Card and attach an image #41

Description

@lukemaj

State: shaping decision needed. Await human approval or rejection of the complete minimal v1 image-attachment contract in issue comment 5466895269. Even if approved, implementation stays unowned until #116 is dispositioned, #137 then #139 are rebuilt on the current train, and corrected-train #80 acceptance establishes the exact Messenger baseline, because the claim overlaps Messenger/Home surfaces.

Parent

[spec] Messenger UI: human chat, not a log.

Blocked by

The former several-bubbles prerequisite is delivered; it is historical, not the current blocker.

Outcome

A Card is a transcript item that is not a text bubble. v1 Card here: a screenshot in the thread (Computer frame when it helps), and an image the user attaches from the composer +. Images are first-class, not markdown image syntax. Attach Computer frames and files the Bot made when they help, not as a default dump.

Demo

  1. Attach an image from the composer. See it in the thread as a Card or as images on a bubble.
  2. When a screenshot helps, see it in the thread. Not a dump of every Computer frame.
  3. Refresh: the Card is still there.

Existing constraints

Talk HTTP persists Card kind. The vanishing permission panel is not this ticket. File chips (csv/pdf), mermaid, and widgets stay parked. Do not copy Grok Bot artwork. Do not publish Grok screenshots to the repo.

Acceptance criteria

These criteria apply only if the human approves the complete contract in comment 5466895269.

  • One staged, removable composer image can send alone or with text and reaches only a Harness that advertises ACP image prompt capability.
  • Unsupported Harnesses fail before Transcript mutation and preserve the staged image.
  • A deliberate provider-neutral openbot-transcript attach_image action can import one allowed Bot-directory/shared-drop image as a Bot-owned Transcript image Card.
  • Every persisted image is decoded and normalized to metadata-free PNG, at most 8 MiB and 4096 by 4096 pixels, behind an authenticated same-origin media route.
  • Attachment publication and message relation are atomic; startup reconciles temporary, orphaned, and missing files; deletion removes message-owned media.
  • The thumbnail opens an accessible focus-trapped contain-scaled dialog with Close, Escape, and exact focus restoration.
  • Images are first-class Transcript objects, never markdown, Workspace paths, base64 JSON, arbitrary ACP output, or automatic frame dumps.

Non-goals

  • Multiple images, generic file chips, video, SVG, animation, galleries, annotation, pan, or a carousel in v1.
  • Inferring attachments from arbitrary ACP/tool output or attaching every Computer frame.
  • Transcript-only decoration that was not delivered to the selected Harness.
  • Publishing private paths, original filenames, EXIF, raw provider payloads, or user secrets.
  • Starting a worker before the human decision and corrected train order settle.

Required proof

  • Public Home/API regressions for validation, normalization, atomic publication, authenticated retrieval, cleanup, and crash reconciliation.
  • ACP capability and explicit MCP-action coverage with unsupported-provider failure preserving staged UI state.
  • Focused rendered PWA coverage for staging, removal, send, Card rendering, full-size dialog, accessibility, and refresh persistence.
  • Full deterministic suite, typechecks, production build, version gates, and exact-build real attachment/screenshot persistence acceptance.
  • Separate implementation, deterministic, live, commit, push, PR, train, main merge, release, deployment, and installation states.

Human decision

Approve or reject the complete seven-part contract in #41 (comment). A change to Harness delivery, the explicit MCP event, PNG limits, or message-owned lifetime changes the implementation and proof shape. The safe default is to keep the issue unowned.

Activity

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

    enhancementNew feature or request

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions