Skip to content

fix(config): allow explicit main agent bindings when agents.list is non-empty#89419

Open
1052326311 wants to merge 1 commit into
openclaw:mainfrom
1052326311:fix/main-agent-binding-rejection
Open

fix(config): allow explicit main agent bindings when agents.list is non-empty#89419
1052326311 wants to merge 1 commit into
openclaw:mainfrom
1052326311:fix/main-agent-binding-rejection

Conversation

@1052326311

@1052326311 1052326311 commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Closes #89412

What Problem This Solves

Route bindings to the implicit default agent "main" are rejected at config load and silently removed by doctor --fix when agents.list is non-empty. This breaks the documented multi-agent pattern where named agents are listed while the implicit main agent handles a catch-all route.

Why This Change Was Made

The exact reserved DEFAULT_AGENT_ID is treated as a valid explicit binding target across the three ownership boundaries that consume it:

  • config schema validation accepts exact "main"
  • doctor binding repair preserves exact "main" while pruning missing named agents and normalized variants
  • route resolution preserves the explicit main binding instead of falling back to a listed agent

Evidence

  • Exact head: 5373df42a4, rebased onto current main at cadad3b7bd.
  • Environment: macOS source checkout, Node.js 24.14.0 for tests and Node.js 22.23.0 for the standalone source probe.
  • Before the fix, the same config failed with bindings.0.agentId: Unknown agent id "main" (not in agents.list).
  • On exact candidate head, a standalone source probe called OpenClawSchema.safeParse, pruneBindingsForMissingAgents, and resolveAgentRoute directly:
{
  "schemaAcceptedMain": true,
  "schemaRejectedMainVariant": true,
  "doctorBindings": ["main"],
  "doctorChanges": [
    "Removed 2 bindings that referenced missing agents.list ids."
  ],
  "routedAgentId": "main",
  "routedSessionKey": "agent:main:main",
  "matchedBy": "binding.account"
}
  • Focused current-head validation:
node scripts/run-vitest.mjs run src/commands/doctor/shared/legacy-config-migrate.test.ts src/config/config.schema-regressions.test.ts src/routing/resolve-route.test.ts

Test Files  3 passed (3)
Tests       235 passed (235)
  • Scoped oxfmt, oxlint, and git diff --check passed.
  • No credentials or live channel endpoints were used; the proof exercises the production schema, doctor repair, and routing functions with a redacted direct-message route.

@openclaw-barnacle openclaw-barnacle Bot added commands Command implementations size: XS triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels Jun 2, 2026
@clawsweeper

clawsweeper Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 20, 2026, 3:09 PM ET / 19:09 UTC.

Summary
The PR allows the exact implicit main agent binding when agents.list contains named agents, preserving it through config validation, doctor repair, and route resolution with regression tests.

PR surface: Source +12, Tests +82. Total +94 across 6 files.

Reproducibility: yes. at source level: a populated agents.list plus an exact bindings[].agentId: "main" follows the validation, doctor, and route paths covered by the added tests and the contributor’s current-head production-function probe.

Review metrics: 1 noteworthy metric.

  • Implicit-main contract: 3 runtime boundaries changed, 4 focused regressions added. The same reserved-ID rule now spans persisted-config validation, repair, and message-route resolution, reducing cross-boundary drift.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #89412
Summary: This PR is the active candidate fix for the reported rejection, doctor-pruning, and fallback-routing behavior; it should remain open until merged or otherwise resolved.

Members:

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

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🐚 platinum hermit
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

  • [P1] Merging intentionally changes existing populated-agents.list configurations from rejecting or pruning exact main bindings to accepting and preserving them; the schema, doctor, and resolver changes must land together so a valid config cannot still be deleted or rerouted.

Maintainer options:

  1. Land the compatibility repair together (recommended)
    Accept the intentional restoration of exact main bindings because the patch updates validation, doctor repair, routing, and regression coverage as one bounded contract.
  2. Pause for contract clarification
    Pause only if maintainers intend populated agents.list to prohibit explicit implicit-main bindings despite the linked documented multi-agent use case.

Next step before merge

  • [P2] No mechanical repair is indicated; this is ready for ordinary maintainer merge review with the compatibility risk assessed above.

Security
Cleared: The diff is limited to local config validation, doctor filtering, routing, and tests; it introduces no dependency, permission, secret, network, or supply-chain surface.

Review details

Best possible solution:

Land the three-boundary compatibility repair together, retaining exact-ID validation so only the reserved implicit main agent receives this exception.

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

Yes, at source level: a populated agents.list plus an exact bindings[].agentId: "main" follows the validation, doctor, and route paths covered by the added tests and the contributor’s current-head production-function probe.

Is this the best way to solve the issue?

Yes. Treating only the exact existing DEFAULT_AGENT_ID as valid at all three ownership boundaries is narrower and safer than weakening unknown-agent validation or adding a new configuration mode.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes current-head redacted terminal output from the production schema, doctor repair, and route resolver, showing the expected preserved main binding and resolved main session; focused tests supplement that proof.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit. Replaced prior rating: 🦪 silver shellfish.
  • remove mantis: telegram-visible-proof: Current Telegram visible-proof status is not_needed.
  • remove rating: 🦪 silver shellfish: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.

Label justifications:

  • P1: The patch addresses a documented multi-agent setup that can otherwise fail at config load and misroute channel traffic.
  • merge-risk: 🚨 compatibility: It changes validation and doctor behavior for persisted multi-agent configurations containing an explicit main binding.
  • merge-risk: 🚨 message-delivery: The route-resolution change determines whether a matching channel binding reaches the implicit main agent or falls back to a listed agent.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit. Replaced prior rating: 🦪 silver shellfish.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Sufficient (terminal): The PR body includes current-head redacted terminal output from the production schema, doctor repair, and route resolver, showing the expected preserved main binding and resolved main session; focused tests supplement that proof.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes current-head redacted terminal output from the production schema, doctor repair, and route resolver, showing the expected preserved main binding and resolved main session; focused tests supplement that proof.
Evidence reviewed

PR surface:

Source +12, Tests +82. Total +94 across 6 files.

View PR surface stats
Area Files Added Removed Net
Source 3 16 4 +12
Tests 3 82 0 +82
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 6 98 4 +94

What I checked:

  • Schema boundary: The PR permits only the exact reserved DEFAULT_AGENT_ID before applying the existing normalized agents.list membership validation, so unknown IDs remain rejected while main is accepted. (src/config/zod-schema.ts:31, 5373df42a44f)
  • Doctor repair boundary: The binding-repair filter preserves the exact implicit main binding but continues pruning missing IDs and normalized variants that are not actually listed. (src/commands/doctor/shared/legacy-config-binding-repair.ts:22, 5373df42a44f)
  • Routing boundary: Route selection resolves a normalized implicit-main target back to DEFAULT_AGENT_ID, avoiding the prior fallback to the first listed agent. (src/routing/resolve-route.ts:161, 5373df42a44f)
  • Focused regression coverage: The branch adds coverage for exact main acceptance, variant rejection, doctor preservation/pruning, and matched-route resolution to the main session. (src/config/config.schema-regressions.test.ts:415, 5373df42a44f)
  • Feature provenance: The merged onboarding preservation change introduced populated-agents.list binding validation; this PR is a narrow repair to its implicit-main exception rather than a parallel routing design. (src/config/zod-schema.ts:31, bbdff39b6a3f)
  • Current-head behavior proof: The PR body records a current-head direct probe of the production schema, doctor repair, and route resolver: exact main is accepted and preserved, an invalid variant is rejected, and the matched route resolves to agent:main:main. (5373df42a44f)

Likely related people:

  • yetval: Authored the merged onboarding/config-validation repair that added the populated-agents.list binding validation this PR refines with the implicit-main exception. (role: introduced adjacent validation contract; confidence: medium; commits: bbdff39b6a3f; files: src/config/zod-schema.ts, src/commands/doctor/shared/legacy-config-binding-repair.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.
Review history (3 earlier review cycles)
  • reviewed 2026-06-22T04:29:41.111Z sha 1045e21 :: needs real behavior proof before merge. :: [P2] Add regressions for the main binding contract
  • reviewed 2026-06-30T01:06:39.039Z sha 1045e21 :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-07T06:51:11.422Z sha e75eb86 :: needs real behavior proof before merge. :: none

@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. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. labels Jun 2, 2026
@1052326311
1052326311 force-pushed the fix/main-agent-binding-rejection branch from edcb95b to b3bb2cf Compare June 8, 2026 17:00
@1052326311

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review — updated proof with live before/after runtime verification showing 'main' agent binding rejection is fixed.

@clawsweeper

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

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Jun 8, 2026
1052326311 pushed a commit to 1052326311/openclaw that referenced this pull request Jun 9, 2026
…on-empty (openclaw#89419)

Treat DEFAULT_AGENT_ID ('main') as a valid explicit binding target in
both config schema validation and doctor binding pruning. Previously
route bindings to agentId 'main' were rejected when agents.list was
non-empty, breaking the documented multi-agent config pattern.

Added regression tests for explicit main accepted and unknown agentId
still rejected.
@1052326311
1052326311 force-pushed the fix/main-agent-binding-rejection branch from b3bb2cf to 047d736 Compare June 9, 2026 03:37
@1052326311

Copy link
Copy Markdown
Contributor Author

Updated with regression tests:

  1. schema validation test: agentId: "main" is accepted when agents.list is non-empty
  2. boundary test: unknown agentId ("ghost") is still rejected when agents.list is non-empty
  3. Uses DEFAULT_AGENT_ID constant consistently — only the explicit default-agent id is allowed, not arbitrary values that normalize to "main"

The fix remains minimal (+5 lines source, +30 lines test). This addresses the proof/regression concerns.

@clawsweeper re-review

@clawsweeper

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

Re-review progress:

1052326311 pushed a commit to 1052326311/openclaw that referenced this pull request Jun 9, 2026
…w#89419 v2)

Schema and doctor pruning now use raw string comparison (agentId ===
DEFAULT_AGENT_ID) instead of normalized comparison. This ensures only
the exact literal 'main' bypasses the unknown-agent check — variants
like 'MAIN', '  main ', or 'Main' are still rejected.

Added:
- Strict variant rejection test (schema: MAIN/  main /Main → rejected)
- Doctor regression test (preserves 'main', prunes 'MAIN')
- Doctor 'normalize-equivalent variant' test
@1052326311
1052326311 force-pushed the fix/main-agent-binding-rejection branch from 047d736 to 893bfb8 Compare June 9, 2026 09:43
@1052326311

Copy link
Copy Markdown
Contributor Author

v2: raw-id guard for explicit main agent bypass.

P1 addressed — Tighten schema exception:

  • Before: normalizeAgentId(agentId) !== DEFAULT_AGENT_ID — accepted variants like MAIN, main
  • After: agentId !== DEFAULT_AGENT_ID — only exact literal "main" bypasses

P1 addressed — Doctor raw-id guard:

  • Doctor pruning now short-circuits with agentId === DEFAULT_AGENT_ID before normalize
  • Variant `"MAIN"" is correctly pruned as unknown

New tests:

  • Schema: strict variant rejection (MAIN, main, Main → all rejected)
  • Schema: explicit main accepted, ghost rejected (existing)
  • Doctor: prunes missing agents (ghost removed, alpha kept)
  • Doctor: preserves explicit main + prunes ghost
  • Doctor: variant "MAIN" is pruned (only literal "main" survives)

@clawsweeper re-review

@clawsweeper

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

1052326311 pushed a commit to 1052326311/openclaw that referenced this pull request Jun 9, 2026
…w#89419 v2)

Schema and doctor pruning now use raw string comparison (agentId ===
DEFAULT_AGENT_ID) instead of normalized comparison. This ensures only
the exact literal 'main' bypasses the unknown-agent check — variants
like 'MAIN', '  main ', or 'Main' are still rejected.

Added:
- Strict variant rejection test (schema: MAIN/  main /Main → rejected)
- Doctor regression test (preserves 'main', prunes 'MAIN')
- Doctor 'normalize-equivalent variant' test
@1052326311
1052326311 force-pushed the fix/main-agent-binding-rejection branch from 893bfb8 to 266c56a Compare June 9, 2026 09:49
@1052326311

Copy link
Copy Markdown
Contributor Author

v3: fixed test file regression (restored full 3151-line doctor test suite), added 2 doctor regression tests, tightened schema to raw-id guard.

Critical fix: Previous force push accidentally replaced the full 3151-line legacy-config-migrate.test.ts with a 52-line stub. Restored original + appended 2 new tests.

Changes summary:

  1. Schema (zod-schema.ts): Changed normalizeAgentId(agentId) !== DEFAULT_AGENT_IDagentId !== DEFAULT_AGENT_ID — only exact literal "main" bypasses
  2. Doctor (legacy-config-core-migrate.ts): Added raw-id short-circuit agentId === DEFAULT_AGENT_ID before normalize
  3. Schema tests: +3 tests (accept main, reject ghost, reject MAIN/variants)
  4. Doctor tests (+2 appended to existing 3151-line suite):
    • Preserves explicit main + prunes ghost
    • Prunes normalize-variant "MAIN" (only literal "main" survives)

Net diff: +105, -4 (4 files)

@clawsweeper re-review

@clawsweeper

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

Re-review progress:

@clawsweeper clawsweeper Bot added mantis: telegram-visible-proof Mantis should capture Telegram visible proof. and removed merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. labels Jun 19, 2026
@openclaw-barnacle openclaw-barnacle Bot added the triage: needs-pr-context Candidate: external PR body lacks required problem context or evidence. label Jun 20, 2026
@1052326311

Copy link
Copy Markdown
Contributor Author

v5 fix (commit 1045e21): addressed sweeper P1 predicate-symmetry issue.

What changed in doctor:

  • Removed agentIds.add(DEFAULT_AGENT_ID) from the normalized set
  • Kept the explicit agentId === DEFAULT_AGENT_ID check in the filter
  • Result: only exact literal "main" survives doctor pruning (normalized variants like "MAIN", " Main " are pruned) — symmetric with schema validation

Schema and route resolution unchanged (already correct in v4).

@clawsweeper re-review

@clawsweeper

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

@1052326311
1052326311 force-pushed the fix/main-agent-binding-rejection branch from 1045e21 to e75eb86 Compare July 7, 2026 06:40
@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 Jul 7, 2026
@1052326311
1052326311 force-pushed the fix/main-agent-binding-rejection branch from e75eb86 to 4ca154b Compare July 20, 2026 16:05

1052326311 commented Jul 20, 2026

Copy link
Copy Markdown
Contributor Author

Rebuilt this fix as a single commit on current main (154a49a78b) after the config-schema split, keeping the PR limited to the implicit-main binding behavior.

Current-head behavior covered:

  • config validation accepts the exact reserved main binding when agents.list contains only named agents
  • normalized variants such as MAIN remain rejected unless explicitly present, preserving the existing validation boundary
  • routing preserves an explicit main binding instead of falling back to the configured default agent
  • doctor migration preserves exact main bindings while still pruning missing named agents

Verification on head 4ca154bac8:

  • node scripts/run-vitest.mjs run src/commands/doctor/shared/legacy-config-migrate.test.ts src/config/config.schema-regressions.test.ts src/routing/resolve-route.test.ts
  • 3 Vitest shards passed, 235 tests passed
  • scoped oxfmt --check, oxlint, and git diff --check passed

Current-head production-function proof (schema + doctor repair + route resolution):

{
  "schemaAcceptedMain": true,
  "schemaRejectedGhost": true,
  "doctorBindings": ["main"],
  "doctorChanges": [
    "Removed 1 binding that referenced missing agents.list ids."
  ],
  "routedAgentId": "main",
  "routedSessionKey": "agent:main:main",
  "matchedBy": "binding.account"
}

This was produced directly by OpenClawSchema.safeParse, pruneBindingsForMissingAgents, and resolveAgentRoute on the exact PR head. It demonstrates that an explicit main binding survives config load and doctor repair, and resolves to the main session through the production routing path. No credentials, network endpoints, or private channel identifiers were used.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 20, 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.

Re-review progress:

@1052326311
1052326311 force-pushed the fix/main-agent-binding-rejection branch from 4ca154b to 94b448e Compare July 20, 2026 17:18

Copy link
Copy Markdown
Contributor Author

Rebased onto current main at exact head 94b448ebe8, reran 235 focused tests, and updated the PR body with direct production-function proof for schema validation, doctor repair, and route resolution. @clawsweeper re-review

@openclaw-barnacle openclaw-barnacle Bot removed the triage: needs-pr-context Candidate: external PR body lacks required problem context or evidence. label Jul 20, 2026
@1052326311
1052326311 force-pushed the fix/main-agent-binding-rejection branch from 94b448e to 8516414 Compare July 20, 2026 17:45

Copy link
Copy Markdown
Contributor Author

Rebased cleanly onto latest main (febeb6ac12) at exact head 8516414f89. The production schema/doctor/routing proof remains unchanged; focused suites pass 235/235 and scoped format/lint/diff checks pass.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 20, 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.

Re-review progress:

@1052326311
1052326311 force-pushed the fix/main-agent-binding-rejection branch from 8516414 to 764c465 Compare July 20, 2026 17:56

Copy link
Copy Markdown
Contributor Author

Rebased onto ea148e728d, which includes upstream #111928 fixing the shared Control UI startup-budget failure seen in the prior CI run. Exact head 764c465f7c; 235/235 focused tests and scoped static checks pass.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 20, 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.

Re-review progress:

Copy link
Copy Markdown
Contributor Author

Latest exact-head CI is complete: all 30 jobs passed; the branch is mergeable and current-head schema/doctor/routing proof is in the PR body. The prior review lease for 764c465f7c6a0ba0f0099a48d97c3bb3a7cd5aeb expired without updating the durable verdict. @clawsweeper re-review

@1052326311
1052326311 force-pushed the fix/main-agent-binding-rejection branch from 764c465 to 5373df4 Compare July 20, 2026 19:03

Copy link
Copy Markdown
Contributor Author

Rebased cleanly onto current main (cadad3b7bd) at exact head 5373df42a44f12e24f28373f47eb2ce702ddccef. All 8 exact-head GitHub workflows passed; the 235 focused tests and scoped format/lint/diff checks also pass locally. The PR is mergeable. @clawsweeper re-review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commands Command implementations mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. P1 High-priority user-facing bug, regression, or broken workflow. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. size: S status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: binding to the implicit default agent "main" is rejected at config load and deleted by doctor --fix when agents.list is non-empty

2 participants