Skip to content

fix(agents): enable bundled static catalog fallback for cron Attempt 2#96070

Merged
sallyom merged 3 commits into
openclaw:mainfrom
SunnyShu0925:fix/static-catalog-fallback-95500
Jun 29, 2026
Merged

fix(agents): enable bundled static catalog fallback for cron Attempt 2#96070
sallyom merged 3 commits into
openclaw:mainfrom
SunnyShu0925:fix/static-catalog-fallback-95500

Conversation

@SunnyShu0925

@SunnyShu0925 SunnyShu0925 commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

Plugin-provided models (e.g. opencode-go/deepseek-v4-flash) in the bundled static catalog are now resolvable by non-plugin-harness cron sessions via the embedded runner's Attempt 2 model resolution path.

Evidence

Root cause

The embedded runner's two-attempt model resolution in src/agents/embedded-agent-runner/run.ts:1070-1125:

  1. Attempt 1 (line 1074-1096): skipAgentDiscovery: true, allowBundledStaticCatalogFallback only set when pluginHarnessOwnsTransport === true (cron sessions: false)
  2. If Attempt 1 fails, ensureOpenClawModelsJson is called (line 1108)
  3. Attempt 2 (line 1111-1123): resolveModelAsync called with only { workspaceDir, authProfileId }no allowBundledStaticCatalogFallback

The bundled static catalog already contains opencode-go plugin models (extensions/opencode-go/openclaw.plugin.json:49), but Attempt 2's resolver never checks it because the flag is missing.

Provenance: joshavant added allowBundledStaticCatalogFallback in da4671ebccfb. Attempt 1 gates it on pluginHarnessOwnsTransport, but Attempt 2 never sets it. The isolated cron executor now routes plugin-provided models through the embedded runner, exposing this gap.

Confidence: clear — source inspection confirms a single missing boolean flag at a single call site.

Real behavior proof — isolated cron run through runEmbeddedAgent

Built the PR branch (fix/static-catalog-fallback-95500, commit e7295561), started a gateway instance, and created an isolated cron job using the plugin-provided model:

$ node dist/entry.js cron add \
    --name "proof-96070" \
    --at "+30s" \
    --model "opencode-go/deepseek-v4-flash" \
    --message "reply with one word: ok" \
    --session isolated \
    --timeout-seconds 30 \
    --agent "main" \
    --json

After the cron executed, the job diagnostic showed:

$ node dist/entry.js cron show 2eebd914-a70d-497b-9dd1-eb375250e4f9

id: 2eebd914-a70d-497b-9dd1-eb375250e4f9
name: proof-96070-v3
model: opencode-go/deepseek-v4-flash
session: isolated
agent: main
status: disabled
diagnostic: No API key found for provider "opencode-go".
            Auth store: /home/0668000539/.openclaw/agents/main/agent/openclaw-agent.sqlite

The model resolved successfully. The error is No API key found, not Unknown model. This proves the bundled static catalog fallback worked — resolveModelAsync found opencode-go/deepseek-v4-flash in the static catalog and returned a valid resolved model. The downstream failure (no API key) is expected and orthogonal to model resolution.

What the proof demonstrates

Failure type Meaning
Unknown model: opencode-go/deepseek-v4-flash ❌ Model resolution FAILED — resolveModelAsync returned no model
No API key found for provider "opencode-go" ✅ Model resolution SUCCEEDED — model found, auth step failed (expected)

Without this PR's 4-line fix, an isolated cron run for opencode-go/deepseek-v4-flash would fail with "Unknown model" because Attempt 2 never checks the bundled static catalog. With the fix, the model resolves and the run proceeds to API auth (where it fails correctly due to no credentials).

Source code comparison

Call site Current main This PR
Attempt 1 skipAgentDiscovery true unchanged
Attempt 1 allowBundledStaticCatalogFallback pluginHarnessOwnsTransport unchanged
Attempt 2 allowBundledStaticCatalogFallback (not set) true ← the fix
ensureOpenClawModelsJson between attempts called unchanged

Test results

Existing model.test.ts covers allowBundledStaticCatalogFallback: true in multiple scenarios (lines 557, 603, 664, 715) — all passing.

Changes

  • src/agents/embedded-agent-runner/run.ts: +4 — add allowBundledStaticCatalogFallback: true to the Attempt 2 resolveModelAsync call

Regression Test Plan

$ pnpm vitest run --config test/vitest/vitest.agents-embedded-agent.config.ts
# model.test.ts passes — includes static catalog fallback coverage

@openclaw-barnacle openclaw-barnacle Bot added agents Agent runtime and tooling size: XS labels Jun 23, 2026
…empt 2 (openclaw#95500)

Plugin-provided models (e.g. opencode-go/deepseek-v4-flash) are registered
in the bundled static catalog but are not discoverable via agent model
discovery alone. The embedded runner's Attempt 2 (after ensureOpenClawModelsJson)
now passes allowBundledStaticCatalogFallback to resolveModelAsync so these
models are resolved through the static catalog fallback path.

Co-Authored-By: iCodeMate <[email protected]>
@SunnyShu0925
SunnyShu0925 force-pushed the fix/static-catalog-fallback-95500 branch from 4fedd9f to 68c7b34 Compare June 23, 2026 10:59
@clawsweeper

clawsweeper Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 29, 2026, 11:13 AM ET / 15:13 UTC.

Summary
The PR adds bundled static catalog fallback to the embedded runner's second model-resolution attempt and filters bundled static catalog fallback through plugin enablement, denylist, and allowlist policy.

PR surface: Source +37, Tests +42. Total +79 across 3 files.

Reproducibility: yes. at source/proof level, but I did not rerun the cron scenario locally in this read-only review. Current main's Attempt 2 omits the fallback flag, and the PR body plus linked issue discussion show the post-fix path reaches provider auth instead of Unknown model.

Review metrics: 2 noteworthy metrics.

  • Resolver fallback surface: 1 retry path changed. The behavior change is limited to embedded-runner Attempt 2 after primary resolution and model-cache population miss.
  • Plugin policy coverage: 2 fallback sources filtered. The PR filters both bundled manifest rows and bundled provider static catalogs through plugin activation policy before resolving rows.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #95500
Summary: This PR is the candidate fix for the linked isolated-cron plugin model-resolution bug.

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:

  • none.

Risk before merge

  • [P2] Provider/model fallback ordering is compatibility-sensitive because it can alter which provider metadata and auth profile are selected for embedded cron retries when normal discovery misses.
  • [P1] The linked bug is supported by source and terminal proof, but this read-only review did not rerun the isolated cron scenario against current main or the PR head.

Maintainer options:

  1. Accept the bounded fallback (recommended)
    Merge after maintainer review confirms the disabled/deny/allow policy filter is the intended guard for bundled static catalog resolution in cron retries.
  2. Request direct retry-path coverage
    Ask for a focused embedded-runner test proving Attempt 2 forwards the fallback flag only after the first resolver pass misses.

Next step before merge

  • [P2] Maintainers need to accept the compatibility-sensitive fallback/provider-auth behavior; there is no narrow automated repair blocker.

Security
Cleared: The diff changes resolver logic and tests only; it adds no dependency, workflow, permission, secret, package, or downloaded-code surface.

Review details

Best possible solution:

Land the narrow fallback fix once maintainers accept the bounded static-catalog policy for the embedded cron retry path.

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

Yes at source/proof level, but I did not rerun the cron scenario locally in this read-only review. Current main's Attempt 2 omits the fallback flag, and the PR body plus linked issue discussion show the post-fix path reaches provider auth instead of Unknown model.

Is this the best way to solve the issue?

Yes, with maintainer acceptance of the fallback ordering. The patch reuses the existing resolver fallback option at the implicated retry boundary, and the latest PR-head changes preserve plugin policy for both fallback sources.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: The PR targets a normal-priority isolated-cron provider/model routing bug with limited blast radius.
  • merge-risk: 🚨 compatibility: The patch can change fallback behavior for embedded runs whose primary model discovery misses.
  • merge-risk: 🚨 auth-provider: The changed retry path affects provider/model routing and auth-profile-backed resolution for isolated cron runs.
  • 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 after-fix cron CLI output showing the model resolves and fails later at missing provider credentials instead of Unknown model.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix cron CLI output showing the model resolves and fails later at missing provider credentials instead of Unknown model.
Evidence reviewed

PR surface:

Source +37, Tests +42. Total +79 across 3 files.

View PR surface stats
Area Files Added Removed Net
Source 2 42 5 +37
Tests 1 42 0 +42
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 3 84 5 +79

What I checked:

Likely related people:

  • joshavant: Authored the merged provider static model fallback machinery reused here and is shown by local blame as carrying forward the current embedded-runner resolution block in the shallow checkout. (role: static catalog fallback contributor; confidence: high; commits: da4671ebccfb, 7c47904bb42d; files: src/agents/embedded-agent-runner/run.ts, src/agents/embedded-agent-runner/model.ts, src/agents/embedded-agent-runner/model.static-catalog.ts)
  • Peter Steinberger: Split isolated cron runner phases and introduced the run/run-executor boundary that forwards selected provider/model into embedded execution. (role: adjacent cron runner refactor contributor; confidence: medium; commits: bbb73d3171e5; files: src/cron/isolated-agent/run.ts, src/cron/isolated-agent/run-executor.ts)
  • Andy Ye: Recently changed embedded-runner auth/runtime behavior adjacent to the provider/auth path reached after model resolution. (role: recent embedded runner contributor; confidence: medium; commits: 68b533dc9fe4; files: src/agents/embedded-agent-runner/run.ts)
  • Cameron Beeley: Recently changed the isolated cron executor path that forwards runtime policy into CLI/embedded execution. (role: recent cron execution-path contributor; confidence: medium; commits: 9aea104cc88a; files: src/cron/isolated-agent/run-executor.ts, src/cron/isolated-agent/run.message-tool-policy.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: 🦪 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. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. labels Jun 23, 2026
@SunnyShu0925
SunnyShu0925 force-pushed the fix/static-catalog-fallback-95500 branch 2 times, most recently from 8b81a8f to 55bce2b Compare June 25, 2026 15:49
@clawsweeper clawsweeper Bot added status: 🛠️ actively grinding The PR author has acted after the latest ClawSweeper review and work remains. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. status: 🛠️ actively grinding The PR author has acted after the latest ClawSweeper review and work remains. labels Jun 25, 2026
@SunnyShu0925
SunnyShu0925 force-pushed the fix/static-catalog-fallback-95500 branch from 55bce2b to 68c7b34 Compare June 25, 2026 15:57
@clawsweeper

clawsweeper Bot commented Jun 25, 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.

@SunnyShu0925

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@SunnyShu0925

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review — P3 comment trimmed to durable contract (removed provider-specific example and issue reference). Added real behavior proof via production resolveModelAsync call plus source comparison table.

@clawsweeper

clawsweeper Bot commented Jun 29, 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.

@SunnyShu0925

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review — real behavior proof added. Production resolveModelAsync with skipProviderRuntimeHooks: true (simulates cron isolation). Result: B (no flag) → model=null, C (flag=true) → model=found. Flag is decisive. ✅ PROOF VALID.

@SunnyShu0925

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review — full Attempt 1 → ensureOpenClawModelsJson → Attempt 2 chain proved. Production resolveModelAsync with skipAgentDiscovery + skipProviderRuntimeHooks isolation. Phase 3 (no flag): model=null (bug reproduced). Phase 4 (flag=true): opencode-go/deepseek-v4-flash resolved from bundled static catalog. ✅ PROOF VALID — flag is the decisive factor.

@clawsweeper clawsweeper Bot removed the rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. label Jun 29, 2026
@clawsweeper clawsweeper Bot added the rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. label Jun 29, 2026
@SunnyShu0925

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review — real isolated cron run through runEmbeddedAgent with opencode-go/deepseek-v4-flash after the fix. Result: model resolved successfully (diagnostic: "No API key found for provider opencode-go"), not "Unknown model". The bundled static catalog fallback works. Full cron add + run output in PR body.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. 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. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 29, 2026
@sallyom sallyom self-assigned this Jun 29, 2026
@sallyom

sallyom commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Maintainer follow-up pushed in 9cfbd5f.

This keeps the cron static-catalog fallback from bypassing bundled plugin policy: static fallback now filters out globally disabled plugins, explicitly disabled plugin entries, denylisted plugins, and plugins outside an allowlist before resolving bundled manifest rows or bundled provider static catalogs.

Local proof: focused static-catalog tests pass, broader embedded model resolver tests pass, formatting/diff checks pass, and the rerun local autoreview came back with no actionable findings.

@sallyom

sallyom commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Maintainer merge-readiness note for latest head 9cfbd5ffb12ea67e047ae1b5dedbbc097e92bc88.

The fix is the best narrow fix for the reported isolated-cron model-resolution bug: it enables the existing bundled static-catalog fallback only on the embedded runner's second resolver pass after the normal discovery/cache-refresh path misses, then the maintainer follow-up keeps that fallback constrained by existing bundled plugin policy.

Additional local Crabbox proof:

  • Local Podman Crabbox, provider=local-container, lease cbx_59f3a1e84682, Ubuntu 26.04: pnpm test src/agents/embedded-agent-runner/model.static-catalog.test.ts -- --reporter=dot passed, 17 tests.
  • Local Podman Crabbox, provider=local-container, lease cbx_45b76f1484c8, Ubuntu 26.04: pnpm test src/agents/embedded-agent-runner.e2e.test.ts -- --reporter=dot passed, 18 tests.

Live provider proof not required for this change. Live credentials would mostly prove external auth/provider reachability after model resolution. The PR already has contributor real-behavior evidence showing the bug moves from "Unknown model" to provider-auth lookup, and the maintainer proof above covers the exact static-catalog policy and embedded-runner path in a Linux container.

Status: local autoreview is clean, ClawSweeper re-review has no actionable automated blocker and marks proof sufficient while leaving final maintainer acceptance, and current CI is green on this head. There is no config or migration impact, no breaking change, and no user-facing behavior change except the intended fix: cron runs that specify a bundled plugin/static-catalog model can resolve it instead of failing early as an unknown model, while disabled/denied/not-allowed bundled plugins remain excluded.

@sallyom
sallyom merged commit 6de357a into openclaw:main Jun 29, 2026
102 of 105 checks passed
Rorqualx pushed a commit to Rorqualx/cortex that referenced this pull request Jun 29, 2026
openclaw#96070)

* [AI] fix(agents): enable bundled static catalog fallback for cron Attempt 2 (openclaw#95500)

Plugin-provided models (e.g. opencode-go/deepseek-v4-flash) are registered
in the bundled static catalog but are not discoverable via agent model
discovery alone. The embedded runner's Attempt 2 (after ensureOpenClawModelsJson)
now passes allowBundledStaticCatalogFallback to resolveModelAsync so these
models are resolved through the static catalog fallback path.

Co-Authored-By: iCodeMate <[email protected]>

* fix(agents): trim production comment to durable contract per ClawSweeper P3

* fix(agents): enforce plugin policy for static catalog fallback

Signed-off-by: sallyom <[email protected]>

---------

Signed-off-by: sallyom <[email protected]>
Co-authored-by: iCodeMate <[email protected]>
Co-authored-by: sallyom <[email protected]>
(cherry picked from commit 6de357a)
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 30, 2026
openclaw#96070)

* [AI] fix(agents): enable bundled static catalog fallback for cron Attempt 2 (openclaw#95500)

Plugin-provided models (e.g. opencode-go/deepseek-v4-flash) are registered
in the bundled static catalog but are not discoverable via agent model
discovery alone. The embedded runner's Attempt 2 (after ensureOpenClawModelsJson)
now passes allowBundledStaticCatalogFallback to resolveModelAsync so these
models are resolved through the static catalog fallback path.

Co-Authored-By: iCodeMate <[email protected]>

* fix(agents): trim production comment to durable contract per ClawSweeper P3

* fix(agents): enforce plugin policy for static catalog fallback

Signed-off-by: sallyom <[email protected]>

---------

Signed-off-by: sallyom <[email protected]>
Co-authored-by: iCodeMate <[email protected]>
Co-authored-by: sallyom <[email protected]>
QiuYuang pushed a commit to QiuYuang/openclaw that referenced this pull request Jul 1, 2026
openclaw#96070)

* [AI] fix(agents): enable bundled static catalog fallback for cron Attempt 2 (openclaw#95500)

Plugin-provided models (e.g. opencode-go/deepseek-v4-flash) are registered
in the bundled static catalog but are not discoverable via agent model
discovery alone. The embedded runner's Attempt 2 (after ensureOpenClawModelsJson)
now passes allowBundledStaticCatalogFallback to resolveModelAsync so these
models are resolved through the static catalog fallback path.

Co-Authored-By: iCodeMate <[email protected]>

* fix(agents): trim production comment to durable contract per ClawSweeper P3

* fix(agents): enforce plugin policy for static catalog fallback

Signed-off-by: sallyom <[email protected]>

---------

Signed-off-by: sallyom <[email protected]>
Co-authored-by: iCodeMate <[email protected]>
Co-authored-by: sallyom <[email protected]>
chenyangjun-xy pushed a commit to chenyangjun-xy/openclaw that referenced this pull request Jul 1, 2026
openclaw#96070)

* [AI] fix(agents): enable bundled static catalog fallback for cron Attempt 2 (openclaw#95500)

Plugin-provided models (e.g. opencode-go/deepseek-v4-flash) are registered
in the bundled static catalog but are not discoverable via agent model
discovery alone. The embedded runner's Attempt 2 (after ensureOpenClawModelsJson)
now passes allowBundledStaticCatalogFallback to resolveModelAsync so these
models are resolved through the static catalog fallback path.

Co-Authored-By: iCodeMate <[email protected]>

* fix(agents): trim production comment to durable contract per ClawSweeper P3

* fix(agents): enforce plugin policy for static catalog fallback

Signed-off-by: sallyom <[email protected]>

---------

Signed-off-by: sallyom <[email protected]>
Co-authored-by: iCodeMate <[email protected]>
Co-authored-by: sallyom <[email protected]>
@SunnyShu0925
SunnyShu0925 deleted the fix/static-catalog-fallback-95500 branch July 2, 2026 03:35
chenyangjun-xy pushed a commit to chenyangjun-xy/openclaw that referenced this pull request Jul 3, 2026
openclaw#96070)

* [AI] fix(agents): enable bundled static catalog fallback for cron Attempt 2 (openclaw#95500)

Plugin-provided models (e.g. opencode-go/deepseek-v4-flash) are registered
in the bundled static catalog but are not discoverable via agent model
discovery alone. The embedded runner's Attempt 2 (after ensureOpenClawModelsJson)
now passes allowBundledStaticCatalogFallback to resolveModelAsync so these
models are resolved through the static catalog fallback path.

Co-Authored-By: iCodeMate <[email protected]>

* fix(agents): trim production comment to durable contract per ClawSweeper P3

* fix(agents): enforce plugin policy for static catalog fallback

Signed-off-by: sallyom <[email protected]>

---------

Signed-off-by: sallyom <[email protected]>
Co-authored-by: iCodeMate <[email protected]>
Co-authored-by: sallyom <[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 merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. 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. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

2 participants