@clear-capabilities/agentic-security-scanner 0.165.1 → 0.166.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.
package/CHANGELOG.md CHANGED
@@ -9,6 +9,18 @@
9
9
  > make the history less accurate, not more.
10
10
 
11
11
 
12
+ ## 0.166.0 - the closure accepts hosted Linux test evidence for tests that skip on a non-Linux host; the shared-portfolio drain test is deterministic
13
+
14
+ **Hosted Linux evidence for skipped tests, kept separate and labelled.** On a macOS host the capabilities suite skips six Linux-namespace tests, and a skipped required test counts as failed, so requirements X-501 to X-508 could never verify there even though the same tests run and pass on the hosted `sandbox-linux` job (which fails on any skip). The controller's verification can now count a locally skipped test only when a commit-bound attestation shows that the `sandbox-linux` check run for the exact commit succeeded and that the named test passed in that job's per-test report (uploaded as the `sandbox-linux-test-report` artifact, bound to the commit, the run and a digest). Anything else (wrong or never-pushed commit, job missing, in progress, failed, cancelled or skipped, test absent or skipped in the report, malformed or forged report, `gh` unavailable, a dirty tree) produces a typed refusal and the skip stays open. Local results are never rewritten: the local skip count is unchanged, covered tests are reported as a separate source (`attested-from-ci: sandbox-linux@<sha>`), and a local failure or abnormal exit never triggers a lookup. It is opt-in per profile (`attestFromCi`, capabilities suite only) and `LOOP_ATTEST_FROM_CI=0` turns it off. This is evidence from a hosted run, not a claim that the local host enforced anything; Linux stays `partially-verified`. The new test file has 60 tests, including every refusal and forged-report cases, and 12 hand-made mutants of the new code (nine caught; two proved equivalent; the remaining three guards are only caught together). A live read against the real hosted run covered all six tests and refused an invented one. Writing the reader exposed one real defect: on pull-request runs the job's commit is the merge ref, so the report is now bound to the pull request head and records the merge ref actually tested as `testedSha`.
15
+
16
+ **The two-process shared-portfolio test (X-708.AC02) is deterministic.** It failed once under load. The cause was that only the first executor call in each process waited at the rendezvous, so one worker could drain the whole queue while a slow-starting peer was still loading; a fixed 8 s wait and a 3-attempt retry hid it. Every call now waits on the peers' state, a load-scaled guard replaces the fixed wait, and the stale-lock test no longer depends on a 200 ms window. 10 of 10 plain and 10 of 10 under a load average near 30.
17
+
18
+ **A cross-process lock defect, found by the release gate.** The lock behind the controller's event log (sequence ids shared by the controller, the guardian and the CLI) gave up after 1.5 s and ran its write without the lock, and treated any lock older than 2 s as abandoned even when its owner was alive but descheduled. Under heavy machine load two writers could therefore share a sequence id (a test caught 239 unique ids in 240 events). Present since 0.163.0. The lock now records its owner's pid and is taken over only when that process is gone (or, for a file with no readable owner, when it is older than staleMs); a live owner is never overridden, and a waiter that cannot get the lock within a long hard cap throws instead of running unlocked. Six new tests; three of them fail against the old lock, and the two timing-dependent ones (a waiter held back past the old 2 s steal point, repeated three-process appends) pass on both under normal load because the original race needs a heavily loaded machine.
19
+
20
+ **The supervisor's process-tree sweep no longer blocks the controller.** On macOS the supervisor ran a synchronous `ps` every 100 ms inside the controller's own process, so under machine load the controller's event loop was busy 66 to 82 percent of the time while a task ran (the "controller stays responsive" test failed the release gate at 82 percent). The sweep is now asynchronous and never overlaps itself; cleanup takes its own snapshots exactly as before. Two new tests pin this (no synchronous child-process call in the supervisor; a grandchild is still found and ended). The responsiveness test passed 3 of 3 with 12 CPU burners running (load about 15); the old code was not re-measured under that same load, so no before/after figure is claimed.
21
+
22
+ **Still open.** The attested pass has not yet been used by a full local closure run on a tagged commit; that is the next measurement. The real-code accuracy gates and the routing promotion gate still need independently adjudicated data. Mediated network remains unsupported on Linux. The hosted release leg still runs only the static closure. A local test, `the controller stays responsive...` in the capabilities suite, can fail when the host is heavily loaded by other programs.
23
+
12
24
  ## 0.165.1 - documentation: the project guide no longer says the execution suites skip on hosted Linux
13
25
 
14
26
  Documentation-only correction. The root `CLAUDE.md` still described Linux as `unverified` and said the execution suites skip on the hosted runner; since 0.165.0 they run in the `sandbox-linux` job (which fails on any skip) and Linux is recorded as `partially-verified`. The release leg itself still runs only the static closure, now stated with the real reason: the full closure has never been timed inside a hosted leg's budget. No code changed.