registry  /  gutcheck  /  0.3.1

gutcheck@0.3.1

Prove your AI-written tests actually test your code: a diff-scoped mutation probe that guts each tested function and reruns only its test — plus a sub-second lint and a Claude Code Stop hook that re-probes what an agent just changed.

Static Scan Results

scanned 3h ago · by rust-scanner

Static analysis flagged 11 finding(s) at 72.0% confidence. This version is warn-only unless an AI or security-team review confirms malicious behavior.

Static reason
One or more suspicious static signals were detected.

Decision evidence

public snapshot
Behavioral surface
Source
ChildProcessCryptoEnvironmentVarsFilesystemShell
Supply chain
HighEntropyStringsUrlStrings
ManifestNo manifest risk signals triggered.
scanned 28 file(s), 484 KB of source, external domains: github.com, json.schemastore.org

Source & flagged code

4 flagged · loading source
mutation/probe.mjsView file
12// those false positives (a broken SUT makes a real test fail) and confirms the genuinely hollow ones. L13: import { execSync } from 'node:child_process'; L14: import { mkdtempSync, cpSync, readFileSync, writeFileSync, rmSync, existsSync, symlinkSync } from 'node:fs';
High
Child Process

Package source references child process execution.

mutation/probe.mjsView on unpkg · L12
mutation/lock.mjsView file
23const path = lockPathFor(dir); L24: const handle = { path, release() { try { if (JSON.parse(readFileSync(path, 'utf8')).pid === process.pid) unlinkSync(path); } catch {} } }; L25: for (let attempt = 0; attempt < 2; attempt++) {
Low
Weak Crypto

Package source references weak cryptographic algorithms.

mutation/lock.mjsView on unpkg · L23
mutation/gate.mjsView file
12Cross-file remote execution chain: mutation/gate.mjs spawns mutation/gutcheck.mjs; helper contains network access plus dynamic code execution. L12: // hook built). Every error path fails OPEN: null means "print nothing", same as the bash hook's exit 0. L13: import { execFileSync } from 'node:child_process'; L14: import { existsSync, readFileSync, writeFileSync, statSync, realpathSync } from 'node:fs'; ... L29: try { L30: const parsed = JSON.parse(stdinText); L31: return { gate: true, loopActive: !!parsed && parsed.stop_hook_active === true }; ... L326: L327: // runGate({ harnessName, dir, stdinText, env }) -> string|null (the stdout payload, null = silence) L328: export function runGate({ harnessName, dir, stdinText, env = {} }) {
High
Cross File Remote Execution Context

Source spawns a local helper that also contains network and dynamic execution context; review data flow before blocking.

mutation/gate.mjsView on unpkg · L12
mutation/py_blocks.pyView file
path = mutation/py_blocks.py kind = build_helper sizeBytes = 21226 magicHex = [redacted]
Medium
Ships Build Helper

Package ships non-JavaScript build or shell helper files.

mutation/py_blocks.pyView on unpkg

Findings

3 High3 Medium5 Low
HighChild Processmutation/probe.mjs
HighShell
HighCross File Remote Execution Contextmutation/gate.mjs
MediumEnvironment Vars
MediumShips Build Helpermutation/py_blocks.py
MediumStructural Risk Force Deep Review
LowScripts Present
LowWeak Cryptomutation/lock.mjs
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings