carlos / platform Public

merge main: cgroup accounting supersedes #121's pid sampling

Brings the branch onto main 934414c and resolves the collision with the
pid-sampled exec-instance metrics (#118/#121) per the exec-child
accounting spec, which explicitly rejected /proc sampling:

- AwakeExecPids, childProc.Pid, pidparse.go and execInstanceReadings/
  mergeUnitReadings are retired; exec children are accounted by their
  delegated carlos-exec@<host> cgroups instead. The #118 spec doc is
  marked superseded, kept for its problem statement.
- sweepBox keeps main's already-live concurrent implementation
  (metricsSweepBoxes x metricsSweepReads, from the app-pages branch);
  this branch's errgroup variant and its constant are dropped, and
  x/sync returns to indirect. The stale-while-revalidate cache, the
  derived 8-minute fresh window, and the owner allowlist's second key
  survive unchanged on top of it.
- Old chunks keyed carlos-app@<host>.service by the pid sampler still
  render for their 48h retention: the owner allowlist accepts both key
  forms.

go build/vet, GOOS=darwin build, gofmt, and go test ./... (21 packages)
all green on the merged tree.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell cd4f4e36189487eb3304cde4d4c8f5bcd860d118 parent 6f7cf77parent 934414c
126 files changed, +21742 −984
  • .github/workflows/ci.yml +107 −0
  • CLAUDE.md +42 −3
  • README.md +8 −0
  • accounts.go +37 −30
  • apimode.go +192 −5
  • apimode_test.go +191 −24
  • appconfig_cli.go +24 −25
  • apps.go +15 −13
  • auth.go +17 −14
  • cli.go +605 −78
  • cli_test.go +493 −8
  • cmd/console/main.go +34 −13
  • color.go +222 −0
  • color_test.go +128 −0
  • deploy.go +475 −0
  • deploy_e2e_test.go +439 −0
  • deploy_test.go +400 −0
  • docs/superpowers/plans/2026-08-06-issues-69-70-db-path.md +380 −0
  • docs/superpowers/plans/2026-08-08-carlos-deploy.md +894 −0
  • docs/superpowers/plans/2026-08-08-release-versioning.md +1592 −0
  • docs/superpowers/specs/2026-08-04-instance-provisioning-design.md +33 −0
  • docs/superpowers/specs/2026-08-07-console-app-pages-design.md +144 −0
  • docs/superpowers/specs/2026-08-08-carlos-deploy-design.md +310 −0
  • docs/superpowers/specs/2026-08-08-exec-instance-metrics-design.md +163 −0
  • docs/superpowers/specs/2026-08-08-instance-socket-consumers-design.md +161 −0
  • docs/superpowers/specs/2026-08-08-release-versioning-design.md +130 −0
  • e2e_test.go +133 −1
  • go.mod +2 −2
  • instances_cli.go +15 −14
  • internal/activator/activator_test.go +198 −1
  • internal/activator/backend_exec.go +28 −0
  • internal/appconfig/sync.go +7 −7
  • internal/caps/converge.go +1 −1
  • internal/console/apicli.go +205 −9
  • internal/console/apicli_test.go +218 −0
  • internal/console/apiconfig.go +12 −0
  • internal/console/apiinstances.go +86 −4
  • internal/console/apiinstances_test.go +83 −0
  • internal/console/apirestart_test.go +177 −0
  • internal/console/apiversion.go +230 −0
  • internal/console/apiversion_test.go +339 −0
  • internal/console/appsettings.go +450 −0
  • internal/console/appsettings_test.go +657 −0
  • internal/console/attachhint_test.go +132 −0
  • internal/console/authcli.go +14 −0
  • internal/console/bakecontrols_test.go +6 −6
  • internal/console/confirm.go +233 −0
  • internal/console/confirm_test.go +314 −0
  • internal/console/deletion_test.go +8 −0
  • internal/console/icons.go +13 −0
  • internal/console/ladder_test.go +44 −32
  • internal/console/metricsview.go +112 −61
  • internal/console/metricsview_test.go +132 −114
  • internal/console/overview.go +192 −0
  • internal/console/overview_test.go +317 −0
  • internal/console/ownership.go +15 −0
  • internal/console/serialbump.go +40 −0
  • internal/console/serialbump_test.go +506 −0
  • internal/console/server.go +339 −12
  • internal/console/server_account_test.go +19 −5
  • internal/console/server_test.go +364 −37
  • internal/console/store.go +91 −0
  • internal/console/templates/app_instances.html +32 −38
  • internal/console/templates/app_overview.html +66 −12
  • internal/console/templates/app_releases.html +37 −18
  • internal/console/templates/app_settings.html +69 −0
  • internal/console/templates/confirm_action.html +23 −0
  • internal/console/templates/ladder.html +14 −26
  • internal/console/templates/layout.html +46 −0
  • internal/console/view.go +72 −1
  • internal/edge/edge.go +45 −0
  • internal/edge/edge_test.go +63 −0
  • internal/edge/static.go +39 −13
  • internal/edge/static_test.go +222 −0
  • internal/host/agent.go +687 −68
  • internal/host/agent_test.go +812 −0
  • internal/host/bootstrap.go +151 −37
  • internal/host/host_test.go +144 −7
  • internal/host/probes.go +20 −1
  • internal/host/restart.go +650 −0
  • internal/host/restart_test.go +706 −0
  • internal/host/stage_relay_test.go +79 −0
  • internal/host/units/carlos-restart.path +27 −0
  • internal/host/units/carlos-restart.service +53 −0
  • internal/host/units/carlos-stage.path +26 −0
  • internal/host/units/carlos-stage.service +52 −0
  • internal/lease/endpoint.go +130 −0
  • internal/lease/endpoint_test.go +263 −0
  • internal/lease/lease.go +19 −19
  • internal/lease/lease_test.go +7 −3
  • internal/registry/registry.go +167 −31
  • internal/registry/registry_test.go +293 −1
  • internal/release/adopt.go +185 −47
  • internal/release/adopt_test.go +135 −5
  • internal/release/golden_test.go +201 −0
  • internal/release/ladder_test.go +284 −0
  • internal/release/materialize.go +66 −0
  • internal/release/materialize_test.go +181 −0
  • internal/release/release.go +72 −0
  • internal/release/release_test.go +51 −0
  • internal/release/restartgen.go +107 −0
  • internal/release/restartgen_test.go +135 −0
  • internal/release/semver.go +105 −0
  • internal/release/semver_test.go +57 −0
  • internal/release/serial.go +74 −0
  • internal/release/serial_test.go +56 −0
  • internal/release/stage_blocked_test.go +60 −0
  • internal/release/store.go +12 −9
  • internal/release/store_rgw_test.go +169 −0
  • internal/release/tag.go +187 −0
  • internal/release/tag_test.go +202 −0
  • internal/release/target.go +151 −0
  • internal/release/target_test.go +153 −0
  • internal/release/versions.go +22 −0
  • internal/release/versions_test.go +41 −0
  • internal/s3compat/s3compat.go +181 −0
  • internal/s3compat/s3compat_test.go +235 −0
  • internal/status/contract_test.go +43 −15
  • internal/status/dryrun.go +71 −14
  • internal/status/fleet.go +14 −8
  • internal/status/snapshot.go +60 −16
  • internal/status/status_test.go +113 −0
  • main.go +77 −76
  • restart.go +86 −0
  • restart_test.go +153 −0
  • testdata/echoapp/main.go +21 −0
.github/workflows/ci.yml

Loading diff…

CLAUDE.md

Loading diff…

README.md

Loading diff…

accounts.go

Loading diff…

apimode.go

Loading diff…

apimode_test.go

Loading diff…

appconfig_cli.go

Loading diff…

apps.go

Loading diff…

auth.go

Loading diff…

cli.go

Loading diff…

cli_test.go

Loading diff…

cmd/console/main.go

Loading diff…

color.go

Loading diff…

color_test.go

Loading diff…

deploy.go

Loading diff…

deploy_e2e_test.go

Loading diff…

deploy_test.go

Loading diff…

docs/superpowers/plans/2026-08-06-issues-69-70-db-path.md

Loading diff…

docs/superpowers/plans/2026-08-08-carlos-deploy.md

Loading diff…

docs/superpowers/plans/2026-08-08-release-versioning.md

Loading diff…

docs/superpowers/specs/2026-08-04-instance-provisioning-design.md

Loading diff…

docs/superpowers/specs/2026-08-07-console-app-pages-design.md

Loading diff…

docs/superpowers/specs/2026-08-08-carlos-deploy-design.md

Loading diff…

docs/superpowers/specs/2026-08-08-exec-instance-metrics-design.md

Loading diff…

docs/superpowers/specs/2026-08-08-instance-socket-consumers-design.md

Loading diff…

docs/superpowers/specs/2026-08-08-release-versioning-design.md

Loading diff…

e2e_test.go

Loading diff…

go.mod

Loading diff…

instances_cli.go

Loading diff…

internal/activator/activator_test.go

Loading diff…

internal/activator/backend_exec.go

Loading diff…

internal/appconfig/sync.go

Loading diff…

internal/caps/converge.go

Loading diff…

internal/console/apicli.go

Loading diff…

internal/console/apicli_test.go

Loading diff…

internal/console/apiconfig.go

Loading diff…

internal/console/apiinstances.go

Loading diff…

internal/console/apiinstances_test.go

Loading diff…

internal/console/apirestart_test.go

Loading diff…

internal/console/apiversion.go

Loading diff…

internal/console/apiversion_test.go

Loading diff…

internal/console/appsettings.go

Loading diff…

internal/console/appsettings_test.go

Loading diff…

internal/console/attachhint_test.go

Loading diff…

internal/console/authcli.go

Loading diff…

internal/console/bakecontrols_test.go

Loading diff…

internal/console/confirm.go

Loading diff…

internal/console/confirm_test.go

Loading diff…

internal/console/deletion_test.go

Loading diff…

internal/console/icons.go

Loading diff…

internal/console/ladder_test.go

Loading diff…

internal/console/metricsview.go

Loading diff…

internal/console/metricsview_test.go

Loading diff…

internal/console/overview.go

Loading diff…

internal/console/overview_test.go

Loading diff…

internal/console/ownership.go

Loading diff…

internal/console/serialbump.go

Loading diff…

internal/console/serialbump_test.go

Loading diff…

internal/console/server.go

Loading diff…

internal/console/server_account_test.go

Loading diff…

internal/console/server_test.go

Loading diff…

internal/console/store.go

Loading diff…

internal/console/templates/app_instances.html

Loading diff…

internal/console/templates/app_overview.html

Loading diff…

internal/console/templates/app_releases.html

Loading diff…

internal/console/templates/app_settings.html

Loading diff…

internal/console/templates/confirm_action.html

Loading diff…

internal/console/templates/ladder.html

Loading diff…

internal/console/templates/layout.html

Loading diff…

internal/console/view.go

Loading diff…

internal/edge/edge.go

Loading diff…

internal/edge/edge_test.go

Loading diff…

internal/edge/static.go

Loading diff…

internal/edge/static_test.go

Loading diff…

internal/host/agent.go

Loading diff…

internal/host/agent_test.go

Loading diff…

internal/host/bootstrap.go

Loading diff…

internal/host/host_test.go

Loading diff…

internal/host/probes.go

Loading diff…

internal/host/restart.go

Loading diff…

internal/host/restart_test.go

Loading diff…

internal/host/stage_relay_test.go

Loading diff…

internal/host/units/carlos-restart.path

Loading diff…

internal/host/units/carlos-restart.service

Loading diff…

internal/host/units/carlos-stage.path

Loading diff…

internal/host/units/carlos-stage.service

Loading diff…

internal/lease/endpoint.go

Loading diff…

internal/lease/endpoint_test.go

Loading diff…

internal/lease/lease.go

Loading diff…

internal/lease/lease_test.go

Loading diff…

internal/registry/registry.go

Loading diff…

internal/registry/registry_test.go

Loading diff…

internal/release/adopt.go

Loading diff…

internal/release/adopt_test.go

Loading diff…

internal/release/golden_test.go

Loading diff…

internal/release/ladder_test.go

Loading diff…

internal/release/materialize.go

Loading diff…

internal/release/materialize_test.go

Loading diff…

internal/release/release.go

Loading diff…

internal/release/release_test.go

Loading diff…

internal/release/restartgen.go

Loading diff…

internal/release/restartgen_test.go

Loading diff…

internal/release/semver.go

Loading diff…

internal/release/semver_test.go

Loading diff…

internal/release/serial.go

Loading diff…

internal/release/serial_test.go

Loading diff…

internal/release/stage_blocked_test.go

Loading diff…

internal/release/store.go

Loading diff…

internal/release/store_rgw_test.go

Loading diff…

internal/release/tag.go

Loading diff…

internal/release/tag_test.go

Loading diff…

internal/release/target.go

Loading diff…

internal/release/target_test.go

Loading diff…

internal/release/versions.go

Loading diff…

internal/release/versions_test.go

Loading diff…

internal/s3compat/s3compat.go

Loading diff…

internal/s3compat/s3compat_test.go

Loading diff…

internal/status/contract_test.go

Loading diff…

internal/status/dryrun.go

Loading diff…

internal/status/fleet.go

Loading diff…

internal/status/snapshot.go

Loading diff…

internal/status/status_test.go

Loading diff…

main.go

Loading diff…

restart.go

Loading diff…

restart_test.go

Loading diff…

testdata/echoapp/main.go

Loading diff…