Skip to content

fix(gateway): persist media metadata in agent.request transcripts#86936

Merged
steipete merged 2 commits into
openclaw:mainfrom
peterdsp:fix/agent-request-transcript-media-persistence
Jul 7, 2026
Merged

fix(gateway): persist media metadata in agent.request transcripts#86936
steipete merged 2 commits into
openclaw:mainfrom
peterdsp:fix/agent-request-transcript-media-persistence

Conversation

@peterdsp

@peterdsp peterdsp commented May 26, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

Images sent by the iOS Share Extension enter the gateway through the node agent.request event. The gateway parses the attachment and the active agent can inspect it, but the durable user turn stored only the caption text. After history reload, the transcript no longer knew which media belonged to that turn.

Closes #60339.

What Is Stored Where

  • Media bytes are stored once in the inbound media store. Large/offloaded images already have a media://inbound/<id> record and file path; inline base64 images are now saved there before dispatch.
  • The per-session JSONL transcript stores the user message plus MediaPath, MediaPaths, MediaType, and MediaTypes. Those fields point at the inbound media files; the transcript does not duplicate image bytes.
  • Session registry state identifies the active session and transcript file. It does not own attachment bytes or replace the transcript message.

Why The Existing Path Was Broken

parseMessageWithAttachments correctly produced inline model images, offloaded media references, and their original order. agentCommandFromIngress received those model inputs, but the canonical user-turn recorder received text only. The model could therefore process the image during the live turn while session history persisted no media metadata.

The earlier implementation in this PR called emitSessionTranscriptUpdate after guessing a transcript path. That helper broadcasts a display update; it is not the canonical durable append path. It could also create a second projection rather than enriching the single user turn, and it did not cover ACP-backed sessions.

Why This Change Was Made

  • Reuse one attachment-persistence helper for chat.send and agent.request, preserving mixed inline/offloaded order.
  • Pass structured transcriptMedia into the agent command boundary while keeping the original user caption separate from model-only media:// markers.
  • Let the canonical user-turn transcript machinery write exactly one durable message through the session manager.
  • Thread the same structured input through embedded, CLI, and ACP execution paths, including media-only turns whose assistant reply is empty.

User Impact

Shared images remain attached to the correct user turn after transcript reload. Text-only requests are unchanged, and image bytes are not duplicated into session JSONL.

Evidence

  • Focused regression coverage for ordered inline/offloaded persistence at the gateway boundary.
  • Embedded and ACP transcript coverage, including a media-only ACP turn with an empty assistant reply.
  • git diff --check
  • Fresh Codex autoreview after fixups: no actionable findings.
  • Sanitized AWS run run_d555f247ea33 on behavior head ea145844428c5763f29cdd6a5d4402d1d328c578: 204 gateway tests and 133 agent tests passed across the selected Vitest shards.
  • Full exact-head CI passed on rewritten head 8ed7873fe74d21e1534ff5361d2fb9ac709b2150 in run 28843912996; the only post-test follow-up was a shadowed callback-parameter rename.

Copilot AI review requested due to automatic review settings May 26, 2026 14:32
@openclaw-barnacle openclaw-barnacle Bot added gateway Gateway runtime size: M triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 26, 2026
@clawsweeper

clawsweeper Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 7, 2026, 1:50 AM ET / 05:50 UTC.

Summary
The PR persists ordered inline/offloaded media metadata from node agent.request into durable user-turn transcripts by sharing inbound-media persistence and threading transcriptMedia through embedded, CLI, and ACP paths.

PR surface: Source +37, Tests +197. Total +234 across 12 files.

Reproducibility: yes. at source level. Current main parses agent.request media and drops durable transcript metadata, while the PR threads it into the canonical user-turn transcript writer.

Review metrics: 1 noteworthy metric.

  • Durable transcript writers changed: 3 paths threaded. Node ingress, embedded recorder, and ACP persistence now handle media-bearing user turns, so proof should cover session-state behavior rather than only parser output.

Stored data model
Persistent data-model change detected: serialized state: src/agents/command/attempt-execution.cli.test.ts, serialized state: src/agents/command/attempt-execution.ts, serialized state: src/sessions/user-turn-transcript.ts, vector/embedding metadata: src/gateway/server-node-events.test.ts. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #60339
Summary: This PR is the active fix candidate for the canonical node/iOS offloadedRefs transcript media persistence bug.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦪 silver shellfish
Patch quality: 🦞 diamond lobster
Result: blocked until real behavior proof from a real setup is added.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P1] Add redacted terminal output, logs, or a short recording showing an agent.request media turn persists and reloads with MediaPath/MediaPaths; redact private endpoints, tokens, phone numbers, and other private data.

Proof guidance:

  • [P1] Needs real behavior proof before merge: Only tests, CI, and an AWS test run are supplied; add redacted live node/iOS share or node-event transcript reload output, then update the PR body or ask a maintainer for @clawsweeper re-review.

Risk before merge

  • [P1] Real behavior proof is still not visible; the supplied evidence is tests, CI, and an AWS test run rather than a live node/iOS share or node-event transcript reload showing persisted media metadata.
  • [P1] The diff changes durable user-turn transcript state across node ingress, embedded recorder, and ACP persistence, so a bad merge could omit, duplicate, or mis-associate media-bearing session history.

Maintainer options:

  1. Require transcript proof before merge (recommended)
    Merge only after a real node/iOS or node-event run shows durable media metadata survives transcript reload.
  2. Accept focused tests as enough
    A maintainer may intentionally accept the session-state risk because the source path and regression coverage are strong.

Next step before merge

  • [P1] No automated code repair is needed; the remaining blocker is real behavior proof or an explicit maintainer proof override before merge.

Maintainer decision needed

  • Question: Should this PR wait for real node/iOS transcript reload proof before merge, or should maintainers accept the focused tests and AWS run as sufficient proof?
  • Rationale: The code path now looks correct, but the external-PR real-behavior proof gate is not satisfied by tests and CI alone; only a maintainer can intentionally override that gate.
  • Likely owner: steipete — steipete is assigned on the PR and authored the current head rewrite, making him the best available owner for the proof decision.
  • Options:
    • Require transcript proof first (recommended): Wait for redacted terminal output, logs, or a short recording showing an agent.request media turn persists and reloads with MediaPath/MediaPaths.
    • Accept test-only proof: Maintainers can merge based on focused tests and exact-head CI, but the user path remains unproven in a real setup.

Security
Cleared: No concrete security or supply-chain concern found; the diff is TypeScript runtime/test code, uses the managed inbound media store, and does not change dependencies, workflows, secrets, or package resolution.

Review details

Best possible solution:

Land after redacted node/iOS share or node-event proof shows the persisted and reloaded transcript keeps ordered MediaPath/MediaPaths, with the current canonical transcript-writer approach preserved.

Do we have a high-confidence way to reproduce the issue?

Yes at source level. Current main parses agent.request media and drops durable transcript metadata, while the PR threads it into the canonical user-turn transcript writer.

Is this the best way to solve the issue?

Yes, this is the best fix shape I found: it reuses shared inbound-media persistence and SessionManager-backed transcript helpers instead of adding a raw JSONL write or display-only update.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 094c0d421faf.

Label changes

Label justifications:

  • P1: The PR fixes a broken gateway/agent workflow where accepted media can be processed live but lost from durable session history.
  • merge-risk: 🚨 session-state: The diff changes durable user-turn transcript persistence across node, embedded, and ACP paths, so a bad merge could omit or mis-associate media-bearing session state.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🦞 diamond lobster.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: Only tests, CI, and an AWS test run are supplied; add redacted live node/iOS share or node-event transcript reload output, then update the PR body or ask a maintainer for @clawsweeper re-review.
Evidence reviewed

PR surface:

Source +37, Tests +197. Total +234 across 12 files.

View PR surface stats
Area Files Added Removed Net
Source 8 124 87 +37
Tests 4 197 0 +197
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 12 321 87 +234

What I checked:

  • Repository policy applied: Read the root AGENTS.md and scoped gateway/server-methods/agents AGENTS.md; the server-methods note requires transcript messages to go through SessionManager-backed helpers rather than raw JSONL writes, which shaped this review. (AGENTS.md:1, 094c0d421faf)
  • Current main gap: Current main parses agent.request attachments into message, images, and imageOrder, but dispatches without offloadedRefs or durable transcript media metadata. (src/gateway/server-node-events.ts:480, 094c0d421faf)
  • PR node ingress fix: The PR keeps original caption text, captures offloadedRefs, persists ordered inbound media, and passes transcriptMessage plus transcriptMedia into dispatchNodeAgentCommand. (src/gateway/server-node-events.ts:604, 8ed7873fe74d)
  • Shared media persistence helper: persistInboundImagesForTranscript saves inline images, carries existing offloaded refs, preserves image order, and appends non-image offloads for the sibling chat path. (src/gateway/chat-attachments.ts:63, 8ed7873fe74d)
  • Canonical transcript writer path: The exported user-turn builder converts structured media into MediaPath, MediaPaths, MediaType, and MediaTypes, so the PR uses the existing durable transcript format instead of a display-only update. (src/sessions/user-turn-transcript.ts:261, 8ed7873fe74d)
  • ACP durable write path: ACP transcript persistence now accepts userInput, builds a persisted user-turn message, and writes through persistSessionTranscriptTurn, covering media-only empty-reply turns. (src/agents/command/attempt-execution.ts:407, 8ed7873fe74d)

Likely related people:

  • steipete: Assigned on the live PR and authored the current head commits that move the fix onto the canonical recorder and ACP paths. (role: likely follow-up owner; confidence: high; commits: 78c1ad4dcfde, 8ed7873fe74d; files: src/gateway/server-node-events.ts, src/gateway/chat-attachments.ts, src/agents/agent-command.ts)
  • vincentkoc: Current main blame and recent history touch the affected node event, gateway media, and agent command files around the relevant ingress and transcript surfaces. (role: recent area contributor; confidence: medium; commits: 0fd69dc3d2b8, e085fa1a3ffd; files: src/gateway/server-node-events.ts, src/gateway/chat-attachments.ts, src/agents/agent-command.ts)
  • Syysean: Opened the canonical issue and authored the merged claim-check/offloaded-ref work whose media://inbound contract made this transcript persistence gap visible. (role: feature-history contributor and reporter; confidence: medium; commits: c6f2db150687; files: src/gateway/chat-attachments.ts, src/gateway/server-node-events.ts, src/gateway/server-methods/chat.ts)
  • fuller-stack-dev: Authored the closest merged sibling implementation for webchat inbound media persistence that this PR now factors into a shared helper. (role: sibling path contributor; confidence: medium; commits: c9449d77b40a; files: src/gateway/server-methods/chat.ts, src/gateway/chat-attachments.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (3 earlier review cycles)
  • reviewed 2026-06-24T09:32:00.310Z sha 0e3071e :: needs real behavior proof before merge. :: [P1] Persist the media-bearing turn, not only an update | [P2] Preserve parsed image order when building MediaPaths
  • reviewed 2026-07-03T20:54:15.626Z sha 0e3071e :: needs real behavior proof before merge. :: [P1] Persist the media-bearing turn, not only an update | [P2] Preserve parsed image order when building media fields
  • reviewed 2026-07-07T05:40:07.518Z sha 8ed7873 :: needs real behavior proof before merge. :: none

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. labels May 26, 2026
@clawsweeper

clawsweeper Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat.

Where did the egg go?
  • The egg game starts only after the PR passes the real-behavior proof check.
  • Before that, no creature or rarity is rolled. The treat waits for real proof.
  • This is still just collectible flavor: proof affects review readiness, not creature quality.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to ensure media attachments received via agent.request node events are no longer lost from session history by persisting inbound image data and emitting transcript updates that include MediaPath / MediaPaths metadata (matching the behavior established for chat.send).

Changes:

  • Exposes resolveSessionFilePath, saveMediaBuffer, and emitSessionTranscriptUpdate via the server-node-events.runtime.ts barrel for easier mocking.
  • Adds agent.request helpers in server-node-events.ts to persist inline images, pass through offloaded refs, and emit transcript updates with media fields.
  • Adds regression tests covering inline images, mixed inline + offloaded, and text-only agent requests.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
src/gateway/server-node-events.runtime.ts Re-exports additional runtime helpers so tests can mock transcript/media behavior.
src/gateway/server-node-events.ts Persists inbound media for agent.request and emits transcript updates with MediaPath(s) metadata.
src/gateway/server-node-events.test.ts Adds regression tests validating transcript update emission for agent.request attachments.
Comments suppressed due to low confidence (3)

src/gateway/server-node-events.ts:358

  • persistAgentRequestImages() appends offloadedRefs after inline images, but the parser provides imageOrder specifically to preserve the original inline/offloaded image ordering. If offloaded images appear before inline ones (or are interleaved), the resulting MediaPath/MediaPaths ordering will be incorrect. Consider accepting imageOrder and interleaving saved inline/offloaded entries the same way persistChatSendImages() does in src/gateway/server-methods/chat.ts.
async function persistAgentRequestImages(params: {
  images: Array<{ type: "image"; data: string; mimeType: string }>;
  offloadedRefs: Array<{ id: string; path: string; mimeType: string }>;
  logGateway: NodeEventContext["logGateway"];
}): Promise<SavedMediaEntry[]> {
  if (params.images.length === 0 && params.offloadedRefs.length === 0) {
    return [];
  }
  const saved: SavedMediaEntry[] = [];
  for (const img of params.images) {
    try {
      saved.push(await saveMediaBuffer(Buffer.from(img.data, "base64"), img.mimeType, "inbound"));
    } catch (err) {
      params.logGateway.warn(
        `agent.request: failed to persist inbound image (${img.mimeType}): ${formatForLog(err)}`,
      );
    }
  }
  for (const ref of params.offloadedRefs) {
    saved.push({ id: ref.id, path: ref.path, size: 0, contentType: ref.mimeType });
  }
  return saved;

src/gateway/server-node-events.ts:377

  • emitAgentRequestTranscript() always calls resolveSessionFilePath(sessionId, undefined, ...), ignoring any existing entry.sessionFile. If the session is configured to use a custom/rotated transcript filename, this can emit updates against the wrong .jsonl path and further desync history. Consider passing the loaded session entry’s sessionFile into resolveSessionFilePath (and/or agentId) similar to resolveTranscriptPath() in server-methods/chat.ts.
  try {
    const sessionsDir = storePath ? path.dirname(storePath) : undefined;
    transcriptPath = resolveSessionFilePath(
      sessionId,
      undefined,
      sessionsDir ? { sessionsDir } : undefined,
    );

src/gateway/server-node-events.ts:405

  • emitSessionTranscriptUpdate() only broadcasts a change; it does not write to the transcript JSONL. In this handler, no subsequent rewrite/appending step is updating the on-disk user entry to include MediaPath/MediaPaths, so the transcript will still contain plain text and media will remain orphaned on reload. Consider adding an on-disk rewrite step (similar to rewriteChatSendUserTurnMediaPaths() in src/gateway/server-methods/chat.ts) after the user message is persisted, and emit the update based on the rewritten/persisted message.
  emitSessionTranscriptUpdate({
    sessionFile: transcriptPath,
    sessionKey: canonicalKey,
    message: {
      role: "user" as const,
      content: message,
      timestamp: now,
      ...mediaFields,
    },
  });

Comment thread src/gateway/server-node-events.ts Outdated
Comment thread src/gateway/server-node-events.test.ts Outdated
@peterdsp
peterdsp force-pushed the fix/agent-request-transcript-media-persistence branch from 48732cb to cf74ea1 Compare May 26, 2026 15:13
@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 26, 2026
@clawsweeper clawsweeper Bot added rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 29, 2026
@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels Jun 15, 2026
@peterdsp
peterdsp force-pushed the fix/agent-request-transcript-media-persistence branch 2 times, most recently from 328b202 to 0e3071e Compare June 24, 2026 09:15
@clawsweeper

clawsweeper Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

@peterdsp thanks for the PR. ClawSweeper is still waiting on real behavior proof before this can move forward.

Useful proof can be a screenshot, short video, terminal output, copied live output, linked artifact, or redacted logs that show the changed behavior after the fix. Please redact private tokens, phone numbers, private endpoints, customer data, and anything else sensitive.

Once proof is added to the PR body or a comment, ClawSweeper or a maintainer can re-check it.

@steipete steipete self-assigned this Jul 7, 2026
@steipete
steipete force-pushed the fix/agent-request-transcript-media-persistence branch from 0e3071e to ea14584 Compare July 7, 2026 05:20
@openclaw-barnacle openclaw-barnacle Bot added the app: web-ui App: web-ui label Jul 7, 2026
@openclaw-barnacle openclaw-barnacle Bot added the agents Agent runtime and tooling label Jul 7, 2026
steipete and others added 2 commits July 7, 2026 01:30
Route inline and offloaded agent.request images through the canonical user-turn transcript recorder across embedded, CLI, and ACP runtimes. Share ordered media persistence with chat.send and cover media-only empty-reply turns.

Co-authored-by: Petros Dhespollari <[email protected]>
@steipete
steipete force-pushed the fix/agent-request-transcript-media-persistence branch from ea14584 to 8ed7873 Compare July 7, 2026 05:30
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 7, 2026
@steipete

steipete commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Land-ready verification for reviewed head 8ed7873fe74d21e1534ff5361d2fb9ac709b2150:

  • Rewritten implementation persists Share Extension/node attachment metadata through the canonical user-turn transcript recorder; no broadcast-only or sidecar fallback remains.
  • Sanitized AWS Crabbox focused proof: 337 tests passed (run_d555f247ea33, lease cbx_e5c48564219b, stopped).
  • Full exact-head CI passed: https://github.com/openclaw/openclaw/actions/runs/28843912996
  • Fresh structured autoreview completed with no accepted/actionable findings.
  • OPENCLAW_TESTBOX=1 scripts/pr prepare-run 86936 accepted the exact reviewed head and hosted gates.
  • Review artifacts validated with no findings; no unresolved review threads remain.

Known proof gaps: none for the changed gateway/agent transcript path.

@steipete
steipete merged commit 6894bb7 into openclaw:main Jul 7, 2026
137 of 144 checks passed
@steipete

steipete commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 8, 2026
…enclaw#86936)

* fix(gateway): persist agent request transcript media

Route inline and offloaded agent.request images through the canonical user-turn transcript recorder across embedded, CLI, and ACP runtimes. Share ordered media persistence with chat.send and cover media-only empty-reply turns.

Co-authored-by: Petros Dhespollari <[email protected]>

* fix(gateway): avoid transcript media shadowing

---------

Co-authored-by: Peter Steinberger <[email protected]>
giodl73-repo pushed a commit to giodl73-repo/openclaw that referenced this pull request Jul 8, 2026
…enclaw#86936)

* fix(gateway): persist agent request transcript media

Route inline and offloaded agent.request images through the canonical user-turn transcript recorder across embedded, CLI, and ACP runtimes. Share ordered media persistence with chat.send and cover media-only empty-reply turns.

Co-authored-by: Petros Dhespollari <[email protected]>

* fix(gateway): avoid transcript media shadowing

---------

Co-authored-by: Peter Steinberger <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling app: web-ui App: web-ui gateway Gateway runtime merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P1 High-priority user-facing bug, regression, or broken workflow. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. size: M status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: bug(gateway): offloadedRefs metadata lost in transcript for iOS share/node path

4 participants