fix(governance): materialize policies/sacred-paths.yaml as generated canonical manifest #806

Open
claude wants to merge 4 commits from claude/sacred-paths-canonical-manifest into main
Collaborator

What & why

PLATFORM_CHARTER.md §11 and MAP.md both promise policies/sacred-paths.yaml
as the canonical sacred-path list — but the file does not exist on main
(policies/ holds only agent-capabilities.yaml + mcp-registry/). The real
list lives only as hardcoded constants in control-plane/platformctl/safety.py.
Found in the platform health audit (2026-06-15).

Severity finding (step 1) — NOT a fail-open hole

The audit hypothesis was a latent fail-open in the sacred-path gate. Disproven.

  • control-plane/platformctl/ci/pr_sanity.py:94
    (SENSITIVE_PREFIXES) and
    :113
    (SECURITY_SENSITIVE_PREFIXES) reference the path as a protected prefix,
    consumed by deterministic_findings()
    (:204) for prefix-matching
    against files_changed. No code opens the file (repo-wide grep: only docs
    • these two tuples).
  • A non-existent path can never appear in a diff, so those two entries were
    inert/dead — they simply never fired. The gate stays fail-closed on the
    real paths (apply.py, safety.py, identity/, transport/, charter, …),
    which emit a blocker security-sensitive-label-missing finding when the
    class/security-sensitive label is absent.
  • Severity: Medium (governance-integrity drift), not High/fail-open:
    a dangling source-of-truth pointer + the canonical list being auditable only by
    reading Python, contradicting the charter's own single-source-of-truth claim.

Resolution (step 2) — operator-approved direction: code stays truth

The charter's own wording — "generated from module.yaml … + repo-wide rules"
says code/manifests are upstream and the YAML is a generated view. So:

  • control-plane/platformctl/ci/generate_sacred_paths.py — generator that
    builds the manifest from safety.py repo-wide rules + every module.yaml
    owned_paths/shared_paths. Idempotent; deterministic ordering.
  • policies/sacred-paths.yaml — the checked-in generated artifact. It is now
    the live, protected file: the previously-dead pr_sanity.py references
    become active (this PR adds the file → the gate now requires the label for it,
    which is exactly why this PR carries class/security-sensitive — the mechanism
    is validated end-to-end).
  • safety.py remains the runtime source of truth — the live gate
    (is_sacred_path / check_target) is not rewired to load YAML, so no new
    fail-open surface
    is introduced.
  • PLATFORM_CHARTER.md §11 / MAP.md: wording made precise
    (owned_paths/shared_paths + safety.py; regenerate command added to charter).
  • control-plane/pyproject.toml: register the generator in the pyfallow entry
    list.

Test (step 3) — fail-closed drift guard

control-plane/platformctl/tests/test_generate_sacred_paths.py:

  1. the file MUST exist (its absence is an error, not a silent skip);
  2. it MUST byte-match the generator output (editing a sacred constant without
    regenerating breaks CI);
  3. --check mode agrees with the committed file;
  4. repo-wide rules mirror the safety.py constants;
  5. no module ownership path is itself sacred (mirrors manifest.py's invariant).

Run by python-ci.yml (pytest control-plane/platformctl/tests on
control-plane/**). Local run: 177 passed (new test + test_pr_sanity +
test_safety_phase3). The 14 unrelated collection errors in the full suite are
pre-existing local-env noise (click not installed in this interpreter; CI
installs via pip install -e ./control-plane[dev]).

Out of scope (follow-up)

control-plane/platformctl/memory.py:20 keeps a third, independent
SACRED_PATH_PATTERNS regex list for memory destructive-op guarding — a separate
drift worth reconciling, but left untouched here to keep this PR coherent.

Review tier

class/security-sensitive (touches the sacred-path gate surface) →
full canary 3+3 + operator manual merge per ADR-0007. Committed as actor
claude (not pdurlej).

## What & why `PLATFORM_CHARTER.md` §11 and `MAP.md` both promise `policies/sacred-paths.yaml` as the **canonical** sacred-path list — but **the file does not exist on `main`** (`policies/` holds only `agent-capabilities.yaml` + `mcp-registry/`). The real list lives only as hardcoded constants in `control-plane/platformctl/safety.py`. Found in the platform health audit (2026-06-15). ## Severity finding (step 1) — NOT a fail-open hole The audit hypothesis was a latent fail-open in the sacred-path gate. **Disproven.** - [`control-plane/platformctl/ci/pr_sanity.py:94`](control-plane/platformctl/ci/pr_sanity.py#L94) (`SENSITIVE_PREFIXES`) and [`:113`](control-plane/platformctl/ci/pr_sanity.py#L113) (`SECURITY_SENSITIVE_PREFIXES`) reference the path as a **protected prefix**, consumed by `deterministic_findings()` ([`:204`](control-plane/platformctl/ci/pr_sanity.py#L204)) for prefix-matching against `files_changed`. **No code opens the file** (repo-wide grep: only docs + these two tuples). - A non-existent path can never appear in a diff, so those two entries were **inert/dead** — they simply never fired. The gate stays **fail-closed** on the *real* paths (`apply.py`, `safety.py`, `identity/`, `transport/`, charter, …), which emit a `blocker` `security-sensitive-label-missing` finding when the `class/security-sensitive` label is absent. - **Severity: Medium (governance-integrity drift)**, not High/fail-open: a dangling source-of-truth pointer + the canonical list being auditable only by reading Python, contradicting the charter's own single-source-of-truth claim. ## Resolution (step 2) — operator-approved direction: code stays truth The charter's own wording — *"generated from `module.yaml` … + repo-wide rules"* — says code/manifests are upstream and the YAML is a generated view. So: - **`control-plane/platformctl/ci/generate_sacred_paths.py`** — generator that builds the manifest from `safety.py` repo-wide rules + every `module.yaml` `owned_paths`/`shared_paths`. Idempotent; deterministic ordering. - **`policies/sacred-paths.yaml`** — the checked-in generated artifact. It is now the **live, protected file**: the previously-dead `pr_sanity.py` references become active (this PR adds the file → the gate now requires the label for it, which is exactly why this PR carries `class/security-sensitive` — the mechanism is validated end-to-end). - `safety.py` remains the **runtime source of truth** — the live gate (`is_sacred_path` / `check_target`) is **not** rewired to load YAML, so **no new fail-open surface** is introduced. - `PLATFORM_CHARTER.md` §11 / `MAP.md`: wording made precise (`owned_paths`/`shared_paths` + `safety.py`; regenerate command added to charter). - `control-plane/pyproject.toml`: register the generator in the pyfallow `entry` list. ## Test (step 3) — fail-closed drift guard **`control-plane/platformctl/tests/test_generate_sacred_paths.py`**: 1. the file MUST exist (its absence is an error, not a silent skip); 2. it MUST **byte-match** the generator output (editing a sacred constant without regenerating breaks CI); 3. `--check` mode agrees with the committed file; 4. repo-wide rules mirror the `safety.py` constants; 5. no module ownership path is itself sacred (mirrors `manifest.py`'s invariant). Run by `python-ci.yml` (`pytest control-plane/platformctl/tests` on `control-plane/**`). Local run: **177 passed** (new test + `test_pr_sanity` + `test_safety_phase3`). The 14 unrelated collection errors in the full suite are pre-existing local-env noise (`click` not installed in this interpreter; CI installs via `pip install -e ./control-plane[dev]`). ## Out of scope (follow-up) `control-plane/platformctl/memory.py:20` keeps a **third**, independent `SACRED_PATH_PATTERNS` regex list for memory destructive-op guarding — a separate drift worth reconciling, but left untouched here to keep this PR coherent. ## Review tier `class/security-sensitive` (touches the sacred-path gate surface) → **full canary 3+3 + operator manual merge** per ADR-0007. Committed as actor `claude` (not `pdurlej`).
fix(governance): materialize policies/sacred-paths.yaml as generated canonical manifest
All checks were successful
canary-required / collect-diff (pull_request) Successful in 4s
infra-docs-drift / docs-drift (pull_request) Successful in 5s
platformctl plan / auto-apply scope (pull_request) Successful in 18s
pyfallow / Pyfallow gate (control-plane) (pull_request) Successful in 15s
python-ci / Python 3.11 (pull_request) Successful in 39s
python-ci / Python 3.12 (pull_request) Successful in 41s
python-ci / Python 3.13 (pull_request) Successful in 42s
workflow-lint / lint (pull_request) Successful in 4s
canary-required / canary (pull_request) Successful in 16s
base-is-main / guard (pull_request) Successful in 1s
patchwarden-pr-sanity / collect-diff (pull_request) Successful in 4s
patchwarden-client-dry-run / collect-diff (pull_request) Successful in 3s
patchwarden-pr-sanity / sanity (pull_request) Successful in 3m46s
patchwarden-client-dry-run / dry-run (pull_request) Successful in 18s
4b010aba5f
Charter §11 / MAP.md promised `policies/sacred-paths.yaml` as the canonical
sacred-path list, but the file did not exist on main — a dangling
source-of-truth pointer. The real list lived only as hardcoded constants in
`control-plane/platformctl/safety.py`.

Severity finding: pr_sanity.py:94/:113 reference the path inside its
SENSITIVE_PREFIXES / SECURITY_SENSITIVE_PREFIXES tuples, but as a *protected
prefix*, not a loader — no code opens the file. So the missing file was an
inert/dead reference, NOT a fail-open hole: the label gate stays fail-closed on
the real paths (apply.py, safety.py, identity/, transport/, charter, ...). This
is governance-integrity drift (Medium), not a live sacred-path bypass.

Resolution (operator-approved direction): code stays the runtime source of
truth; generate the YAML as an auditable, declarative view of it.

- add platformctl/ci/generate_sacred_paths.py — builds policies/sacred-paths.yaml
  from safety.py repo-wide rules + module.yaml owned_paths/shared_paths
- check in generated policies/sacred-paths.yaml (now the live, protected file;
  the previously-dead pr_sanity reference becomes active)
- add tests/test_generate_sacred_paths.py — fail-closed drift guard: the file
  MUST exist AND byte-match the generator output (CI runs it via python-ci.yml)
- pyproject: register the generator in the pyfallow entry list
- charter §11 / MAP.md: precise wording (owned_paths/shared_paths + safety.py)

Not touched: the live gate logic (safety.py / pr_sanity.py runtime path) — no
new fail-open surface introduced.

class/security-sensitive: touches the sacred-path gate surface. Full canary 3+3
+ operator merge per ADR-0007.

Found in platform health audit 2026-06-15.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
First-time contributor

Patchwarden PR sanity

Operator signal: GO - Patchwarden can hand this exact head to the approval controller.

Automerge signal: 🟡 CONTROLLER ONLY - approval-ready, but outside the narrow safe-docs/status automerge lane.

Verdict: PASS - deterministic checks and configured reviewers are clean.

Next step: Continue through required Forgejo approval and the automerge controller.

  • PR: 806
  • Commit: dd3d702fc7865db2a722aca03c6529c2a398ca24
  • Status: eligible_sanity_clean
  • Reviewer health: clean
  • Security-sensitive label: present
  • Authority: Patchwarden policy signal; branch protection and automerge controller remain merge authority.
  • Model mix: glm-5.2:cloud, deepseek-v4-pro:cloud, kimi-k2.7-code:cloud

What I checked

  • Changed files: 6
  • Deterministic blocker scan: clean
  • External Forgejo gates: not_reported
  • Model reviewer lanes: 3
  • Comment contract: this comment is updated in place via a hidden Patchwarden marker.

Approval Handoff

  • State: ready_for_external_controller_review
  • Action: external controller may publish an APPROVED review for this exact head.
  • Boundary: branch protection and the automerge controller remain merge authority.

Signal Board

  • Legend: evidence is sufficient; 🟡 controller still has work; ⚠️ automation retries first; 🛑/ do not approve or merge.
Lane Signal Meaning
🧪 Deterministic sanity clean No deterministic blockers found.
🧩 External Forgejo gates 🟡 not reported No external gate snapshot was included in this report.
🧠 Model reviewers clean Configured reviewers returned OK.
🛡️ Patchwarden approval ready Exact-head sanity is clean; approval controller may continue.
🚦 Unattended automerge ineligible Outside the narrow safe-docs/status unattended lane.
🙋 Owner attention not needed No operator handoff is needed from this comment.
  • Scope blocker: non-doc/status path(s): MAP.md, PLATFORM_CHARTER.md, control-plane/platformctl/ci/generate_sacred_paths.py, control-plane/platformctl/tests/test_generate_sacred_paths.py, ... (+2 more)
  • Risk label blocker: class/security-sensitive, tier/full
  • Security-sensitive blocker: class/security-sensitive is present.
    🧭 Merge authority: branch protection and automerge controller remain authoritative.

Required Fixes

No deterministic blockers.

Non-blocking Notes

  • info sensitive-path-touched Sensitive path touched - PLATFORM_CHARTER.md
    • Evidence: PLATFORM_CHARTER.md
    • Next: Route through the existing 3+3/risk-tier process; model review remains advisory.
  • info sensitive-path-touched Sensitive path touched - policies/sacred-paths.yaml
    • Evidence: policies/sacred-paths.yaml
    • Next: Route through the existing 3+3/risk-tier process; model review remains advisory.

Reviewer Details

Model reviewer lanes

global-glm / glm-5.2:cloud

  • Status: ok

  • Verdict: OK

  • low Byte-match drift guard depends on PyYAML serialization stability

    • Evidence: control-plane/platformctl/ci/generate_sacred_paths.py:118-125 renders via yaml.safe_dump(doc, sort_keys=False, default_flow_style=False, width=4096, allow_unicode=True); test_generate_sacred_paths.py:33-39 asserts actual == expected byt
    • Next: Pin PyYAML in control-plane/dev deps (or assert structural equality via yaml.safe_load on both sides in addition to byte equality), so a serializer patch doesn't break the drift guard.
  • low Shared module paths are not checked against sacred-path set

    • Evidence: test_generate_sacred_paths.py:60-66 only iterates entry.get("owned", [])and assertsnot matchedviasafety.is_sacred_path. sharedentries (e.g.,compose/apps/compose.yaml for iskra-things-sync, kan-mcp, pogodowa-babcia) are skipp
    • Next: Extend the invariant test to also iterate entry.get("shared", []), extracting the path field when entries are dicts, and assert non-sacred — mirroring the owned-path check.
  • low find_modules_dir import unverified in this diff

    • Evidence: generate_sacred_paths.py:19 imports from platformctl.manifest import find_modules_dir; output_path():107 and build_document():81 fall back to it. The symbol's existence/behavior is not shown in the diff, and --check mode relies on it re
    • Next: Confirm platformctl.manifest.find_modules_dir exists and resolves to <repo>/modules on the CI runner; if not, the --check entrypoint and output_path() default will diverge from the test fixture path.

global-deepseek / deepseek-v4-pro:cloud

  • Status: ok
  • Verdict: OK
  • Findings: none

redteam / kimi-k2.7-code:cloud

  • Status: ok

  • Verdict: OK

  • medium Drift guard skips shared-path sacred-path validation

    • Evidence: control-plane/platformctl/tests/test_generate_sacred_paths.py:60-62 only checks entry.get('owned', []); it never extracts the 'path' value from shared_paths dicts. The generator emits shared paths in policies/sacred-paths.yaml (e.g., iskra-
    • Next: Extend the loop in test_module_owned_paths_are_not_themselves_sacred to also validate each shared item's 'path' value with safety.is_sacred_path, or add a separate test for shared_paths.

Policy notes

  • Patchwarden PR sanity is the first merge-lane signal for this PR.
  • Models produce findings; Patchwarden/policy produces decisions.
  • Model findings alone do not fail the status check; they require human or agent disposition.
  • Formal approval is separate from this comment and requires clean reviewer health.
  • Automerge remains delegated to branch protection and the automerge pilot.
<!-- patchwarden-pr-sanity:pdurlej/platform:PR-806 --> <!-- patchwarden.pr_sanity.v1 status=eligible_sanity_clean model_health=clean external_gates=not_reported approval_handoff=ready_for_external_controller_review pr=806 sha=dd3d702fc7865db2a722aca03c6529c2a398ca24 --> # Patchwarden PR sanity **Operator signal:** ✅ GO - Patchwarden can hand this exact head to the approval controller. **Automerge signal:** 🟡 CONTROLLER ONLY - approval-ready, but outside the narrow safe-docs/status automerge lane. **Verdict:** ✅ PASS - deterministic checks and configured reviewers are clean. **Next step:** Continue through required Forgejo approval and the automerge controller. - PR: `806` - Commit: `dd3d702fc7865db2a722aca03c6529c2a398ca24` - Status: `eligible_sanity_clean` - Reviewer health: `clean` - Security-sensitive label: `present` - Authority: Patchwarden policy signal; branch protection and automerge controller remain merge authority. - Model mix: `glm-5.2:cloud`, `deepseek-v4-pro:cloud`, `kimi-k2.7-code:cloud` ## What I checked - Changed files: `6` - Deterministic blocker scan: `clean` - External Forgejo gates: `not_reported` - Model reviewer lanes: `3` - Comment contract: this comment is updated in place via a hidden Patchwarden marker. ## Approval Handoff - State: `ready_for_external_controller_review` - Action: external controller may publish an APPROVED review for this exact head. - Boundary: branch protection and the automerge controller remain merge authority. ## Signal Board - Legend: ✅ evidence is sufficient; 🟡 controller still has work; ⚠️ automation retries first; 🛑/❌ do not approve or merge. | Lane | Signal | Meaning | | --- | --- | --- | | 🧪 Deterministic sanity | ✅ `clean` | No deterministic blockers found. | | 🧩 External Forgejo gates | 🟡 `not reported` | No external gate snapshot was included in this report. | | 🧠 Model reviewers | ✅ `clean` | Configured reviewers returned OK. | | 🛡️ Patchwarden approval | ✅ `ready` | Exact-head sanity is clean; approval controller may continue. | | 🚦 Unattended automerge | ❌ `ineligible` | Outside the narrow safe-docs/status unattended lane. | | 🙋 Owner attention | ✅ `not needed` | No operator handoff is needed from this comment. | - Scope blocker: non-doc/status path(s): `MAP.md`, `PLATFORM_CHARTER.md`, `control-plane/platformctl/ci/generate_sacred_paths.py`, `control-plane/platformctl/tests/test_generate_sacred_paths.py`, ... (+2 more) - Risk label blocker: `class/security-sensitive`, `tier/full` - Security-sensitive blocker: `class/security-sensitive` is present. 🧭 Merge authority: branch protection and automerge controller remain authoritative. ## Required Fixes No deterministic blockers. ## Non-blocking Notes - **`info` `sensitive-path-touched`** Sensitive path touched - `PLATFORM_CHARTER.md` - Evidence: `PLATFORM_CHARTER.md` - Next: Route through the existing 3+3/risk-tier process; model review remains advisory. - **`info` `sensitive-path-touched`** Sensitive path touched - `policies/sacred-paths.yaml` - Evidence: `policies/sacred-paths.yaml` - Next: Route through the existing 3+3/risk-tier process; model review remains advisory. ## Reviewer Details <details> <summary>Model reviewer lanes</summary> ### `global-glm` / `glm-5.2:cloud` - Status: `ok` - Verdict: `OK` - **`low`** Byte-match drift guard depends on PyYAML serialization stability - Evidence: `control-plane/platformctl/ci/generate_sacred_paths.py:118-125 renders via `yaml.safe_dump(doc, sort_keys=False, default_flow_style=False, width=4096, allow_unicode=True)`; test_generate_sacred_paths.py:33-39 asserts `actual == expected` byt` - Next: Pin PyYAML in control-plane/dev deps (or assert structural equality via `yaml.safe_load` on both sides in addition to byte equality), so a serializer patch doesn't break the drift guard. - **`low`** Shared module paths are not checked against sacred-path set - Evidence: `test_generate_sacred_paths.py:60-66 only iterates `entry.get("owned", [])` and asserts `not matched` via `safety.is_sacred_path`. `shared` entries (e.g., `compose/apps/compose.yaml` for iskra-things-sync, kan-mcp, pogodowa-babcia) are skipp` - Next: Extend the invariant test to also iterate `entry.get("shared", [])`, extracting the `path` field when entries are dicts, and assert non-sacred — mirroring the owned-path check. - **`low`** `find_modules_dir` import unverified in this diff - Evidence: `generate_sacred_paths.py:19 imports `from platformctl.manifest import find_modules_dir`; output_path():107 and build_document():81 fall back to it. The symbol's existence/behavior is not shown in the diff, and `--check` mode relies on it re` - Next: Confirm `platformctl.manifest.find_modules_dir` exists and resolves to `<repo>/modules` on the CI runner; if not, the `--check` entrypoint and `output_path()` default will diverge from the test fixture path. ### `global-deepseek` / `deepseek-v4-pro:cloud` - Status: `ok` - Verdict: `OK` - Findings: none ### `redteam` / `kimi-k2.7-code:cloud` - Status: `ok` - Verdict: `OK` - **`medium`** Drift guard skips shared-path sacred-path validation - Evidence: `control-plane/platformctl/tests/test_generate_sacred_paths.py:60-62 only checks entry.get('owned', []); it never extracts the 'path' value from shared_paths dicts. The generator emits shared paths in policies/sacred-paths.yaml (e.g., iskra-` - Next: Extend the loop in test_module_owned_paths_are_not_themselves_sacred to also validate each shared item's 'path' value with safety.is_sacred_path, or add a separate test for shared_paths. </details> ## Policy notes - Patchwarden PR sanity is the first merge-lane signal for this PR. - Models produce findings; Patchwarden/policy produces decisions. - Model findings alone do not fail the status check; they require human or agent disposition. - Formal approval is separate from this comment and requires clean reviewer health. - Automerge remains delegated to branch protection and the automerge pilot.
Collaborator

Iskra judgment

Field Value
Target pdurlej/platform#pull_request#806
Priority p1
Action patchwarden_candidate
Scores reach 4 / impact 4 / confidence 4
Piotr fit high
Effort small
Labels judge/p1, judge/patchwarden-candidate
Judge iskra via openclaw

Rationale: This PR appears to materialize a promised canonical governance manifest and reduce drift around sacred-path policy without claiming a fail-open security fix.

Caveat: The packet summarizes evidence but does not include full diff or test output, so security-sensitive review should verify generated-manifest parity.

Structured openclaw.judge.v0 payload
<!-- openclaw.judge.v0 -->
{
  "confidence": 4,
  "effort_hint": "small",
  "escalation": {
    "kind": "patchwarden_review",
    "reason": "Security-sensitive governance metadata should get focused review before manual merge."
  },
  "evidence_refs": [
    {
      "note": "Public repository metadata and dry-run packet only.",
      "type": "snapshot",
      "value": "issue-or-pr-title-body-labels-and-target-snapshot"
    }
  ],
  "impact": 4,
  "judge_actor": {
    "name": "iskra",
    "runtime": "openclaw"
  },
  "judged_at": "2026-06-22T00:00:00Z",
  "labels_to_apply": [
    "judge/p1",
    "judge/patchwarden-candidate"
  ],
  "piotr_fit": "high",
  "priority": "p1",
  "rationale_summary": "This PR appears to materialize a promised canonical governance manifest and reduce drift around sacred-path policy without claiming a fail-open security fix.",
  "reach": 4,
  "recommended_next_action": "patchwarden_candidate",
  "rerun_reason": "no_prior_judgment",
  "schema": "openclaw.judge.v0",
  "target": {
    "kind": "pull_request",
    "number": 806,
    "repo": "pdurlej/platform"
  },
  "target_snapshot": {
    "body_hash": "sha256:8b0a522f6a412e892e94dee1ef41f3d91c4ac7dd396889a8d24873c62fef2653",
    "commit_count": 1,
    "evidence_hash": "sha256:5aa919c4fbaf6fc66553bd8a071156482e7696d97b4ba34641b0afc9fd55e28e",
    "head_sha": "4b010aba5f9be42c660a86d0a47acae29a7ef7f7",
    "labels": [
      "agent/claude-code",
      "class/security-sensitive",
      "merge/manual-security-sensitive",
      "tier/full"
    ],
    "labels_hash": "sha256:0d52ac8f97b29d5bc566820e36972ede06d7ee5a05016c57cb603156b99e95b5",
    "state": "open",
    "title_hash": "sha256:811b29fef26847f8f8bd1cba87fa26195b5eeb220603ea61e95da7bfdfb05c01",
    "updated_at": "2026-06-18T15:27:16+02:00"
  },
  "top_caveat": "The packet summarizes evidence but does not include full diff or test output, so security-sensitive review should verify generated-manifest parity."
}
<!-- /openclaw.judge.v0 -->
### Iskra judgment | Field | Value | | --- | --- | | Target | `pdurlej/platform#pull_request#806` | | Priority | p1 | | Action | patchwarden_candidate | | Scores | reach 4 / impact 4 / confidence 4 | | Piotr fit | high | | Effort | small | | Labels | `judge/p1`, `judge/patchwarden-candidate` | | Judge | `iskra` via `openclaw` | **Rationale:** This PR appears to materialize a promised canonical governance manifest and reduce drift around sacred-path policy without claiming a fail-open security fix. **Caveat:** The packet summarizes evidence but does not include full diff or test output, so security-sensitive review should verify generated-manifest parity. <details> <summary>Structured openclaw.judge.v0 payload</summary> ```json <!-- openclaw.judge.v0 --> { "confidence": 4, "effort_hint": "small", "escalation": { "kind": "patchwarden_review", "reason": "Security-sensitive governance metadata should get focused review before manual merge." }, "evidence_refs": [ { "note": "Public repository metadata and dry-run packet only.", "type": "snapshot", "value": "issue-or-pr-title-body-labels-and-target-snapshot" } ], "impact": 4, "judge_actor": { "name": "iskra", "runtime": "openclaw" }, "judged_at": "2026-06-22T00:00:00Z", "labels_to_apply": [ "judge/p1", "judge/patchwarden-candidate" ], "piotr_fit": "high", "priority": "p1", "rationale_summary": "This PR appears to materialize a promised canonical governance manifest and reduce drift around sacred-path policy without claiming a fail-open security fix.", "reach": 4, "recommended_next_action": "patchwarden_candidate", "rerun_reason": "no_prior_judgment", "schema": "openclaw.judge.v0", "target": { "kind": "pull_request", "number": 806, "repo": "pdurlej/platform" }, "target_snapshot": { "body_hash": "sha256:8b0a522f6a412e892e94dee1ef41f3d91c4ac7dd396889a8d24873c62fef2653", "commit_count": 1, "evidence_hash": "sha256:5aa919c4fbaf6fc66553bd8a071156482e7696d97b4ba34641b0afc9fd55e28e", "head_sha": "4b010aba5f9be42c660a86d0a47acae29a7ef7f7", "labels": [ "agent/claude-code", "class/security-sensitive", "merge/manual-security-sensitive", "tier/full" ], "labels_hash": "sha256:0d52ac8f97b29d5bc566820e36972ede06d7ee5a05016c57cb603156b99e95b5", "state": "open", "title_hash": "sha256:811b29fef26847f8f8bd1cba87fa26195b5eeb220603ea61e95da7bfdfb05c01", "updated_at": "2026-06-18T15:27:16+02:00" }, "top_caveat": "The packet summarizes evidence but does not include full diff or test output, so security-sensitive review should verify generated-manifest parity." } <!-- /openclaw.judge.v0 --> ``` </details>
Collaborator

Iskra judgment

Field Value
Target pdurlej/platform#pull_request#806
Priority p1
Action patchwarden_candidate
Scores reach 4 / impact 4 / confidence 4
Piotr fit high
Effort small
Labels judge/p1, judge/patchwarden-candidate
Judge iskra via openclaw

Rationale: The PR addresses a security-sensitive governance/docs-to-policy mismatch with a canonical generated manifest, so it remains high-priority and review-worthy after the target changed.

Caveat: The packet excerpt does not include the full diff or test output, so manifest parity and generator behavior still need verification.

Structured openclaw.judge.v0 payload
<!-- openclaw.judge.v0 -->
{
  "confidence": 4,
  "effort_hint": "small",
  "escalation": {
    "kind": "patchwarden_review",
    "reason": "Security-sensitive governance manifest change should receive focused patch review before merge."
  },
  "evidence_refs": [
    {
      "note": "Public repository metadata, target snapshot, previous judgment, and dry-run packet only.",
      "type": "snapshot",
      "value": "pr-title-body-labels-target-snapshot-and-previous-judgment"
    }
  ],
  "impact": 4,
  "judge_actor": {
    "name": "iskra",
    "runtime": "openclaw"
  },
  "judged_at": "2026-06-23T00:00:00Z",
  "labels_to_apply": [
    "judge/p1",
    "judge/patchwarden-candidate"
  ],
  "piotr_fit": "high",
  "priority": "p1",
  "rationale_summary": "The PR addresses a security-sensitive governance/docs-to-policy mismatch with a canonical generated manifest, so it remains high-priority and review-worthy after the target changed.",
  "reach": 4,
  "recommended_next_action": "patchwarden_candidate",
  "rerun_reason": "target_changed",
  "schema": "openclaw.judge.v0",
  "target": {
    "kind": "pull_request",
    "number": 806,
    "repo": "pdurlej/platform"
  },
  "target_snapshot": {
    "body_hash": "sha256:8b0a522f6a412e892e94dee1ef41f3d91c4ac7dd396889a8d24873c62fef2653",
    "commit_count": 1,
    "evidence_hash": "sha256:c919036e2cf6ba10e054624a3ca7f8695e8a3c3a2c75d21ab09ac6848e08b74c",
    "head_sha": "4b010aba5f9be42c660a86d0a47acae29a7ef7f7",
    "labels": [
      "agent/claude-code",
      "class/security-sensitive",
      "judge/p1",
      "judge/patchwarden-candidate",
      "merge/manual-security-sensitive",
      "tier/full"
    ],
    "labels_hash": "sha256:8a9c840c7419b8ec4d7856c3d760ad0d29a83ebf701abcd45efe5a27a5c4eb02",
    "state": "open",
    "title_hash": "sha256:811b29fef26847f8f8bd1cba87fa26195b5eeb220603ea61e95da7bfdfb05c01",
    "updated_at": "2026-06-22T03:02:29+02:00"
  },
  "top_caveat": "The packet excerpt does not include the full diff or test output, so manifest parity and generator behavior still need verification."
}
<!-- /openclaw.judge.v0 -->
### Iskra judgment | Field | Value | | --- | --- | | Target | `pdurlej/platform#pull_request#806` | | Priority | p1 | | Action | patchwarden_candidate | | Scores | reach 4 / impact 4 / confidence 4 | | Piotr fit | high | | Effort | small | | Labels | `judge/p1`, `judge/patchwarden-candidate` | | Judge | `iskra` via `openclaw` | **Rationale:** The PR addresses a security-sensitive governance/docs-to-policy mismatch with a canonical generated manifest, so it remains high-priority and review-worthy after the target changed. **Caveat:** The packet excerpt does not include the full diff or test output, so manifest parity and generator behavior still need verification. <details> <summary>Structured openclaw.judge.v0 payload</summary> ```json <!-- openclaw.judge.v0 --> { "confidence": 4, "effort_hint": "small", "escalation": { "kind": "patchwarden_review", "reason": "Security-sensitive governance manifest change should receive focused patch review before merge." }, "evidence_refs": [ { "note": "Public repository metadata, target snapshot, previous judgment, and dry-run packet only.", "type": "snapshot", "value": "pr-title-body-labels-target-snapshot-and-previous-judgment" } ], "impact": 4, "judge_actor": { "name": "iskra", "runtime": "openclaw" }, "judged_at": "2026-06-23T00:00:00Z", "labels_to_apply": [ "judge/p1", "judge/patchwarden-candidate" ], "piotr_fit": "high", "priority": "p1", "rationale_summary": "The PR addresses a security-sensitive governance/docs-to-policy mismatch with a canonical generated manifest, so it remains high-priority and review-worthy after the target changed.", "reach": 4, "recommended_next_action": "patchwarden_candidate", "rerun_reason": "target_changed", "schema": "openclaw.judge.v0", "target": { "kind": "pull_request", "number": 806, "repo": "pdurlej/platform" }, "target_snapshot": { "body_hash": "sha256:8b0a522f6a412e892e94dee1ef41f3d91c4ac7dd396889a8d24873c62fef2653", "commit_count": 1, "evidence_hash": "sha256:c919036e2cf6ba10e054624a3ca7f8695e8a3c3a2c75d21ab09ac6848e08b74c", "head_sha": "4b010aba5f9be42c660a86d0a47acae29a7ef7f7", "labels": [ "agent/claude-code", "class/security-sensitive", "judge/p1", "judge/patchwarden-candidate", "merge/manual-security-sensitive", "tier/full" ], "labels_hash": "sha256:8a9c840c7419b8ec4d7856c3d760ad0d29a83ebf701abcd45efe5a27a5c4eb02", "state": "open", "title_hash": "sha256:811b29fef26847f8f8bd1cba87fa26195b5eeb220603ea61e95da7bfdfb05c01", "updated_at": "2026-06-22T03:02:29+02:00" }, "top_caveat": "The packet excerpt does not include the full diff or test output, so manifest parity and generator behavior still need verification." } <!-- /openclaw.judge.v0 --> ``` </details>
Merge remote-tracking branch 'origin/main' into claude/sacred-paths-canonical-manifest
All checks were successful
base-is-main / guard (pull_request) Successful in 1s
pyfallow / Pyfallow gate (control-plane) (pull_request) Successful in 15s
python-ci / Python 3.13 (pull_request) Successful in 45s
workflow-lint / lint (pull_request) Successful in 6s
canary-required / collect-diff (pull_request) Successful in 4s
infra-docs-drift / docs-drift (pull_request) Successful in 5s
patchwarden-client-dry-run / collect-diff (pull_request) Successful in 4s
patchwarden-pr-sanity / collect-diff (pull_request) Successful in 5s
platformctl plan / auto-apply scope (pull_request) Successful in 16s
python-ci / Python 3.11 (pull_request) Successful in 42s
python-ci / Python 3.12 (pull_request) Successful in 43s
canary-required / canary (pull_request) Successful in 16s
patchwarden-client-dry-run / dry-run (pull_request) Successful in 17s
patchwarden-pr-sanity / sanity (pull_request) Successful in 2m12s
73264098bb
Merge remote-tracking branch 'origin/main' into claude/sacred-paths-canonical-manifest
All checks were successful
base-is-main / guard (pull_request) Successful in 1s
canary-required / collect-diff (pull_request) Successful in 5s
infra-docs-drift / docs-drift (pull_request) Successful in 5s
patchwarden-client-dry-run / collect-diff (pull_request) Successful in 4s
patchwarden-pr-sanity / collect-diff (pull_request) Successful in 5s
python-ci / Python 3.12 (pull_request) Successful in 44s
python-ci / Python 3.13 (pull_request) Successful in 44s
workflow-lint / lint (pull_request) Successful in 5s
platformctl plan / auto-apply scope (pull_request) Successful in 17s
pyfallow / Pyfallow gate (control-plane) (pull_request) Successful in 16s
python-ci / Python 3.11 (pull_request) Successful in 42s
canary-required / canary (pull_request) Successful in 16s
patchwarden-client-dry-run / dry-run (pull_request) Successful in 18s
patchwarden-pr-sanity / sanity (pull_request) Successful in 1m7s
536161b57b
Iskra approved these changes 2026-06-26 13:22:17 +02:00
Iskra left a comment

Operator live approval present for #806: branch is current and all latest CI/Patchwarden contexts are green. Approval recorded by Iskra as merge actor for the canonical sacred-path manifest PR.

Operator live approval present for #806: branch is current and all latest CI/Patchwarden contexts are green. Approval recorded by Iskra as merge actor for the canonical sacred-path manifest PR.
Merge remote-tracking branch 'origin/main' into codex/tmp-806-update
All checks were successful
base-is-main / guard (pull_request) Successful in 1s
canary-required / collect-diff (pull_request) Successful in 4s
infra-docs-drift / docs-drift (pull_request) Successful in 4s
patchwarden-client-dry-run / collect-diff (pull_request) Successful in 4s
patchwarden-pr-sanity / collect-diff (pull_request) Successful in 4s
platformctl plan / auto-apply scope (pull_request) Successful in 17s
pyfallow / Pyfallow gate (control-plane) (pull_request) Successful in 16s
python-ci / Python 3.11 (pull_request) Successful in 42s
canary-required / canary (pull_request) Successful in 16s
patchwarden-client-dry-run / dry-run (pull_request) Successful in 17s
python-ci / Python 3.12 (pull_request) Successful in 44s
python-ci / Python 3.13 (pull_request) Successful in 44s
workflow-lint / lint (pull_request) Successful in 5s
patchwarden-pr-sanity / sanity (pull_request) Successful in 2m4s
dd3d702fc7
pdurlej approved these changes 2026-06-26 15:03:08 +02:00
pdurlej left a comment

Operator approval relayed from live Codex merge-fest scope: platform PR queue only.

Operator approval relayed from live Codex merge-fest scope: platform PR queue only.
All checks were successful
base-is-main / guard (pull_request) Successful in 1s
Required
Details
canary-required / collect-diff (pull_request) Successful in 4s
infra-docs-drift / docs-drift (pull_request) Successful in 4s
patchwarden-client-dry-run / collect-diff (pull_request) Successful in 4s
patchwarden-pr-sanity / collect-diff (pull_request) Successful in 4s
platformctl plan / auto-apply scope (pull_request) Successful in 17s
pyfallow / Pyfallow gate (control-plane) (pull_request) Successful in 16s
python-ci / Python 3.11 (pull_request) Successful in 42s
canary-required / canary (pull_request) Successful in 16s
patchwarden-client-dry-run / dry-run (pull_request) Successful in 17s
python-ci / Python 3.12 (pull_request) Successful in 44s
python-ci / Python 3.13 (pull_request) Successful in 44s
workflow-lint / lint (pull_request) Successful in 5s
patchwarden-pr-sanity / sanity (pull_request) Successful in 2m4s
Required
Details
This pull request is blocked because it changes a protected file:
  • platform_charter.md
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin claude/sacred-paths-canonical-manifest:claude/sacred-paths-canonical-manifest
git switch claude/sacred-paths-canonical-manifest
Sign in to join this conversation.
No reviewers
No labels
W6d-automerge-calibration
agent/claude-code
agent/codex
agent/hermes
agent/iskra
agent/ollama
agent/patchwarden
automerge-candidate
class/security-sensitive
cutover-gate
dependency/blocked
dependency/blocks-others
dependency/cross-repo
dependency/needs-confirmation
domain:agents
domain:ci
domain:docs
domain:forgejo
domain:infra
domain:memory
domain:runtime
domain:signal
domain:ux
flow/architecture
flow/blocked
flow/deployed
flow/done
flow/implementation
flow/intake
flow/maintained
flow/observed
flow/ready
flow/refining
flow/retired
flow/review
iterating
judge/codex-candidate
judge/hermes-candidate
judge/low-confidence
judge/needs-refinement
judge/operator-needed
judge/p0
judge/p1
judge/p2
judge/p3
judge/park
judge/patchwarden-candidate
judge/stale-priority
kind/adr
kind/bug
kind/chore
kind/feature
kind/infra
kind/ops
kind/refactor
kind/research
large-impact
merge/auto
merge/manual
merge/manual-dependency-conflict
merge/manual-failing-tests
merge/manual-merge-conflict
merge/manual-missing-review
merge/manual-operator-preference
merge/manual-red-zone
merge/manual-security-sensitive
merge/manual-unclear-scope
merge/manual-unknown
meta
mode:operator-only
mode:patchwarden-iskra-approved
mode:safe-auto
needs-operator-decision
needs-triage
not-ready
observed/erroring
observed/needs-followup
observed/pending
observed/retire-candidate
observed/unused
observed/used
operator-emotional
owner-attention
phase/02
phase/03
priority:p0
priority:p1
priority:p2
priority:p3
proposed
ready-for-agent
ready-for-operator
recovery
review:claude-reviewed
review:codex-reviewed
review:dziadek-reviewed
review:needs-human
risk/exposure
risk/process
risk/product
risk/runtime
safety:external-write
safety:no-prod-mutation
safety:prod-impact
safety:secret-touch
size/large
size/medium
size/small
size/tiny
size/unknown
source/adr
source/agent-generated
source/manual
source/operator-chat
source/voice-note
status:blocked
status:codex-ready
status:merged:pending-evidence
status:needs-evidence
status:operator-needed
status:parked
tier/full
tier/lite
tier/stacked
tier:0-platform-substrate
tier:1-iskra-value-layer
tier:2-tools-products-modules
type:bug
type:chore
type:docs
type:feat
type:policy
type:research
No milestone
No project
No assignees
5 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pdurlej/platform!806
No description provided.