feat(hooks): secret-guard blocks live secret values in tool args #17

Merged
naps62-yolo merged 15 commits from week-review/2026-W34 into main 2026-08-21 21:57:58 +01:00
15 Commits
Author SHA1 Message Date
Miguel PalhasandClaude Fable 5 5db2e6a113 chore: retrigger ci
ci / lint (pull_request) Successful in 14s
ci / nix (pull_request) Successful in 10s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 21:43:19 +01:00
Miguel Palhas 91e1c5dac0 Merge remote-tracking branch 'origin/main' into week-review/2026-W34
ci / lint (pull_request) Successful in 14s
ci / nix (pull_request) Successful in 11s
2026-08-21 21:30:04 +01:00
Miguel PalhasandClaude Fable 5 234983327f fix(hooks): classify inherited and file values independently
ci / nix (pull_request) Successful in 8s
ci / lint (pull_request) Successful in 10s
Rotation leaves one of them stale; guarding both old and new is
safe. Short warning fires from either form.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 19:22:21 +01:00
Miguel PalhasandClaude Fable 5 d193df0403 fix(hooks): exported vars judged only by inherited value
ci / nix (pull_request) Successful in 9s
ci / lint (pull_request) Successful in 13s
Raw assignment can hide a short resolved secret or read as a
reference when the exported value is the real literal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 19:20:31 +01:00
Miguel PalhasandClaude Fable 5 e06cbe4217 fix(hooks): classify guard/warn from the resolved value
ci / nix (pull_request) Successful in 8s
ci / lint (pull_request) Successful in 11s
SECRET=$OTHER now guards the inherited value and warns from that
same value; a literal that is only a $-reference is never matched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 19:18:54 +01:00
Miguel PalhasandClaude Fable 5 3b9492f748 feat(hooks): daily warning for env values too short to guard
ci / nix (pull_request) Successful in 8s
ci / lint (pull_request) Successful in 10s
README now states the 6-char guarantee boundary instead of claiming
full coverage.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 19:16:45 +01:00
Miguel PalhasandClaude Fable 5 70020bd197 revert(claude-md): drop rtk and ADR promotion too
ci / nix (pull_request) Successful in 8s
ci / lint (pull_request) Successful in 10s
operating.md returns to main; the rules stay as repo memories.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 19:14:06 +01:00
Miguel PalhasandClaude Fable 5 717f8dc07e fix(hooks): floor back to 6 — shorter values are unguardable
ci / lint (pull_request) Successful in 10s
ci / nix (pull_request) Successful in 8s
The 4-char sandbox password matched standalone prose tokens twice
in live use. Matching cannot cover it; rotating it can.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 19:06:19 +01:00
Miguel PalhasandClaude Fable 5 4c8d95dbfd fix(hooks): guard covers short passwords and path-token URLs
ci / lint (pull_request) Successful in 10s
ci / nix (pull_request) Successful in 8s
URL skip now bare origins only; length floor drops to a sanity
minimum, with short values matched as standalone tokens so a 4-char
password doesn't block unrelated text (it did, in live testing).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 19:05:37 +01:00
Miguel PalhasandClaude Fable 5 8266a10a29 fix(hooks): secret-guard covers URLs-with-creds and $-values
ci / nix (pull_request) Successful in 8s
ci / lint (pull_request) Successful in 11s
Exact-name allowlist replaces shape-based skips; $-expansions
resolve from the inherited environment and the literal is scanned
too; only bare endpoints (no userinfo, no query) skip URL matching.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 19:02:29 +01:00
Miguel PalhasandClaude Fable 5 d04ac1bff3 feat(hooks): secret-guard blocks live secret values in tool args
ci / nix (pull_request) Successful in 9s
ci / lint (pull_request) Successful in 10s
Value-based: any ~/.env.claude value in Bash/Write/Edit args blocks
with the var name, never the value. Plus literal token shapes.
Serves Claude Code and Codex. Closes #1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 18:58:44 +01:00
Miguel PalhasandClaude Fable 5 4b81a746f7 revert(claude-md): drop the global never-merge rule
ci / lint (pull_request) Successful in 11s
ci / nix (pull_request) Successful in 9s
Merging is repo-class-scoped, not universal: personal repos merge
freely, critical prod and collaborative repos never auto-merge.
Stays in repo memories.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 17:41:40 +01:00
Miguel PalhasandClaude Fable 5 78997d6cbb fix(claude-md): scope rtk section to Claude Code
ci / nix (pull_request) Successful in 8s
ci / lint (pull_request) Successful in 10s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 17:37:55 +01:00
Miguel PalhasandClaude Fable 5 441ecb9967 fix(week-review): drop aoe title-generator turns from claude scan
ci / nix (pull_request) Successful in 7s
ci / lint (pull_request) Successful in 10s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 17:35:47 +01:00
Miguel PalhasandClaude Fable 5 274828701f feat(claude-md): promote three universal rules to operating.md
ci / nix (pull_request) Successful in 8s
ci / lint (pull_request) Successful in 11s
Never-auto-merge, rtk wrapper caveats, and ADR weight were repo-scoped
memories firing in only a few repos (issue #9). Repo copies deleted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 17:34:36 +01:00