Skip to content

Clarify directive persistence authorization policy [AI]#86369

Merged
pgondhi987 merged 16 commits into
openclaw:mainfrom
pgondhi987:fix/fix-681
May 28, 2026
Merged

Clarify directive persistence authorization policy [AI]#86369
pgondhi987 merged 16 commits into
openclaw:mainfrom
pgondhi987:fix/fix-681

Conversation

@pgondhi987

@pgondhi987 pgondhi987 commented May 25, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Problem: The directive persistence helper made the external-channel policy ambiguous, which made authorized Telegram/Discord/etc. /exec and /verbose session defaults look like an accidental operator.admin bypass.
  • Why it matters: Gateway scopes and external channel authorization are separate authority models; internal webchat/gateway callers need operator.admin, while authorized external senders are allowed to set per-session defaults.
  • What changed: Renamed the shared policy helper, made the internal-vs-external decision explicit, threaded command authorization into persistence, added regression coverage for authorized and unauthorized external callers, and documented the /exec session-default authorization model.
  • What did NOT change: Authorized external channel senders can still persist /exec and /verbose session defaults. These directives update session state only and do not grant operator.admin or write global config.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

  • Related: private maintainer tracking item
  • This PR addresses a bug or regression

Real behavior proof

  • Focused directive tests: pnpm exec vitest run src/auto-reply/reply/directive-handling.model.test.ts src/auto-reply/reply/directive-handling.mixed-inline.test.ts -> 2 files passed, 73 tests passed.
  • Changed-file validation: pnpm check:changed -> passed.
  • Whitespace/conflict validation: git diff --check -> passed.

Notes

GHSA dry-run still reports PARTIAL because its fix evaluator expects operator.admin for authorized external channel senders. That conflicts with the maintainer-reviewed policy: authorized external senders may persist session defaults, while internal gateway/webchat clients require operator.admin.

@openclaw-barnacle openclaw-barnacle Bot added size: S maintainer Maintainer-authored PR labels May 25, 2026
@clawsweeper

clawsweeper Bot commented May 25, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed May 28, 2026, 4:54 AM ET / 08:54 UTC.

Summary
The PR changes /exec and /verbose session-default persistence so authorized external senders can persist session defaults while internal webchat/gateway callers require operator.admin, adds focused regression tests, and updates /exec docs.

PR surface: Source +17, Tests +200, Docs +1. Total +218 across 9 files.

Reproducibility: yes. from source inspection rather than an executed live repro. Current main's helper allows non-internal channel contexts through, while the PR changes that path and adds focused tests, but no real gateway/channel run has been supplied.

Review metrics: 1 noteworthy metric.

  • Persisted directive gates: 2 changed: /exec and /verbose. Both gates write durable session defaults, so auth-policy and upgrade behavior need maintainer attention before merge.

Merge readiness
Overall: 🧂 unranked krab
Proof: 🧂 unranked krab
Patch quality: 🦐 gold shrimp
Result: blocked until real behavior proof from a real setup is added.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Update docs/tools/thinking.md so /verbose documents the same external-authorized versus internal-gateway-admin persistence policy as /exec.
  • [P1] Add redacted live gateway/channel proof showing the after-fix allow and deny paths, then update the PR body.
  • Rebase or coordinate after the overlapping directive PR if that branch lands first.

Proof guidance:

  • [P1] Needs real behavior proof before merge: The PR body reports focused tests and checks only; before merge it needs redacted live terminal/log output or a recording from the real gateway/channel path, with private data such as tokens, phone numbers, IPs, and message content removed, then a PR body update or maintainer @clawsweeper re-review. 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.

Mantis proof suggestion
A live Telegram transcript would materially prove the external-channel allow/deny behavior that unit tests cannot show. A maintainer can ask Mantis to capture proof by posting a new PR comment that starts with the OpenClaw Mantis account mention, followed by:

telegram live: verify authorized Telegram /exec and /verbose session defaults persist, unauthorized Telegram directives do not persist, and proof redacts private data.

Risk before merge

  • [P1] Merging as-is would leave /verbose public docs inconsistent with the new gateway/webchat persistence rule, which can confuse operators when session verbose persistence is skipped.
  • [P1] The PR still has only focused tests and checks, not redacted live gateway/channel proof that authorized external senders persist session defaults and unauthorized/internal non-admin callers do not.
  • [P1] The branch changes durable /exec and /verbose session-state gates, so maintainers need to accept the compatibility impact for any gateway or channel path that previously relied on the looser helper behavior.
  • [P1] The open related PR at fix(sessions): honor explicit default model pins #85643 modifies the same directive functions, so the final merge order should include a rebase or conflict review.

Maintainer options:

  1. Document and prove the final policy (recommended)
    Update /verbose docs to match /exec, then attach redacted live gateway/channel proof for authorized external allow, unauthorized denial, and internal non-admin denial before merge.
  2. Accept the compatibility change explicitly
    Maintainers can decide the fail-closed session-default behavior is intentional for any affected gateway/channel caller and land after recording that acceptance and proof gap handling.
  3. Pause behind the related directive PR
    If the overlapping session/default-model PR should land first, pause this branch until it is rebased and re-reviewed against the final shared directive code.

Next step before merge

  • [P1] The protected maintainer label, missing real behavior proof, remaining docs mismatch, and compatibility/session-state policy choice require human handling rather than an autonomous repair lane.

Security
Cleared: The diff narrows a directive persistence authorization boundary and does not add dependencies, CI changes, secret handling, package metadata, or new supply-chain/code-execution surface.

Review findings

  • [P2] Document the verbose persistence gate — src/auto-reply/reply/directive-handling.shared.ts:38-39
Review details

Best possible solution:

Land this only after /verbose docs match the new persistence policy, redacted real gateway/channel proof is supplied, the related directive PR is coordinated, and maintainers accept the auth/session-state boundary.

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

Yes, from source inspection rather than an executed live repro. Current main's helper allows non-internal channel contexts through, while the PR changes that path and adds focused tests, but no real gateway/channel run has been supplied.

Is this the best way to solve the issue?

No, not yet as a complete merge shape. The code path is narrow, but /verbose docs, live behavior proof, and maintainer acceptance of the auth/session-state policy still need to come with it.

Full review comments:

  • [P2] Document the verbose persistence gate — src/auto-reply/reply/directive-handling.shared.ts:38-39
    This gate now makes webchat/internal gateway callers require operator.admin before /verbose session defaults persist, but docs/tools/thinking.md still says a directive-only /verbose toggles and stores session verbose without naming the gateway exception. Please update the public verbose docs alongside the exec docs so operators know why persistence can be skipped.
    Confidence: 0.87

Overall correctness: patch is incorrect
Overall confidence: 0.86

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P1: The PR changes authorization for durable directive session defaults across gateway/channel workflows and is marked as security hardening.
  • merge-risk: 🚨 compatibility: Existing gateway or channel paths that relied on the previous looser persistence helper may stop persisting defaults unless the new authorization context is present.
  • merge-risk: 🚨 session-state: The changed gates control persisted /exec and /verbose session state, so a mistake can silently skip or allow session-default writes.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🦐 gold shrimp.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR body reports focused tests and checks only; before merge it needs redacted live terminal/log output or a recording from the real gateway/channel path, with private data such as tokens, phone numbers, IPs, and message content removed, then a PR body update or maintainer @clawsweeper re-review. 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.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR affects visible Telegram-style /exec and /verbose directive behavior that can be demonstrated in a short live channel transcript.
Evidence reviewed

PR surface:

Source +17, Tests +200, Docs +1. Total +218 across 9 files.

View PR surface stats
Area Files Added Removed Net
Source 6 39 22 +17
Tests 2 201 1 +200
Docs 1 4 3 +1
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 9 244 26 +218

What I checked:

  • Current main behavior: Current main's canPersistInternalDirective returns true for non-internal channels and only checks operator.admin when the authoritative channel is internal, so the PR is still a meaningful behavior change rather than already implemented on main. (src/auto-reply/reply/directive-handling.shared.ts:26, 13dcded7c8e0)
  • PR policy gate: At the PR head, canPersistSessionDirectiveDefaults explicitly separates webchat/internal gateway callers from other channel contexts and checks resolved command authorization or owner status for external contexts. (src/auto-reply/reply/directive-handling.shared.ts:38, 8ca082283d79)
  • Authorization threaded into directive handling: The PR head passes command.isAuthorizedSender into the shared persistence context and directive-only handler, so the core implementation path is narrow and plausibly correct. (src/auto-reply/reply/get-reply-directives-apply.ts:249, 8ca082283d79)
  • Exec docs updated: The PR head updates /exec docs to say authorized external channel senders may set session defaults while internal gateway/webchat clients need operator.admin. Public docs: docs/tools/exec.md. (docs/tools/exec.md:166, 8ca082283d79)
  • Verbose docs still stale: The PR head leaves /verbose docs saying a directive-only message toggles session verbose and stores an explicit session override, without the new gateway/webchat operator.admin exception. Public docs: docs/tools/thinking.md. (docs/tools/thinking.md:82, 8ca082283d79)
  • Proof state: The PR body reports focused Vitest, pnpm check:changed, and git diff --check; a maintainer comment on 2026-05-25 still asked for live proof from the affected surface, so real behavior proof remains absent. (8ca082283d79)

Likely related people:

  • steipete: Peter Steinberger authored the original /exec session override, exec docs, verbose/directive handling, and multiple later hardening/refactor commits in this path. (role: feature owner and adjacent area contributor; confidence: high; commits: 8f7f7ee7dc04, 99dd4288622a, da6f07b7c14a; files: src/auto-reply/reply/directive-handling.shared.ts, src/auto-reply/reply/get-reply-directives-apply.ts, docs/tools/exec.md)
  • jacobtomlinson: Jacob Tomlinson authored the prior gateway verbose default admin-gate commit that is directly related to this PR's /verbose persistence policy. (role: related behavior author; confidence: high; commits: c6031235288a; files: src/auto-reply/reply/directive-handling.shared.ts, src/auto-reply/reply/directive-handling.impl.ts)
  • vincentkoc: Vincent Koc is the current blame boundary for the helper and docs lines in this checkout and has recent directive/docs commits in the same surface. (role: recent area contributor; confidence: medium; commits: 4f26cc9090d0, 74830c7baccd, 3034adfdb34a; files: src/auto-reply/reply/directive-handling.shared.ts, docs/tools/exec.md, docs/tools/thinking.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. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. P1 High-priority user-facing bug, regression, or broken workflow. 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. labels May 25, 2026
@clawsweeper

clawsweeper Bot commented May 25, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg: 🎁 locked until real behavior proof passes.

Details
  • No creature or rarity is rolled until proof passes.
  • Eggs are collectible flavor only; they do not affect labels, ratings, merge decisions, or automation.

@pgondhi987

Copy link
Copy Markdown
Contributor Author

Not applicable to this automation stage; changelog/release-note and external real behavior proof requirements are handled outside auto-pr stages.

Quoted comment from @clawsweeper:

Codex review: needs real behavior proof before merge. Reviewed May 25, 2026, 3:34 AM ET / 07:34 UTC.

Summary
The PR changes /exec and /verbose session-default persistence so callers with gateway client scope metadata must have operator.admin, and adds focused directive persistence tests.

PR surface: Source -4, Tests +68. Total +64 across 2 files.

Reproducibility: yes. from source inspection, but not from an executed failing test in this read-only review. Current main allows non-internal gateway contexts with gatewayClientScopes: [] through the persistence gate, and the persistence code then writes /exec and /verbose defaults to session state.

Review metrics: 1 noteworthy metric.

  • Persisted directive gates: 2 changed: exec and verbose. Both gates control durable session defaults, so maintainers need to notice the auth and upgrade impact before merge.

Merge readiness
Overall: 🧂 unranked krab
Proof: 🧂 unranked krab
Patch quality: 🦐 gold shrimp
Result: blocked until real behavior proof from a real setup is added.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Add public docs for the gateway operator.admin exception on persisted /exec and /verbose defaults.
  • Attach redacted real gateway/channel proof, preferably including the Telegram-visible denial path if Telegram is used as the channel surface.
  • Get maintainer acceptance that the fail-closed behavior is the intended upgrade path for non-admin gateway clients.

Proof guidance:
Needs real behavior proof before merge: The PR body only reports node scripts/run-vitest.mjs src/auto-reply/reply/directive-handling.model.test.ts and says live external channel delivery was not tested; add redacted terminal/log/live output or a recording that shows the real gateway/channel denial and admin allow paths, then update the PR body to trigger re-review.

Mantis proof suggestion
A live Telegram/gateway transcript would materially improve proof for the authorization-visible channel behavior that model tests cannot show. A maintainer can ask Mantis to capture proof by posting a new PR comment that starts with the OpenClaw Mantis account mention, followed by:

telegram live: verify a non-admin gateway Telegram /verbose or /exec directive denies persistence, and operator.admin can persist without exposing private data.

Risk before merge

  • This is a deliberate fail-closed behavior change: gateway/channel clients with empty scopes or operator.write that previously persisted /exec or /verbose defaults will now get denial behavior and need operator.admin or a different workflow.
  • The PR body reports only a focused Vitest run and explicitly says live external channel delivery was not tested, so the real gateway/channel denial path and non-persistence result are not proven in a live setup.
  • Current public docs still describe directive-only persistence in terms of authorized senders, which will be stale for gateway-scoped /exec and /verbose persistence if this lands.

Maintainer options:

  1. Document and prove the new boundary (recommended)
    Update the directive/gateway docs for /exec and /verbose persistence, then attach redacted real gateway/channel proof that no-admin callers are denied and operator.admin callers can persist.
  2. Accept the fail-closed upgrade break
    Maintainers can land the change as-is only if they explicitly accept that non-admin gateway clients relying on persisted directive defaults must update their scopes or workflow.
  3. Pause until the policy is settled
    If non-admin gateway persistence is still an intended workflow, pause this PR and decide whether to add a narrower opt-in policy instead of a blanket admin requirement.

Next step before merge
The PR has a protected maintainer label and needs human acceptance of the fail-closed auth/session-state change plus contributor-supplied real behavior proof; this is not a safe autonomous repair job.

Security
Cleared: The diff narrows a gateway directive persistence boundary and does not add dependencies, secret handling, CI, package, or new code-execution supply-chain surface.

Review findings

  • [P2] Document the gateway admin-only persistence rule — src/auto-reply/reply/directive-handling.shared.ts:30
Review details

Best possible solution:

Land the admin-scope persistence boundary only after docs name the gateway exception, real gateway/channel proof shows no-admin denial and admin allow behavior, and maintainers accept the compatibility break.

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

Yes from source inspection, but not from an executed failing test in this read-only review. Current main allows non-internal gateway contexts with gatewayClientScopes: [] through the persistence gate, and the persistence code then writes /exec and /verbose defaults to session state.

Is this the best way to solve the issue?

Mostly yes for the code boundary, but not yet as a complete merge shape. The shared gate is the narrow fix point, while docs, live proof, and maintainer acceptance of the fail-closed compatibility change still need to come with it.

Full review comments:

  • [P2] Document the gateway admin-only persistence rule — src/auto-reply/reply/directive-handling.shared.ts:30
    This line makes any caller carrying gatewayClientScopes require operator.admin before /exec and /verbose session defaults persist, but the public docs still say directive-only messages persist for authorized senders and /exec is honored for authorized senders. Without docs for the gateway exception, existing operator.write clients will follow stale guidance when the denial is intentional.
    Confidence: 0.83

Overall correctness: patch is incorrect
Overall confidence: 0.84

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add P1: The PR changes a security-sensitive gateway/session-state permission boundary for command execution and verbose output behavior.
  • add merge-risk: 🚨 compatibility: Existing scoped gateway clients that persisted /exec or /verbose defaults without operator.admin would stop working the same way after merge.
  • add merge-risk: 🚨 session-state: The changed gate directly controls whether durable session defaults are written for later turns.
  • add rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🦐 gold shrimp.
  • add status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR body only reports node scripts/run-vitest.mjs src/auto-reply/reply/directive-handling.model.test.ts and says live external channel delivery was not tested; add redacted terminal/log/live output or a recording that shows the real gateway/channel denial and admin allow paths, then update the PR body to trigger re-review.
  • add mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR changes visible directive denial/ack behavior for Telegram-labeled gateway callers, so a short live transcript can usefully show no-admin denial versus admin allow behavior.

Label justifications:

  • P1: The PR changes a security-sensitive gateway/session-state permission boundary for command execution and verbose output behavior.
  • merge-risk: 🚨 compatibility: Existing scoped gateway clients that persisted /exec or /verbose defaults without operator.admin would stop working the same way after merge.
  • merge-risk: 🚨 session-state: The changed gate directly controls whether durable session defaults are written for later turns.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🦐 gold shrimp.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR body only reports node scripts/run-vitest.mjs src/auto-reply/reply/directive-handling.model.test.ts and says live external channel delivery was not tested; add redacted terminal/log/live output or a recording that shows the real gateway/channel denial and admin allow paths, then update the PR body to trigger re-review.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR changes visible directive denial/ack behavior for Telegram-labeled gateway callers, so a short live transcript can usefully show no-admin denial versus admin allow behavior.
Evidence reviewed

PR surface:

Source -4, Tests +68. Total +64 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 1 3 7 -4
Tests 1 68 0 +68
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 71 7 +64

What I checked:

Likely related people:

  • Vincent Koc: Local blame for the current directive persistence gate, its denial text, and the persistence callers all points to commit 732cf54 in this checkout; the shallow history limits older provenance. (role: recent area contributor; confidence: medium; commits: 732cf542404f; files: src/auto-reply/reply/directive-handling.shared.ts, src/auto-reply/reply/directive-handling.persist.ts, src/auto-reply/reply/directive-handling.impl.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.

@pgondhi987

Copy link
Copy Markdown
Contributor Author

Not applicable to this automation stage; changelog/release-note and external real behavior proof requirements are handled outside auto-pr stages.

Quoted comment from @clawsweeper:

ClawSweeper PR egg

🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat.

Where did the egg go?
  • The egg game starts only after the PR passes the real-behavior proof check.
  • Before that, no creature or rarity is rolled. The treat waits for real proof.
  • This is still just collectible flavor: proof affects review readiness, not creature quality.

@omarshahine

Copy link
Copy Markdown
Contributor

Thanks for the PR. Before this can move forward, please add live proof from the affected surface, not just unit tests, mocked tests, or source inspection.

A useful proof update should include:

  • the exact build/SHA tested
  • the real environment used
  • the command, UI flow, channel flow, provider request, or other live path exercised
  • before/after symptom evidence where applicable
  • the observed result after the patch
  • any remaining proof gaps

Please redact secrets, tokens, phone numbers, and private message content from logs or screenshots.

@openclaw-barnacle openclaw-barnacle Bot added the docs Improvements or additions to documentation label May 28, 2026
@pgondhi987 pgondhi987 changed the title Require admin scope for persisted directive defaults [AI] Clarify directive persistence authorization policy [AI] May 28, 2026
@BingqingLyu

This comment was marked as spam.

@pgondhi987 pgondhi987 merged commit bb418a8 into openclaw:main May 28, 2026
21 of 22 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 29, 2026
* fix: require admin scope for persisted directive defaults

* addressing codex review

* fix: complete directive persistence scope gate

* addressing review-skill

* fix: preserve channel directive persistence

* fix: require admin scope for directive default persistence

* addressing codex review

* fix: complete directive persistence scope handling

* addressing codex review

* fix: complete directive persistence gate

* addressing review-skill

* fix: complete directive persistence gate

* addressing review-skill

* clarify directive persistence policy

* docs: add changelog entry for PR merge
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request May 31, 2026
…026.5.28) (#759)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.5.27` → `2026.5.28` |

---

### Release Notes

<details>
<summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary>

### [`v2026.5.28`](https://github.com/openclaw/openclaw/blob/HEAD/CHANGELOG.md#2026528)

[Compare Source](openclaw/openclaw@v2026.5.27...v2026.5.28)

##### Highlights

- Agent and Codex runtime recovery is steadier: subagents keep cwd/workspace separation, hook context stays prompt-local, session locks release on timeout abort while live OpenClaw locks survive cleanup, stale restart continuations are avoided, and Codex app-server/helper failures no longer tear down shared runtime state. ([#&#8203;87218](openclaw/openclaw#87218), [#&#8203;86875](openclaw/openclaw#86875), [#&#8203;87409](openclaw/openclaw#87409), [#&#8203;87399](openclaw/openclaw#87399), [#&#8203;87375](openclaw/openclaw#87375), [#&#8203;88129](openclaw/openclaw#88129))
- Channel delivery and session identity got safer across outbound plugin hooks, Matrix room ids, iMessage reactions/approvals, Slack final replies, Discord recovered tool warnings, runtime-config message actions, WhatsApp profile auth roots, Telegram polling, and Microsoft Teams service URL trust checks. ([#&#8203;73706](openclaw/openclaw#73706), [#&#8203;75670](openclaw/openclaw#75670), [#&#8203;87366](openclaw/openclaw#87366), [#&#8203;87451](openclaw/openclaw#87451), [#&#8203;87334](openclaw/openclaw#87334), [#&#8203;84535](openclaw/openclaw#84535), [#&#8203;82492](openclaw/openclaw#82492), [#&#8203;83304](openclaw/openclaw#83304), [#&#8203;87160](openclaw/openclaw#87160))
- Mobile and chat surfaces got a broader refresh: the iOS Pro UI, hosted push relay default, realtime Talk tab playback, Gateway chat transport, onboarding, Talk permissions, WebChat reconnect delivery, and session picker behavior now preserve more state across reconnects and empty searches. ([#&#8203;87367](openclaw/openclaw#87367), [#&#8203;87531](openclaw/openclaw#87531), [#&#8203;87682](openclaw/openclaw#87682), [#&#8203;88096](openclaw/openclaw#88096), [#&#8203;88105](openclaw/openclaw#88105)) Thanks [@&#8203;ngutman](https://github.com/ngutman) and [@&#8203;BunsDev](https://github.com/BunsDev).
- Browser, channel, and automation inputs are stricter: Browser tool timeouts, viewport/tab indices, Gateway ports, cron retry handling, Discord component ids, schema array refs, Telegram callback pages, and channel progress callbacks now reject malformed values earlier and preserve the intended delivery context. ([#&#8203;82887](openclaw/openclaw#82887))
- Provider, media, and document coverage expands with Claude Opus 4.8, Fal Krea image schemas, NVIDIA featured models, MiniMax streaming music responses, encrypted PDF extraction, voice model catalogs, GitHub Copilot agent runtime support, and a Codex Supervisor plugin path for delegated Codex workflows. ([#&#8203;87845](openclaw/openclaw#87845), [#&#8203;87890](openclaw/openclaw#87890), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764), [#&#8203;87751](openclaw/openclaw#87751), [#&#8203;87794](openclaw/openclaw#87794))
- CLI, auth, doctor, and provider paths fail faster and recover more clearly: malformed numeric/version options are rejected, workspace dotenv provider credentials are ignored, heartbeat defaults, OAuth/token lifetimes, and local service startup requests are bounded, agent auth health labels are clearer, legacy `api_key` auth profiles migrate to canonical form, and restart guidance is actionable. ([#&#8203;87398](openclaw/openclaw#87398), [#&#8203;86281](openclaw/openclaw#86281), [#&#8203;87361](openclaw/openclaw#87361), [#&#8203;88133](openclaw/openclaw#88133), [#&#8203;83655](openclaw/openclaw#83655), [#&#8203;87559](openclaw/openclaw#87559), [#&#8203;88088](openclaw/openclaw#88088), [#&#8203;85924](openclaw/openclaw#85924)) Thanks [@&#8203;vincentkoc](https://github.com/vincentkoc) and [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Plugin and Gateway hot paths do less repeated work while preserving cache correctness for install records, config JSON parsing, tool search catalogs, session stores, manifest model rows, auto-enabled plugin config, browser tokens, viewer assets, and release-split external plugin packages. ([#&#8203;86699](openclaw/openclaw#86699))
- Release, QA, and E2E validation now bound more log, artifact, harness, and cross-OS waits so failing lanes produce proof instead of hanging or false-greening.

##### Changes

- Status: show active subagent details in status output.
- Diffs: split the default language pack and expand default Diffs language coverage while keeping the host floor aligned. ([#&#8203;87370](openclaw/openclaw#87370), [#&#8203;87372](openclaw/openclaw#87372)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa).
- ClawHub: add plugin display names plus skill verification and trust surfaces. ([#&#8203;87354](openclaw/openclaw#87354), [#&#8203;86699](openclaw/openclaw#86699)) Thanks [@&#8203;thewilloftheshadow](https://github.com/thewilloftheshadow) and [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- iOS: refresh the dev app with Pro Command, Chat, Agents, Settings, hosted push relay defaults, and realtime Talk playback wired to gateway sessions, diagnostics, chat, and realtime Talk. ([#&#8203;87367](openclaw/openclaw#87367), [#&#8203;88096](openclaw/openclaw#88096), [#&#8203;88105](openclaw/openclaw#88105)) Thanks [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin) and [@&#8203;ngutman](https://github.com/ngutman).
- Docs: clarify Codex computer-use setup, paste-token stdin auth setup, macOS gateway sleep troubleshooting, native Codex hook relay recovery, container model auth, install deployment cards, device-token admin gating, CLI setup flow compatibility, Notte cloud browser CDP setup, and backport targets. ([#&#8203;87313](openclaw/openclaw#87313), [#&#8203;63050](openclaw/openclaw#63050), [#&#8203;87685](openclaw/openclaw#87685)) Thanks [@&#8203;bdjben](https://github.com/bdjben), [@&#8203;liaoandi](https://github.com/liaoandi), and [@&#8203;thewilloftheshadow](https://github.com/thewilloftheshadow).
- PDF/tools: use ClawPDF for PDF extraction, support encrypted PDF extraction, and surface MCP structured content in agent tool results. ([#&#8203;87670](openclaw/openclaw#87670), [#&#8203;87751](openclaw/openclaw#87751))
- Providers: add Claude Opus 4.8 support, Fal Krea image model schemas, NVIDIA featured model catalogs, MiniMax streaming music responses, and provider-backed voice model catalogs. ([#&#8203;87845](openclaw/openclaw#87845), [#&#8203;87890](openclaw/openclaw#87890), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764), [#&#8203;87794](openclaw/openclaw#87794)) Thanks [@&#8203;eleqtrizit](https://github.com/eleqtrizit) and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Codex/GitHub: add the GitHub Copilot agent runtime and the Codex Supervisor plugin package.
- Plugins: externalize GitHub Copilot and Tokenjuice as official install-on-demand plugins with npm and ClawHub publish metadata.
- Workboard: add agent coordination tools for tracking and handing off active agent work.
- Discord: show commentary in progress drafts so live Discord runs expose useful in-progress context. ([#&#8203;85200](openclaw/openclaw#85200))
- Plugin SDK: add a reply payload sending hook for plugins that need to deliver channel-owned replies and flatten package types for SDK declarations. ([#&#8203;82823](openclaw/openclaw#82823), [#&#8203;87165](openclaw/openclaw#87165)) Thanks [@&#8203;piersonr](https://github.com/piersonr) and [@&#8203;RomneyDa](https://github.com/RomneyDa).
- Policy: add policy comparison, ingress-channel conformance, and sandbox-posture conformance checks. ([#&#8203;85572](openclaw/openclaw#85572), [#&#8203;85744](openclaw/openclaw#85744), [#&#8203;86768](openclaw/openclaw#86768))

##### Fixes

- Agents: fall back to local config pruning when the optional `agents delete` Gateway probe cannot authenticate, so offline installs can still delete agents without removing shared workspaces.
- Tighten phone-control mutation authorization \[AI]. ([#&#8203;87150](openclaw/openclaw#87150)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Clarify directive persistence authorization policy \[AI]. ([#&#8203;86369](openclaw/openclaw#86369)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Agents/Codex: keep spawned agent cwd/workspace state separated, forward ACP spawn attachments, keep hook context prompt-local, release session locks on timeout abort and runtime teardown without deleting live OpenClaw-owned locks during cleanup, avoid session event queue self-wait, clean up exec abort listeners, stream assistant deltas incrementally, recover raw missing-thread compaction failures, preserve rotated compaction session identity, keep compaction-timeout snapshots continuable, preserve shared app-server state across startup or helper failures, keep native hook relay alive across restarts and prune stale bridge files, close native hook relay replacement races, keep Claude live tool progress visible for watchdog recovery, suppress abandoned requester completion handoff, route workspace memory through tools, resolve Codex runtime models first, report quarantined dynamic tools, format `skills` command output, bind node auto-review to prepared plans, retry Claude CLI transcript probes, and bound compaction/steering retries. ([#&#8203;87218](openclaw/openclaw#87218), [#&#8203;86875](openclaw/openclaw#86875), [#&#8203;86123](openclaw/openclaw#86123), [#&#8203;88129](openclaw/openclaw#88129), [#&#8203;87399](openclaw/openclaw#87399), [#&#8203;87375](openclaw/openclaw#87375), [#&#8203;72574](openclaw/openclaw#72574), [#&#8203;87383](openclaw/openclaw#87383), [#&#8203;87400](openclaw/openclaw#87400), [#&#8203;83022](openclaw/openclaw#83022), [#&#8203;87671](openclaw/openclaw#87671), [#&#8203;87738](openclaw/openclaw#87738), [#&#8203;87747](openclaw/openclaw#87747), [#&#8203;87706](openclaw/openclaw#87706), [#&#8203;87546](openclaw/openclaw#87546), [#&#8203;87541](openclaw/openclaw#87541), [#&#8203;81048](openclaw/openclaw#81048)) Thanks [@&#8203;mbelinky](https://github.com/mbelinky), [@&#8203;Alix-007](https://github.com/Alix-007), [@&#8203;luoyanglang](https://github.com/luoyanglang), [@&#8203;yetval](https://github.com/yetval), [@&#8203;sjf](https://github.com/sjf), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;benjamin1492](https://github.com/benjamin1492), [@&#8203;c19354837](https://github.com/c19354837), [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), [@&#8203;pfrederiksen](https://github.com/pfrederiksen), and [@&#8203;dodge1218](https://github.com/dodge1218).
- Codex Supervisor: keep real-home app-server MCP session listing on the loaded state path, bound stored history scans, and close WebSocket probes cleanly.
- Channels: thread canonical session keys into outbound hooks, preserve Matrix room-id case, keep fallback tool warnings mention-inert, retain delivered Slack final replies during late cleanup, continue iMessage polling after denied reactions, suppress duplicate native exec approvals, resolve Gateway message actions against the active runtime config, preserve Telegram SecretRef prompt config and polling keepalives, preserve WhatsApp profile auth roots, QR display, document filenames, and plugin hook config, suppress Discord recovered tool warnings, preserve the Discord voice outbound helper, cap Discord/Signal/Zalo channel request and container timeouts, and block untrusted Teams service URLs while keeping TeamsSDK patterns aligned. ([#&#8203;73706](openclaw/openclaw#73706), [#&#8203;75670](openclaw/openclaw#75670), [#&#8203;87366](openclaw/openclaw#87366), [#&#8203;87451](openclaw/openclaw#87451), [#&#8203;87465](openclaw/openclaw#87465), [#&#8203;87334](openclaw/openclaw#87334), [#&#8203;84535](openclaw/openclaw#84535), [#&#8203;76262](openclaw/openclaw#76262), [#&#8203;83304](openclaw/openclaw#83304), [#&#8203;82492](openclaw/openclaw#82492), [#&#8203;87581](openclaw/openclaw#87581), [#&#8203;77114](openclaw/openclaw#77114), [#&#8203;86426](openclaw/openclaw#86426), [#&#8203;85529](openclaw/openclaw#85529), [#&#8203;87160](openclaw/openclaw#87160)) Thanks [@&#8203;zeroaltitude](https://github.com/zeroaltitude), [@&#8203;lukeboyett](https://github.com/lukeboyett), [@&#8203;jarvis-mns1](https://github.com/jarvis-mns1), [@&#8203;xiaotian](https://github.com/xiaotian), [@&#8203;funmerlin](https://github.com/funmerlin), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;heyitsaamir](https://github.com/heyitsaamir), [@&#8203;amittell](https://github.com/amittell), [@&#8203;lidge-jun](https://github.com/lidge-jun), [@&#8203;liorb-mountapps](https://github.com/liorb-mountapps), [@&#8203;masatohoshino](https://github.com/masatohoshino), [@&#8203;bladin](https://github.com/bladin), and [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- CLI/auth/doctor/providers: reject malformed numeric/timeout/subcommand-version inputs, ignore workspace dotenv provider credentials, wait for respawn child shutdown, bound heartbeat defaults plus Codex, GitHub Copilot, OpenAI, Anthropic, Google, Feishu, LM Studio, MiniMax, Xiaomi TTS, and local-provider OAuth/token/model requests, harden Codex auth probes, label auth health by agent, preserve explicit agentRuntime pins during Codex model migration, warm provider auth off the main thread, honor Codex response timeouts, stop migrating current Claude Haiku 4.5 profiles to Sonnet, bound local service startup, resolve GPT-5.5 without cached catalog, migrate legacy memory auto-provider config, rewrite non-canonical `api_key` auth profiles, and make doctor restart follow-ups actionable. ([#&#8203;87398](openclaw/openclaw#87398), [#&#8203;86281](openclaw/openclaw#86281), [#&#8203;87361](openclaw/openclaw#87361), [#&#8203;88133](openclaw/openclaw#88133), [#&#8203;83655](openclaw/openclaw#83655), [#&#8203;87559](openclaw/openclaw#87559), [#&#8203;87719](openclaw/openclaw#87719), [#&#8203;88088](openclaw/openclaw#88088), [#&#8203;85924](openclaw/openclaw#85924), [#&#8203;84362](openclaw/openclaw#84362)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;samzong](https://github.com/samzong), [@&#8203;giodl73-repo](https://github.com/giodl73-repo), [@&#8203;alkor2000](https://github.com/alkor2000), [@&#8203;mmaps](https://github.com/mmaps), [@&#8203;nxmxbbd](https://github.com/nxmxbbd), and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Gateway/security/session state: expire browser tokens after auth rotation, scope assistant idempotency dedupe, drain probe client closes, avoid stale restart continuation reuse, preserve retry-after fallbacks and stale rate-limit cooldown probes, bound webchat image and artifact transcript scans, include seconds in inbound metadata timestamps, clear completed session active runs, clear stale chat stream buffers, and evict current plugin-state namespaces at row caps. ([#&#8203;87810](openclaw/openclaw#87810), [#&#8203;87833](openclaw/openclaw#87833), [#&#8203;75089](openclaw/openclaw#75089)) Thanks [@&#8203;joshavant](https://github.com/joshavant) and [@&#8203;litang9](https://github.com/litang9).
- Config/parsing/network: reject partial numeric parsing, parse provider/Discord retry headers and dates strictly, honor IPv6 and bare IPv6 `no_proxy` entries, preserve empty plugin allowlists, canonicalize secret target array indexes, and reject malformed media content lengths, inspected TCP ports, marketplace content lengths, cron epochs, sandbox stat fields, unsafe duration values, empty config path segments, noncanonical schema array refs, unsafe Telegram callback pages, and invalid Teams attachment-fetch DNS targets. ([#&#8203;87883](openclaw/openclaw#87883)) Thanks [@&#8203;zhangguiping-xydt](https://github.com/zhangguiping-xydt).
- Browser/input hardening: reject invalid tab indexes, excessive viewport resizes, explicit zero CDP ports, malformed geolocation options, unsafe screenshot or permission-grant timeouts, loose response-body limits, invalid cookie expiries, and non-finite Browser tool delays/timeouts.
- Cron/automation: retry recurring jobs after transient model rate limits before waiting for the next scheduled slot, and preflight model fallbacks before skipping scheduled work. ([#&#8203;82887](openclaw/openclaw#82887)) Thanks [@&#8203;chen-zhang-cs-code](https://github.com/chen-zhang-cs-code).
- Auto-reply/directives: respect provider and relayed channel metadata during directive persistence so channel-originated decisions keep their intended context. ([#&#8203;87683](openclaw/openclaw#87683))
- WhatsApp: resolve the auth directory from the active profile so profile-scoped WhatsApp installs do not drift to the wrong credential root. ([#&#8203;82492](openclaw/openclaw#82492)) Thanks [@&#8203;lidge-jun](https://github.com/lidge-jun).
- Gateway/session state: clear completed session active runs, avoid cold-loading providers for MCP inventory, cache single-session child indexes, cap handshake timers, and bound preauth, auth-guard, media, transcript, readiness, and port options.
- Channels/replies: preserve channel-owned progress callbacks when verbose output is off, keep group-room progress suppression intact, prefer external session delivery context, escape Discord component id delimiters, force final TUI chat repaints, show Slack reasoning previews, and normalize Discord/Matrix/Mattermost channel numeric options. ([#&#8203;87476](openclaw/openclaw#87476), [#&#8203;87423](openclaw/openclaw#87423))
- Agents/tool args: harden smart-quoted argument repair for edit arrays and exact escaped arguments so model-produced tool calls recover without corrupting valid input. ([#&#8203;86611](openclaw/openclaw#86611)) Thanks [@&#8203;ferminquant](https://github.com/ferminquant).
- Providers/agents: preserve seeded Anthropic signatures, preserve signed thinking payloads, concatenate signature-delta chunks, preserve DeepSeek `reasoning_content` replay across tier suffixes, apply OpenRouter strict9 ids to Mistral routes, promote Ollama plain-text tool calls, load NVIDIA featured model catalogs, stream MiniMax music generation responses, and recover empty preflight compaction. ([#&#8203;87593](openclaw/openclaw#87593), [#&#8203;87493](openclaw/openclaw#87493), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764)) Thanks [@&#8203;Pluviobyte](https://github.com/Pluviobyte) and [@&#8203;eleqtrizit](https://github.com/eleqtrizit).
- Media/images: skip CLI image cache refs when resolving generated images, allow trusted generated HTML attachments, and bound generated video downloads so stale refs and slow providers fail cleanly. ([#&#8203;87523](openclaw/openclaw#87523), [#&#8203;87982](openclaw/openclaw#87982))
- File transfer: handle late tar stdin pipe errors after archive validation or unpacking has already settled.
- Performance: trust install-record caches between reloads, prefer native JSON parsing, reuse unchanged tool-search catalogs, reuse gateway session and plugin metadata paths, skip unchanged store serialization, patch single-entry session writes, add precomputed session patch writers, reduce store clone allocations, cache manifest model catalog rows and auto-enabled plugin config, avoid full session snapshots for entry reads, defer configured Slack full startup, prefer bundled plugin dist entries, and slim current metadata identity caches. ([#&#8203;87760](openclaw/openclaw#87760))
- Docker/release/QA: package runtime workspace templates, stream cross-OS served artifacts, preserve sparse Crabbox run artifacts, isolate npm plugin installs per package, reject incompatible package plugin API installs, drop the leftover root Sharp dependency from package manifests after the Rastermill migration, bound OpenClaw instance logs, plugin gauntlet relay logs, MCP channel buffers, kitchen-sink scans, agent-turn assertions, QA-Lab credential broker calls, QA Matrix substrate requests, and release scenario logs, and keep release/google live guards current. ([#&#8203;87647](openclaw/openclaw#87647), [#&#8203;87477](openclaw/openclaw#87477)) Thanks [@&#8203;rohitjavvadi](https://github.com/rohitjavvadi) and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Release/CI: bound manual git fetches, ClawHub verifier responses, ClawHub owner metadata, dependency-guard error bodies, Parallels limits, startup/test/memory budget parsing, and diffs viewer build warnings so release lanes fail with useful proof instead of hanging. ([#&#8203;87839](openclaw/openclaw#87839))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/759
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
* fix: require admin scope for persisted directive defaults

* addressing codex review

* fix: complete directive persistence scope gate

* addressing review-skill

* fix: preserve channel directive persistence

* fix: require admin scope for directive default persistence

* addressing codex review

* fix: complete directive persistence scope handling

* addressing codex review

* fix: complete directive persistence gate

* addressing review-skill

* fix: complete directive persistence gate

* addressing review-skill

* clarify directive persistence policy

* docs: add changelog entry for PR merge
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
* fix: require admin scope for persisted directive defaults

* addressing codex review

* fix: complete directive persistence scope gate

* addressing review-skill

* fix: preserve channel directive persistence

* fix: require admin scope for directive default persistence

* addressing codex review

* fix: complete directive persistence scope handling

* addressing codex review

* fix: complete directive persistence gate

* addressing review-skill

* fix: complete directive persistence gate

* addressing review-skill

* clarify directive persistence policy

* docs: add changelog entry for PR merge
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Improvements or additions to documentation maintainer Maintainer-authored PR 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: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P1 High-priority user-facing bug, regression, or broken workflow. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: M 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.

3 participants