Skip to content

feat(macos): adopt the shared read-only chat transcript cache#100275

Merged
steipete merged 4 commits into
mainfrom
feat/macos-chat-offline-cache
Jul 6, 2026
Merged

feat(macos): adopt the shared read-only chat transcript cache#100275
steipete merged 4 commits into
mainfrom
feat/macos-chat-offline-cache

Conversation

@steipete

@steipete steipete commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Stacked on #100219 (feat/ios-chat-offline-cache) — lands after it; this PR's own diff is the macOS adoption only.

Part of #100194

What Problem This Solves

Resolves a problem where the macOS chat window showed nothing until the gateway responded, and nothing at all while disconnected — the shared read-only transcript cache introduced for the chat pipeline was not wired up on macOS.

Why This Change Was Made

Adopts the shared OpenClawChatTranscriptCache seam in the macOS app. The work is wiring plus a macOS-specific gateway identity key (MacChatTranscriptCache.gatewayID): unconfigured → no cache; local gateway → local:<canonical state dir> (the state dir owns local session data, so profiles never collide even when sharing a port); direct remote → the full canonical URL (one origin can path-route to several gateways); ssh remote → ssh:<target>:<resolved remote gateway port> reusing the tunnel's own port resolution so identity matches what is actually forwarded. Per-launch tunnel URLs are never used as identity. Auth is deliberately excluded from the key — gateway transcripts are not principal-scoped, and keying on credentials would drop the cache on every token rotation (documented inline). DB lives at ~/Library/Application Support/OpenClaw/chat-cache.sqlite; at-rest protection is the per-user container plus FileVault. The shared store needed zero changes (its iOS file-protection call was already platform-gated).

User Impact

The macOS chat window renders the last known conversation instantly on open and stays browsable read-only while the gateway is unreachable, per gateway identity, with the same disposable, bounded, text-only cache contract as the rest of the app family.

Evidence

  • apps/shared/OpenClawKit: swift build clean; swift test --filter "ChatTranscriptCacheStoreTests|ChatViewModelTranscriptCacheTests" — 15/15.
  • apps/macos: swift build clean; swift test --filter ChatTranscriptCacheIdentityTests — 5/5 (per-mode identity keys, symlink canonicalization, ssh port resolution).
  • Codex autoreview: 5 rounds; 3 accepted findings fixed (local key now uses the state dir rather than port; ssh key includes the resolved remote port; direct key uses the full percent-encoded URL rather than host:port); 1 finding consciously rejected with inline-documented rationale (auth-principal digest in the identity key — transcripts aren't principal-scoped and rotation would needlessly drop the cache).

Known gap: no live end-to-end offline pass on macOS yet (wiring proven by builds + the shared suite); pnpm-gated lint lanes covered by CI (diff is Swift + one docs line).

Update: now stacked on the iOS outbox branch (#100331) and additionally wires the offline command outbox into macOS chat windows (feat(macos): wire the offline command outbox into chat windows): the same gateway-scoped SQLite store instance backs both the transcript cache and the outbox, so macOS gets queued offline sends with the full shared contract (FIFO flush, retry/expiry, tombstoned deletes). Landing order: #100219#100331 → this PR. Codex autoreview on the wiring commit: clean (0.88). Part of #46664 as well.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation app: macos App: macos size: M maintainer Maintainer-authored PR labels Jul 5, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e729c2a726

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

sessionKey: sessionKey,
presentation: presentation,
transport: MacGatewayChatTransport(),
transcriptCache: MacChatTranscriptCache.make())

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.

P1 Badge Rebind the cache when the remote gateway changes

When a user edits the remote URL/target/transport while staying in remote mode, GatewayEndpointStore.requireConfig() rereads the new config for subsequent chat requests, but the existing chat window is not torn down because resetTunnels() is only wired to connection-mode changes. This controller keeps the MacChatTranscriptCache.make() instance created for the old gateway, so live history from the newly selected gateway can be written under the previous gateway ID and old cached rows can pre-paint for the new gateway until the live fetch returns. Please either recreate/rebind the transcript cache on remote endpoint changes or make cache scoping follow the effective endpoint per request.

Useful? React with 👍 / 👎.

@clawsweeper

clawsweeper Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 6, 2026, 12:44 AM ET / 04:44 UTC.

Summary
The PR wires macOS chat windows to the shared transcript cache and offline command outbox, adds gateway identity tests, exposes SSH remote-port resolution, and documents macOS offline cache behavior.

PR surface: Docs +1, Other +287. Total +288 across 5 files.

Reproducibility: yes. from source and CI inspection: keep a macOS chat window open, change the remote endpoint while staying in remote mode, and later gateway requests can refresh to the new endpoint while the view model still holds a store scoped to the old identity. CI also reproduces the SwiftFormat and docs-map blockers on the current merge commit.

Review metrics: 3 noteworthy metrics.

  • Persisted macOS chat store: 1 SQLite app-support store newly wired. macOS would begin storing recent transcript text locally, so gateway scoping and privacy proof matter before merge.
  • Mac offline send path: 1 outbox facet newly enabled. Passing the cache store as an outbox changes disconnected sends from read-only browsing to durable replay.
  • Required check blockers: 2 failing checks. macos-swift and check-docs currently fail for diff-caused formatting/generated-doc issues that must be fixed before merge.

Stored data model
Persistent data-model change detected: persistent cache schema: apps/macos/Tests/OpenClawIPCTests/ChatTranscriptCacheIdentityTests.swift, persistent cache schema: docs/platforms/mac/webchat.md. Confirm migration or upgrade compatibility proof before merge.

Merge readiness
Overall: 🧂 unranked krab
Proof: 🧂 unranked krab
Patch quality: 🧂 unranked krab
Result: blocked until real behavior proof is added.

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

Rank-up moves:

  • Rebind or recreate the macOS cache/outbox when the effective gateway identity changes.
  • Align macOS offline-send docs/tests with the intended product behavior, or wire only the transcript cache in this PR.
  • [P1] Fix SwiftFormat and regenerate docs/docs_map.md, then add live macOS offline proof.

Proof guidance:

  • [P1] Needs real behavior proof before merge: The PR body has build/unit-test evidence but explicitly says no live macOS offline pass has been run; it needs redacted recording, logs, terminal/live output, or linked artifact proof before merge, with private details redacted. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Risk before merge

  • [P1] Existing macOS chat windows can keep an old gateway-scoped cache/outbox while live requests refresh to a newly edited remote endpoint, risking pre-painting or writing transcripts under the wrong gateway identity.
  • [P1] The PR persists recent macOS chat text locally, so stale gateway scoping is also a security/privacy boundary concern.
  • [P1] The PR enables durable macOS offline queued sends while the added macOS docs still describe read-only disconnected browsing with sending disabled.
  • [P1] The current merge commit fails macos-swift formatting and check-docs, so required validation is not green.
  • [P1] The PR body explicitly says no live macOS offline end-to-end proof has been run.

Maintainer options:

  1. Narrow to read-only cache before merge (recommended)
    Remove or defer macOS outbox wiring, rebind the transcript cache on effective endpoint changes, fix generated/docs/format failures, and add live macOS cache proof.
  2. Accept macOS outbox with proof
    Maintainers can keep queued sends if docs, tests, live proof, and security review explicitly cover durable macOS replay and gateway scoping.
  3. Pause until direction is settled
    Leave the PR open but unmerged while the macOS offline-send product and privacy contract is decided.

Next step before merge

  • [P1] Maintainer review is needed because the protected label and macOS offline-send/privacy decision cannot be resolved by automation, even though some formatting and docs-map repairs are mechanical.

Maintainer decision needed

  • Question: Should this macOS cache adoption also enable durable offline command outbox behavior now, or should this PR stay read-only until macOS offline-send privacy and UX are explicitly approved?
  • Rationale: The PR crosses from read-only cached transcripts into persisted command replay and local chat-text storage, which is a product/security boundary choice rather than a purely mechanical Swift wiring fix.
  • Likely owner: steipete — steipete has the strongest recent history on the macOS chat/gateway paths and authored/merged the related shared cache/outbox base work.
  • Options:
    • Keep this PR read-only (recommended): Wire only the transcript cache here, fix endpoint rebinding and generated/docs/format issues, and leave macOS queued sends to a separately approved outbox path.
    • Approve macOS outbox now: Keep outbox wiring but update docs, tests, live proof, and security notes so queued offline sends are an intentional macOS behavior.
    • Pause the stack: Hold this PR until maintainers settle the permanent macOS cache and replay contract outside this branch.

Security
Needs attention: The PR persists recent chat text locally and can keep the wrong gateway identity when the effective remote endpoint changes.

Review findings

  • [P1] Rebind the cache when the gateway endpoint changes — apps/macos/Sources/OpenClaw/WebChatSwiftUI.swift:257-263
  • [P2] Align macOS outbox wiring with the offline contract — apps/macos/Sources/OpenClaw/WebChatSwiftUI.swift:263
  • [P2] Use doc comments for the exposed tunnel helper — apps/macos/Sources/OpenClaw/RemotePortTunnel.swift:192-194
Review details

Best possible solution:

Land macOS transcript caching and any macOS outbox support only after cache/outbox identity follows effective endpoint changes, docs and tests match the chosen offline-send contract, generated docs are refreshed, formatting is green, and live macOS proof demonstrates gateway-scoped offline behavior.

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

Yes from source and CI inspection: keep a macOS chat window open, change the remote endpoint while staying in remote mode, and later gateway requests can refresh to the new endpoint while the view model still holds a store scoped to the old identity. CI also reproduces the SwiftFormat and docs-map blockers on the current merge commit.

Is this the best way to solve the issue?

No: adopting the shared cache/outbox seam is plausible, but the PR is not the best merge shape until endpoint rebinding, offline-send docs/product alignment, generated docs, formatting, and live macOS proof are addressed.

Full review comments:

  • [P1] Rebind the cache when the gateway endpoint changes — apps/macos/Sources/OpenClaw/WebChatSwiftUI.swift:257-263
    This still builds the cache/outbox once from the current config and keeps that actor for the life of the chat controller. Remote URL, target, or transport edits can sync config while staying in remote mode, and later GatewayConnection requests refresh the effective endpoint, so an existing chat window can pre-paint old gateway rows and write new gateway history under the previous gateway ID.
    Confidence: 0.9
  • [P2] Align macOS outbox wiring with the offline contract — apps/macos/Sources/OpenClaw/WebChatSwiftUI.swift:263
    Passing store as outbox makes disconnected text sends durable and auto-flushed, but the macOS docs added here still say offline browsing is read-only and sending stays disabled until the Gateway returns. Either wire only transcriptCache in this PR or update product-approved docs, tests, and live proof for queued macOS sends.
    Confidence: 0.87
  • [P2] Use doc comments for the exposed tunnel helper — apps/macos/Sources/OpenClaw/RemotePortTunnel.swift:192-194
    Late catch from the current CI logs: this helper was already visible in the prior reviewed head, but macos-swift now shows SwiftFormat rejects these // lines before the internal static func. Change them to /// doc comments or otherwise avoid exposing the helper as an API declaration with regular comments.
    Confidence: 0.95
    Late finding: first raised on code an earlier review cycle already covered.
  • [P2] Regenerate the docs map for the webchat doc change — docs/platforms/mac/webchat.md:32
    Late catch from the current check-docs log: adding this macOS webchat docs line changed the docs source without updating the generated docs/docs_map.md, so check-docs fails with docs/docs_map.md is out of date. Regenerate and include the docs map with this docs change.
    Confidence: 0.95
    Late finding: first raised on code an earlier review cycle already covered.

Overall correctness: patch is incorrect
Overall confidence: 0.89

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add merge-risk: 🚨 automation: The diff currently causes macos-swift formatting and docs-map checks to fail on the merge commit.

Label justifications:

  • P1: The PR can mis-associate persisted chat/outbox state across gateway endpoint changes and currently fails required macOS/docs validation.
  • merge-risk: 🚨 session-state: A fixed cache/outbox instance can keep old gateway-scoped transcript and queued-command state after the effective endpoint changes.
  • merge-risk: 🚨 security-boundary: The PR persists recent chat text locally and a stale gateway identity can expose cached transcripts in the wrong gateway context.
  • merge-risk: 🚨 automation: The diff currently causes macos-swift formatting and docs-map checks to fail on the merge commit.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🧂 unranked krab.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR body has build/unit-test evidence but explicitly says no live macOS offline pass has been run; it needs redacted recording, logs, terminal/live output, or linked artifact proof before merge, with private details redacted. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
Evidence reviewed

PR surface:

Docs +1, Other +287. Total +288 across 5 files.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 0 0 0 0
Docs 1 1 0 +1
Config 0 0 0 0
Generated 0 0 0 0
Other 4 290 3 +287
Total 5 291 3 +288

Security concerns:

  • [medium] Cached transcripts can cross gateway contexts — apps/macos/Sources/OpenClaw/WebChatSwiftUI.swift:257
    Because the cache/outbox store is scoped once at controller creation, changing the remote endpoint without recreating or rebinding the controller can read or write sensitive transcript text under the previous gateway ID.
    Confidence: 0.86

Acceptance criteria:

  • [P1] macos-swift CI or equivalent SwiftFormat/build/test lane covering apps/macos.
  • [P1] check-docs or the docs check that verifies docs/docs_map.md.
  • [P1] Focused macOS cache identity/rebinding tests if endpoint-rebind behavior changes.
  • [P1] Redacted live macOS offline proof before merge.

What I checked:

Likely related people:

  • steipete: Git blame/log tie Peter Steinberger to the current macOS chat controller, gateway endpoint/config paths, active-agent chat work, and the merged shared outbox PR that this macOS wiring adopts. (role: recent area contributor and likely decision owner; confidence: high; commits: e596e2850d8e, 443c582949e3, 4b7661e9a0c4; files: apps/macos/Sources/OpenClaw/WebChatSwiftUI.swift, apps/macos/Sources/OpenClaw/AppState.swift, apps/macos/Sources/OpenClaw/GatewayEndpointStore.swift)
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 (2 earlier review cycles)
  • reviewed 2026-07-05T10:36:45.039Z sha e729c2a :: needs real behavior proof before merge. :: [P1] Rebind the cache when the remote gateway changes
  • reviewed 2026-07-05T13:30:45.218Z sha 7a4e0a9 :: needs real behavior proof before merge. :: [P1] Rebind the cache when the remote gateway changes | [P2] Align macOS outbox wiring with the offline contract

@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. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. labels Jul 5, 2026
@steipete
steipete force-pushed the feat/ios-chat-offline-cache branch from 165063f to b1c7f92 Compare July 5, 2026 10:42
@steipete
steipete force-pushed the feat/macos-chat-offline-cache branch from e729c2a to 7a4e0a9 Compare July 5, 2026 13:06
@steipete
steipete changed the base branch from feat/ios-chat-offline-cache to feat/ios-offline-outbox July 5, 2026 13:06

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7a4e0a9ba3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

presentation: presentation,
transport: MacGatewayChatTransport(),
transcriptCache: store,
outbox: store)

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.

P2 Badge Don't enable the offline outbox for read-only cache

When a Mac chat window is disconnected, OpenClawChatViewModel.performSend takes the durable offline-queue path whenever outbox != nil; this line now passes the SQLite cache as that outbox. That means a user typing while browsing cached history can persist a command that auto-sends on reconnect, even though docs/platforms/mac/webchat.md documents this macOS surface as read-only offline browsing with sending disabled until the Gateway is back. If macOS should remain read-only offline, wire only transcriptCache here or add product/docs/tests for intentional queued sends.

Useful? React with 👍 / 👎.

steipete added 3 commits July 5, 2026 21:41
Cache-first cold open for the macOS chat window/panel: the last known
transcript and session list paint immediately from the shared SQLite
transcript cache, then live gateway history replaces them wholesale.
Recent chats stay browsable read-only while the gateway is unreachable;
sending remains gated by connection state.

- Wires OpenClawChatSQLiteTranscriptCache into WebChatSwiftUIWindowController;
  DB at ~/Library/Application Support/OpenClaw/chat-cache.sqlite.
- Gateway identity (MacChatTranscriptCache.gatewayID), derivable offline:
  local keys on the canonical gateway state dir; remote/direct keys on the
  full canonical URL (scheme, host, resolved port, percent-encoded
  path/query); remote/ssh keys on the SSH target plus the resolved remote
  gateway port, mirroring the tunnel port resolution. Unconfigured mode
  gets no cache.
- macOS file protection: no per-file Data Protection classes; iOS-only
  attribute stays gated behind #if os(iOS) in the shared store, and the
  per-user container plus FileVault protect at rest.
- Onboarding chat stays uncached (transient guided setup session).

Part of #100194
@clawsweeper clawsweeper Bot added the merge-risk: 🚨 automation 🚨 May affect CI, automerge, proof capture, label sync, or maintainer automation. label Jul 6, 2026
@steipete
steipete force-pushed the feat/macos-chat-offline-cache branch from 54d4d18 to 12075b2 Compare July 6, 2026 04:54
@steipete
steipete merged commit d537139 into main Jul 6, 2026
40 checks passed
@steipete
steipete deleted the feat/macos-chat-offline-cache branch July 6, 2026 04:57
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 6, 2026
…aw#100275)

* feat(macos): adopt shared read-only chat transcript cache

Cache-first cold open for the macOS chat window/panel: the last known
transcript and session list paint immediately from the shared SQLite
transcript cache, then live gateway history replaces them wholesale.
Recent chats stay browsable read-only while the gateway is unreachable;
sending remains gated by connection state.

- Wires OpenClawChatSQLiteTranscriptCache into WebChatSwiftUIWindowController;
  DB at ~/Library/Application Support/OpenClaw/chat-cache.sqlite.
- Gateway identity (MacChatTranscriptCache.gatewayID), derivable offline:
  local keys on the canonical gateway state dir; remote/direct keys on the
  full canonical URL (scheme, host, resolved port, percent-encoded
  path/query); remote/ssh keys on the SSH target plus the resolved remote
  gateway port, mirroring the tunnel port resolution. Unconfigured mode
  gets no cache.
- macOS file protection: no per-file Data Protection classes; iOS-only
  attribute stays gated behind #if os(iOS) in the shared store, and the
  per-user container plus FileVault protect at rest.
- Onboarding chat stays uncached (transient guided setup session).

Part of openclaw#100194

* feat(macos): wire the offline command outbox into chat windows

* style(macos): fix orphaned doc comment; regenerate docs map

* style(macos): doc-comment lint fix; regenerate docs map on current main
giodl73-repo pushed a commit to giodl73-repo/openclaw that referenced this pull request Jul 8, 2026
…aw#100275)

* feat(macos): adopt shared read-only chat transcript cache

Cache-first cold open for the macOS chat window/panel: the last known
transcript and session list paint immediately from the shared SQLite
transcript cache, then live gateway history replaces them wholesale.
Recent chats stay browsable read-only while the gateway is unreachable;
sending remains gated by connection state.

- Wires OpenClawChatSQLiteTranscriptCache into WebChatSwiftUIWindowController;
  DB at ~/Library/Application Support/OpenClaw/chat-cache.sqlite.
- Gateway identity (MacChatTranscriptCache.gatewayID), derivable offline:
  local keys on the canonical gateway state dir; remote/direct keys on the
  full canonical URL (scheme, host, resolved port, percent-encoded
  path/query); remote/ssh keys on the SSH target plus the resolved remote
  gateway port, mirroring the tunnel port resolution. Unconfigured mode
  gets no cache.
- macOS file protection: no per-file Data Protection classes; iOS-only
  attribute stays gated behind #if os(iOS) in the shared store, and the
  per-user container plus FileVault protect at rest.
- Onboarding chat stays uncached (transient guided setup session).

Part of openclaw#100194

* feat(macos): wire the offline command outbox into chat windows

* style(macos): fix orphaned doc comment; regenerate docs map

* style(macos): doc-comment lint fix; regenerate docs map on current main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: macos App: macos docs Improvements or additions to documentation maintainer Maintainer-authored PR merge-risk: 🚨 automation 🚨 May affect CI, automerge, proof capture, label sync, or maintainer automation. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. 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. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. 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.

1 participant