Merge main into carlos-system-update: two features named system, both kept
Object-storage virus scanning landed with carlos system antivirus and its own release/system.go and console/apisystem.go. The self-update pointer moves to systempointer.go and its doors to apisystemupdate.go; one runSystem dispatches both families.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QCUCpfxbCyEAVQ2m51dH5
.amadan/ci.d/30-minio-contract+23 −8AGENTS.md+19 −0apimode.go+191 −0cmd/console/main.go+164 −13cmd/console/wiring_test.go+66 −0docs/site/cli.md+121 −10docs/superpowers/plans/2026-09-01-carloku-scanning-rollout.md+249 −0docs/superpowers/plans/2026-09-01-object-storage-virus-scanning.md+1680 −0docs/superpowers/plans/2026-09-02-scan-on-demand.md+558 −0docs/superpowers/plans/2026-09-04-scanning-to-deployable.md+425 −0docs/superpowers/specs/2026-09-01-object-storage-virus-scanning-design.md+696 −0docs/superpowers/specs/2026-09-02-scan-on-demand-design.md+1005 −0internal/clamd/clamd.go+296 −0internal/clamd/clamd_test.go+308 −0internal/console/apiscan.go+623 −0internal/console/apiscan_test.go+549 −0internal/console/apiservices.go+6 −0internal/console/apiservices_test.go+35 −0internal/console/apistore.go+8 −0internal/console/apisystem.go+140 −685internal/console/apisystem_test.go+106 −433internal/console/apisystemupdate.go+739 −0internal/console/apisystemupdate_test.go+492 −0internal/console/appsettings.go+11 −1internal/console/authcli.go+32 −11internal/console/deletion_test.go+1 −1internal/console/ownership.go+1 −1internal/console/scanpass.go+290 −0internal/console/scanpass_test.go+508 −0internal/console/server.go+44 −0internal/console/svcpage.go+22 −0internal/console/svcpage_test.go+26 −0internal/console/svcprincipal.go+19 −0internal/console/svcroutes_test.go+9 −3internal/objstore/aws.go+93 −5internal/objstore/aws_test.go+19 −6internal/objstore/clamav.go+568 −0internal/objstore/clamav_test.go+1251 −0internal/objstore/contract_test.go+465 −0internal/objstore/enforce_test.go+237 −0internal/objstore/memprovisioner.go+24 −2internal/objstore/memprovisioner_test.go+1 −1internal/objstore/memscanner.go+252 −0internal/objstore/objstore.go+48 −0internal/objstore/provisioner.go+5 −1internal/objstore/queue.go+550 −0internal/objstore/queue_test.go+897 −0internal/objstore/scanblock_test.go+153 −0internal/objstore/scanner.go+144 −0internal/objstore/scanner_contract_test.go+141 −0internal/objstore/scanresult.go+221 −0internal/objstore/scanresult_test.go+216 −0internal/objstore/scantag.go+163 −0internal/objstore/scantag_test.go+262 −0internal/objstore/sidecar.go+137 −0internal/objstore/sidecar_test.go+125 −0internal/objstore/sweep.go+421 −0internal/objstore/sweep_test.go+568 −0internal/objstore/teardown_scan_test.go+127 −0internal/objstore/walk.go+55 −7internal/objstore/walk_test.go+14 −14internal/release/adopt.go+11 −4internal/release/pagelister_test.go+199 −0internal/release/stage_blocked_test.go+72 −0internal/release/store.go+90 −0internal/release/system.go+66 −286internal/release/system_test.go+58 −170internal/release/systempointer.go+315 −0internal/release/systempointer_test.go+212 −0internal/svcrole/service_role_test.go+51 −0internal/svcrole/svcrole.go+13 −2main.go+2 −1scan.go+361 −0scan_test.go+198 −0services.go+3 −3store.go+43 −3store_test.go+1 −1storescan_test.go+94 −0system.go+128 −4system_test.go+98 −0
CI passed — run details
.amadan/ci.d/30-minio-contractLoading diff…
AGENTS.mdLoading diff…
apimode.goLoading diff…
cmd/console/main.goLoading diff…
cmd/console/wiring_test.goLoading diff…
docs/site/cli.mdLoading diff…
docs/superpowers/plans/2026-09-01-carloku-scanning-rollout.mdLoading diff…
docs/superpowers/plans/2026-09-01-object-storage-virus-scanning.mdLoading diff…
docs/superpowers/plans/2026-09-02-scan-on-demand.mdLoading diff…
docs/superpowers/plans/2026-09-04-scanning-to-deployable.mdLoading diff…
docs/superpowers/specs/2026-09-01-object-storage-virus-scanning-design.mdLoading diff…
docs/superpowers/specs/2026-09-02-scan-on-demand-design.mdLoading diff…
internal/clamd/clamd.goLoading diff…
internal/clamd/clamd_test.goLoading diff…
internal/console/apiscan.goLoading diff…
internal/console/apiscan_test.goLoading diff…
internal/console/apiservices.goLoading diff…
internal/console/apiservices_test.goLoading diff…
internal/console/apistore.goLoading diff…
internal/console/apisystem.goLoading diff…
internal/console/apisystem_test.goLoading diff…
internal/console/apisystemupdate.goLoading diff…
internal/console/apisystemupdate_test.goLoading diff…
internal/console/appsettings.goLoading diff…
internal/console/authcli.goLoading diff…
internal/console/deletion_test.goLoading diff…
internal/console/ownership.goLoading diff…
internal/console/scanpass.goLoading diff…
internal/console/scanpass_test.goLoading diff…
internal/console/server.goLoading diff…
internal/console/svcpage.goLoading diff…
internal/console/svcpage_test.goLoading diff…
internal/console/svcprincipal.goLoading diff…
internal/console/svcroutes_test.goLoading diff…
internal/objstore/aws.goLoading diff…
internal/objstore/aws_test.goLoading diff…
internal/objstore/clamav.goLoading diff…
internal/objstore/clamav_test.goLoading diff…
internal/objstore/contract_test.goLoading diff…
internal/objstore/enforce_test.goLoading diff…
internal/objstore/memprovisioner.goLoading diff…
internal/objstore/memprovisioner_test.goLoading diff…
internal/objstore/memscanner.goLoading diff…
internal/objstore/objstore.goLoading diff…
internal/objstore/provisioner.goLoading diff…
internal/objstore/queue.goLoading diff…
internal/objstore/queue_test.goLoading diff…
internal/objstore/scanblock_test.goLoading diff…
internal/objstore/scanner.goLoading diff…
internal/objstore/scanner_contract_test.goLoading diff…
internal/objstore/scanresult.goLoading diff…
internal/objstore/scanresult_test.goLoading diff…
internal/objstore/scantag.goLoading diff…
internal/objstore/scantag_test.goLoading diff…
internal/objstore/sidecar.goLoading diff…
internal/objstore/sidecar_test.goLoading diff…
internal/objstore/sweep.goLoading diff…
internal/objstore/sweep_test.goLoading diff…
internal/objstore/teardown_scan_test.goLoading diff…
internal/objstore/walk.goLoading diff…
internal/objstore/walk_test.goLoading diff…
internal/release/adopt.goLoading diff…
internal/release/pagelister_test.goLoading diff…
internal/release/stage_blocked_test.goLoading diff…
internal/release/store.goLoading diff…
internal/release/system.goLoading diff…
internal/release/system_test.goLoading diff…
internal/release/systempointer.goLoading diff…
internal/release/systempointer_test.goLoading diff…
internal/svcrole/service_role_test.goLoading diff…
internal/svcrole/svcrole.goLoading diff…
main.goLoading diff…
scan.goLoading diff…
scan_test.goLoading diff…
services.goLoading diff…
store.goLoading diff…
store_test.goLoading diff…
storescan_test.goLoading diff…
system.goLoading diff…
system_test.goLoading diff…