carlos / platform Public

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
Paul Campbell pushed by paul@keymail.dev 800d8676038fe7290696c43f98d5fea02591efd9 parent 8c4030fparent d2216ee
80 files changed, +18634 −1676
  • .amadan/ci.d/30-minio-contract +23 −8
  • AGENTS.md +19 −0
  • apimode.go +191 −0
  • cmd/console/main.go +164 −13
  • cmd/console/wiring_test.go +66 −0
  • docs/site/cli.md +121 −10
  • docs/superpowers/plans/2026-09-01-carloku-scanning-rollout.md +249 −0
  • docs/superpowers/plans/2026-09-01-object-storage-virus-scanning.md +1680 −0
  • docs/superpowers/plans/2026-09-02-scan-on-demand.md +558 −0
  • docs/superpowers/plans/2026-09-04-scanning-to-deployable.md +425 −0
  • docs/superpowers/specs/2026-09-01-object-storage-virus-scanning-design.md +696 −0
  • docs/superpowers/specs/2026-09-02-scan-on-demand-design.md +1005 −0
  • internal/clamd/clamd.go +296 −0
  • internal/clamd/clamd_test.go +308 −0
  • internal/console/apiscan.go +623 −0
  • internal/console/apiscan_test.go +549 −0
  • internal/console/apiservices.go +6 −0
  • internal/console/apiservices_test.go +35 −0
  • internal/console/apistore.go +8 −0
  • internal/console/apisystem.go +140 −685
  • internal/console/apisystem_test.go +106 −433
  • internal/console/apisystemupdate.go +739 −0
  • internal/console/apisystemupdate_test.go +492 −0
  • internal/console/appsettings.go +11 −1
  • internal/console/authcli.go +32 −11
  • internal/console/deletion_test.go +1 −1
  • internal/console/ownership.go +1 −1
  • internal/console/scanpass.go +290 −0
  • internal/console/scanpass_test.go +508 −0
  • internal/console/server.go +44 −0
  • internal/console/svcpage.go +22 −0
  • internal/console/svcpage_test.go +26 −0
  • internal/console/svcprincipal.go +19 −0
  • internal/console/svcroutes_test.go +9 −3
  • internal/objstore/aws.go +93 −5
  • internal/objstore/aws_test.go +19 −6
  • internal/objstore/clamav.go +568 −0
  • internal/objstore/clamav_test.go +1251 −0
  • internal/objstore/contract_test.go +465 −0
  • internal/objstore/enforce_test.go +237 −0
  • internal/objstore/memprovisioner.go +24 −2
  • internal/objstore/memprovisioner_test.go +1 −1
  • internal/objstore/memscanner.go +252 −0
  • internal/objstore/objstore.go +48 −0
  • internal/objstore/provisioner.go +5 −1
  • internal/objstore/queue.go +550 −0
  • internal/objstore/queue_test.go +897 −0
  • internal/objstore/scanblock_test.go +153 −0
  • internal/objstore/scanner.go +144 −0
  • internal/objstore/scanner_contract_test.go +141 −0
  • internal/objstore/scanresult.go +221 −0
  • internal/objstore/scanresult_test.go +216 −0
  • internal/objstore/scantag.go +163 −0
  • internal/objstore/scantag_test.go +262 −0
  • internal/objstore/sidecar.go +137 −0
  • internal/objstore/sidecar_test.go +125 −0
  • internal/objstore/sweep.go +421 −0
  • internal/objstore/sweep_test.go +568 −0
  • internal/objstore/teardown_scan_test.go +127 −0
  • internal/objstore/walk.go +55 −7
  • internal/objstore/walk_test.go +14 −14
  • internal/release/adopt.go +11 −4
  • internal/release/pagelister_test.go +199 −0
  • internal/release/stage_blocked_test.go +72 −0
  • internal/release/store.go +90 −0
  • internal/release/system.go +66 −286
  • internal/release/system_test.go +58 −170
  • internal/release/systempointer.go +315 −0
  • internal/release/systempointer_test.go +212 −0
  • internal/svcrole/service_role_test.go +51 −0
  • internal/svcrole/svcrole.go +13 −2
  • main.go +2 −1
  • scan.go +361 −0
  • scan_test.go +198 −0
  • services.go +3 −3
  • store.go +43 −3
  • store_test.go +1 −1
  • storescan_test.go +94 −0
  • system.go +128 −4
  • system_test.go +98 −0

CI passed — run details

.amadan/ci.d/30-minio-contract

Loading diff…

AGENTS.md

Loading diff…

apimode.go

Loading diff…

cmd/console/main.go

Loading diff…

cmd/console/wiring_test.go

Loading diff…

docs/site/cli.md

Loading diff…

docs/superpowers/plans/2026-09-01-carloku-scanning-rollout.md

Loading diff…

docs/superpowers/plans/2026-09-01-object-storage-virus-scanning.md

Loading diff…

docs/superpowers/plans/2026-09-02-scan-on-demand.md

Loading diff…

docs/superpowers/plans/2026-09-04-scanning-to-deployable.md

Loading diff…

docs/superpowers/specs/2026-09-01-object-storage-virus-scanning-design.md

Loading diff…

docs/superpowers/specs/2026-09-02-scan-on-demand-design.md

Loading diff…

internal/clamd/clamd.go

Loading diff…

internal/clamd/clamd_test.go

Loading diff…

internal/console/apiscan.go

Loading diff…

internal/console/apiscan_test.go

Loading diff…

internal/console/apiservices.go

Loading diff…

internal/console/apiservices_test.go

Loading diff…

internal/console/apistore.go

Loading diff…

internal/console/apisystem.go

Loading diff…

internal/console/apisystem_test.go

Loading diff…

internal/console/apisystemupdate.go

Loading diff…

internal/console/apisystemupdate_test.go

Loading diff…

internal/console/appsettings.go

Loading diff…

internal/console/authcli.go

Loading diff…

internal/console/deletion_test.go

Loading diff…

internal/console/ownership.go

Loading diff…

internal/console/scanpass.go

Loading diff…

internal/console/scanpass_test.go

Loading diff…

internal/console/server.go

Loading diff…

internal/console/svcpage.go

Loading diff…

internal/console/svcpage_test.go

Loading diff…

internal/console/svcprincipal.go

Loading diff…

internal/console/svcroutes_test.go

Loading diff…

internal/objstore/aws.go

Loading diff…

internal/objstore/aws_test.go

Loading diff…

internal/objstore/clamav.go

Loading diff…

internal/objstore/clamav_test.go

Loading diff…

internal/objstore/contract_test.go

Loading diff…

internal/objstore/enforce_test.go

Loading diff…

internal/objstore/memprovisioner.go

Loading diff…

internal/objstore/memprovisioner_test.go

Loading diff…

internal/objstore/memscanner.go

Loading diff…

internal/objstore/objstore.go

Loading diff…

internal/objstore/provisioner.go

Loading diff…

internal/objstore/queue.go

Loading diff…

internal/objstore/queue_test.go

Loading diff…

internal/objstore/scanblock_test.go

Loading diff…

internal/objstore/scanner.go

Loading diff…

internal/objstore/scanner_contract_test.go

Loading diff…

internal/objstore/scanresult.go

Loading diff…

internal/objstore/scanresult_test.go

Loading diff…

internal/objstore/scantag.go

Loading diff…

internal/objstore/scantag_test.go

Loading diff…

internal/objstore/sidecar.go

Loading diff…

internal/objstore/sidecar_test.go

Loading diff…

internal/objstore/sweep.go

Loading diff…

internal/objstore/sweep_test.go

Loading diff…

internal/objstore/teardown_scan_test.go

Loading diff…

internal/objstore/walk.go

Loading diff…

internal/objstore/walk_test.go

Loading diff…

internal/release/adopt.go

Loading diff…

internal/release/pagelister_test.go

Loading diff…

internal/release/stage_blocked_test.go

Loading diff…

internal/release/store.go

Loading diff…

internal/release/system.go

Loading diff…

internal/release/system_test.go

Loading diff…

internal/release/systempointer.go

Loading diff…

internal/release/systempointer_test.go

Loading diff…

internal/svcrole/service_role_test.go

Loading diff…

internal/svcrole/svcrole.go

Loading diff…

main.go

Loading diff…

scan.go

Loading diff…

scan_test.go

Loading diff…

services.go

Loading diff…

store.go

Loading diff…

store_test.go

Loading diff…

storescan_test.go

Loading diff…

system.go

Loading diff…

system_test.go

Loading diff…