Skip to content

feat(security): ship a standard scanner toolchain to every overlaid repo - #8

Merged
vedant-simulacrum merged 3 commits into
mainfrom
feat/security-toolchain
Sep 2, 2026
Merged

feat(security): ship a standard scanner toolchain to every overlaid repo#8
vedant-simulacrum merged 3 commits into
mainfrom
feat/security-toolchain

Conversation

@vedant-simulacrum

Copy link
Copy Markdown
Collaborator

What

Every repo that is public or serves prod traffic gets the same security gate, seeded by vstack overlay .:

Tool Local gate CI Post-deploy
gitleaks .claude/security-scan.sh security.yml history sweep in /security
semgrep same same
osv-scanner same same
zizmor same same
eslint when configured repo ci.yml
npm audit security.yml
nuclei, ZAP baseline /security step 5, against a preview URL
  • claude/security-scan.sh: ok/FAIL/skip per tool, exit 1 only on findings, skip when a tool is absent. Scans only what git sees, so .next/ and node_modules/ never count. Every tool runs under a timeout.
  • claude/security.yml.tmpl, claude/dependabot.yml.tmpl: seeded once, repo-owned after. Actions SHA-pinned, persist-credentials: false, read-only token, npm ci --ignore-scripts, cooldown 7 days.
  • overlay.sh: copies the scanner, seeds the two .github files, prints kept ... (differs from template) on drift, hints when verify.sh does not call the scanner.
  • claude/commands/security.md: runs the real tools. The old text claimed verify.sh scanned secrets. It never did.
  • setup-machine.sh: gitleaks, semgrep, osv-scanner, zizmor install by default.
  • Check 64/64b in the vstack gate, with falsifiability rows. 65 checks now.
  • Version 1.67.0, CHANGELOG entry.

Proof

  • ./.claude/verify.sh: checks: 65 declared, 64 ran, 1 skipped / VERIFIED
  • VSTACK_FALSIFY_ROWS="12 31 64 64b" tests/gate-falsifiability.sh: FALSIBILITY 7/7
  • tests/inventory-contract.sh: 32 checks clean
  • First consumer: itsvedantkumar/vedant.to branch chore/security-toolchain. The first real run caught 11 gitleaks hits in .next/ (fixed the scanner's scope), a curl-pipe in a workflow, and a missing dependabot cooldown.

After merge

Tag v1.67.0, then vstack update on each machine, then vstack overlay . in each repo and bump its .conductor/settings.toml pin.

Reviewed by SCARY-TERRY (code-reviewer, sonnet) and EVIL-MORTY (security-auditor, sonnet); both findings fixed before commit.

🤖 Generated with Claude Code

Every repo that is public or serves prod traffic gets the same gate:
gitleaks, semgrep, osv-scanner, zizmor and eslint locally, plus a CI
workflow with the same tools and npm audit.

- claude/security-scan.sh: one script, ok/FAIL/skip per tool, exit 1
  only on findings, skip when a tool is absent. Scans only what git
  sees (tracked + untracked-not-ignored) so build caches never count.
  Every tool runs under a timeout.
- claude/verify.sh.tmpl: stage 2 calls the scanner.
- claude/security.yml.tmpl, claude/dependabot.yml.tmpl: seeded once
  by overlay.sh, repo-owned after. All actions SHA-pinned,
  persist-credentials false, read-only token, cooldown 7 days.
- overlay.sh: copies the scanner, seeds the two .github files, reports
  kept/differs, hints when verify.sh does not call the scanner.
- claude/commands/security.md: runs the real tools; drops the claim
  that verify.sh scanned secrets (it never did).
- setup-machine.sh: gitleaks, semgrep, osv-scanner, zizmor install by
  default; trivy, nmap, nuclei stay behind --with-security.
- .claude/verify.sh check 64/64b: the scanner skips cleanly with no
  tools, fails on a stub finding, every workflow action is SHA-pinned.
- README: prod-ready gates table; overlay lane inventory rows.
- 1.67.0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
itsvedantkumar and others added 2 commits September 2, 2026 23:15
The first real CI run on a consumer repo failed on it. Git-root scanning is
opt-in there, so dropping the flag keeps the behaviour.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@vedant-simulacrum
vedant-simulacrum merged commit 34e0d31 into main Sep 2, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants