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