carlos / platform Public

Merge main into sweep-staged-versions

157 commits landed on main while this branch sat green, four of them in
files it touches. One conflict, in bootstrap.go: main rewrote the trailing
paragraph of systemctlPlan's doc comment for carlos-relay.service, where
this branch had inserted journaldReload. Kept main's paragraph attached to
the function it documents and moved journaldReload below the function.

The sweep's placement in RunAdopt survives the merge intact: pass lock,
then openServiceRegistry, then the sweep, and only then openDeployStore,
the pubkey parse and release.Pass — which is the ordering the fix depends
on.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C4uAcc4PRTkETZo5NJJ67Y
Paul Campbell pushed by paul@keymail.dev 2ad59ac4a0d34eac13418aa15ae23e6259967a0e parent fbdba6dparent 2ace60d
212 files changed, +43270 −454
  • analytics_cmd.go +195 −0
  • analytics_cmd_test.go +130 −0
  • apimode.go +313 −0
  • cmd/console/main.go +76 −0
  • docs/site/cli.md +125 −1
  • docs/superpowers/plans/2026-09-07-analytics-step2-edge-counting.md +2224 −0
  • docs/superpowers/plans/2026-09-07-errors-step1-log-and-edge.md +3287 −0
  • docs/superpowers/plans/2026-09-07-password-gate.md +2130 −0
  • docs/superpowers/plans/2026-09-07-relay-stun-turn.md +2048 −0
  • docs/superpowers/specs/2026-09-07-errors-and-analytics-design.md +843 −0
  • docs/superpowers/specs/2026-09-07-media-platform-roadmap-design.md +1000 −0
  • docs/superpowers/specs/2026-09-07-password-gate-design.md +445 −0
  • docs/superpowers/specs/2026-09-07-relay-stun-turn-design.md +725 −0
  • docs/superpowers/specs/CODEX-FINDINGS-MEDIA-R2.md +169 −0
  • docs/superpowers/specs/CODEX-FINDINGS-MEDIA-R3.md +106 −0
  • docs/superpowers/specs/CODEX-FINDINGS-MEDIA-R4.md +96 −0
  • docs/superpowers/specs/CODEX-FINDINGS-MEDIA-R5.md +36 −0
  • docs/superpowers/specs/CODEX-FINDINGS-MEDIA.md +196 −0
  • docs/superpowers/specs/CODEX-FINDINGS-RELAY-R2.md +205 −0
  • docs/superpowers/specs/CODEX-FINDINGS-RELAY-R3.md +156 −0
  • docs/superpowers/specs/CODEX-FINDINGS-RELAY-R4.md +61 −0
  • docs/superpowers/specs/CODEX-FINDINGS-RELAY-R5.md +31 −0
  • docs/superpowers/specs/CODEX-FINDINGS-RELAY-R6.md +15 −0
  • docs/superpowers/specs/CODEX-FINDINGS-RELAY.md +237 −0
  • docs/superpowers/specs/CODEX-REVIEW-BRIEF-MEDIA.md +96 −0
  • docs/superpowers/specs/CODEX-REVIEW-BRIEF-RELAY.md +69 −0
  • errors_cmd.go +146 −0
  • errors_cmd_test.go +25 −0
  • gate_cli.go +232 −0
  • gate_cli_test.go +273 −0
  • go.mod +8 −0
  • go.sum +18 −2
  • implementation/always-awake-consumers.json +682 −0
  • implementation/always-awake-exec.md +224 −0
  • implementation/maintenance-exec.md +113 −0
  • implementation/maintenance-launch.md +49 −0
  • implementation/maintenance-protocol/proposal.json +348 −0
  • implementation/maintenance-protocol/schemas.json +1214 −0
  • implementation/runtime-contract-signing.md +76 −0
  • infra/modules/region-host/main.tf +45 −0
  • infra/modules/region-host/outputs.tf +5 −0
  • infra/modules/region-host/variables.tf +6 −0
  • internal/activator/activator.go +154 −32
  • internal/activator/maintenance.go +166 −0
  • internal/activator/maintenance_test.go +615 −0
  • internal/activator/scheduled_token.go +17 −0
  • internal/activator/scheduled_token_test.go +90 −0
  • internal/analytics/bots.go +32 −0
  • internal/analytics/bots_test.go +27 −0
  • internal/analytics/day.go +174 −0
  • internal/analytics/day_test.go +94 −0
  • internal/analytics/hll.go +116 −0
  • internal/analytics/hll_test.go +71 −0
  • internal/analytics/meter.go +265 −0
  • internal/analytics/meter_test.go +239 −0
  • internal/analytics/read.go +127 −0
  • internal/analytics/read_test.go +46 −0
  • internal/analytics/salt.go +98 −0
  • internal/analytics/salt_test.go +64 −0
  • internal/analytics/topk.go +106 −0
  • internal/analytics/topk_test.go +57 −0
  • internal/appconfig/appconfig.go +1 −1
  • internal/appconfig/configack.go +173 −0
  • internal/appconfig/configack_test.go +229 −0
  • internal/appconfig/sync.go +49 −8
  • internal/appconfig/sync_test.go +28 −28
  • internal/appconfig/syncexec.go +62 −12
  • internal/appconfig/syncexec_test.go +182 −42
  • internal/apperr/fingerprint.go +76 −0
  • internal/apperr/fingerprint_test.go +62 −0
  • internal/apperr/group.go +80 −0
  • internal/apperr/group_test.go +33 −0
  • internal/apperr/read.go +122 −0
  • internal/apperr/read_test.go +87 −0
  • internal/apperr/record.go +77 −0
  • internal/apperr/sanitize.go +130 −0
  • internal/apperr/sanitize_test.go +53 −0
  • internal/apperr/sink.go +158 −0
  • internal/apperr/sink_test.go +172 −0
  • internal/applog/chunk.go +57 −16
  • internal/applog/chunk_test.go +58 −0
  • internal/applog/read.go +35 −19
  • internal/applog/read_test.go +29 −0
  • internal/cgroup/strict.go +10 −0
  • internal/cgroup/strict_kernel_linux_test.go +343 −0
  • internal/cgroup/strict_linux.go +356 −0
  • internal/cgroup/strict_linux_test.go +246 −0
  • internal/cgroup/strict_other.go +17 −0
  • internal/console/analyticsview.go +409 −0
  • internal/console/apianalytics.go +94 −0
  • internal/console/apianalytics_test.go +184 −0
  • internal/console/apierrors.go +155 −0
  • internal/console/apierrors_test.go +242 −0
  • internal/console/apiinstances.go +69 −6
  • internal/console/apiinstances_test.go +125 −5
  • internal/console/apirelay.go +747 −0
  • internal/console/apirelay_test.go +743 −0
  • internal/console/appsettings.go +123 −0
  • internal/console/appsettings_gate_test.go +132 −0
  • internal/console/authcli.go +33 −0
  • internal/console/channelmove.go +2 −2
  • internal/console/errorsview.go +301 −0
  • internal/console/ownership.go +15 −0
  • internal/console/relayops.go +1527 −0
  • internal/console/relayops_test.go +711 −0
  • internal/console/server.go +151 −0
  • internal/console/svcroutes_test.go +22 −1
  • internal/console/templates/account_settings.html +44 −0
  • internal/console/templates/app_analytics.html +45 −0
  • internal/console/templates/app_errors.html +79 −0
  • internal/console/templates/app_settings.html +87 −0
  • internal/console/templates/appnav.html +2 −0
  • internal/controlname/names.go +28 −0
  • internal/edge/analytics.go +127 −0
  • internal/edge/analytics_test.go +111 −0
  • internal/edge/answered.go +37 −0
  • internal/edge/answered_test.go +19 −0
  • internal/edge/edge.go +175 −14
  • internal/edge/edgeerrors_test.go +172 −0
  • internal/edge/gate_test.go +508 −0
  • internal/edge/storedoor.go +25 −19
  • internal/edge/storedoor_test.go +12 −0
  • internal/edge/usagemeter.go +34 −5
  • internal/edge/usagemeter_test.go +26 −0
  • internal/gate/cookie.go +61 −0
  • internal/gate/gate.go +259 −0
  • internal/gate/gate_test.go +399 −0
  • internal/gate/limiter.go +64 −0
  • internal/gate/login.html +55 −0
  • internal/gate/page.go +41 −0
  • internal/host/agent.go +67 −3
  • internal/host/bootstrap.go +36 −17
  • internal/host/errship.go +109 −0
  • internal/host/errship_test.go +37 −0
  • internal/host/host_test.go +59 −4
  • internal/host/logship.go +7 −22
  • internal/host/logship_test.go +2 −9
  • internal/host/metrics_loop.go +7 −0
  • internal/host/schedule_token_fence_test.go +102 −0
  • internal/host/schedule_wake_test.go +2 −2
  • internal/host/schedule_wiring.go +11 −3
  • internal/host/schedule_wiring_test.go +3 −3
  • internal/host/systemapply.go +33 −2
  • internal/host/systemapply_test.go +88 −0
  • internal/host/telemetry_pass.go +69 −0
  • internal/host/telemetry_pass_test.go +38 −0
  • internal/host/units/carlos-relay.service +50 −0
  • internal/host/usage_loop.go +31 −6
  • internal/host/usage_loop_test.go +31 −3
  • internal/lease/checkpoint.go +56 −0
  • internal/lease/checkpoint_test.go +691 −0
  • internal/lease/health.go +170 −0
  • internal/lease/lease.go +129 −104
  • internal/maintenance/envelope.go +196 −0
  • internal/maintenance/envelope_test.go +235 −0
  • internal/maintenance/input.go +127 −0
  • internal/maintenance/input_test.go +118 −0
  • internal/maintenance/result.go +90 −0
  • internal/maintenance/result_test.go +195 −0
  • internal/maintenance/testdata/envelope-vector.json +19 −0
  • internal/maintenance/testdata/generate-vector.mjs +18 −0
  • internal/maintenanceguard/guard.go +174 −0
  • internal/maintenanceguard/guard_test.go +337 −0
  • internal/maintenanceguard/json.go +106 −0
  • internal/maintenanceguard/lifecycle.go +213 −0
  • internal/maintenanceguard/store.go +89 −0
  • internal/maintenanceguard/types.go +241 −0
  • internal/maintenanceguard/wire_test.go +282 −0
  • internal/privatefile/io_linux.go +114 −0
  • internal/privatefile/io_linux_test.go +207 −0
  • internal/privatefile/io_other.go +6 −0
  • internal/privatefile/privatefile.go +25 −0
  • internal/provision/maintenance.go +94 −0
  • internal/provision/maintenance_test.go +233 −0
  • internal/provision/provision.go +59 −31
  • internal/provision/provision_test.go +11 −0
  • internal/provision/reconcile.go +23 −4
  • internal/provision/reconcile_test.go +65 −0
  • internal/registry/registry.go +43 −12
  • internal/registry/registry_test.go +77 −0
  • internal/relay/authority.go +123 −0
  • internal/relay/authority_test.go +70 −0
  • internal/relay/config.go +71 −0
  • internal/relay/config_appconfig_test.go +34 −0
  • internal/relay/config_test.go +44 −0
  • internal/relay/conn.go +110 −0
  • internal/relay/conn_test.go +123 −0
  • internal/relay/keys.go +94 −0
  • internal/relay/keys_test.go +18 −0
  • internal/relay/limits.go +241 −0
  • internal/relay/limits_test.go +94 −0
  • internal/relay/masters.go +118 −0
  • internal/relay/masters_test.go +102 −0
  • internal/relay/memstore_test.go +15 −0
  • internal/relay/meter.go +224 −0
  • internal/relay/meter_test.go +238 −0
  • internal/relay/record.go +108 −0
  • internal/relay/record_test.go +36 −0
  • internal/relay/serve.go +478 −0
  • internal/relay/serve_test.go +427 −0
  • internal/relay/server.go +1140 −0
  • internal/relay/server_test.go +659 −0
  • internal/relay/vector_test.go +22 −0
  • internal/release/conditional_delete.go +103 −0
  • internal/release/conditional_delete_test.go +187 −0
  • internal/release/qualified.go +3 −10
  • internal/release/release.go +2 −6
  • internal/telemetry/telemetry.go +139 −0
  • internal/telemetry/telemetry_test.go +47 −0
  • main.go +15 −0
  • relay.go +453 −0
  • relay_test.go +351 −0

CI passed — run details

analytics_cmd.go

Loading diff…

analytics_cmd_test.go

Loading diff…

apimode.go

Loading diff…

cmd/console/main.go

Loading diff…

docs/site/cli.md

Loading diff…

docs/superpowers/plans/2026-09-07-analytics-step2-edge-counting.md

Loading diff…

docs/superpowers/plans/2026-09-07-errors-step1-log-and-edge.md

Loading diff…

docs/superpowers/plans/2026-09-07-password-gate.md

Loading diff…

docs/superpowers/plans/2026-09-07-relay-stun-turn.md

Loading diff…

docs/superpowers/specs/2026-09-07-errors-and-analytics-design.md

Loading diff…

docs/superpowers/specs/2026-09-07-media-platform-roadmap-design.md

Loading diff…

docs/superpowers/specs/2026-09-07-password-gate-design.md

Loading diff…

docs/superpowers/specs/2026-09-07-relay-stun-turn-design.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-MEDIA-R2.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-MEDIA-R3.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-MEDIA-R4.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-MEDIA-R5.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-MEDIA.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-RELAY-R2.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-RELAY-R3.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-RELAY-R4.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-RELAY-R5.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-RELAY-R6.md

Loading diff…

docs/superpowers/specs/CODEX-FINDINGS-RELAY.md

Loading diff…

docs/superpowers/specs/CODEX-REVIEW-BRIEF-MEDIA.md

Loading diff…

docs/superpowers/specs/CODEX-REVIEW-BRIEF-RELAY.md

Loading diff…

errors_cmd.go

Loading diff…

errors_cmd_test.go

Loading diff…

gate_cli.go

Loading diff…

gate_cli_test.go

Loading diff…

go.mod

Loading diff…

go.sum

Loading diff…

implementation/always-awake-consumers.json

Loading diff…

implementation/always-awake-exec.md

Loading diff…

implementation/maintenance-exec.md

Loading diff…

implementation/maintenance-launch.md

Loading diff…

implementation/maintenance-protocol/proposal.json

Loading diff…

implementation/maintenance-protocol/schemas.json

Loading diff…

implementation/runtime-contract-signing.md

Loading diff…

infra/modules/region-host/main.tf

Loading diff…

infra/modules/region-host/outputs.tf

Loading diff…

infra/modules/region-host/variables.tf

Loading diff…

internal/activator/activator.go

Loading diff…

internal/activator/maintenance.go

Loading diff…

internal/activator/maintenance_test.go

Loading diff…

internal/activator/scheduled_token.go

Loading diff…

internal/activator/scheduled_token_test.go

Loading diff…

internal/analytics/bots.go

Loading diff…

internal/analytics/bots_test.go

Loading diff…

internal/analytics/day.go

Loading diff…

internal/analytics/day_test.go

Loading diff…

internal/analytics/hll.go

Loading diff…

internal/analytics/hll_test.go

Loading diff…

internal/analytics/meter.go

Loading diff…

internal/analytics/meter_test.go

Loading diff…

internal/analytics/read.go

Loading diff…

internal/analytics/read_test.go

Loading diff…

internal/analytics/salt.go

Loading diff…

internal/analytics/salt_test.go

Loading diff…

internal/analytics/topk.go

Loading diff…

internal/analytics/topk_test.go

Loading diff…

internal/appconfig/appconfig.go

Loading diff…

internal/appconfig/configack.go

Loading diff…

internal/appconfig/configack_test.go

Loading diff…

internal/appconfig/sync.go

Loading diff…

internal/appconfig/sync_test.go

Loading diff…

internal/appconfig/syncexec.go

Loading diff…

internal/appconfig/syncexec_test.go

Loading diff…

internal/apperr/fingerprint.go

Loading diff…

internal/apperr/fingerprint_test.go

Loading diff…

internal/apperr/group.go

Loading diff…

internal/apperr/group_test.go

Loading diff…

internal/apperr/read.go

Loading diff…

internal/apperr/read_test.go

Loading diff…

internal/apperr/record.go

Loading diff…

internal/apperr/sanitize.go

Loading diff…

internal/apperr/sanitize_test.go

Loading diff…

internal/apperr/sink.go

Loading diff…

internal/apperr/sink_test.go

Loading diff…

internal/applog/chunk.go

Loading diff…

internal/applog/chunk_test.go

Loading diff…

internal/applog/read.go

Loading diff…

internal/applog/read_test.go

Loading diff…

internal/cgroup/strict.go

Loading diff…

internal/cgroup/strict_kernel_linux_test.go

Loading diff…

internal/cgroup/strict_linux.go

Loading diff…

internal/cgroup/strict_linux_test.go

Loading diff…

internal/cgroup/strict_other.go

Loading diff…

internal/console/analyticsview.go

Loading diff…

internal/console/apianalytics.go

Loading diff…

internal/console/apianalytics_test.go

Loading diff…

internal/console/apierrors.go

Loading diff…

internal/console/apierrors_test.go

Loading diff…

internal/console/apiinstances.go

Loading diff…

internal/console/apiinstances_test.go

Loading diff…

internal/console/apirelay.go

Loading diff…

internal/console/apirelay_test.go

Loading diff…

internal/console/appsettings.go

Loading diff…

internal/console/appsettings_gate_test.go

Loading diff…

internal/console/authcli.go

Loading diff…

internal/console/channelmove.go

Loading diff…

internal/console/errorsview.go

Loading diff…

internal/console/ownership.go

Loading diff…

internal/console/relayops.go

Loading diff…

internal/console/relayops_test.go

Loading diff…

internal/console/server.go

Loading diff…

internal/console/svcroutes_test.go

Loading diff…

internal/console/templates/account_settings.html

Loading diff…

internal/console/templates/app_analytics.html

Loading diff…

internal/console/templates/app_errors.html

Loading diff…

internal/console/templates/app_settings.html

Loading diff…

internal/console/templates/appnav.html

Loading diff…

internal/controlname/names.go

Loading diff…

internal/edge/analytics.go

Loading diff…

internal/edge/analytics_test.go

Loading diff…

internal/edge/answered.go

Loading diff…

internal/edge/answered_test.go

Loading diff…

internal/edge/edge.go

Loading diff…

internal/edge/edgeerrors_test.go

Loading diff…

internal/edge/gate_test.go

Loading diff…

internal/edge/storedoor.go

Loading diff…

internal/edge/storedoor_test.go

Loading diff…

internal/edge/usagemeter.go

Loading diff…

internal/edge/usagemeter_test.go

Loading diff…

internal/gate/cookie.go

Loading diff…

internal/gate/gate.go

Loading diff…

internal/gate/gate_test.go

Loading diff…

internal/gate/limiter.go

Loading diff…

internal/gate/login.html

Loading diff…

internal/gate/page.go

Loading diff…

internal/host/agent.go

Loading diff…

internal/host/bootstrap.go

Loading diff…

internal/host/errship.go

Loading diff…

internal/host/errship_test.go

Loading diff…

internal/host/host_test.go

Loading diff…

internal/host/logship.go

Loading diff…

internal/host/logship_test.go

Loading diff…

internal/host/metrics_loop.go

Loading diff…

internal/host/schedule_token_fence_test.go

Loading diff…

internal/host/schedule_wake_test.go

Loading diff…

internal/host/schedule_wiring.go

Loading diff…

internal/host/schedule_wiring_test.go

Loading diff…

internal/host/systemapply.go

Loading diff…

internal/host/systemapply_test.go

Loading diff…

internal/host/telemetry_pass.go

Loading diff…

internal/host/telemetry_pass_test.go

Loading diff…

internal/host/units/carlos-relay.service

Loading diff…

internal/host/usage_loop.go

Loading diff…

internal/host/usage_loop_test.go

Loading diff…

internal/lease/checkpoint.go

Loading diff…

internal/lease/checkpoint_test.go

Loading diff…

internal/lease/health.go

Loading diff…

internal/lease/lease.go

Loading diff…

internal/maintenance/envelope.go

Loading diff…

internal/maintenance/envelope_test.go

Loading diff…

internal/maintenance/input.go

Loading diff…

internal/maintenance/input_test.go

Loading diff…

internal/maintenance/result.go

Loading diff…

internal/maintenance/result_test.go

Loading diff…

internal/maintenance/testdata/envelope-vector.json

Loading diff…

internal/maintenance/testdata/generate-vector.mjs

Loading diff…

internal/maintenanceguard/guard.go

Loading diff…

internal/maintenanceguard/guard_test.go

Loading diff…

internal/maintenanceguard/json.go

Loading diff…

internal/maintenanceguard/lifecycle.go

Loading diff…

internal/maintenanceguard/store.go

Loading diff…

internal/maintenanceguard/types.go

Loading diff…

internal/maintenanceguard/wire_test.go

Loading diff…

internal/privatefile/io_linux.go

Loading diff…

internal/privatefile/io_linux_test.go

Loading diff…

internal/privatefile/io_other.go

Loading diff…

internal/privatefile/privatefile.go

Loading diff…

internal/provision/maintenance.go

Loading diff…

internal/provision/maintenance_test.go

Loading diff…

internal/provision/provision.go

Loading diff…

internal/provision/provision_test.go

Loading diff…

internal/provision/reconcile.go

Loading diff…

internal/provision/reconcile_test.go

Loading diff…

internal/registry/registry.go

Loading diff…

internal/registry/registry_test.go

Loading diff…

internal/relay/authority.go

Loading diff…

internal/relay/authority_test.go

Loading diff…

internal/relay/config.go

Loading diff…

internal/relay/config_appconfig_test.go

Loading diff…

internal/relay/config_test.go

Loading diff…

internal/relay/conn.go

Loading diff…

internal/relay/conn_test.go

Loading diff…

internal/relay/keys.go

Loading diff…

internal/relay/keys_test.go

Loading diff…

internal/relay/limits.go

Loading diff…

internal/relay/limits_test.go

Loading diff…

internal/relay/masters.go

Loading diff…

internal/relay/masters_test.go

Loading diff…

internal/relay/memstore_test.go

Loading diff…

internal/relay/meter.go

Loading diff…

internal/relay/meter_test.go

Loading diff…

internal/relay/record.go

Loading diff…

internal/relay/record_test.go

Loading diff…

internal/relay/serve.go

Loading diff…

internal/relay/serve_test.go

Loading diff…

internal/relay/server.go

Loading diff…

internal/relay/server_test.go

Loading diff…

internal/relay/vector_test.go

Loading diff…

internal/release/conditional_delete.go

Loading diff…

internal/release/conditional_delete_test.go

Loading diff…

internal/release/qualified.go

Loading diff…

internal/release/release.go

Loading diff…

internal/telemetry/telemetry.go

Loading diff…

internal/telemetry/telemetry_test.go

Loading diff…

main.go

Loading diff…

relay.go

Loading diff…

relay_test.go

Loading diff…