Deliver: Self-Protection Paths - #78
Merged
Merged
Conversation
Adopted-From: #73 Author: architect Waves: 3 Tasks: 5 Out-of-scope deps: no Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Plan: .agents/plans/self-protection-paths.md (Status + approved event written by: node harness/cli.js approve) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…he shared lib Wave 1, Task 1.1 Validated: AC#3 — pattern appears exactly once in source (plan doc quote excluded); bash -n passes; smoke check prints OK; extra allowed/denied path cases pass Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t hash Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Wave 2, Task 2.1 Validated: AC#1, AC#4 — bash scripts/test-classify-low-risk.sh exits 0 with the four new self-protected cases included Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t hash Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tests Wave 2, Task 2.2 Validated: AC#2, AC#4 — bash scripts/test-lint-plan.sh exits 0 with the four new self-protected advisory cases included Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t hash Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Wave 3, Task 3.1 Validated: AC#5 — Self-Protected Paths subsection added after Severity Routing; bash scripts/test-lint-plan.sh ALL PASS (exit 0); scripts/lint-plan.sh .agents/plans/self-protection-paths.md exits 0 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t hash Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Wave 3, Task 3.2 Validated: AC#5 — self-protected transparency block added after RAD_LOW_RISK_PATTERNS; every added line is a comment (diff check, no assignments touched) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t hash Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #73.
Summary
Adds a built-in, deliberately NON-configurable self-protected path set covering RAD's own machinery, so no auto-clear path (current severity routing, future green lane #75) can ever clear a plan that modifies the gate itself. Upstreamed from BEAKON's production trust-inversion guard.
scripts/lib/plan-paths.sh— readonlyRAD_SELF_PROTECTED_PATTERNliteral +path_is_self_protected()(one source of truth; no env-var indirection by design) — 698cb1escripts/classify-low-risk.sh— rule 0: any self-protected scope path ⇒ not-low, before and regardless of all operator patterns (wins overRAD_LOW_RISK_PATTERNS='.*') — f07234dscripts/lint-plan.sh— unconditional advisory ("self-protected path (RAD machinery — never auto-clearable)"), fires in everyRAD_HIGH_RISK_PATTERNSstate; warnings-only contract unchanged — cd0635fTest coverage
8 new cases across the two co-located suites (both green, plus scope + test checks):
.*allowlist + harness path → not-low; classifier's own path w/ empty high-risk → not-low;.agents/state/→ not-low; docs-only regression → still lowRAD_HIGH_RISK_PATTERNS; docs-only → no warning; exit 0 throughoutNotes for review
^\.claude/(prompt surfaces = trust surfaces) — approved as an Issue Gap at Gate 1.lint-plan.shon this very plan now emits the new self-protection advisories — the guard flagging its own delivery, as intended.🤖 Generated with Claude Code