Skip to content

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

@Syysean

Description

@Syysean

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

Metadata in parsed.offloadedRefs is not persisted to JSONL transcript for iOS share/node path, causing media to be unresolvable in history.

Steps to reproduce

1.Send a large image attachment (e.g., >1MB) via the iOS Share extension or the Node gateway path.

2.Observe that the file is correctly offloaded to the local store (Claim Check logic triggers).

3.Check the resulting session transcript (.jsonl file) in the storage directory.

4.Observe the specific message entry.

Expected behavior

The transcript entry should contain the offloaded media IDs in the "MediaPath" or "MediaPaths" fields, similar to web-upload behavior.

Actual behavior

The "MediaPath" / "MediaPaths" fields are empty or missing. The metadata in "offloadedRefs" is discarded after parsing, making the media orphaned in session history.

OpenClaw version

v2026.4.1

Operating system

iOS / Ubuntu 24.04 (WSL2)

Install method

npm global / pnpm dev

Model

deepseek-v3.2

Provider / routing chain

openclaw -> deepseek-api

Additional provider/model setup details

Found this while investigating the WSL2 keyring deadlock (#60278). The attachment pipeline is functioning, but the persistence layer for node-events is missing the link to media refs.

Logs, screenshots, and evidence

Impact and severity

Affected: Users sending attachments via iOS share or node-based integrations.

Severity: High (Data loss in history).

Frequency: 4/4 observed attempts.

Consequence: Downstream agents cannot "see" the images in previous messages during multi-turn conversations.

Additional information

Root cause seems to be the lack of a 'persistChatSendImages' implementation in 'src/gateway/server-node-events.ts' for handling the 'parsed.offloadedRefs' metadata returned by the attachment parser.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High-priority user-facing bug, regression, or broken workflow.bugSomething isn't workingclawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.clawsweeper:queueable-fixClawSweeper marked this issue as an existing queue_fix_pr work candidate.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.impact:data-lossCan lose, corrupt, or silently drop user/session/config data.impact:session-stateSession, memory, transcript, context, or agent state can drift or corrupt.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions