Depsy — sec-audit-deps run bilans
Universal supply-chain / SCA auditor: enumerates installed deps per ecosystem, runs heuristics + CVE baseline, LLM-reviews, emits findings to the board. Read-only (no code edits). See bots/sec-audit-deps/.
Known status (CLAUDE.md): the CVE floor is now real —
run_generic_heuristicsrunstrivy fs --scanners vulnover the workspace from a bare checkout, matching every pinned version in go.mod / package-lock.json / requirements.txt / Cargo.lock etc. against the OSV/GHSA/NVD DB, and feeds those findings intoheuristic_joinfor the reviewer. Still pending (native:3a81df64): the per-ecosystem install-tree heuristics (npm-audit/pip-audit) and code-pattern /typosquat-corpus malware signals — so a run still self-labels with a "⚠ Coverage" banner for partial coverage, but it is no longer a 0-finding scaffold.
2026-06-13 (retest) — 2 engine bugs root-caused & fixed (runs 019ec1b1→019ec1d3)
- Status: engine-unblocked. Sandboxed claw now runs end-to-end; the SCA pipeline reaches and completes
enumerate_deps. Bot remains scaffold-limited. - Versions: bot sec-audit-deps 0.1.0 · iterion 778b9860 / bbdca0da / ea61817a
- Method:
./iterion run bots/sec-audit-deps/main.bot --var severity_threshold=high --store-dir .iterion, sandboxed (iterion-sandbox-sec:edge), run alone. Testedanthropic/claude-sonnet-4-6(--var/ITERION_SEC_AUDIT_MODELoverride) and the defaultopenai/gpt-5.5-via-forfait.
The original "hang" was THREE separate things — none was a true hang
- 019ec17e was confounded. It errored
multiplexer: envelope line exceeds MaxEnvelopeLineBytes, then was drained by a concurrenttask studio:devrestart (server drained). The envelope error did not reproduce on clean CLI retests — most likely the draining studio corrupted the host↔runner IPC, not a standalone bug. Lesson: dogfood sandboxed bots via CLI, alone, not alongside a churningstudio:dev. - TLS-inspection proxy hangs every streaming LLM call (FIXED 778b9860). The Layer-2 secret-egress proxy is on by default whenever a run carries secrets (LLM creds qualify — confirmed via
ITERION_SANDBOX_TLS_INSPECT=offmaking the call complete). It MITMs egress and kept the inspected client connection alive after a close-delimited streaming response → the in-container claw client blocked forever on the LLM call. Reproduced 3× (gpt-5.5 forfait + anthropic). Fix: forceConnection: closeper inspected response (streams still flush). - claw empty tool-result → anthropic 400 (FIXED bbdca0da + sibling 248882e). An empty tool output (a
grepwith no matches) serialised to a tool_result whose nested text block dropped itstextfield via omitempty →messages.N…tool_result.content.0.text.text: Field required. Fix: force thetextfield present inContentBlock.MarshalJSON(mirrors the existing tool_use.input fix). Validated: the agent ran 25 tool steps to completion.
Validated
- With both fixes,
enumerate_deps(anthropic) completed: 481s, 170,762 tokens, 25 tool steps. The sandboxed-claw delegate path now works end-to-end through the inspect proxy. (gpt-5.5-forfait default run 019ec1d3 launched to confirm the as-shipped config; the engine path itself is proven.)
Remaining (bot/claw-level, not engine)
- enumerate_deps is slow + expensive — 8 min / 170K tokens just to enumerate deps. The agent ingests far too much despite the skill's "don't read lockfiles" guidance. Tighten the prompt/skill or cap
tool_max_steps(currently 25). - structured-output fallback retry — the final structured output (deps/ecosystems/summary) fell back to the text wrapper missing required fields → retry. A claw structured-output-with-tools robustness gap; affects any claw agent node with a schema + tools (Seki too).
- board emit needs the server — sandboxed
board.*caps require the HTTP board transport (C082); a bare CLI run can't post findings. Run via the studio/server. - SCA scaffold unchanged — heuristic layer still discards real scanner output (native:3a81df64); treat output as enumerate + LLM-review only.
Default model (gpt-5.5-via-forfait) is unreliably slow here
- Run 019ec1d3 (default
openai/gpt-5.5via ChatGPT forfait, fixed engine, inspect ON):enumerate_depsran >12 min with no completion and was killed — well past the 8-min anthropic baseline. The engine path is proven (anthropic completed); the default forfait model is the bottleneck. Recommend overriding toanthropic/claude-sonnet-4-6(--var enable…/ITERION_SEC_AUDIT_MODEL) for a reliable enumerate, or a faster default — and cappingtool_max_steps.
Lessons for next run
- Run via the studio (server up, board transport wired) + alone + fixed binary.
- Cap enumerate cost — 170K tokens for dep enumeration is excessive.
- Prefer
anthropic/claude-sonnet-4-6over the gpt-5.5-forfait default until the forfait path's latency is understood.
2026-06-13 — iterion self-audit dogfood (run 019ec17e)
- Status: inconclusive — hung at
enumerate_deps, cancelled. (Superseded by the retest above: root cause was the TLS-inspect proxy hang + a studio-drain, not parallel load.) - Versions: bot sec-audit-deps 0.1.0 · iterion (post-fixes, static binary installed)
- Method:
POST /api/runs,severity_threshold=high, sandboxed (iterion-sandbox-sec). Launched in parallel with a Featurly re-run. Read-only (noremediate/patch_author/worktree:— confirmed safe: it can't self-kill or pollute the tree the way Seki's remediation did). - Result: the static-binary +
backendIsClawfixes meant the sandboxed claw runner started (no "iterion not found" — note Depsy uses literalbackend: "claw", so it was only ever blocked by the static-binary issue, not the env-template one). Butenumerate_deps(the first node, claw/gpt-5.5) hung: ~28 min with a single in-flight LLM call,last_seqstuck at 6, no tool calls, no retries logged. Cancelled.
Findings / misses
enumerate_depsstalls (medium — reliability, needs a clean repro). One gpt-5.5 enumeration call hung with no progress/retry. Plausible contributors: (a) resource contention — two sandbox-sec-class containers + multiple LLM calls were running in parallel (Seki had just finished, Featurly2 was live); (b) the enumeration prompt ingesting large manifests (the bot's own skill warns against reading lockfiles — worth checking it doesn't); (c) a transient claw / ChatGPT-forfait stall. Re-run alone (no parallel sandbox bots) to isolate.- Did not reach
llm_reviewor board emit, so the SCA path + the known scaffold gap (#native:3a81df64) remain unvalidated on iterion this pass.
Lessons for next run
- Run Depsy alone, not alongside another sandbox-sec bot — the parallel load is the most likely cause of the
enumerate_depsstall. - It is read-only and worktree-free → safe under
task studio:dev(unlike Seki's remediation), so no special isolation needed; just give it dedicated resources. - Still gated behind the documented scaffold caveat: treat output as enumerate + LLM-review, not a complete dependency audit, until native:3a81df64.
