Skip to content

Policy: add runtime audit metadata and attestation enforcement#81104

Draft
giodl73-repo wants to merge 20 commits into
openclaw:mainfrom
giodl73-repo:policy-runtime-audit
Draft

Policy: add runtime audit metadata and attestation enforcement#81104
giodl73-repo wants to merge 20 commits into
openclaw:mainfrom
giodl73-repo:policy-runtime-audit

Conversation

@giodl73-repo

@giodl73-repo giodl73-repo commented May 12, 2026

Copy link
Copy Markdown
Contributor

Policy: add runtime audit metadata and attestation enforcement

Branch: policy-runtime-audit
GitHub base: main
Logical base: policy-conformance-examples
Current draft: #81104
Draft status: final policy runtime/audit step

Title

Policy: add runtime audit metadata and attestation enforcement

Summary

This PR closes the first policy arc by connecting clean policy checks to
runtime decisions and runtime audit evidence.

xarlier policy drafts establish the model:

  • policy.jsonc defines authored requirements.
  • OpenClaw config and workspace declarations are observed as evidence.
  • Policy registers health checks.
  • doctor --lint and policy check report conformance findings.
  • policy check --json emits a stable attestation hash for the accepted clean
    state.

This PR makes that attestation useful at runtime. When the policy runtime tool
gate is enabled, approval decisions carry structured policy metadata. If
expectedAttestationHash is configured and watched evidence changes, the gate
fails closed before approval. That lets a supervisor or gateway compare a tool
decision against the exact policy/evidence state that was previously accepted.
policy diff can then compare two saved policy check --json outputs to
explain whether the policy, evidence, findings, or clean result changed.

The PR also adds the first runtime evidence slice for policy health checks.
Health checks can receive a channel runtime snapshot and report a denied
channel account that is still running. The important contract is the runtime
evidence payload; any finding target is only a compact evidence label, not a
new path language.

The intended ownership model is that a workspace can produce a candidate clean
attestation, but a supervisor or gateway authority accepts the attestation. The
agent/container should not be able to silently update the accepted hash that
governs its own runtime decisions.

Motivation

Policy conformance is only useful for runtime governance if the runtime can
prove which policy check it is relying on. Otherwise an operator can run
policy check, accept a clean result, and then miss a later change to the
watched evidence before a tool call is approved.

This PR adds the missing handshake:

  • a clean policy check produces the accepted attestation hash;
  • a supervisor or gateway accepts that hash out of band;
  • OpenClaw config can record that accepted hash as expectedAttestationHash;
  • the runtime gate recomputes the current attestation from policy.jsonc and
    watched evidence;
  • matching hashes allow normal policy runtime decisions;
  • mismatched hashes block before approval and report both hashes.

The runtime gate still uses OpenClaw's existing trusted tool policy hook. This
does not add a new gateway protocol or a second policy engine.

checkedAt remains audit timing metadata. It is not part of
attestationHash, so repeated clean checks of unchanged policy state do not
force a new accepted hash.

Maintainer Input Requested

  1. Is the accepted-attestation handshake the right runtime boundary?

    The draft treats expectedAttestationHash as the compact value a supervisor
    or gateway can compare against. It binds policy hash, evidence hash,
    findings hash, and clean result. Is that the right unit to carry into
    runtime decisions, and should the accepted value be owned by the supervisor
    rather than by the workspace being governed?

  2. Is runtimeEvidence the right health-check input for runtime audits?

    The draft adds optional runtimeEvidence to the health check context. The
    policy extension uses it for channel runtime snapshots and keeps runtime
    findings focused on the evidence package rather than oc-path syntax. Is this
    the right shape for health checks that need to compare config/policy against
    live runtime state?

  3. Should runtime evidence refs stay runtime://..., or become read-only oc://runtime/... paths?

    The draft intentionally separates live runtime evidence from document/config
    oc-paths: policy findings can point to resolvable files with oc://..., but
    running channel accounts and other live observations are evidence refs rather
    than writable workspace documents. We chose a separate runtime://...-style
    namespace for that boundary. Would maintainers prefer exposing runtime
    evidence as read-only oc://runtime/... paths instead, so path tooling can
    discover/search them consistently with config and workspace paths? In
    particular, should openclaw path find (or the future shared find surface)
    be able to search runtime refs alongside document-backed oc:// paths while
    still making runtime refs non-mutating and clearly evidence-only?

  4. Should block decisions have structured metadata too?

    Approval decisions already carry structured metadata through gateway approval
    records. Attestation mismatch blocks currently include both hashes in the
    block reason because the existing block result shape has no metadata slot.
    Should blocked trusted-tool-policy decisions also gain structured metadata,
    or is the human-readable block reason enough for this first step?

  5. Is this the right place to thread approval metadata?

    This PR keeps metadata on the existing approval descriptor and preserves it
    through gateway approval list/resolve events. Is that the correct audit path,
    or should policy decisions be recorded in a separate runtime audit event?

What Changed

  • Added attestation metadata to policy trusted-tool approval requests.
  • Preserved plugin approval metadata through gateway approval request, list,
    and resolve paths.
  • Added small view-model support so approval surfaces can display policy hash,
    evidence hash, current/expected attestation hash, and target tool reference.
  • Added runtime enforcement of expectedAttestationHash.
  • Added policy diff for comparing two saved policy check outputs.
  • Added optional health-check runtimeEvidence and a policy channel runtime
    audit check for denied channel accounts that are still running.
  • Added a test where TOOLS.md changes after an accepted clean policy check
    and the runtime gate refuses the tool request because the current
    attestation differs.
  • Updated policy docs to describe accepted attestation runtime enforcement.

Runtime Shape

Config records the accepted clean policy check:

{
  "plugins": {
    "entries": {
      "policy": {
        "enabled": true,
        "config": {
          "enabled": true,
          "runtimeToolPolicy": true,
          "expectedAttestationHash": "sha256:..."
        }
      }
    }
  }
}

In an enterprise deployment, that value should come from a supervisor/gateway
acceptance flow, not from the agent updating its own workspace. A typical review
loop is:

  1. Run policy check --json > accepted.json for the currently accepted state.
  2. Change the workspace, for example by adding a new tool with risk and
    sensitivity metadata.
  3. Run policy check --json > candidate.json.
  4. Run policy diff accepted.json candidate.json.
  5. If the diff shows an acceptable clean change, the supervisor accepts the new
    attestationHash.
  6. The gateway/runtime uses that accepted hash as expectedAttestationHash.

At runtime:

  1. Policy reads policy.jsonc.
  2. The runtime gate observes current TOOLS.md evidence.
  3. It builds the same attestation shape as policy check.
  4. If the current attestation differs from expectedAttestationHash, the tool
    call is blocked before approval.
  5. If the attestation matches, existing tool metadata rules decide whether the
    call proceeds or requires approval.

Policy health checks can also receive runtime evidence. The first supported
runtime shape is a channel runtime snapshot with channelAccounts. If policy
denies a channel provider but that provider still has a running account, policy
reports policy/channels-denied-provider-running against that runtime evidence:

{
  "checkId": "policy/channels-denied-provider-running",
  "path": "gateway runtime",
  "target": "runtime:channels/telegram/accounts/default",
  "requirement": "oc://policy.jsonc/channels/denyRules/#0"
}

The target string is intentionally minimal. It is a label inside the runtime
evidence package, not a new oc-path surface. Config and workspace findings keep
using real oc:// paths when they point to resolvable documents.

Real Behavior Proof

Behavior addressed: Policy check should emit auditable policy/evidence/findings/attestation hashes, policy diff/policy watch should distinguish timestamp-only checks from real drift, runtime tool policy should fail closed when expectedAttestationHash is stale, and policy-governed approval requests should carry structured policy/evidence/attestation metadata.

Real environment tested: Clean WSL detached worktrees for upstream/main and PR #81104 head, with a temporary workspace containing policy.jsonc and TOOLS.md. The source-level probe imported the PR-head policy runtime modules through the repo tsx loader.

Exact steps or command run after this patch:

  1. Created a clean upstream/main worktree and a clean PR-head worktree at Policy: add runtime audit metadata and attestation enforcement #81104 head.
  2. In each worktree, ran node --import ./node_modules/tsx/dist/loader.mjs probe-policy-runtime-audit.mjs.
  3. Built a clean policy/evidence attestation from policy.jsonc and a critical governed deploy tool in TOOLS.md.
  4. Recomputed the attestation with only checkedAt changed and compared it to the original.
  5. Recomputed the attestation after evidence drift and compared the diff summary.
  6. Evaluated the runtime trusted-tool policy with a matching expectedAttestationHash to capture approval metadata.
  7. Evaluated the runtime trusted-tool policy with stale expectedAttestationHash=sha256:not-current to prove fail-closed behavior.

Evidence before fix: Upstream/main has no policy check/watch/diff CLI layer, no runtime expectedAttestationHash enforcement, no policy approval metadata view, no audit hash tuple, no watch/diff stale-attestation result, and no fail-closed runtime block for stale accepted attestations.

Evidence after fix:

Fresh before/after proof for runtime audit metadata and attestation enforcement

Observed result after fix: PR #81104 emits policy, evidence, findings, and attestation hashes; keeps the attestation stable when only checkedAt changes; reports no diff for timestamp-only changes; reports evidence and attestation drift when evidence changes; marks a mismatched accepted attestation as stale; includes Policy Hash, Workspace Hash, Attestation Hash, Expected Attestation, and Policy Target approval metadata; and blocks runtime tool calls when the current attestation no longer matches the accepted one.

What was not tested: This proof focuses on the runtime audit/attestation contract and does not exercise every policy category already covered by earlier stack PRs.

Testing

pnpm test src/infra/approval-view-model.test.ts extensions/policy/src/doctor/register.test.ts extensions/policy/src/cli.test.ts extensions/policy/src/runtime-tool-policy.test.ts -- --reporter=dot
pnpm tsgo:prod
pnpm exec oxfmt --check --threads=1 src/infra/policy-approval-metadata.ts src/infra/approval-view-model.test.ts src/flows/health-checks.ts extensions/policy/src/policy-state.ts extensions/policy/src/doctor/register.ts extensions/policy/src/doctor/register.test.ts extensions/policy/src/cli.test.ts docs/cli/policy.md docs/plugins/reference/policy.md
pnpm check:changed
git diff --check

Latest local result:

  • Policy runtime/CLI/doctor plus approval metadata tests: 4 files, 58 tests passed.
  • Formatting check: passed.
  • Production TypeScript check: passed.
  • Changed-file check: passed.
  • Whitespace check: passed.

Related

Policy stack links

This PR is part of the Policy 1.0 proof stack. Final category branches added after the runtime-audit layer:

Full stack reference:

  1. Policy: add conformance system with channel checks #80407 — Policy: add conformance system with channel checks
  2. Policy: add tool metadata conformance #80056 — Policy: add tool metadata conformance and runtime checks
  3. Policy: add model, network, and MCP conformance checks #80783 — Policy: add model, network, and MCP conformance checks
  4. Policy: add runtime audit metadata and attestation enforcement #81104 — Policy: add runtime audit metadata and attestation enforcement
  5. Policy: add secret and auth conformance checks #81974 — Policy: add secrets auth provenance checks
  6. Policy: add gateway exposure checks #81981 — Policy: add gateway exposure checks

@clawsweeper

clawsweeper Bot commented May 12, 2026

Copy link
Copy Markdown
Contributor

Codex review: found issues before merge. Reviewed July 3, 2026, 11:52 PM ET / 03:52 UTC.

Summary
The branch adds Policy runtime tool enforcement with accepted-attestation checks, approval metadata propagation through gateway and Swift models, policy diff/watch docs, runtime health evidence, and bundled policy/oc-path packaging support.

PR surface: Source +1845, Tests +1704, Docs +316, Config +5, Other +30. Total +3900 across 32 files.

Reproducibility: yes. for the PR blockers by source inspection: the runtime gate computes attestations with empty findings while policy check hashes attested findings, and the secret-file test changes the rejected-file expectation from throwing to undefined.

Review metrics: 2 noteworthy metrics.

  • Policy config surfaces: 1 added, 2 descriptions tightened. runtimeToolPolicy adds a new opt-in runtime blocking mode, while expectedHash and expectedAttestationHash now describe trusted-config enforcement semantics.
  • Approval metadata API surface: 1 optional metadata field added. The same field is threaded through plugin hook types, gateway request schema, stored approval payloads, approval views, and Swift protocol models.

Stored data model
Persistent data-model change detected: migration/backfill/repair: extensions/policy/src/doctor/register.test.ts, serialized state: extensions/policy/src/cli.test.ts, serialized state: src/plugins/loader.test.ts, unknown-data-model-change: extensions/policy/src/doctor/register.test.ts, unknown-data-model-change: extensions/policy/src/doctor/register.ts, unknown-data-model-change: src/infra/policy-approval-metadata.ts, and 10 more. Confirm migration or upgrade compatibility proof before merge.

Merge readiness
Overall: 🧂 unranked krab
Proof: 🦞 diamond lobster ✨ media proof bonus
Patch quality: 🧂 unranked krab
Result: blocked by patch quality or review findings.

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

Rank-up moves:

  • Rebase the draft on current main and resolve conflicts before requesting another review.
  • [P2] Fix the runtime attestation builder to hash the same attested findings as policy check.
  • [P1] Restore fail-closed secret-file behavior and keep the rejected-file test throwing.

Risk before merge

  • [P1] The draft is currently conflicting against main, so no final landing review is possible until the author rebases and resolves conflicts.
  • [P1] The new runtimeToolPolicy and expectedAttestationHash surfaces intentionally fail closed when enabled, so maintainers need explicit compatibility and operator-boundary signoff before merge.
  • [P1] The plugin approval metadata field expands plugin hook, gateway payload, approval view, and Swift protocol shape and needs compatibility review for existing clients/plugins.
  • [P1] The Socket dependency comments were produced on older branch states; supply-chain checks should be rerun after the conflict repair against the actual merge result.

Maintainer options:

  1. Rebase and repair the blockers (recommended)
    Rebase onto current main, keep rejected secret files fail-closed, and make runtime attestation use the same attested findings contract as policy check before another review.
  2. Accept the opt-in runtime gate after signoff
    If maintainers want the fail-closed policy gate and approval metadata API, record explicit compatibility/security approval after the blocker fixes and fresh proof.
  3. Pause the stale runtime layer
    If the accepted-attestation boundary is still unsettled, keep the merged conformance stack and replace this draft with a smaller sponsored runtime-audit PR.

Next step before merge

  • [P2] Protected conflicting draft needs author rebase plus maintainer product/security compatibility review; this is not a safe cleanup close or autonomous repair target.

Security
Needs attention: The diff introduces security-boundary concerns in policy attestation enforcement and secret-file rejection semantics.

Review findings

  • [P1] Compute runtime attestations from policy findings — extensions/policy/src/runtime-tool-policy.ts:260-265
  • [P1] Keep rejected secret files fail closed — src/infra/secret-file.test.ts:124-126
Review details

Best possible solution:

Land a narrower rebased runtime-audit change that shares the policy check attestation builder/evaluator, preserves fail-closed secret handling, and gets maintainer signoff on runtime blocking plus metadata API expansion.

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

Yes for the PR blockers by source inspection: the runtime gate computes attestations with empty findings while policy check hashes attested findings, and the secret-file test changes the rejected-file expectation from throwing to undefined.

Is this the best way to solve the issue?

No. The feature direction is plausible, but the current branch is not the best implementation until it reuses the policy check attestation contract, preserves fail-closed secret handling, and is rebased for maintainer review.

Full review comments:

  • [P1] Compute runtime attestations from policy findings — extensions/policy/src/runtime-tool-policy.ts:260-265
    The runtime gate builds its attestation with ok: true and findings: [], while policy check hashes evaluation.attestedFindings. That means expectedAttestationHash is not actually comparing the runtime decision with the same policy/evidence/findings state a supervisor accepted. Reuse the policy evaluator or a shared attestation builder so runtime and CLI hashes are identical for the same state.
    Confidence: 0.9
  • [P1] Keep rejected secret files fail closed — src/infra/secret-file.test.ts:124-126
    This changes the rejected-symlink test from throwing to returning undefined. A rejected secret file is not the same as an absent file; treating it as missing lets callers silently skip a forbidden credential path or fall back. Keep the throwing assertion and preserve fail-closed behavior for rejected files.
    Confidence: 0.88

Overall correctness: patch is incorrect
Overall confidence: 0.87

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: This is a broad but bounded policy/runtime improvement with blocking review issues and limited blast radius while draft/protected.
  • merge-risk: 🚨 compatibility: The PR adds plugin config and plugin approval metadata surfaces that existing config, clients, plugins, and upgrades may need to tolerate.
  • merge-risk: 🚨 security-boundary: The PR changes policy attestation enforcement and touches secret-file fail-closed behavior, both of which are security-boundary relevant.
  • merge-risk: 🚨 availability: When enabled, stale or malformed policy state can block tool calls before approval and make operator misconfiguration user-visible at runtime.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🦞 diamond lobster and patch quality is 🧂 unranked krab.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (screenshot): The PR body and linked inspected PNG show after-fix source-probe output for policy check/watch/diff, approval metadata, and stale-attestation blocking, but the proof does not cover the flagged negative cases.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body and linked inspected PNG show after-fix source-probe output for policy check/watch/diff, approval metadata, and stale-attestation blocking, but the proof does not cover the flagged negative cases.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The PR body and linked inspected PNG show after-fix source-probe output for policy check/watch/diff, approval metadata, and stale-attestation blocking, but the proof does not cover the flagged negative cases.
Evidence reviewed

PR surface:

Source +1845, Tests +1704, Docs +316, Config +5, Other +30. Total +3900 across 32 files.

View PR surface stats
Area Files Added Removed Net
Source 16 1855 10 +1845
Tests 9 1722 18 +1704
Docs 2 357 41 +316
Config 2 5 0 +5
Generated 0 0 0 0
Other 3 51 21 +30
Total 32 3990 90 +3900

Security concerns:

  • [high] Runtime attestation does not hash policy findings — extensions/policy/src/runtime-tool-policy.ts:264
    The runtime gate can compare or display an attestation hash that was not produced from the same findings/clean-result tuple as policy check, weakening the audit boundary this feature is meant to enforce.
    Confidence: 0.9
  • [high] Rejected secret files are treated as absent in tests — src/infra/secret-file.test.ts:124
    The changed test expectation blesses returning undefined for a rejected symlink secret file, which can turn a forbidden credential path into a silent fallback or skipped secret.
    Confidence: 0.88

What I checked:

  • Repository policy applied: Root AGENTS.md was read fully and its ClawSweeper review guidance applies because this PR touches plugin APIs, config/default surfaces, gateway protocol payloads, and fail-closed runtime behavior. (AGENTS.md:1, 9d68f877ac3e)
  • Live PR state: Live GitHub reports the PR as draft, mergeable=CONFLICTING, mergeStateStatus=DIRTY, with protected maintainer label plus compatibility/security-boundary/availability risk labels. (b11c171c80b1)
  • Runtime attestation built without findings: The new runtime gate creates its attestation with ok=true and findings=[], so it is not the same accepted policy-check attestation when policy evaluation has findings or validation state. (extensions/policy/src/runtime-tool-policy.ts:260, b11c171c80b1)
  • Policy check attestation includes attested findings: The policy CLI path builds the attestation from evaluation.attestedFindings and uses those findings to compute clean result and findingsHash, which is the documented audit tuple the runtime claims to enforce. (extensions/policy/src/cli.ts:201, b11c171c80b1)
  • Secret-file contract on current main: Current main still expects tryReadSecretFileSync with rejectSymlink=true to throw for rejected files, preserving fail-closed handling instead of treating a rejected secret as absent. (src/infra/secret-file.test.ts:115, 9d68f877ac3e)
  • PR flips rejected secret test expectation: The live PR patch changes the rejected symlink assertion to expect undefined, which would bless a fail-open path for forbidden secret files. (src/infra/secret-file.test.ts:124, b11c171c80b1)

Likely related people:

  • giodl73-repo: Authored the merged Policy-stack PRs for doctor health, tool metadata, model/network/MCP checks, secret/auth checks, and gateway exposure checks that this runtime-audit PR extends. (role: feature owner / recent policy area contributor; confidence: high; commits: 9a5f2f61e76f, a30ac3f8d7cb, 6dbd5bd4460e; files: extensions/policy/src/doctor/register.ts, extensions/policy/src/policy-state.ts, docs/cli/policy.md)
  • openclaw/openclaw-secops: CODEOWNERS routes pnpm-lock and secret-file/security-sensitive paths touched by this PR to the secops owner group. (role: security-sensitive review owner; confidence: medium; files: .github/CODEOWNERS, pnpm-lock.yaml, src/infra/secret-file.test.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@giodl73-repo
giodl73-repo force-pushed the policy-runtime-audit branch 2 times, most recently from 11d74ba to 97c39e0 Compare May 13, 2026 04:49
@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Restacked on the refreshed policy conformance stack and current origin/main (e643890). Verified runtime approval metadata/stale-attestation behavior with focused tests and extension typecheck.\n\nChecks:\n- node scripts/test-projects.mjs extensions/policy/src/runtime-tool-policy.test.ts extensions/policy/src/doctor/register.test.ts extensions/policy/src/cli.test.ts src/flows/bundled-health-checks.test.ts --reporter=verbose\n- node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.extensions.test.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/extensions-test.tsbuildinfo\n- node scripts/check-changed.mjs\n- git diff --check\n\n@clawsweeper re-review

@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Updated the runtime audit pass after the rebase. The policy health context now accepts optional runtime evidence, channel runtime findings use a non-oc evidence target (
untime:channels/...) instead of pretending runtime state is a resolvable oc-path document, and approval views now render current/expected attestation hashes.\n\nChecks:\n- pnpm test src/infra/approval-view-model.test.ts extensions/policy/src/doctor/register.test.ts extensions/policy/src/cli.test.ts extensions/policy/src/runtime-tool-policy.test.ts -- --reporter=dot\n- pnpm tsgo:prod\n- pnpm exec oxfmt --check --threads=1 src/infra/policy-approval-metadata.ts src/infra/approval-view-model.test.ts src/flows/health-checks.ts extensions/policy/src/policy-state.ts extensions/policy/src/doctor/register.ts extensions/policy/src/doctor/register.test.ts extensions/policy/src/cli.test.ts docs/cli/policy.md docs/plugins/reference/policy.md\n- pnpm check:changed\n- git diff --check\n\n@clawsweeper re-review

@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Reviewed the runtime-audit branch after the runtime evidence change and updated the PR body. One small follow-up fix: runtime evidence refs now URI-encode channel/account segments so
untime:channels/.../accounts/... remains stable and unambiguous.\n\nRevalidated:\n- pnpm test extensions/policy/src/doctor/register.test.ts extensions/policy/src/cli.test.ts src/infra/approval-view-model.test.ts extensions/policy/src/runtime-tool-policy.test.ts -- --reporter=dot\n- pnpm tsgo:prod\n- pnpm exec oxfmt --check --threads=1 extensions/policy/src/policy-state.ts\n- pnpm check:changed\n- git diff --check\n\n@clawsweeper re-review

@giodl73-repo

Copy link
Copy Markdown
Contributor Author

Small wording follow-up after review: clarified that runtime audit findings are centered on the
untimeEvidence payload. Any runtime arget is just a compact evidence label, not a new path language or oc-path surface.\n\nValidation for the doc-only change:\n- pnpm exec oxfmt --check --threads=1 docs/cli/policy.md docs/plugins/reference/policy.md\n- pnpm check:changed\n- git diff --check\n\n@clawsweeper re-review

@giodl73-repo
giodl73-repo force-pushed the policy-runtime-audit branch 2 times, most recently from a67ce8e to 3e4e780 Compare May 15, 2026 00:21
@giodl73-repo
giodl73-repo force-pushed the policy-runtime-audit branch 4 times, most recently from b0ef865 to ea08857 Compare May 16, 2026 13:26
@giodl73-repo
giodl73-repo force-pushed the policy-runtime-audit branch from 5903758 to b11c171 Compare May 21, 2026 05:18
@clawsweeper clawsweeper Bot added the merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. label Jun 14, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jun 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling app: web-ui App: web-ui docs Improvements or additions to documentation extensions: oc-path extensions: policy gateway Gateway runtime maintainer Maintainer-authored PR merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. P2 Normal backlog priority with limited blast radius. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. scripts Repository scripts size: XL status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant