@clear-capabilities/agentic-security-scanner 0.156.0 → 0.157.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -9,6 +9,20 @@
9
9
  > make the history less accurate, not more.
10
10
 
11
11
 
12
+ ## 0.157.0 - hosted verification for the suites that need Nix or NixOS
13
+
14
+ NIX-011 needs `nix` and NIX-012 needs a booted NixOS, which a developer's laptop often lacks, so the loop controller could only ever report them as blocked. This release lets the controller run them on a GitHub-hosted runner and record the outcome as evidence, bound to the exact commit.
15
+
16
+ - **Hosted-CI executor** (`scripts/loop-engineering/lib/remote.mjs`, `.github/workflows/verify-remote.yml`). A suite whose profile entry has a `remote` block runs on a hosted runner when the required tool is missing locally. The controller refuses unless the tree is clean and HEAD is the tip of a pushed branch, dispatches the committed workflow with the commit, the requirement, the watch globs and a nonce, finds ITS run by the nonce, requires the runner's digest of the watched files to equal its own (the runner uses `scripts/loop-engineering/digest.mjs`, the controller's own code), reads per-leg TAP, and requires every leg to pass every criterion. Evidence is labelled `controller+hosted-ci` with the run id, artifact digest and a limitation line; it is never presented as a local run. Dispatch and download are retried a few times on a reset connection (GitHub resets one now and then); a real error is not retried. A failed run, a wrong commit or digest, a missing leg or file, a hash mismatch or a skipped test fails closed; if the preflight cannot be met the requirement is blocked, not passed.
17
+ - **NixOS guests.** The NIX-012 suite runs under a TAP reporter inside each guest and the output is copied out. NIX-012 has two legs: an x86_64 guest on KVM, and an aarch64 guest emulated in software on the x86_64 host (the criterion allows "actual tested emulation"; arm runners have no KVM). The test driver's fixed five-minute shell wait is stretched for the emulated guest, and the guest test asserts `uname -m`, so a leg's name cannot be a false label.
18
+ - **Docs.** `docs/guides/loop-engineering.md` has a "Hosted verification" section stating what the mode requires and what it trusts (GitHub's account of what ran, and the committed workflow).
19
+
20
+ - **The executor never blocks the controller and survives sleep.** Its `gh` and `git` calls are asynchronous (a synchronous call froze the controller's heartbeat for as long as GitHub took to answer), and every deadline uses a monotonic clock, so a machine that sleeps cannot expire a ten-minute wait before the process has polled once (a real failure seen during this release's own verification).
21
+ - **The status says which requirements were verified remotely.** `docs/completion-status.json` now records the hosted-verified requirements (run id, URL, commit, legs) and the README status block says so, so "all verified" is never read as "all verified on this machine".
22
+ - **The model-spend cap gates model work only.** The controller checked its $50 model budget at the top of its loop, so a run that had spent it could not even re-validate stale evidence or run the final phase, neither of which uses the model. The cap is unchanged and still refuses any further worker attempt; the wall-clock and attempt budgets still gate everything.
23
+
24
+ This entry deliberately says nothing about how many requirements are verified: that number is derived from the controller's evidence and is in `docs/completion-status.json` and the README status block.
25
+
12
26
  ## 0.156.0 - the three below-target rows fixed, measured on a fresh unseen set
13
27
 
14
28
  0.155.0 reported Haskell SAST recall (79.2%), Haskell taint precision (77.8%) and Nix config-sast precision (86.1%) below target on shapes the templates did not contain, while the frozen holdout said 100%. Each gap was read against the code and fixed in the engine, not in the scoring.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clear-capabilities/agentic-security-scanner",
3
- "version": "0.156.0",
3
+ "version": "0.157.0",
4
4
  "description": "Scanner engine for the agentic-security Claude Code plugin — SAST, SCA (function-level reachability + CISA KEV), secrets, IaC, prompt-injection, MCP/agent-tool audit, auth/authZ deep analysis, attack chains, PoC generation, business logic, toxic-combinations scoring, SBOM, pipeline integrity, compliance attestation, and more.",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -66,7 +66,7 @@
66
66
  "prepublishOnly": "npm run build && node ../scripts/sync-scanner-changelog.mjs && node ../scripts/release-check.mjs",
67
67
  "test": "node ../scripts/run-unit-tests.mjs && AGENTIC_SECURITY_CPP_DATAFLOW=1 node --test test/cpp-dataflow.test.js && node --experimental-test-module-mocks --test test/fault-injection.test.js && node --experimental-test-module-mocks --test test/detector-fault-injection.test.js && node --experimental-test-module-mocks --test test/detector-fault-injection-k8s-admission.test.js && node --experimental-test-module-mocks --test test/lineage-fault-injection.test.js && npm run test:python",
68
68
  "loop": "node ../scripts/loop-engineering/run.mjs",
69
- "test:loop": "node --test --test-concurrency=1 ../scripts/loop-engineering/test/loop-manifest.test.js ../scripts/loop-engineering/test/loop-watchdog.test.js ../scripts/loop-engineering/test/loop-background.test.js ../scripts/loop-engineering/test/loop-dashboard.test.js ../scripts/loop-engineering/test/loop-evidence.test.js ../scripts/loop-engineering/test/loop-recovery.test.js ../scripts/loop-engineering/test/loop-runbook.test.js",
69
+ "test:loop": "node --test --test-concurrency=1 ../scripts/loop-engineering/test/loop-manifest.test.js ../scripts/loop-engineering/test/loop-watchdog.test.js ../scripts/loop-engineering/test/loop-background.test.js ../scripts/loop-engineering/test/loop-dashboard.test.js ../scripts/loop-engineering/test/loop-evidence.test.js ../scripts/loop-engineering/test/loop-recovery.test.js ../scripts/loop-engineering/test/loop-remote.test.js ../scripts/loop-engineering/test/loop-runbook.test.js",
70
70
  "test:python": "node ../scripts/run-python-tests.mjs",
71
71
  "test:smoke": "node --test test/smoke.test.js test/demo-app.test.js",
72
72
  "test:ollama-e2e": "AGENTIC_SECURITY_OLLAMA_E2E=1 node --test test/ollama-e2e.test.js",