Skip to content

feat(msteams): support multiple bot accounts#112811

Open
jimmypuckett wants to merge 9 commits into
openclaw:mainfrom
jimmypuckett:codex/msteams-multi-account-replacement-20260722
Open

feat(msteams): support multiple bot accounts#112811
jimmypuckett wants to merge 9 commits into
openclaw:mainfrom
jimmypuckett:codex/msteams-multi-account-replacement-20260722

Conversation

@jimmypuckett

@jimmypuckett jimmypuckett commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Related: #71058

What Problem This Solves

Resolves a problem where Microsoft Teams could only be configured as one bot identity per OpenClaw gateway. That made it difficult to run multiple Teams-visible agents, each with its own Teams app/bot registration, from the same OpenClaw instance.

Why This Change Was Made

This adds first-class account support to the Microsoft Teams channel while preserving the legacy single-bot configuration path. channels.msteams.accounts.<id> defines Teams bot accounts, channels.msteams.defaultAccount selects the implicit account, and existing root-level credentials and webhook configuration continue to work as the default account.

Named accounts keep identity fields explicit while shared tenant, policy, Graph/SSO, streaming, and delivery settings can be inherited from the root and overridden per account. Inbound handling, proactive sends, replies, Graph actions, delegated and SSO token state, polls, sent-message state, conversation state, probes, setup flows, and routing carry account context.

This PR intentionally keeps the existing per-account listener model. Route-based multiplexing on one listener remains a possible focused follow-up.

User Impact

Operators can configure multiple Microsoft Teams bot identities on one gateway and bind each account to the agent that should answer. Existing root-level single-bot configurations remain valid and do not require bindings.

{
  bindings: [
    { agentId: "main", match: { channel: "msteams", accountId: "default" } },
    { agentId: "support", match: { channel: "msteams", accountId: "support" } },
  ],
  channels: {
    msteams: {
      tenantId: "<TENANT_ID>",
      defaultAccount: "default",
      accounts: {
        default: {
          appId: "<PRIMARY_CLIENT_ID>",
          appPassword: "<PRIMARY_CLIENT_SECRET>",
          webhook: { port: 3978 },
        },
        support: {
          appId: "<SUPPORT_CLIENT_ID>",
          appPassword: "<SUPPORT_CLIENT_SECRET>",
          webhook: { port: 3979 },
        },
      },
    },
  },
}

Evidence

  • Live multi-account smoke: two separate Microsoft Teams bot apps replied through one OpenClaw gateway using separate account identities and routes. Redacted screenshot: teams_screenshot_dale_legal_blurred
  • Focused upgrade compatibility: pnpm test -- extensions/msteams/src/conversation-store-state.test.ts extensions/msteams/src/channel.test.ts src/routing/resolve-route.test.ts passed (86 tests). It covers legacy root-level credentials routing to default, and confirms pre-account unscoped persisted conversation state remains readable and writable through the new default-account wrapper.
  • pnpm test:extension msteams: 82 files, 1,216 tests passed.
  • pnpm check:test-types: passed across core, extensions, and root tests.
  • pnpm lint --threads=8: passed.
  • pnpm config:channels:check: passed.
  • pnpm check:max-lines-ratchet --base upstream/main: passed.
  • pnpm run test:extensions:package-boundary:compile: 124 plugins passed.
  • pnpm deadcode:dependencies, pnpm deadcode:unused-files, and pnpm deadcode:exports: passed; unused-file/export scans reported zero entries.
  • pnpm docs:map:check: passed.
  • pnpm test -- src/cli/hooks-cli.process.test.ts: 3 tests passed; this is the exact upstream-only flaky test that failed on the obsolete PR head.
  • Diff audit against current upstream/main: 90 scoped files, no CHANGELOG.md, and git diff --check passed.
  • Scope cleanup removed unrelated rescue tests and an abandoned helper; locale files now add only the two required Teams webhook prompts per locale.
  • Codex review found and fixed two named-account isolation defects: inbound scoped config now retains the named default account, and directory self lookup no longer falls back to MSTEAMS_* credentials for a named default. Both have regression coverage.
  • A final full-diff Codex review and a separate post-merge schema-ownership audit found no additional high-confidence correctness issues.

AI-assisted: yes. I used Codex to implement, reconcile current upstream changes, test, audit, and review the change, and I reviewed the resulting behavior and code paths.


Replacement chain: this PR supersedes #104692, which superseded #97340. The first replacement moved the contribution from the Spinen organization fork to my personal fork so maintainers could edit it. During later recovery, #104692 remained internally attached to obsolete head b686b0171453 while its named fork branch moved to a clean, unrelated lineage, so that PR could no longer follow branch updates. This replacement uses a new branch, preserves both old PRs as review history, contains the audited feature commit, and merges current upstream/main without rebasing or rewriting any published branch.

@jimmypuckett
jimmypuckett requested a review from a team as a code owner July 23, 2026 00:14
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: msteams Channel integration: msteams gateway Gateway runtime scripts Repository scripts size: XL labels Jul 23, 2026
@jimmypuckett

Copy link
Copy Markdown
Contributor Author

Validated replacement head ed5788d after a forward-only merge of upstream/main (4a2a600). The prior published head 299d96a and that upstream head are both direct parents/ancestors; no history was rewritten. GitHub reports this PR MERGEABLE, and the fork branch ref and PR internal head both equal ed5788d. Local validation passed: check:test-types; 82 Microsoft Teams test files / 1,215 tests; lint; generated channel config check; max-lines ratchet; 124 extension package-boundary compiles; deadcode exports; docs map; and git diff --check. The exact PR diff against upstream/main is 91 files with no CHANGELOG.md.

Copy link
Copy Markdown
Contributor Author

Validated repaired head 20ab916a6d9 after a forward-only merge of current upstream/main (a7e38f4f1b5). The prior published head and current upstream head are ancestors/parents; no history was rewritten. Local HEAD, the fork branch ref, and this PR's internal head all equal 20ab916a6d9, and GitHub reports the PR mergeable.

The upstream merge had one real conflict because Teams config schemas moved from core into extension-owned config APIs. The resolution keeps upstream's new ownership boundary and relocates only the Teams multi-account refinement into the Teams extension. A separate review of that resolution found no correctness or ownership issues.

Validation on this exact head:

  • 82 Microsoft Teams test files / 1,216 tests passed
  • focused schema/directory/channel/monitor tests: 73 passed
  • test typecheck and lint passed
  • dependency, unused-file, and unused-export scans passed
  • bundled channel metadata and max-lines ratchet passed
  • all 124 extension package-boundary compiles passed
  • exact diff: 90 scoped files, no CHANGELOG.md, git diff --check clean

The cleanup also removes unrelated rescue tests and an abandoned helper; each locale file now adds only the two required Teams webhook prompts. Codex review regressions cover named inbound account scoping and named-default directory credential isolation.

Copy link
Copy Markdown
Contributor Author

Validated current head e7150dfa568 after the two narrow CI repairs: pnpm format:check, pnpm test -- src/docs/channel-config-examples.test.ts (3 passed), and pnpm test:extension msteams (82 files / 1,216 tests) all pass. The only GitHub CI failure is an unrelated timeout in src/system-agent/tui-backend.test.ts; no Teams code was changed for it. The fork ref and PR head match. The prior ClawSweeper lease expired without a final verdict.

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 23, 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 proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. feature: ✨ showcase ClawSweeper spotlight: unusually compelling feature idea for maintainer attention. 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: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. labels Jul 24, 2026
@clawsweeper

clawsweeper Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 24, 2026, 7:39 PM ET / 23:39 UTC.

ClawSweeper review

What this changes

The PR lets one OpenClaw gateway host multiple Microsoft Teams bot identities, routing each account to an agent while retaining the legacy single-bot configuration shape.

Merge readiness

Blocked until stronger real behavior proof is added - 6 items remain

This is a substantial, still-needed Microsoft Teams capability rather than an obsolete replacement branch. The proposed account model affects credentials, routing, persistent channel state, setup, and legacy configuration, so it needs explicit maintainer sponsorship of the public configuration contract plus upgrade-focused review before merge; the linked live smoke is promising but could not be independently inspected in this read-only environment.

Priority: P2
Reviewed head: e7150dfa5686588291ae8c1829f15aeebc80a772
Owner decision: Required. See Decision needed.

Review scores

Measure Result What it means
Overall readiness 🦐 gold shrimp (3/6) The patch has substantial scoped implementation and test coverage, but independently reviewable live behavior proof and an explicit maintainer decision on the new public contract remain necessary.
Proof confidence 🦐 gold shrimp (3/6) Needs stronger real behavior proof before merge: The PR body links a claimed redacted live Teams smoke, but the media could not be independently inspected here; before merge, maintainers should verify the after-fix evidence directly and ensure it contains no private credentials, endpoints, or user data. 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.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Needs proof Needs stronger real behavior proof before merge: The PR body links a claimed redacted live Teams smoke, but the media could not be independently inspected here; before merge, maintainers should verify the after-fix evidence directly and ensure it contains no private credentials, endpoints, or user data. 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 5 items Feature scope: The branch adds the public channels.msteams.accounts and channels.msteams.defaultAccount configuration surfaces and threads account context through the Teams channel runtime, setup, routing, secret resolution, Graph operations, and persistent state.
Legacy compatibility intent: The PR includes explicit coverage for legacy root-level Teams credentials routing to the default agent, while documenting that existing single-bot configurations remain valid.
Account isolation coverage: The branch adds account-specific scoping for conversation references, sent-message markers, delegated tokens, SSO tokens, polls, and named-account credential resolution; these are the central state and auth boundaries for the feature.
Findings None None.
Security None None.

How this fits together

Microsoft Teams is a plugin-backed channel whose webhook ingress selects an account and routes the conversation to an agent. That account context then determines credentials, Graph access, persisted conversation and token state, setup behavior, and outbound replies.

flowchart LR
  A[Teams bot webhooks] --> B[Account selection]
  B --> C[Agent routing]
  C --> D[Teams channel runtime]
  D --> E[Account-scoped credentials and state]
  E --> F[Replies and Graph actions]
Loading

Decision needed

Question Recommendation
Should OpenClaw adopt channels.msteams.accounts plus defaultAccount as the supported public model for multiple Teams bot identities on one gateway? Sponsor the account model: Approve the object-based account model, then require focused fresh-install and upgrade proof before merge.

Why: This is a new channel capability and configuration contract with compatibility-sensitive state and credential semantics; implementation correctness cannot decide whether this is the desired permanent product surface.

Before merge

  • Add real behavior proof - Needs stronger real behavior proof before merge: The PR body links a claimed redacted live Teams smoke, but the media could not be independently inspected here; before merge, maintainers should verify the after-fix evidence directly and ensure it contains no private credentials, endpoints, or user data. 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.
  • Resolve merge risk (P1) - Merging introduces two public Teams configuration keys and account-specific credential behavior; existing root-level single-bot deployments need explicit fresh-install and upgrade validation, not only schema acceptance.
  • Resolve merge risk (P1) - Account context is now persisted across conversations, polls, sent-message deduplication, delegated tokens, and SSO tokens. Maintainers should confirm the default-account compatibility behavior and isolation guarantees for existing stored state.
  • Resolve merge risk (P1) - The PR body supplies a live Teams smoke screenshot, but independent inspection of the attachment was unavailable here; maintainer review should verify the redacted proof directly before merge.
  • Complete next step (P2) - The remaining blocker is maintainer product acceptance of a new public Teams account contract plus direct review of compatibility and live proof, not a narrow mechanical repair.
Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Teams configuration surfaces 2 added public keys accounts and defaultAccount create a compatibility-sensitive configuration and upgrade contract for an existing channel.

Stored data model

Persistent data-model change detected: persistent cache schema: extensions/msteams/src/secret-contract.test.ts, serialized state: extensions/msteams/src/monitor-handler/session-turn.ts, serialized state: extensions/msteams/src/sent-message-cache.ts, serialized state: extensions/msteams/src/sso-token-store.ts, unknown-data-model-change: extensions/msteams/src/config-schema.ts, unknown-data-model-change: src/config/bundled-channel-config-metadata.generated.ts, and 1 more. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster

Relationship: fixed_by_candidate
Canonical: #71058
Summary: This PR is a candidate implementation of the still-open Teams multi-bot feature request; the earlier replacement PRs are superseded history rather than separate remaining work.

Members:

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

Merge-risk options

Maintainer options:

  1. Confirm the public account contract (recommended)
    Before merge, confirm that accounts and defaultAccount are the intended durable Teams configuration model and review the documented legacy fallback behavior.
  2. Accept the state and credential migration risk
    Merge with maintainer acceptance that existing Teams deployments rely on the branch’s default-account compatibility and persisted-state separation behavior.
  3. Pause for a narrower Teams design
    Close or defer this replacement branch if maintainers do not want to support a multi-account Teams configuration surface now.

Technical review

Best possible solution:

Sponsor one canonical Teams account model, retain the documented legacy single-bot behavior for existing installations, and land only after focused upgrade proof demonstrates that old root-level configuration and state remain usable while named accounts stay isolated.

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

Not applicable as a feature request. The contributor reports a real two-bot Teams smoke, but the supplied screenshot could not be independently inspected in this environment.

Is this the best way to solve the issue?

Unclear. The implementation follows the repository’s existing multi-account channel vocabulary, but maintainers must first confirm that this permanent Teams configuration model is preferable to a narrower or staged API.

AGENTS.md: found and applied where relevant.

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

Labels

Label changes:

  • add P2: Multiple Teams identities on one gateway is a meaningful channel capability, but the existing single-bot workflow remains available.
  • add merge-risk: 🚨 compatibility: The PR adds public Teams account/default configuration and changes how existing root-level credentials are resolved.
  • add merge-risk: 🚨 session-state: Conversation references, polls, sent-message records, and SSO/delegated tokens gain account-specific persistence behavior.
  • add merge-risk: 🚨 auth-provider: Named accounts select distinct bot credentials and Graph/delegated authentication paths.
  • add proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The PR body links a claimed redacted live Teams smoke, but the media could not be independently inspected here; before merge, maintainers should verify the after-fix evidence directly and ensure it contains no private credentials, endpoints, or user data.
  • add rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦐 gold shrimp and patch quality is 🐚 platinum hermit.
  • add feature: ✨ showcase: ClawSweeper spotlight: unusually compelling feature idea for maintainer attention. One gateway serving distinct Teams bot identities unlocks a concrete multi-agent organization workflow while preserving the existing single-bot setup.
  • add status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: The PR body links a claimed redacted live Teams smoke, but the media could not be independently inspected here; before merge, maintainers should verify the after-fix evidence directly and ensure it contains no private credentials, endpoints, or user data. 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.

Label justifications:

  • P2: Multiple Teams identities on one gateway is a meaningful channel capability, but the existing single-bot workflow remains available.
  • merge-risk: 🚨 compatibility: The PR adds public Teams account/default configuration and changes how existing root-level credentials are resolved.
  • merge-risk: 🚨 session-state: Conversation references, polls, sent-message records, and SSO/delegated tokens gain account-specific persistence behavior.
  • merge-risk: 🚨 auth-provider: Named accounts select distinct bot credentials and Graph/delegated authentication paths.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦐 gold shrimp and patch quality is 🐚 platinum hermit.
  • feature: ✨ showcase: ClawSweeper spotlight: unusually compelling feature idea for maintainer attention. One gateway serving distinct Teams bot identities unlocks a concrete multi-agent organization workflow while preserving the existing single-bot setup.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs stronger real behavior proof before merge: The PR body links a claimed redacted live Teams smoke, but the media could not be independently inspected here; before merge, maintainers should verify the after-fix evidence directly and ensure it contains no private credentials, endpoints, or user data. 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 PR body links a claimed redacted live Teams smoke, but the media could not be independently inspected here; before merge, maintainers should verify the after-fix evidence directly and ensure it contains no private credentials, endpoints, or user data.

Evidence

What I checked:

  • Feature scope: The branch adds the public channels.msteams.accounts and channels.msteams.defaultAccount configuration surfaces and threads account context through the Teams channel runtime, setup, routing, secret resolution, Graph operations, and persistent state. (extensions/msteams/src/accounts.ts:1, e7150dfa5686)
  • Legacy compatibility intent: The PR includes explicit coverage for legacy root-level Teams credentials routing to the default agent, while documenting that existing single-bot configurations remain valid. (src/routing/resolve-route.test.ts:116, e7150dfa5686)
  • Account isolation coverage: The branch adds account-specific scoping for conversation references, sent-message markers, delegated tokens, SSO tokens, polls, and named-account credential resolution; these are the central state and auth boundaries for the feature. (extensions/msteams/src/conversation-store-state.ts:229, e7150dfa5686)
  • Real-behavior evidence supplied: The PR body reports a redacted live smoke in which two Teams bot apps replied through one gateway using distinct identities and routes, but the linked attachment could not be independently opened from the available read-only command environment. Public docs: docs/channels/msteams.md. (docs/channels/msteams.md:75, e7150dfa5686)
  • Canonical product context: The linked open feature request remains the canonical user problem: multiple Teams bot identities on one gateway. This PR is a candidate implementation and should remain open until that direction is reviewed and the branch’s upgrade contract is accepted.

Likely related people:

  • jimmypuckett: The supplied PR history shows this person authored the current implementation and both prior replacement PRs for the same Teams multi-account capability; current-main ownership could not be independently reconstructed because repository command execution was unavailable. (role: feature author and prior replacement-chain contributor; confidence: medium; commits: 603892d9258e, 1b0277435c69, e7150dfa5686; files: extensions/msteams/src/accounts.ts, extensions/msteams/src/monitor.ts, extensions/msteams/src/setup-core.ts)

Rank-up moves

Optional improvements that raise the rating; they are not merge blockers.

  • Have a maintainer inspect the linked redacted two-account Teams smoke and confirm it shows distinct identities and routes.
  • Add or point to focused upgrade evidence for legacy root-level configuration plus persisted default-account state.
  • Obtain explicit owner confirmation that this account configuration model is the supported public Teams API.

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
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.

Workflow

  • 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.

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

The PR now includes focused upgrade evidence on head 231e7eb95a7: legacy root-level Teams credentials still route through default, and pre-account unscoped persisted conversation state remains readable and writable through the default-account wrapper (86 focused tests passed). The redacted two-bot smoke remains linked in the PR body for maintainer inspection.

@clawsweeper

clawsweeper Bot commented Jul 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: when the review finishes, ClawSweeper will create the durable review comment if needed or update the existing comment in place.

@clawsweeper

clawsweeper Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper status: review started.

I am starting a fresh review of this pull request: feat(msteams): support multiple bot accounts This is item 1/1 in the current shard. Shard 0/1.

This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Please review the current validated head f3a948832e1, which forward-merges current upstream/main and resolves the two real conflicts without rewriting history. Validation passed: 83 Microsoft Teams test files / 1,268 tests, pnpm config:channels:check, and pnpm format:check.

@clawsweeper

clawsweeper Bot commented Jul 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: when the review finishes, ClawSweeper will create the durable review comment if needed or update the existing comment in place.

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

Labels

channel: msteams Channel integration: msteams docs Improvements or additions to documentation feature: ✨ showcase ClawSweeper spotlight: unusually compelling feature idea for maintainer attention. gateway Gateway runtime 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. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P2 Normal backlog priority with limited blast radius. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. scripts Repository scripts size: XL 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