Skip to content

repair: drive target validation from per-repo toolchain config#240

Closed
momothemage wants to merge 10 commits into
openclaw:mainfrom
momothemage:feature/clawhub_config_bun
Closed

repair: drive target validation from per-repo toolchain config#240
momothemage wants to merge 10 commits into
openclaw:mainfrom
momothemage:feature/clawhub_config_bun

Conversation

@momothemage
Copy link
Copy Markdown
Contributor

@momothemage momothemage commented Jun 2, 2026

Drive target validation from per-repo toolchain config

Summary

ClawSweeper's target-validation pipeline was built around a single assumption — the target repo is an OpenClaw pnpm monorepo that exposes a check:changed script. Any repo on a different toolchain (in our case openclaw/clawhub, which is bun-based) could not get past preflight: every automerge / autofix attempt ended as a no-op with

Executor outcome: validation_script_missing: required pnpm check:changed is
unavailable in target checkout.

even when the PR itself was perfectly mergeable.

This PR makes the validation pipeline read three fields per target repo from config/target-repositories.json and removes the hard-coded pnpm + check:changed pair from the runtime path. openclaw/openclaw behavior is preserved exactly.

Closes the bug described in issue.md (area: repair, area: target-validation, multi-repo).

Why config alone wasn't enough before

config/target-repositories.json already existed, but prepareTargetToolchain, requiredValidationCommands, and preflightTargetValidationPlan all ignored it for these decisions. So even with a clawhub entry in place, three things still fired against bun targets:

  1. prepareTargetToolchain threw unsupported target package manager when package.json#packageManager did not start with pnpm@.
  2. requiredValidationCommands (in combination with the prompts/repair/autonomous.md default) injected pnpm check:changed for every OpenClaw-org repo, not just openclaw/openclaw.
  3. preflightTargetValidationPlan then rejected that command via packageScriptRequirement because clawhub has no check:changed, and execute-fix-artifact.ts treats validation_script_missing as terminal.

What changed

New per-repo toolchain config

config/target-repositories.json now declares, for every repo and every generic fallback:

  • package_manager: "pnpm" | "bun" | "npm"
  • validation_commands: string[] — base commands always added before fixArtifact-supplied ones
  • changed_gate: { command, required_script } | null — the local incremental gate, or null to disable changed-gate normalization

Concrete entries:

Repo package_manager validation_commands changed_gate
openclaw/openclaw pnpm [] pnpm check:changed / check:changed
openclaw/clawhub bun ["bun run check"] null
openclaw/clawsweeper pnpm [] null
openclaw/fs-safe pnpm [] null
openclaw/* fallback pnpm [] null
steipete/* fallback pnpm [] null

openclaw/openclaw's gate is pinned through a new core_target_overrides block so the runtime never falls back to "no gate" for it. There is also a code-level safety net that returns the same OpenClaw gate if the config file ever drops the entry.

New module: src/repair/target-toolchain-config.ts

  • Loads, caches, and validates the toolchain table from config/target-repositories.json.
  • Exposes resolveTargetRepoToolchain(targetRepo) — looks up by repo, falls back to owner-level generic_fallbacks, then to a built-in default.
  • Exposes __resetTargetRepoToolchainCache() for tests.

Refactor: src/repair/target-validation.ts

  • TargetValidationOptions accepts an optional toolchain override; tests inject it directly to avoid touching the config file.
  • prepareTargetToolchain is split into three branches:
    • preparePnpmToolchain — unchanged behavior (corepack + pnpm install --frozen-lockfile with the existing ERR_PNPM_OUTDATED_LOCKFILE fallback).
    • prepareBunToolchainbun --version sanity check, then bun install --frozen-lockfile. On lockfile drift, fall back to bun install --no-frozen-lockfile and git checkout -- bun.lock bun.lockb. Surfaces a clear error when bun is not on PATH.
    • prepareNpmToolchainnpm ci if package-lock.json exists, else npm install.
  • requiredValidationCommands now unions commands ∪ additionalValidationCommands ∪ toolchain.baseValidationCommands and only appends toolchain.changedGate.command when the gate's requiredScript is actually present in the target's package.json#scripts.
  • requiresOpenClawChangedGate is replaced by a generic requiresChangedGate(cwd, toolchain) plus an isChangedGateCommand(parts, options) helper. validationFallbackCommands and shouldRetryValidationCommand use the new helper, so:
    • bun / npm targets either match their configured gate (and get merge-base recovery / one transient retry), or have changed_gate: null and skip those branches cleanly.
    • openclaw/openclaw still gets pnpm check:changed-specific recovery and retry, exactly as before.
  • resolveAllowedValidationCommands rewrites stale fixArtifact commands to the configured gate instead of the literal pnpm check:changed. The pnpm-specific normalization (vitest run, test, test:serial path rewriting, expensive-script downgrade) is now gated on toolchain.packageManager === "pnpm", so bun targets pass their own commands through unchanged.
  • restoreTargetLockfile(cwd, lockfile) is parameterized — pnpm uses pnpm-lock.yaml, bun restores both bun.lock and bun.lockb.

src/repair/validation-command-utils.ts

  • packageScriptRequirement recognizes bun run <script> and maps it to { name: "<script>", command: "bun run <script>" }.
  • bun is added to the allowed-executable list so parseAllowedValidationCommand("bun run check") no longer throws unsupported validation command.

Prompts & docs

  • prompts/repair/autonomous.md (L69) — the LLM is now told the local gate is whichever command the target repo declares in config/target-repositories.json#changed_gate, with explicit guidance not to emit pnpm check:changed against non-openclaw/openclaw repos.
  • docs/repair/automerge-flow.md (L108) — the same description for human readers.

This is the prompt-side fix for the second root cause in the issue (the OpenClaw default leaking into other repos).

How openclaw/openclaw stays compatible

  • Config: core_target_overrides["openclaw/openclaw"] pins package_manager: pnpm and changed_gate: pnpm check:changed / check:changed.
  • Code: even if the config entry is removed, resolveTargetRepoToolchain("openclaw/openclaw") returns the same pnpm + pnpm check:changed toolchain.
  • All existing pnpm-shaped behavior in requiredValidationCommands, preflightTargetValidationPlan, resolveAllowedValidationCommands, validationFallbackCommands, and shouldRetryValidationCommand is semantically identical for OpenClaw inputs (verified by the existing tests, see below).

Tests

test/repair/target-validation.test.ts is extended with:

  • bunPackageFixture(scripts) — writes package.json with packageManager: "bun@1.1.0" and a bun.lock.
  • clawhubToolchain() — injects { packageManager: "bun", baseValidationCommands: ["bun run check"], changedGate: null }.
  • validationOptions(targetRepo, extra) now spreads extras so tests can pass the toolchain override without disk I/O.

Three new bun-shaped cases:

  1. bun-based target repos do not get pnpm check:changed injectedrequiredValidationCommands([], cwd, opts) returns ["bun run check"].
  2. bun-based target repos pass preflight when their script existspreflightTargetValidationPlan({ validation_commands: ["bun run check"] }) returns { status: "passed", resolved_commands: ["bun run check"], available_scripts: ["check"] }.
  3. bun-based target repos surface the real script gap instead of mapping to pnpm check:changed — even if a stale fixArtifact carries pnpm check:changed, preflight no longer silently rewrites it to the OpenClaw gate; it returns status: "blocked", code: "validation_script_missing", missing_script: "check:changed" so upstream sanitization can drop the command instead of letting the worker no-op.

All previously passing OpenClaw tests are untouched by intent and unchanged in fixture content.

Repro / verification

Before:

  1. Open a PR against openclaw/clawhub and opt it into ClawSweeper automerge.
  2. Worker exits with validation_script_missing: required pnpm check:changed is unavailable in target checkout. No push, rebase, replacement PR, merge, or re-review.

After:

  1. Open the same PR.
  2. Worker prepares the target toolchain via prepareBunToolchain (bun install --frozen-lockfile).
  3. Preflight reports passed for bun run check, since clawhub/package.json#scripts.check exists.
  4. runAllowedValidationCommands runs bun run check. Push / rebase / merge / re-review proceed normally.

Local validation:

nvm use 22
corepack enable
pnpm install
pnpm build
node --test

The new bun cases plus the existing pnpm cases are all expected to pass.

Risk & rollback

  • Risk surface: localized to the validation pipeline. No changes to issue routing, comment routing, GitHub mutation surfaces, or the executor's terminal-outcome detector.
  • Compat: openclaw/openclaw paths are preserved through both config and code-level fallbacks; tests cover both.
  • Rollback: revert the four touched source files, the test, the config, and the prompt/docs paragraph. The new module file can be deleted; no other consumer imports it.

Files changed

  • New: src/repair/target-toolchain-config.ts
  • Modified:
    • src/repair/target-validation.ts
    • src/repair/validation-command-utils.ts
    • config/target-repositories.json
    • test/repair/target-validation.test.ts
    • prompts/repair/autonomous.md
    • docs/repair/automerge-flow.md

Suggested labels

area: repair, area: target-validation, bug, multi-repo

Real behaviour proof

Clipboard_Screenshot_1780368988 Clipboard_Screenshot_1780369101

@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented Jun 2, 2026

Codex review: needs real behavior proof before merge. Reviewed June 2, 2026, 2:38 AM ET / 06:38 UTC.

Summary
Adds per-repository toolchain validation config, Bun/NPM target preparation, Bun command parsing, docs/prompt updates, and regression tests for ClawHub validation.

Reproducibility: yes. from source inspection: current main hard-codes pnpm target preparation, and the PR diff still reaches bun --version without a Bun setup step in the repair executor. I did not run a live ClawHub automerge job.

Review metrics: 2 noteworthy metrics.

  • PR surface: 9 files changed, +772/-32. The patch touches executor validation, deterministic automerge artifacts, config, docs/prompts, and tests, so runtime proof matters before merge.
  • Toolchains added: 2 added: bun and npm. New package-manager branches change the repair executor's runtime assumptions beyond the existing pnpm path.

Merge readiness
Overall: 🧂 unranked krab
Proof: 🦪 silver shellfish
Patch quality: 🧂 unranked krab
Result: blocked until stronger 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] Provision Bun explicitly in the repair execution path or document a maintainer-approved runner guarantee with version proof.
  • [P1] Add redacted live executor proof showing a ClawHub checkout reaches bun install --frozen-lockfile and bun run check.

Proof guidance:

  • [P1] Needs stronger real behavior proof before merge: The screenshots show local resolver/preflight snippets, not a real after-fix ClawHub executor run; add redacted terminal/log proof showing Bun setup/install and bun run check passing before merge. 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] Bun is not installed by the current repair execution workflow, so this PR can leave ClawHub automerge/autofix blocked at bun --version before validation runs.
  • [P1] The attached screenshots only show local resolver/preflight snippets, not a real ClawHub repair executor after-fix run.

Maintainer options:

  1. Provision Bun Before Merge (recommended)
    Add a pinned Bun setup/provisioning path used by repair execution before prepareBunToolchain runs, then prove a ClawHub target reaches bun run check.
  2. Accept Runner Image Dependency
    Maintainers could accept relying on the execution runner image to provide Bun, but the exact runner image and Bun version should be documented and proven before merge.
  3. Pause Until Live Proof
    Pause automerge until a redacted executor log or linked artifact shows the current head validating a real ClawHub checkout.
Copy recommended automerge instruction
@clawsweeper automerge

Special instructions:
Add an explicit pinned Bun setup/provisioning path used by repair execution before `prepareBunToolchain` runs, keep OpenClaw pnpm behavior unchanged, and add focused proof or coverage showing a ClawHub target can run `bun --version`, `bun install --frozen-lockfile`, and `bun run check`.

Next step before merge

  • [P1] The PR is automerge-armed and has one narrow repair: provision Bun before the new Bun validation path and refresh real behavior proof.

Security
Cleared: No concrete security or supply-chain regression was found; the notable issue is Bun availability, covered as an automation risk.

Review findings

  • [P1] Provision Bun before invoking Bun validation — src/repair/target-validation.ts:165
Review details

Best possible solution:

Land the config-driven toolchain path with an explicit pinned Bun provisioning step in the repair execution environment and live ClawHub validation proof before automerge.

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

Yes from source inspection: current main hard-codes pnpm target preparation, and the PR diff still reaches bun --version without a Bun setup step in the repair executor. I did not run a live ClawHub automerge job.

Is this the best way to solve the issue?

No: the per-repo toolchain config is the right direction, but the implementation is incomplete until Bun is provisioned or an approved runner guarantee is documented and proven.

Full review comments:

  • [P1] Provision Bun before invoking Bun validation — src/repair/target-validation.ts:165
    For openclaw/clawhub, this path now calls bun --version before bun install or bun run check, but the repair execution workflow only sets up Node/pnpm before repair:execute-fix. On an executor without Bun already on PATH, ClawHub automerge/autofix still fails before the new validation command can run; add a pinned Bun setup/provisioning path or a maintainer-approved runner-image guarantee with proof.
    Confidence: 0.9

Overall correctness: patch is incorrect
Overall confidence: 0.9

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against a07fc1f94275.

Label changes

Label justifications:

  • P1: This targets a live automerge/autofix workflow failure for ClawHub and the remaining blocker can still stop that workflow at runtime.
  • merge-risk: 🚨 automation: Merging without provisioning Bun can keep repair execution failing before the new configured validation command runs.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🦪 silver shellfish and patch quality is 🧂 unranked krab.
  • status: 🚀 automerge armed: This PR is in ClawSweeper's automerge lane. Needs stronger real behavior proof before merge: The screenshots show local resolver/preflight snippets, not a real after-fix ClawHub executor run; add redacted terminal/log proof showing Bun setup/install and bun run check passing before merge. 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.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The screenshots show local resolver/preflight snippets, not a real after-fix ClawHub executor run; add redacted terminal/log proof showing Bun setup/install and bun run check passing before merge.
Evidence reviewed

Acceptance criteria:

  • [P1] pnpm run build.
  • [P1] pnpm run test:unit.
  • [P1] pnpm run check.

What I checked:

  • PR diff requires ambient Bun: The PR's new prepareBunToolchain path calls run("bun", ["--version"]) and documents that Bun is expected to be on PATH, but the diff does not add a provisioning step before this call. (src/repair/target-validation.ts:165, 154560f58016)
  • Current repair executor setup is pnpm-only: The repair execution job sets up ClawSweeper with ./.github/actions/setup-pnpm before pnpm run repair:execute-fix; no matching Bun setup appears in the current workflow path. (.github/workflows/repair-cluster-worker.yml:330, a07fc1f94275)
  • Shared setup action provisions Node and pnpm only: The setup action installs Node 24 and activates pnpm through Corepack; it does not install Bun. (.github/actions/setup-pnpm/action.yml:19, a07fc1f94275)
  • Target validation is invoked during repair execution: execute-fix-artifact.ts calls prepareTargetToolchain after checking out the source PR branch, so a missing Bun binary blocks the repair path before validation commands run. (src/repair/execute-fix-artifact.ts:824, a07fc1f94275)
  • ClawHub itself pins Bun in CI: The ClawHub setup action uses a pinned oven-sh/setup-bun action and then runs bun install --frozen-lockfile, which supports the requested toolchain direction but does not provision Bun inside ClawSweeper's executor.
  • Proof screenshots are local snippets: The attached screenshots show local Node resolver/preflight output, not a real ClawHub repair executor run showing Bun setup, install, and bun run check after the fix.

Likely related people:

  • Tak Hoffman: Current main blame ties prepareTargetToolchain, deterministic automerge validation command generation, target repo config, and execute-fix validation options to the initial repair-lane implementation. (role: introduced behavior; confidence: high; commits: 9b0b0b391733; files: src/repair/target-validation.ts, src/repair/deterministic-automerge-result.ts, src/repair/execute-fix-artifact.ts)
  • Peter Steinberger: Recent adjacent commits adjusted repair prompt/result policy around automerge validation and release-note handling, so this area has shared recent stewardship. (role: recent adjacent contributor; confidence: medium; commits: 3f970f0fb25e; files: src/repair/deterministic-automerge-result.ts, prompts/repair/autonomous.md)
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. P1 Urgent regression or broken agent/channel workflow affecting real users now. merge-risk: 🚨 automation 🚨 Merging this PR could break CI, automerge, proof capture, label sync, or automation. labels Jun 2, 2026
@momothemage
Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented Jun 2, 2026

🦞🧹
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.

Re-review progress:

@clawsweeper clawsweeper Bot added the proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. label Jun 2, 2026
@momothemage
Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented Jun 2, 2026

🦞🧹
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.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. labels Jun 2, 2026
@momothemage
Copy link
Copy Markdown
Contributor Author

@clawsweeper automerge

@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented Jun 2, 2026

🦞🔧
ClawSweeper picked up the repair feedback.

Source: clawsweeper[bot]
Feedback: structured ClawSweeper needs-human verdict with repairable P-severity findings (sha=154560f580169c3df2273c6b1f858d4fde85d753)
Action: repair worker queued. Run: https://github.com/openclaw/clawsweeper/actions/runs/26803068321
Model: gpt-5.5

I will update this PR branch, or open a safe credited replacement, if the repair worker finds a narrow fix.

Automerge progress:

  • 2026-06-02 04:39:41 UTC review queued 154560f58016 (after repair)
  • 2026-06-02 06:39:05 UTC review requested repair 154560f58016 (structured ClawSweeper needs-human verdict with repairable P-severity findings...)
  • 2026-06-02 06:32:11 UTC review queued 154560f58016 (queued)

@clawsweeper clawsweeper Bot added clawsweeper:automerge Maintainer opted this ClawSweeper PR into bounded ClawSweeper-reviewed automerge rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane. clawsweeper:human-review ClawSweeper automerge is paused for maintainer review and removed 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. labels Jun 2, 2026
@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented Jun 2, 2026

🦞✅
ClawSweeper is pausing this repair loop for human review.

Source: clawsweeper[bot]
Reason: - [P1] The remaining blocker is contributor or maintainer proof from a real ClawHub executor run, plus any maintainer choice on explicit Bun setup; no narrow code defect is currently established for an automated repair...; Cleared: The diff broadens target validation to Bun but does not add new secrets, workflow permissions, dependency sources, or unrelated third-party execution beyond configured target-repo validat... (sha=025827dab927cab0ab37ab08750ae66082b2689d)

Why human review is needed:
This item has security-sensitive risk. ClawSweeper is pausing instead of making an autonomous change that could affect trust, credentials, permissions, or exposure.

What the maintainer can do as a next step:
If the maintainer accepts the current risk and wants ClawSweeper to continue merge gates, comment @clawsweeper approve. If the security-sensitive detail still needs changes, describe the safe path or push the fix, then comment @clawsweeper automerge. If the risk should not be automated, keep the PR paused for manual review or comment @clawsweeper stop.

I added clawsweeper:human-review and left the final call with a maintainer.

@momothemage
Copy link
Copy Markdown
Contributor Author

@clawsweeper approve

Confirming the choice from the clawhub side:

  • clawhub CI already standardises on bun via a composite action at
    .github/actions/setup-bun/action.yml:
    • oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6
      (pinned SHA), bun-version: 1.3.10
    • bun install --frozen-lockfile
  • Every job in .github/workflows/ci.yml (static / unit / packages /
    types-build / e2e-http / playwright-smoke / playwright-local-auth)
    uses that action and then runs bun run ci:*. There is no
    pnpm check:changed in this repo.

@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented Jun 2, 2026

🦞👀
ClawSweeper picked this up.

Command router queued. I will update this comment with the next step.

@clawsweeper clawsweeper Bot removed the clawsweeper:human-review ClawSweeper automerge is paused for maintainer review label Jun 2, 2026
@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Jun 2, 2026
@momothemage
Copy link
Copy Markdown
Contributor Author

@clawseeper approve

@momothemage
Copy link
Copy Markdown
Contributor Author

@clawsweeper automerge

@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented Jun 2, 2026

🦞👀
ClawSweeper picked this up.

Command router queued. I will update this comment with the next step.

Re-review progress:

@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented Jun 2, 2026

ClawSweeper 🐠 reef update

Thanks for the contribution here. ClawSweeper could not safely push to this branch, so it opened a replacement PR from a writable branch and carried the contributor trail along with it.

Why replacement: ClawSweeper could not update the source PR branch directly; GitHub did not grant sufficient push rights to the bot for that branch.
Replacement PR: #241
Why close: this run explicitly closes the superseded source PR after the credited replacement PR is open, so review continues in one place.
Closing this source PR because this run explicitly enabled source-PR closeout.
Attribution is preserved in the replacement PR body and release-note trail.
Co-author credit kept:

fish notes: model gpt-5.5, reasoning high; reviewed against de017c3.

@clawsweeper clawsweeper Bot closed this Jun 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clawsweeper:automerge Maintainer opted this ClawSweeper PR into bounded ClawSweeper-reviewed automerge merge-risk: 🚨 automation 🚨 Merging this PR could break CI, automerge, proof capture, label sync, or automation. P1 Urgent regression or broken agent/channel workflow affecting real users now. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant