Skip to content

refactor: use canonical transcript reader identity#89581

Merged
jalehman merged 2 commits into
mainfrom
clawdbot-d02.1.9.1.22/31b-transcript-readers-canonical-identity
Jun 19, 2026
Merged

refactor: use canonical transcript reader identity#89581
jalehman merged 2 commits into
mainfrom
clawdbot-d02.1.9.1.22/31b-transcript-readers-canonical-identity

Conversation

@jalehman

@jalehman jalehman commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

What

Routes transcript reader projections through a canonical transcript read scope instead of letting callers identify reads by transcript file path or basename. This keeps the implementation file-backed today while making reader callers storage-neutral for the Path 3 SQLite migration.

Why

The transcript identity contract in #88838 needs sessionKey and the resolved session entry to be the stable runtime identity. This follow-up updates the reader side of the stack so later SQLite-backed validation can prove reader behavior without reintroducing file-path identity assumptions.

Changes

  • Add transcript reader facade
  • Add read-target resolver
  • Prefer loaded session entries
  • Preserve explicit file reads
  • Ratchet migrated reader files
  • Preserve private file artifact reads
  • Update gateway reader callers
  • Update agent reader callers
  • Refresh focused reader tests
File Change
src/config/sessions/session-accessor.ts Added read-target resolution for transcript scopes
src/gateway/session-transcript-readers.ts Added file-backed canonical reader facade
scripts/check-session-accessor-boundary.mjs Ratcheted migrated accessor callers
scripts/check-session-transcript-reader-boundary.mjs Ratcheted migrated transcript reader callers
src/gateway/server-methods/chat.ts Passed canonical read scopes to chat readers
src/gateway/server-methods/sessions.ts Passed canonical read scopes to session readers
src/gateway/sessions-history-http.ts Passed canonical read scopes to history readers
src/gateway/session-history-state.ts Passed canonical read scopes to history state
src/gateway/session-utils.ts Updated session row transcript projections
src/agents/tools/sessions-list-tool.ts Updated title hydration read scopes
src/agents/subagent-announce-output.ts Reads private artifacts through explicit facade scope
src/tui/embedded-backend.ts Passed canonical scopes to TUI readers

Testing

Final pushed head: 156564f6885ef35b3856da2e5500900021cbb76a, rebased onto 82ae81f3bf1d97a3b5686872ad1420238afeb703.

  • node scripts/check-session-accessor-boundary.mjs
  • node scripts/check-session-transcript-reader-boundary.mjs
  • git diff --check
  • pnpm exec oxfmt --check --threads=1 $(git diff --name-only upstream/main)
  • node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core.tsbuildinfo
  • node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.core.test.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core-test.tsbuildinfo
  • node scripts/run-vitest.mjs src/agents/subagent-announce-output.test.ts src/config/sessions/session-accessor.test.ts src/gateway/session-transcript-readers.test.ts test/scripts/check-session-transcript-reader-boundary.test.ts test/scripts/check-session-accessor-boundary.test.ts test/scripts/ci-workflow-guards.test.ts src/tui/embedded-backend.test.ts src/agents/tools/embedded-gateway-stub.test.ts src/agents/subagent-orphan-recovery.test.ts src/gateway/server.sessions.reset-hooks.test.ts src/gateway/server-methods/artifacts.test.ts src/gateway/server-methods/sessions-files.test.ts src/gateway/session-history-state.test.ts src/gateway/sessions-history-http.revocation.test.ts src/gateway/managed-image-attachments.test.ts
  • OPENCLAW_VITEST_INCLUDE_FILE=/tmp/pr89581-subagents-include.json OPENCLAW_VITEST_SHARD_NAME=agentic-agents-core-subagents OPENCLAW_VITEST_MAX_WORKERS=2 pnpm exec node scripts/test-projects.mjs test/vitest/vitest.agents-core.config.ts
  • OPENCLAW_VITEST_INCLUDE_FILE=/tmp/pr89581-tools-include.json OPENCLAW_VITEST_SHARD_NAME=agentic-agents-core-tools OPENCLAW_VITEST_MAX_WORKERS=2 pnpm exec node scripts/test-projects.mjs test/vitest/vitest.agents-core.config.ts
  • OPENCLAW_VITEST_SHARD_NAME=auto-reply-core-top-level OPENCLAW_VITEST_MAX_WORKERS=2 pnpm exec node scripts/test-projects.mjs test/vitest/vitest.auto-reply-core.config.ts test/vitest/vitest.auto-reply-top-level.config.ts
  • .agents/skills/autoreview/scripts/autoreview --mode branch --base upstream/main --engine codex --thinking codex=low --no-web-search
  • Prior Azure broad check before the final rebase/fix: node scripts/crabbox-wrapper.mjs job run changed (provider=azure, lease cbx_af11c215e76b, run run_e5df054b2e36, exit 0, command time 6m33.327s). The final head delta is covered by exact-head local ratchets, focused checks, autoreview, and Gateway proof below.

Real behavior proof

Behavior addressed: Gateway transcript reader RPCs resolve the current transcript through canonical sessionKey plus loaded session entry identity instead of relying on caller-owned transcript file paths. Explicit transcript-file reads without agent identity are also preserved.

Real environment tested: Local foreground Gateway from final PR head 156564f6885ef35b3856da2e5500900021cbb76a (OpenClaw 2026.6.8 (156564f)) on macOS, isolated OPENCLAW_STATE_DIR=/tmp/openclaw-pr89581-proof, loopback port 18981, auth mode none.

Exact steps or command run after this patch:

rm -rf /tmp/openclaw-pr89581-proof && mkdir -p /tmp/openclaw-pr89581-proof
OPENCLAW_STATE_DIR=/tmp/openclaw-pr89581-proof OPENCLAW_DISABLE_UPDATE_CHECK=1 pnpm openclaw --version
OPENCLAW_STATE_DIR=/tmp/openclaw-pr89581-proof OPENCLAW_DISABLE_UPDATE_CHECK=1 pnpm openclaw gateway run --dev --reset --port 18981 --auth none --bind loopback --allow-unconfigured --ws-log compact
curl -fsS http://127.0.0.1:18981/healthz
curl -fsS http://127.0.0.1:18981/readyz
OPENCLAW_STATE_DIR=/tmp/openclaw-pr89581-proof pnpm openclaw gateway call health --url ws://127.0.0.1:18981 --token proof-token --json --timeout 10000
# Stop the proof Gateway, seed /tmp/openclaw-pr89581-proof/agents/dev/sessions/sessions.json and proof-session-89581.jsonl, then restart without --reset:
OPENCLAW_STATE_DIR=/tmp/openclaw-pr89581-proof OPENCLAW_DISABLE_UPDATE_CHECK=1 pnpm openclaw gateway run --dev --port 18981 --auth none --bind loopback --allow-unconfigured --ws-log compact
curl -fsS http://127.0.0.1:18981/healthz
curl -fsS http://127.0.0.1:18981/readyz
OPENCLAW_STATE_DIR=/tmp/openclaw-pr89581-proof pnpm openclaw gateway call chat.history --url ws://127.0.0.1:18981 --token proof-token --json --timeout 10000 --params '{"sessionKey":"agent:dev:path3-proof","limit":10}'
OPENCLAW_STATE_DIR=/tmp/openclaw-pr89581-proof pnpm openclaw gateway call chat.message.get --url ws://127.0.0.1:18981 --token proof-token --json --timeout 10000 --params '{"sessionKey":"agent:dev:path3-proof","messageId":"proof-assistant-1","maxChars":1000}'
cat /tmp/openclaw-pr89581-proof/agents/dev/sessions/sessions.json
cat /tmp/openclaw-pr89581-proof/agents/dev/sessions/proof-session-89581.jsonl
rm -rf /tmp/openclaw-pr89581-proof

Evidence after fix: /healthz returned {"ok":true,"status":"live"}; /readyz returned {"ready":true,"failing":[]...}; Gateway health returned default agent dev with sessions path /tmp/openclaw-pr89581-proof/agents/dev/sessions/sessions.json; chat.history returned sessionId: "proof-session-89581" and two messages with ids proof-user-1 and proof-assistant-1; chat.message.get returned ok: true and assistant content Path 3 transcript reader proof response; persisted sessions.json pointed agent:dev:path3-proof at proof-session-89581.jsonl, and that transcript contained the two JSONL message records.

Observed result after fix: The real Gateway read-only chat/history APIs successfully projected a persisted transcript through the canonical session key/entry path on the pushed head. The focused regression coverage also proves supplied sessionEntry avoids store reload, explicit transcript-file reads still work without invented agent identity, and the migrated files satisfy both Path 3 session reader CI ratchets.

What was not tested: Future SQLite flip behavior, doctor migration behavior, external SDK compatibility, paired mutating Gateway RPCs such as sessions.create over device scopes, and broad cross-OS/package install lanes on the final SHA.

@openclaw-barnacle openclaw-barnacle Bot added app: web-ui App: web-ui gateway Gateway runtime agents Agent runtime and tooling size: XL labels Jun 2, 2026
@openclaw-barnacle openclaw-barnacle Bot added the maintainer Maintainer-authored PR label Jun 2, 2026
@clawsweeper

clawsweeper Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 19, 2026, 12:17 PM ET / 16:17 UTC.

Summary
The PR adds a canonical transcript read-target resolver/facade and migrates gateway, agent, status, TUI, and boundary-guard callers to pass sessionKey/sessionEntry instead of caller-owned transcript file identity.

PR surface: Source +182, Tests +84, Other +19. Total +285 across 31 files.

Reproducibility: not applicable. as a bug reproduction; this is a refactor. The PR body provides a real Gateway proof path for chat.history and chat.message.get against a seeded persisted session, plus focused regression coverage for the reader resolver.

Review metrics: none identified.

Stored data model
Persistent data-model change detected: serialized state: src/agents/tools/sessions-list-tool.ts, serialized state: src/config/sessions/session-accessor.test.ts, serialized state: src/config/sessions/session-accessor.ts, serialized state: src/gateway/server-methods/sessions-files.ts, serialized state: src/gateway/server-methods/sessions.ts, serialized state: src/gateway/session-history-state.test.ts, and 9 more. Migration or upgrade compatibility proof is recorded; maintainers should verify it before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #88838
Summary: This PR is a candidate slice in the broader session/transcript SQLite migration tracked by the canonical issue, with adjacent open stack PRs for public identity API and SQLite adapter work.

Members:

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

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

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

Rank-up moves:

  • [P2] Wait for the pending exact-head security and quality checks to complete green before merge.

Risk before merge

  • [P1] Reader identity selection now spans gateway, agent, status, TUI, subagent, and boundary-guard paths; a wrong invariant could stale or mis-associate session history, message lookup, usage, attachments, or reset-hook reads.
  • [P1] Live exact-head security/quality jobs were still pending at inspection, so merge should wait for current-head validation rather than relying only on earlier local and Crabbox proof.

Maintainer options:

  1. Gate on current-head validation (recommended)
    Wait for the pending exact-head security and quality checks on 6b17c71 before merging this session-state refactor.
  2. Accept the staged session-state risk
    A maintainer can land the slice after reviewing the Path 3 invariant and owning the remaining future SQLite-flip validation risk.
  3. Pause in favor of the canonical tracker
    If maintainers want to re-sequence the migration stack, pause this PR and continue the design discussion on Track core session/transcript SQLite migration via accessor seam #88838.

Next step before merge

  • [P2] The remaining action is maintainer acceptance of a protected session-state migration slice after exact-head checks, not an automated code repair.

Security
Cleared: No concrete security or supply-chain concern was found; the diff does not add dependencies, workflows, secret handling, or external code execution paths beyond local boundary scripts and tests.

Review details

Best possible solution:

Land this refactor only after exact-head checks finish green and a maintainer accepts it as the reader-identity slice of #88838.

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

Not applicable as a bug reproduction; this is a refactor. The PR body provides a real Gateway proof path for chat.history and chat.message.get against a seeded persisted session, plus focused regression coverage for the reader resolver.

Is this the best way to solve the issue?

Yes, this is the right layer for the migration slice: centralizing read identity in resolveSessionTranscriptReadTarget and the reader facade avoids keeping file-path identity at each caller. Final acceptance still needs a maintainer because the invariant crosses session-state surfaces.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: This is a normal-priority internal migration/refactor with meaningful session-state blast radius but no confirmed urgent user regression.
  • merge-risk: 🚨 session-state: The PR changes how many transcript readers resolve session identity, so a bad invariant could stale or mis-associate session history and related projections.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body includes structured terminal/live Gateway proof showing health, chat.history, and chat.message.get reading the seeded transcript through canonical sessionKey/sessionEntry identity; the final delta only removes a storage-specific alias and adds guard coverage.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes structured terminal/live Gateway proof showing health, chat.history, and chat.message.get reading the seeded transcript through canonical sessionKey/sessionEntry identity; the final delta only removes a storage-specific alias and adds guard coverage.
Evidence reviewed

PR surface:

Source +182, Tests +84, Other +19. Total +285 across 31 files.

View PR surface stats
Area Files Added Removed Net
Source 19 417 235 +182
Tests 10 95 11 +84
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 2 19 0 +19
Total 31 531 246 +285

What I checked:

  • Repository policy applied: Root and scoped AGENTS.md files were read; the relevant guidance treats session state, gateway readers, and migration seams as compatibility/session-state sensitive and requires whole-surface review. (AGENTS.md:1, ffd8c6e5d9ab)
  • Current main behavior: Current main's transcript reader facade still accepts file-oriented read scope fields and forwards sessionId/storePath/sessionFile/agentId directly to file-backed readers. (src/gateway/session-transcript-readers.ts:33, ffd8c6e5d9ab)
  • Canonical read scope added: The PR head adds SessionTranscriptReadScope.sessionEntry plus optional sessionKey, which gives hot readers a canonical session-store identity without rereading the store. (src/config/sessions/session-accessor.ts:138, 6b17c7185e13)
  • Read target resolver behavior: resolveSessionTranscriptReadTarget preserves explicit transcript-file reads, avoids persisting metadata on reads, prefers supplied entries, and documents the file-backed deprecation-window fallback before the SQLite flip. (src/config/sessions/session-accessor.ts:1492, 55d3a4e43b67)
  • Reader facade migration: The reader facade resolves the canonical read target once, then forwards the resolved file-backed scope to all synchronous and asynchronous transcript readers. (src/gateway/session-transcript-readers.ts:79, 6b17c7185e13)
  • Gateway caller coverage: Gateway chat history and message lookup now pass loaded sessionEntry plus canonical sessionKey into transcript reads, covering a central runtime entry point. (src/gateway/server-methods/chat.ts:2683, 6b17c7185e13)

Likely related people:

  • jalehman: Authored the merged transcript-reader seam PR and both commits in this follow-up stack, including the canonical read-target resolver and storage-neutral alias cleanup. (role: feature owner / recent area contributor; confidence: high; commits: 8ded75628437, 55d3a4e43b67, 6b17c7185e13; files: src/config/sessions/session-accessor.ts, src/gateway/session-transcript-readers.ts, src/agents/subagent-announce-output.ts)
  • steipete: Recent history on session-utils and transcript/session helper refactors shows substantial prior ownership of the gateway/session reader area this PR routes through. (role: historical area contributor; confidence: medium; commits: 28d478dc5232, 3174c6919de1; files: src/gateway/session-utils.ts, src/config/sessions/session-accessor.ts)
  • Takhoffman: Recent session row, duplicate-store, and session ownership fixes touch adjacent invariants that could be affected by reader identity selection. (role: adjacent session-state contributor; confidence: medium; commits: 40f820ff7f30, 24dd7aec90c0, 627d6c80f252; files: src/gateway/session-utils.ts)
  • byungskers: Left the targeted review request to prove supplied sessionEntry avoids rereading the store, which this branch now addresses with a focused regression. (role: reviewer; confidence: medium; files: src/config/sessions/session-accessor.test.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.

@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. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. labels Jun 2, 2026
@byungskers

Copy link
Copy Markdown

This refactor shape looks good overall. I would add one targeted regression around the new scoped reader seam: if the caller already passes sessionEntry, the resolver should prefer that data path and avoid rereading the session store on hot history/chat paths. Locking that invariant in a small test now would make the migration safer as more callers move over.

@jalehman
jalehman force-pushed the clawdbot-d02.1.9.1.15.1/31b-transcript-identity-state-contract branch 2 times, most recently from a0e06d4 to 8432a1b Compare June 11, 2026 05:03
@jalehman

Copy link
Copy Markdown
Contributor Author

Follow-up for this branch's wave-2 rebase: the resolver's fallbackSessionFile derivation (from storePath+threadId when the entry lacks sessionFile) is correct file-backed behavior today, but per the one-way-flip decision it must be commented as deprecation-window resolution that collapses at the SQLite flip — not a runtime fallback that survives it.

@clawsweeper clawsweeper Bot added status: 🛠️ actively grinding The PR author has acted after the latest ClawSweeper review and work remains. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 14, 2026
@jalehman
jalehman force-pushed the clawdbot-d02.1.9.1.15.1/31b-transcript-identity-state-contract branch 2 times, most recently from efbe88d to 7ffe706 Compare June 15, 2026 16:21
@clawsweeper clawsweeper Bot added status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed status: 🛠️ actively grinding The PR author has acted after the latest ClawSweeper review and work remains. labels Jun 15, 2026
@jalehman
jalehman force-pushed the clawdbot-d02.1.9.1.15.1/31b-transcript-identity-state-contract branch 2 times, most recently from cb112eb to 57aa52c Compare June 15, 2026 19:00
Base automatically changed from clawdbot-d02.1.9.1.15.1/31b-transcript-identity-state-contract to main June 15, 2026 20:04
@jalehman jalehman self-assigned this Jun 19, 2026
@jalehman
jalehman force-pushed the clawdbot-d02.1.9.1.22/31b-transcript-readers-canonical-identity branch from 6c13413 to 52501b4 Compare June 19, 2026 04:55
@openclaw-barnacle openclaw-barnacle Bot added scripts Repository scripts size: L and removed size: XL labels Jun 19, 2026
@jalehman

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Refreshed onto current upstream main, fixed the supplied sessionEntry hot-path resolver issue, added the focused no-reread regression, extended the session accessor boundary ratchet, and added real Gateway chat.history / chat.message.get proof to the PR body for head 52501b414cd4e386d726fb3f5e04cf743e4e4227.

@jalehman
jalehman force-pushed the clawdbot-d02.1.9.1.22/31b-transcript-readers-canonical-identity branch from 4f96ea4 to e19a331 Compare June 19, 2026 06:06
@jalehman

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Final pushed head is e19a331f6c8c4888a9c11b29892c26916127bfd7, rebased onto 82ae81f3bf1d97a3b5686872ad1420238afeb703. The PR body has been updated with exact-head Gateway chat.history / chat.message.get proof and exact-head guard/format/type/Vitest/autoreview results. The prior CI failures on checks-node-agentic-agents-core-tools and checks-node-agentic-agents-core-subagents were reproduced locally, fixed in test mocks/helpers, and both shards now pass locally; both Path 3 session reader ratchets also pass locally.

@clawsweeper

clawsweeper Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@jalehman
jalehman force-pushed the clawdbot-d02.1.9.1.22/31b-transcript-readers-canonical-identity branch from e19a331 to 156564f Compare June 19, 2026 06:15
@jalehman

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Final pushed head is 156564f6885ef35b3856da2e5500900021cbb76a, rebased onto 82ae81f3bf1d97a3b5686872ad1420238afeb703. The PR body has been updated with exact-head Gateway chat.history / chat.message.get proof and exact-head guard/format/type/Vitest/autoreview results. The prior CI failures on checks-node-agentic-agents-core-tools, checks-node-agentic-agents-core-subagents, and checks-node-auto-reply-core-top-level were reproduced locally and fixed; all three shards now pass locally, and both Path 3 session reader ratchets pass locally.

@clawsweeper

clawsweeper Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jun 19, 2026
@jalehman
jalehman force-pushed the clawdbot-d02.1.9.1.22/31b-transcript-readers-canonical-identity branch from 609b405 to 6b17c71 Compare June 19, 2026 16:04
@jalehman
jalehman merged commit d216f7c into main Jun 19, 2026
166 of 168 checks passed
@jalehman
jalehman deleted the clawdbot-d02.1.9.1.22/31b-transcript-readers-canonical-identity branch June 19, 2026 17:40
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 20, 2026
* refactor: use canonical transcript reader identity

* refactor: keep transcript reader dependency storage-neutral
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 maintainer Maintainer-authored PR merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. scripts Repository scripts size: L status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants