All Claude Code modscpeaustriajc/cj-stack
test-guard
Denies an Edit, MultiEdit or Write that changes or removes a line a test file has at HEAD; additions pass, and only the user can allow one path with /test-guard allow <path>
test-guard reaches L2 (writes or runs) and fails claude plugin validate on Claude Code 2.1.312: modules../register.ts: test-guard.allowed is not declared: the manifest's types contract must name it in interface PluginState { test-guard: { allowed: ... } }.
- Events hooked: 3
- API methods referenced: 7
- Access from classified calls: L2, writes or runs: runs processes, reads files, reads mod state
- Reads mod state: the scan does not record whose state, so this does not show that it reads another mod’s values
- Static scan, not a runtime test
Install hint
/plugin install test-guard --marketplace cpeaustriajc/cj-stackFrom the repository's own marketplace. Confirm the plugin name in the repository's README before installing. Mods need Claude Code 2.1.287 or later. It fails validation in the latest scan, so it may not install.
Access
L2 Writes or runsruns processes, reads files, reads mod stateValidation
fails on 2.1.312View the source on GitHub Back to the list
What the scan recorded
- Observed events
- every tool call
- Hooks
session.start, command.run {command=test-guard}, tool.call- API calls
$.command.register, $.fs.exists, $.fs.read, $.process.run, $.session.cwd, $.state.get, $.state.set- Validation on 2.1.312
- fails on 2.1.312
- Validator output
- modules../register.ts: test-guard.allowed is not declared: the manifest's types contract must name it in interface PluginState { test-guard: { allowed: ... } }; ./register.ts hooks: session.start, command.run{command=test-guard}, tool.call; ./register.ts answers its own command: command.run{command=test-guard}; ./register.ts gating hook with .catch: tool.call; ./register.ts calls: $.command.register, $.fs.exists (via nearestDir), $.fs.read (via after), $.process.run (via headText, isTest), $.session.cwd, $.state.get, $.state.set; ./register.ts state writes: test-guard.allowed; ./register.ts state reads: test-guard.allowed
- Scanned revision
268410f16b16- Marketplace passed
- cj-stack
These are the hooks and API calls reported by claude plugin validate. Access levels describe the widest reach of those calls and are not safety ratings. Validation is a static check, not a runtime test, and a passing result does not prove that a mod works or is safe. What a mod can access and how the scan works.
More from cpeaustriajc/cj-stack
- bash-trimCuts a long successful Bash output to its first 2,000 and last 3,000 characters with a count of the cut lines…
- denial-explainerSays which rule blocked an action in auto mode and the allow rule that would cover it
- git-guardDenies a Bash git command that loses work Claude Code does not already guard: git branch -D, a force push to…
- hone-nudgeSuggests /hone <skill> when you corrected Claude during a cj-stack skill run
- kill-guardDenies a Bash command that stops processes by name or by port, because it can also stop another checkout's de…
- linear-gateBlocks Linear writes off shift; on shift, leaves them to your permission mode and asks only before a delete o…
- loop-brakeEnds a turn after N forced Stop-hook continuations so a looping goal hook cannot burn your usage
- memory-lintDenies an auto-memory write that holds task state, one-off references or repo detail, so memory keeps only wh…
- session-modes/mode readonly, research, prototype and build: a working mode enforced for the whole session
- usage-paceWeekly usage in the status line, and whether it lasts until the reset
- work-folderDenies a new agent working file (plan, evidence, prototype, scratch, report, probe test) outside .claude/work…
- work-paneShows test runs in a pane.
Badge for your README
Authors can show the latest scan result in their README. Each badge links to this page.
[](https://mods.aidojo.si/mods/cpeaustriajc--cj-stack--test-guard/)
[](https://mods.aidojo.si/mods/cpeaustriajc--cj-stack--test-guard/)