secured-renovacy (Renovacy) — dogfood bilan
Index + template: README.md. Newest first.
2026-09-18 — DSL profile 2 dogfood on an npm fixture: patch batch + minor solo, Phase 2 converged first pass (run 01a0b32b-2d7e)
- Status: validated (no-sandbox variant, two-package scope) — both Phase-1 paths and the Phase-2 campaign behaved as designed in 16.8 min.
- Versions: bot secured-renovacy 0.2.3 (
dsl: 2, the wave-4 PR of #1344) · iterion v3.162.2 (d98abd04d; the engine did not change in this wave). - Method: CLI run FROM a two-dependency npm fixture (
ms2.1.1 patch-outdated,debug4.3.0 minor-outdated carrying the real ReDoS advisory fixed in 4.3.1; two assertions innpm test),--sandbox none --merge-into none --no-interactive,--max-cost-usd 12 --max-duration 40m, varsscope=patch,minor max_packages_per_run=2 max_review_passes=1 update_scope=libraries. Every agent on claude_code/claude-opus-5 as declared (p2_campaign through thezaiprovider default). - Result:
finished, $3.51, 454k tokens, 28 node executions, storage branchiterion/run/pixel-spin-owlspark-d4c5(two commits:chore(deps): batch update 1 patch upgradese2d34b7 = ms 2.1.3,chore(deps): update debug to 4.4.3180db5f), +11/−18 lines on package.json + package-lock.json. Phase 1: detect_stack → discover (both found) → the patch batch upgraded and committed ms (its audit note to the run's artifact-files) → bucket_families (none) → solo: debug through the intel fan-out (changelog_review 3 min and security_audit 2 min in parallel: safe, no alignment needed) → upgrade → install → validate_upgrade (stable) → commit → audit note → package_loop iteration 1 → select_candidate has_more=false (cap 2) → phase2_decider → p2_campaign (a minor was attempted). Phase 2: the campaign re-reviewed the cumulative diff with real checks (manifest↔lockfile consistency,npm test, audit) and reported clean without inventing fixes; p2_verify_build wrote verify.sh (exit 0, "ok - 2 assertions"); p2_verify_run green; the gate converged first pass; the SBOM (2 packages) went to artifact-filesrenovacy/sbom-180db5faff21.json. - Value: real — two correct upgrades with per-package audit notes and an SBOM, and a Phase 2 that reviewed rather than rubber-stamped.
- Findings / misses: the three new exhaustion exits are not on this path; their witness is the strict dry run (the all-true pass no longer dies LOOP_EXHAUSTED at mark_family_attempted — it runs to the bot's own iteration ceiling). The loop caps now follow
max_packages_per_run(one above it), so select_candidate's own exit reports the cap and only a back-edge declined for budget reaches the exits. The audit notes and the SBOM live in the run's artifact-files, not in the tree — the 07/07 bilan's "docs/renovacy/… inside the workspace" describes the earlier shape. Miss: none attributable to the bot. - Engine hardening: none needed.
- Lessons for next run: a scope above the default 30 needs only
max_packages_per_run, and the family fast-track onlymax_families_per_run; nothing else bounds the two loops any more.
2026-07-07 — P1+P2 dogfood on an npm fixture: 2 clean upgrade commits, real advisory handled, P2 campaign converged (run 019f3d7b)
- Status: VALIDATED (no-sandbox variant, small-fixture scope) — Phase 1's per-package pipeline and the NEW v2 Phase 2 both behaved as designed end to end in 10m50s.
- Versions: bot v0.2.0 · iterion
dev+239203525cc8·--sandbox none(sec image path blocked by native:221edac8). - Method: CLI run FROM an npm fixture (ms 2.1.1 patch-outdated + debug 4.3.0 minor-outdated carrying the real GHSA ReDoS advisory fixed in 4.3.1),
--merge-into none, update_scope=libraries, scope=patch,minor, max_packages_per_run=2, max_review_passes=1,--max-cost-usd 20. - Result:
finished, P2p2_gate.converged=true, SBOM emitted (docs/renovacy/sbom-c86e7111dfb9.json, 2 packages) oniterion/run/thunder-hunt-orbitcrest-c493. Phase 1: discover found both; the patch batch committed ms (chore(deps): batch update 1 patch upgrades, audit-trail amended in); the minor solo took debug through intel (safe; the START version's ReDoS advisory correctly did not block the clean 4.4.3 target) → upgrade → validate (stable, high) →chore(deps): update debug to 4.4.3. Phase 2 (the ADR-058 conversion under test): phase2_decider routed to p2_campaign (minor attempted ⇒ no fast-track); the campaign REVIEWED the cumulative diff with real checks (npm ci --dry-run sync, tree dedup verified — nested ms removed, root 2.1.3 satisfies debug's ^2.1.3 —, npm test, npm audit 0 vulns, ReDoS closed) and reportedreview_clean=true, commits_this_pass=0without inventing fixes; deterministic p2_verify_run re-ran the suite (real exit 0) and the gate converged first pass. - Value: real — two correct dependency upgrades with per-package audit trails + SBOM, and the new Phase 2 proved it reviews rather than rubber-stamps or fabricates.
- Findings / misses: select_candidate re-picked ms in a redundant SOLO right after the batch had landed it (attempted_after_batch ledger gap) — one wasted intel/upgrade cycle, no duplicate commit thanks to the empty-commit guard; filed as a board finding (severity low).
- Engine hardening: none new (the sandbox path remains gated on native:221edac8).
- Lessons for next run: a fuller dogfood should cover a BREAKING minor/major (fix_after_upgrade + revert paths) and the sec sandbox once 221edac8 lands; max_review_passes=1 (2 P2 passes max) is the right default for small repos.
2026-07-07 — converted to v2 minimal-framing (ADR-058 fleet rollout) — structural-validated, dogfood pending
- Status: converted, dogfood pending — structural validation only this pass:
iterion validateclean, catalog universality/typing/bundle-consistency green, stub e2e green where wired. NOT yet live-dogfooded in the v2 shape; treat the sections below as describing the RETIRED v1 shape. - Versions: bot v0.2.0 · iterion worktree branch (rollout of 2026-07-07, see git log)
- Shape: SCOPED pass: Phase 1 per-package pipeline untouched (ADR-055 unit-convergence — its security/CVE/revert/SBOM gates are deliberately reified). Phase 2's alternating relay (alt_review/reviewer_claude/reviewer_gpt/streak_check/fix_*/review_commit_auto + review_mode/mono_family) became ONE p2_campaign on the run's cumulative diff (git diff start_sha) + the deterministic p2_verify gate + review_pass_loop. With this, bots/review_topology_test.go's enforced list emptied and the file was deleted (machinery guarded by e2e/review_topology_test.go).
- Reference proof of the shared mechanism: feature-dev v2 pilot run 019f3bb4 (one pass, 11m33s, 2 in-stride commits, deterministic gate converged — see docs/bot-runs/feature-dev.md) and the Willy/Billy v2 tours.
- Next: a dedicated live dogfood + bilan in this file before the bot counts as validated in its v2 shape.
2026-06-14 — first full validated run (safe mode, run 019ec5c5)
- Status: validated. Full end-to-end run in safe mode on a clean iterion clone; real upgrades applied, vendored, validated, committed to a storage branch — major bumps correctly skipped.
- Versions: iterion branch
c082-board-emit(C082 worktree binary) · secured-renovacy current. - Method: dedicated worktree studio :4899,
worktree: autoon a clean iterion clone,sandbox: iterion-sandbox-sec:edge. Safe-mode vars:major_policy=skip,scope=patch,minor,max_packages_per_run=3,merge_into=none. (major_policy=skiphonours the standing "ask beforemajor_policy: attempt" rule.) - Result:
Run finished;final_commit be365eabon storage branchiterion/run/comet-haze-arctickazoo-3b09(not merged —merge_into=none). Four commits: a batch of 15 patch upgrades, plus minorsaws-sdk-go-v2/config v1.32.25,aws-sdk-go-v2/credentials v1.19.24, andgolang-jwt/jwt/v5 → v5.3.1(a security-relevant JWT lib bump).vendor/regenerated (117 files, +11257/-2927). Pipeline ran end-to-end: detect_stack → discover_outdated → bucket_patches → batch_upgrade_patches → install/validate → … → emit_sbom → done. No human pause was needed in safe mode. - Value: high. Real, correctly-tiered dependency hygiene (patch+minor only, major skipped) with vendoring + a per-upgrade commit trail, on a repo it had never seen. The golang-jwt bump is the kind of security-relevant update this bot exists to surface.
- Robustness finding (positive): devbox silently fails in the sec sandbox —
~/.cacheis root-owned, sodevbox run …returns EMPTY output, which a naive bot would read as "all dependencies up to date" (a façade). Renovacy'sdiscover_outdatedagent detected the silent failure, fell back to the image's/usr/bin/go(go1.26.0, matching go.mod) with writable/tmpcaches, and warned the downstream upgrade/install agents to do the same. That's exactly the anti-façade behaviour the workflow-authoring pitfalls doc calls for. - Engine/sandbox finding (to fix): the devbox wall above affects ANY sandboxed devbox-based bot (e.g. Devy's
devbox installverify would hit it too). Root cause is~/.cacheownership inside the sec sandbox underuser: 1000:1000with host-state mounts. Worth fixing (ensure~/.cacheis writable by the container UID, or point devbox/Nix caches at a writable dir) so devbox bots don't depend on a host-go fallback. - Finding (minor, recurring): claude_code nodes emit a spurious
Tool error: StructuredOutput — No such tool available: StructuredOutputbefore recovering via iterion's fmt-pass — same family seen in Billy/Devy. Non-fatal here. - Lessons for next run: safe mode (
major_policy=skip,scope=patch,minor, smallmax_packages_per_run) is a reliable, bounded, valuable config. Fix the sandbox devbox~/.cachewall so detection doesn't rely on an agent noticing the silent failure. For a major-bump run, get explicit operator sign-off first.
