Skip to content

feat(ios): og:image thumbnails on link preview cards#101387

Merged
steipete merged 1 commit into
mainfrom
feat/ios-link-preview-image-nash
Jul 7, 2026
Merged

feat(ios): og:image thumbnails on link preview cards#101387
steipete merged 1 commit into
mainfrom
feat/ios-link-preview-image-nash

Conversation

@steipete

@steipete steipete commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Related: #100699

What Problem This Solves

The iOS/macOS tap-to-expand link-preview cards landed text-only in #101198 because the transcript had no policy-controlled way to load a remote thumbnail. This delivers the declared og:image follow-up.

Why This Change Was Made

The expanded card now shows the OpenGraph image through the same hardened fetcher the metadata uses — no new dependency, no ambient traffic. The image request starts only after the user's expand tap with Loaded metadata and a non-nil image URL; the URL must independently pass the non-public-host policy before any request. Image mode shares the host/redirect/connection/deadline rules and no-cookie configuration, with an image/jpeg|png|webp allowlist and a 1 MB cap. Decoding never materializes full-size bitmaps: a source-pixel bomb guard rejects oversized dimensions, then CGImageSourceCreateThumbnailAtIndex produces a bounded (≤600px) thumbnail. Decoded thumbnails and negative results sit in a bounded in-memory cache (32); decode failures degrade silently to the text card. The thumbnail slot appears only after a successful decode — text renders immediately, no skeleton, no layout jump. Thumbnails are decorative (accessibilityHidden); title/description carry the content.

User Impact

Link-preview cards on iOS/macOS now show the page's image when one exists, with the same zero-ambient-fetch privacy contract as before.

Evidence

  • swift test --package-path apps/shared/OpenClawKit --filter ChatLinkPreviewTests — 24 tests / 9 suites green at the rebased head: consent timing (request only post-expansion), host policy on the image URL (private literal → zero requests), content-type allowlist, 1 MB cap, redirect rules in image mode, decode bounds, corrupt-data negative caching, cancellation, cache hits.
  • Full-suite compile restored by fix(tests): reorder initializer arguments so the shared-kit test module compiles #101372 (this branch is rebased over it); focused suites green.
  • swiftformat --lint clean on touched files; i18n inventory unchanged at head.
  • Structured review (codex) — clean, "patch is correct".

@openclaw-barnacle openclaw-barnacle Bot added size: L maintainer Maintainer-authored PR labels Jul 7, 2026
@clawsweeper

clawsweeper Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 7, 2026, 3:11 AM ET / 07:11 UTC.

Summary
The PR extends shared Apple chat link-preview cards to fetch, decode, cache, and render OpenGraph image thumbnails after tap-to-expand, with focused Swift tests.

PR surface: Other +487. Total +487 across 2 files.

Reproducibility: not applicable. as a bug reproduction; this is a feature PR. Source review gives a high-confidence merge-blocker path for the new image fetch/decode behavior, and the PR still lacks real UI proof.

Review metrics: 1 noteworthy metric.

  • Remote thumbnail boundary: 1 added image fetch/decode mode. The PR adds a second user-initiated network request plus untrusted ImageIO decoding, so maintainers should review the security and availability boundary before merge.

Stored data model
Persistent data-model change detected: vector/embedding metadata: apps/shared/OpenClawKit/Tests/OpenClawKitTests/ChatLinkPreviewTests.swift. 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:

  • [P1] Add redacted simulator or device proof showing tap-to-expand renders a real thumbnail.
  • Address the image fetch security boundary before the request can reach private addresses, or get explicit maintainer approval for the limitation.
  • Align the MIME allowlist and ImageIO downsampling options with the reviewed safety contract.

Proof guidance:

  • [P1] Needs real behavior proof before merge: The PR body lists focused Swift tests and lint, but no redacted simulator/device screenshot, recording, live output, or logs show a thumbnail rendering after tap-to-expand; proof should redact private URLs, IPs, keys, phone numbers, and non-public endpoints. 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] The PR adds a user-initiated second network request to a page-supplied image URL, and the current Apple implementation can start the URLSession request before resolved-address policy rejects a private target.
  • [P1] The remote image decoder accepts GIF despite the PR's declared JPEG/PNG/WebP policy, expanding the untrusted decode surface without an explicit approval trail.
  • [P1] The ImageIO thumbnail path does not disable source caching before inspecting and downsampling untrusted compressed image data, leaving avoidable memory-pressure risk.
  • [P1] Real device or simulator proof is still missing for the visible thumbnail UI, so tests alone do not show the user-facing behavior after tap-to-expand.

Maintainer options:

  1. Harden image fetch and decode before merge (recommended)
    Block or narrow attacker-declared image fetches before the request can reach a private address, align GIF policy, disable unsafe source caching, and refresh proof.
  2. Accept the remote-image boundary
    Maintainers can explicitly accept the URLSession post-connection limitation for page-declared image URLs, but should make that policy visible in the PR before merge.
  3. Pause the thumbnail branch
    Keep the merged text-only Apple link previews and close or hold this PR until the image policy has a clearer owner-approved shape.

Next step before merge

  • [P1] The PR has protected maintainer/security-boundary handling plus missing contributor proof, so the next action is owner review and contributor follow-up rather than an automated repair lane.

Maintainer decision needed

  • Question: Should Apple link-preview thumbnails fetch page-declared cross-host OpenGraph image URLs under the existing URLSession post-connection address check, or must the PR narrow or block those fetches before merge?
  • Rationale: The existing text-preview limitation was disclosed and merged for the user-tapped page URL, but this PR extends that boundary to a second URL chosen by remote page metadata and automation should not decide that security tradeoff.
  • Likely owner: steipete — He owns the linked mobile polish sequence and authored the merged Apple link-preview base feature this PR extends.
  • Options:
    • Harden before merge (recommended): Require a narrower pre-request image policy or another owner-approved mitigation, remove undeclared GIF support, harden ImageIO caching, and add real behavior proof before landing.
    • Accept the limitation: Maintainers may intentionally accept the URLSession limitation for image URLs, but the PR should document that choice and still align decoder policy and proof.
    • Pause remote thumbnails: Keep Apple link previews text-only while a safer remote-image policy or platform implementation is designed.

Security
Needs attention: The diff adds remote image fetching and ImageIO decoding, and the current head still has concrete private-network, MIME-policy, and decoder-hardening concerns.

Review findings

  • [P1] Block image fetches before private-network GETs — apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatLinkPreview.swift:452
  • [P2] Disable source caching before thumbnailing — apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatLinkPreview.swift:667
  • [P2] Keep the image MIME allowlist within the reviewed policy — apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatLinkPreview.swift:398
Review details

Best possible solution:

Keep the tap-to-expand thumbnail direction, but land it only after the remote-image fetch/decode boundary is tightened or explicitly approved, MIME policy matches the implementation, ImageIO downsampling is hardened, and redacted device/simulator proof is added.

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

Not applicable as a bug reproduction; this is a feature PR. Source review gives a high-confidence merge-blocker path for the new image fetch/decode behavior, and the PR still lacks real UI proof.

Is this the best way to solve the issue?

No as submitted. The owner boundary in shared Apple chat UI is plausible, but the best fix must settle the image security policy, align decoder behavior, and provide real device or simulator proof before merge.

Full review comments:

  • [P1] Block image fetches before private-network GETs — apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatLinkPreview.swift:452
    Late discovery: this image fetch path was already visible in the earlier reviewed head. fetchImage sends any page-declared image URL into fetchResponse, which starts a URLSession data task after only literal host validation and checks actual remote addresses only after task metrics arrive; a DNS-rebinding image host can receive a GET into a private service before the result is discarded. Please narrow image URLs or add a pre-connect approved-resolution path before starting the task.
    Confidence: 0.84
    Late finding: first raised on code an earlier review cycle already covered.
  • [P2] Disable source caching before thumbnailing — apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatLinkPreview.swift:667
    Late discovery: this decoder code is unchanged from the earlier reviewed head. Creating the CGImageSource with nil options before reading properties and thumbnailing leaves ImageIO free to cache decoded source data for large compressed images; create the source with kCGImageSourceShouldCache: false and keep immediate caching only on the bounded thumbnail.
    Confidence: 0.8
    Late finding: first raised on code an earlier review cycle already covered.
  • [P2] Keep the image MIME allowlist within the reviewed policy — apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatLinkPreview.swift:398
    This prior finding is still present at the current head. The PR says image mode is limited to JPEG/PNG/WebP, but the allowlist also accepts image/gif and the decoder explicitly permits single-frame GIFs, which expands the untrusted remote decoder surface beyond the reviewed policy.
    Confidence: 0.87

Overall correctness: patch is incorrect
Overall confidence: 0.88

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add merge-risk: 🚨 availability: The new ImageIO path processes untrusted compressed images and currently lacks the source-cache hardening expected for bounded downsampling.
  • add rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🧂 unranked krab.
  • remove rating: 🦪 silver shellfish: Current PR rating is rating: 🧂 unranked krab, so this older rating label is no longer current.

Label justifications:

  • P3: This is mobile chat polish rather than an urgent user-facing regression or blocked setup path.
  • merge-risk: 🚨 security-boundary: Merging adds remote image fetching and untrusted decoder handling where private-address and MIME-policy boundaries are still unresolved.
  • merge-risk: 🚨 availability: The new ImageIO path processes untrusted compressed images and currently lacks the source-cache hardening expected for bounded downsampling.
  • 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 lists focused Swift tests and lint, but no redacted simulator/device screenshot, recording, live output, or logs show a thumbnail rendering after tap-to-expand; proof should redact private URLs, IPs, keys, phone numbers, and non-public endpoints. 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:

Other +487. Total +487 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 0 0 0 0
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 2 557 70 +487
Total 2 557 70 +487

Security concerns:

  • [high] Image fetch can request before resolved-address approval — apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatLinkPreview.swift:452
    The image path starts URLSession before actual remote-address policy runs, so a page-declared DNS-rebinding image URL can receive a private-network GET before the response is discarded.
    Confidence: 0.84
  • [medium] Undeclared GIF decoder surface — apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatLinkPreview.swift:398
    The code accepts image/gif and decodes single-frame GIFs even though the PR describes the reviewed allowlist as JPEG/PNG/WebP.
    Confidence: 0.87
  • [medium] ImageIO source cache not disabled — apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatLinkPreview.swift:667
    The new decoder creates the source without cache-disabling options before downsampling untrusted image bytes, which can undermine the intended memory guard.
    Confidence: 0.8

What I checked:

Likely related people:

  • steipete: Authored the merged Apple text-only link-preview PR and the mobile polish tracker that called out OpenGraph image cards as follow-up work. (role: feature owner; confidence: high; commits: 868f354ded3d, 66c764b26935; files: apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatLinkPreview.swift, apps/shared/OpenClawKit/Tests/OpenClawKitTests/ChatLinkPreviewTests.swift, apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatMessageViews.swift)
  • mbelinky: CONTRIBUTING.md lists this maintainer for iOS app and security areas, which overlap the Apple remote-image security-boundary decision. (role: listed iOS/security owner; confidence: medium; files: CONTRIBUTING.md, apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatLinkPreview.swift)
  • Vincent Koc: The shallow current-main blame attributes the checked-out link-preview snapshot to a recent refactor commit, though the feature provenance is better explained by the merged link-preview PR metadata. (role: recent area contributor; confidence: low; commits: 85d6d94afd39; files: apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatLinkPreview.swift, apps/shared/OpenClawKit/Tests/OpenClawKitTests/ChatLinkPreviewTests.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 (1 earlier review cycle)
  • reviewed 2026-07-07T05:38:20.767Z sha e49dd0c :: needs real behavior proof before merge. :: [P2] Keep the image MIME allowlist within the reviewed policy | [P2] Remove the redundant Sendable conformance

@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: e49dd0c866

ℹ️ 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".

Comment on lines +451 to +455
func fetchImage(_ originalURL: URL) async -> ChatLinkPreviewImageResult {
guard let response = await self.fetchResponse(originalURL, mode: .image),
let thumbnail = chatDecodeLinkPreviewThumbnail(
response.data,
mimeType: response.mimeType)

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 Block image fetches before private-network GETs

When an expanded public preview page supplies an og:image URL whose hostname resolves to a private address or DNS-rebinds, this new image path calls fetchResponse and starts URLSession after only the literal host check. The remote-address connectionPolicy is evaluated only in didCompleteWithError after the GET/data transfer, so expanding a public link preview can still send a request into internal services. Please reject or resolve non-public image targets before creating the data task, or avoid fetching attacker-selected cross-host image URLs.

Useful? React with 👍 / 👎.

@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. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. labels Jul 7, 2026
@steipete
steipete force-pushed the feat/ios-link-preview-image-nash branch from e49dd0c to cf57bd7 Compare July 7, 2026 06:58

@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: cf57bd7251

ℹ️ 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".

mimeType: String,
maxSourcePixels: Int = chatLinkPreviewImageMaxSourcePixels) -> ChatLinkPreviewThumbnail?
{
guard let source = CGImageSourceCreateWithData(data as CFData, nil),

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 Disable source caching before thumbnailing

For compressed images that pass the 1 MB download cap but have large dimensions up to the 64 MP limit, this creates the CGImageSource with default options before reading properties and thumbnailing. Apple's ImageIO downsampling example sets kCGImageSourceShouldCache: false on the source before CGImageSourceCreateThumbnailAtIndex (https://devstreaming-cdn.apple.com/videos/wwdc/2018/219mybpx95zm9x/219/219_image_and_graphics_best_practices.pdf); leaving the source options as nil can let ImageIO cache a full-resolution decoded image before the 600 px thumbnail is produced, defeating the memory guard for large og:image files.

Useful? React with 👍 / 👎.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Jul 7, 2026
@steipete
steipete merged commit 508296f into main Jul 7, 2026
207 of 212 checks passed
@steipete
steipete deleted the feat/ios-link-preview-image-nash branch July 7, 2026 09:27
steipete added a commit that referenced this pull request Jul 7, 2026
…plicit intents (#101799)

* fix(android): keep cold-start gateway auto-connect from overriding explicit intents

NodeRuntime's init-time auto-connect now atomically claims the first gateway
lifecycle intent (CAS 0->1) and stands down permanently when any explicit
connect/disconnect/switch intent already exists, so a late discovery emission
can no longer override a user decision. This was also the root cause of the
CI-only flakes in GatewayBootstrapAuthTest (refreshGatewayConnection_* at
:616/:627 and switchToUndiscoveredGateway* on PRs #101002/#101387/#101396).

GatewaySession.Connection.sendRequestFrame now starts its response watcher
with CoroutineStart.ATOMIC: disconnect teardown cancels connectionJob right
after failPending(), and a DEFAULT-start watcher still queued for dispatch was
cancelled without running, silently dropping the terminal UNAVAILABLE onError
owed to fire-and-forget callers (root cause of the flaky
GatewaySessionInvokeTest.disconnectReportsUnknownOutcomeForFireAndForgetRpc).

Tests neutralize runtime background work (cancel+join the runtime scope)
before arming the registry and scripting lifecycle steps, and add regression
coverage for the auto-connect intent claim.

Proof: refresh flake reproduced at iteration 1 under taskset -c 0,1 on a
Blacksmith Linux box; post-fix 3 pinned stress rounds (120/150 looped
iterations) plus full :app:testPlayDebugUnitTest (109 classes, 0 failures)
and :app:ktlintCheck green on the same box.

* chore(i18n): resync native inventory line positions after NodeRuntime edits
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 8, 2026
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 8, 2026
…plicit intents (openclaw#101799)

* fix(android): keep cold-start gateway auto-connect from overriding explicit intents

NodeRuntime's init-time auto-connect now atomically claims the first gateway
lifecycle intent (CAS 0->1) and stands down permanently when any explicit
connect/disconnect/switch intent already exists, so a late discovery emission
can no longer override a user decision. This was also the root cause of the
CI-only flakes in GatewayBootstrapAuthTest (refreshGatewayConnection_* at
:616/:627 and switchToUndiscoveredGateway* on PRs openclaw#101002/openclaw#101387/openclaw#101396).

GatewaySession.Connection.sendRequestFrame now starts its response watcher
with CoroutineStart.ATOMIC: disconnect teardown cancels connectionJob right
after failPending(), and a DEFAULT-start watcher still queued for dispatch was
cancelled without running, silently dropping the terminal UNAVAILABLE onError
owed to fire-and-forget callers (root cause of the flaky
GatewaySessionInvokeTest.disconnectReportsUnknownOutcomeForFireAndForgetRpc).

Tests neutralize runtime background work (cancel+join the runtime scope)
before arming the registry and scripting lifecycle steps, and add regression
coverage for the auto-connect intent claim.

Proof: refresh flake reproduced at iteration 1 under taskset -c 0,1 on a
Blacksmith Linux box; post-fix 3 pinned stress rounds (120/150 looped
iterations) plus full :app:testPlayDebugUnitTest (109 classes, 0 failures)
and :app:ktlintCheck green on the same box.

* chore(i18n): resync native inventory line positions after NodeRuntime edits
giodl73-repo pushed a commit to giodl73-repo/openclaw that referenced this pull request Jul 8, 2026
giodl73-repo pushed a commit to giodl73-repo/openclaw that referenced this pull request Jul 8, 2026
…plicit intents (openclaw#101799)

* fix(android): keep cold-start gateway auto-connect from overriding explicit intents

NodeRuntime's init-time auto-connect now atomically claims the first gateway
lifecycle intent (CAS 0->1) and stands down permanently when any explicit
connect/disconnect/switch intent already exists, so a late discovery emission
can no longer override a user decision. This was also the root cause of the
CI-only flakes in GatewayBootstrapAuthTest (refreshGatewayConnection_* at
:616/:627 and switchToUndiscoveredGateway* on PRs openclaw#101002/openclaw#101387/openclaw#101396).

GatewaySession.Connection.sendRequestFrame now starts its response watcher
with CoroutineStart.ATOMIC: disconnect teardown cancels connectionJob right
after failPending(), and a DEFAULT-start watcher still queued for dispatch was
cancelled without running, silently dropping the terminal UNAVAILABLE onError
owed to fire-and-forget callers (root cause of the flaky
GatewaySessionInvokeTest.disconnectReportsUnknownOutcomeForFireAndForgetRpc).

Tests neutralize runtime background work (cancel+join the runtime scope)
before arming the registry and scripting lifecycle steps, and add regression
coverage for the auto-connect intent claim.

Proof: refresh flake reproduced at iteration 1 under taskset -c 0,1 on a
Blacksmith Linux box; post-fix 3 pinned stress rounds (120/150 looped
iterations) plus full :app:testPlayDebugUnitTest (109 classes, 0 failures)
and :app:ktlintCheck green on the same box.

* chore(i18n): resync native inventory line positions after NodeRuntime edits
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintainer Maintainer-authored PR merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. P3 Low-priority cleanup, docs, polish, ergonomics, or speculative work. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: L 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