carlos / platform Public

merge: main into cli-app-create — shared apps dispatch, instances limiter, trash-door resolver

The two sides of the case-"apps" bargain meet: main's delete/restore keep
their file and this branch's create joins their dispatch. apiAccountAppBy
(main's trash-door resolver split) now composes with this branch's
apiAccount split — account resolution in one place, the has-gate the only
variable. Both rate-limiter families (instances, create) coexist.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell 3bf7ac2805e113738973098065df2129f1fee52b parent 623819bparent 7302bad
159 files changed, +40382 −447
  • CLAUDE.md +13 −5
  • README.md +127 −3
  • apimode.go +326 −11
  • apimode_test.go +592 −10
  • appconfig_cli.go +334 −41
  • apps.go +308 −18
  • apps_test.go +370 −0
  • auth.go +132 −22
  • auth_e2e_test.go +42 −12
  • auth_test.go +9 −10
  • cli.go +780 −24
  • cli_test.go +434 −0
  • cmd/console/main.go +28 −1
  • config.go +161 −0
  • config_e2e_test.go +317 −0
  • config_test.go +327 −0
  • docs/superpowers/plans/2026-08-03-app-capabilities.md +902 −0
  • docs/superpowers/plans/2026-08-04-config-console-api.md +382 −0
  • docs/superpowers/plans/2026-08-04-console-default-resolution.md +939 −0
  • docs/superpowers/plans/2026-08-04-deletion-policy.md +697 −0
  • docs/superpowers/plans/2026-08-04-instance-provisioning.md +661 −0
  • docs/superpowers/plans/2026-08-04-pi-enablement.md +247 −0
  • docs/superpowers/plans/2026-08-04-remote-host-agent.md +1261 −0
  • docs/superpowers/plans/2026-08-05-wildcard-certs.md +2073 −0
  • docs/superpowers/specs/2026-08-03-app-capabilities-design.md +960 −0
  • docs/superpowers/specs/2026-08-03-cli-console-api-design.md +2 −1
  • docs/superpowers/specs/2026-08-04-config-console-api-design.md +266 −0
  • docs/superpowers/specs/2026-08-04-console-default-resolution-design.md +162 −0
  • docs/superpowers/specs/2026-08-04-deletion-policy-design.md +321 −0
  • docs/superpowers/specs/2026-08-04-instance-provisioning-design.md +374 −0
  • docs/superpowers/specs/2026-08-04-remote-host-pi-design.md +267 −0
  • docs/superpowers/specs/2026-08-05-wildcard-certs-design.md +172 −0
  • e2e_test.go +249 −21
  • go.mod +2 −1
  • go.sum +2 −0
  • infra/dev/region-pi.md +64 −0
  • infra/modules/README.md +19 −0
  • infra/modules/region-host/main.tf +42 −0
  • infra/modules/region-host/variables.tf +10 −0
  • infra/modules/region-remote-host/README.md +34 −0
  • infra/modules/region-remote-host/main.tf +102 −0
  • infra/modules/region-remote-host/outputs.tf +6 −0
  • infra/modules/region-remote-host/variables.tf +14 −0
  • infra/remote-host.md +99 −0
  • instances_cli.go +119 −0
  • instances_cli_test.go +79 −0
  • internal/activator/activator.go +30 −6
  • internal/activator/activator_test.go +576 −6
  • internal/activator/backend_exec.go +193 −17
  • internal/activator/backend_unit.go +18 −5
  • internal/activator/backend_unit_test.go +40 −2
  • internal/appconfig/crypto.go +31 −0
  • internal/appconfig/crypto_test.go +66 −0
  • internal/appconfig/environments.go +12 −1
  • internal/appconfig/generation.go +128 −0
  • internal/appconfig/generation_test.go +252 −0
  • internal/appconfig/store.go +21 −3
  • internal/appconfig/sync.go +34 −0
  • internal/appconfig/syncexec.go +43 −0
  • internal/appconfig/syncexec_test.go +120 −0
  • internal/caps/caps.go +436 −0
  • internal/caps/caps_test.go +456 −0
  • internal/caps/converge.go +1055 −0
  • internal/caps/converge_test.go +1255 −0
  • internal/caps/grants.go +214 −0
  • internal/caps/grants_test.go +184 −0
  • internal/caps/neutrality_test.go +141 −0
  • internal/caps/render.go +187 −0
  • internal/caps/render_test.go +353 −0
  • internal/caps/testdata/console.service.conf +6 −0
  • internal/caps/testdata/keymail.service.conf +14 −0
  • internal/caps/testdata/keymail.socket.conf +3 −0
  • internal/console/apicli.go +353 −17
  • internal/console/apicli_test.go +767 −0
  • internal/console/apiconfig.go +472 −0
  • internal/console/apiconfig_test.go +904 −0
  • internal/console/apiinstances.go +394 −0
  • internal/console/apiinstances_seam_test.go +125 −0
  • internal/console/apiinstances_test.go +718 −0
  • internal/console/authcli.go +62 −4
  • internal/console/authcli_test.go +38 −0
  • internal/console/authstore.go +121 −6
  • internal/console/authstore_test.go +216 −0
  • internal/console/deletion_test.go +306 −0
  • internal/console/ladder.go +6 −0
  • internal/console/ladder_test.go +83 −0
  • internal/console/materialize.go +221 −16
  • internal/console/materialize_test.go +311 −0
  • internal/console/metricsview.go +13 −2
  • internal/console/ownership.go +232 −3
  • internal/console/server.go +57 −1
  • internal/console/server_test.go +134 −1
  • internal/console/store.go +218 −9
  • internal/console/store_test.go +239 −0
  • internal/console/templates/app.html +4 −0
  • internal/console/templates/apps.html +2 −0
  • internal/console/templates/cli_tokens.html +7 −5
  • internal/console/templates/fleet.html +38 −0
  • internal/console/templates/ladder.html +1 −0
  • internal/console/templates/trash.html +54 −0
  • internal/console/view.go +183 −3
  • internal/console/view_test.go +10 −1
  • internal/domains/reconcile.go +168 −4
  • internal/domains/reconcile_internal_test.go +114 −0
  • internal/domains/reconcile_test.go +443 −0
  • internal/edge/dns.go +268 −0
  • internal/edge/dns_test.go +178 −0
  • internal/edge/edge.go +209 −7
  • internal/edge/route53dns.go +182 −0
  • internal/edge/route53dns_test.go +124 −0
  • internal/edge/tunnel.go +224 −0
  • internal/edge/tunnel_e2e_test.go +218 −0
  • internal/edge/tunnel_test.go +316 −0
  • internal/edge/wildcard.go +570 −0
  • internal/edge/wildcard_test.go +420 −0
  • internal/host/adopt_advice.go +198 −0
  • internal/host/adopt_advice_test.go +170 −0
  • internal/host/agent.go +509 −23
  • internal/host/agent_test.go +388 −0
  • internal/host/bootstrap.go +62 −18
  • internal/host/caps_pass.go +388 −0
  • internal/host/caps_pass_test.go +845 −0
  • internal/host/host_test.go +254 −7
  • internal/host/probes.go +102 −0
  • internal/host/tunnel_client.go +59 −0
  • internal/host/tunnel_client_test.go +100 −0
  • internal/host/units/carlos-adopt.path +20 −0
  • internal/host/units/carlos-config-sync.service +46 −0
  • internal/lease/lease.go +23 −2
  • internal/lease/lease_test.go +95 −0
  • internal/provision/provision.go +307 −0
  • internal/provision/provision_test.go +337 −0
  • internal/provision/reconcile.go +356 −0
  • internal/provision/reconcile_test.go +604 −0
  • internal/registry/registry.go +303 −18
  • internal/registry/registry_test.go +571 −2
  • internal/release/adopt.go +415 −29
  • internal/release/adopt_test.go +1604 −0
  • internal/release/golden_test.go +72 −0
  • internal/release/production.go +14 −0
  • internal/release/production_test.go +64 −0
  • internal/release/release.go +42 −0
  • internal/release/release_test.go +96 −0
  • internal/release/trash.go +165 −0
  • internal/release/trash_test.go +347 −0
  • internal/release/versions.go +89 −0
  • internal/release/versions_test.go +193 −0
  • internal/status/assets/index.html +6 −0
  • internal/status/contract_test.go +47 −9
  • internal/status/dryrun.go +73 −8
  • internal/status/fleet.go +62 −10
  • internal/status/snapshot.go +108 −11
  • internal/status/status_test.go +185 −0
  • internal/tunnelclient/tunnelclient.go +267 −0
  • internal/tunnelclient/tunnelclient_test.go +154 −0
  • main.go +23 −3
  • scopedkeys_e2e_test.go +20 −8
  • scripts/seed-pi-demo.sh +54 −0
  • statuslive_test.go +127 −0
CLAUDE.md

Loading diff…

README.md

Loading diff…

apimode.go

Loading diff…

apimode_test.go

Loading diff…

appconfig_cli.go

Loading diff…

apps.go

Loading diff…

apps_test.go

Loading diff…

auth.go

Loading diff…

auth_e2e_test.go

Loading diff…

auth_test.go

Loading diff…

cli.go

Loading diff…

cli_test.go

Loading diff…

cmd/console/main.go

Loading diff…

config.go

Loading diff…

config_e2e_test.go

Loading diff…

config_test.go

Loading diff…

docs/superpowers/plans/2026-08-03-app-capabilities.md

Loading diff…

docs/superpowers/plans/2026-08-04-config-console-api.md

Loading diff…

docs/superpowers/plans/2026-08-04-console-default-resolution.md

Loading diff…

docs/superpowers/plans/2026-08-04-deletion-policy.md

Loading diff…

docs/superpowers/plans/2026-08-04-instance-provisioning.md

Loading diff…

docs/superpowers/plans/2026-08-04-pi-enablement.md

Loading diff…

docs/superpowers/plans/2026-08-04-remote-host-agent.md

Loading diff…

docs/superpowers/plans/2026-08-05-wildcard-certs.md

Loading diff…

docs/superpowers/specs/2026-08-03-app-capabilities-design.md

Loading diff…

docs/superpowers/specs/2026-08-03-cli-console-api-design.md

Loading diff…

docs/superpowers/specs/2026-08-04-config-console-api-design.md

Loading diff…

docs/superpowers/specs/2026-08-04-console-default-resolution-design.md

Loading diff…

docs/superpowers/specs/2026-08-04-deletion-policy-design.md

Loading diff…

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

Loading diff…

docs/superpowers/specs/2026-08-04-remote-host-pi-design.md

Loading diff…

docs/superpowers/specs/2026-08-05-wildcard-certs-design.md

Loading diff…

e2e_test.go

Loading diff…

go.mod

Loading diff…

go.sum

Loading diff…

infra/dev/region-pi.md

Loading diff…

infra/modules/README.md

Loading diff…

infra/modules/region-host/main.tf

Loading diff…

infra/modules/region-host/variables.tf

Loading diff…

infra/modules/region-remote-host/README.md

Loading diff…

infra/modules/region-remote-host/main.tf

Loading diff…

infra/modules/region-remote-host/outputs.tf

Loading diff…

infra/modules/region-remote-host/variables.tf

Loading diff…

infra/remote-host.md

Loading diff…

instances_cli.go

Loading diff…

instances_cli_test.go

Loading diff…

internal/activator/activator.go

Loading diff…

internal/activator/activator_test.go

Loading diff…

internal/activator/backend_exec.go

Loading diff…

internal/activator/backend_unit.go

Loading diff…

internal/activator/backend_unit_test.go

Loading diff…

internal/appconfig/crypto.go

Loading diff…

internal/appconfig/crypto_test.go

Loading diff…

internal/appconfig/environments.go

Loading diff…

internal/appconfig/generation.go

Loading diff…

internal/appconfig/generation_test.go

Loading diff…

internal/appconfig/store.go

Loading diff…

internal/appconfig/sync.go

Loading diff…

internal/appconfig/syncexec.go

Loading diff…

internal/appconfig/syncexec_test.go

Loading diff…

internal/caps/caps.go

Loading diff…

internal/caps/caps_test.go

Loading diff…

internal/caps/converge.go

Loading diff…

internal/caps/converge_test.go

Loading diff…

internal/caps/grants.go

Loading diff…

internal/caps/grants_test.go

Loading diff…

internal/caps/neutrality_test.go

Loading diff…

internal/caps/render.go

Loading diff…

internal/caps/render_test.go

Loading diff…

internal/caps/testdata/console.service.conf

Loading diff…

internal/caps/testdata/keymail.service.conf

Loading diff…

internal/caps/testdata/keymail.socket.conf

Loading diff…

internal/console/apicli.go

Loading diff…

internal/console/apicli_test.go

Loading diff…

internal/console/apiconfig.go

Loading diff…

internal/console/apiconfig_test.go

Loading diff…

internal/console/apiinstances.go

Loading diff…

internal/console/apiinstances_seam_test.go

Loading diff…

internal/console/apiinstances_test.go

Loading diff…

internal/console/authcli.go

Loading diff…

internal/console/authcli_test.go

Loading diff…

internal/console/authstore.go

Loading diff…

internal/console/authstore_test.go

Loading diff…

internal/console/deletion_test.go

Loading diff…

internal/console/ladder.go

Loading diff…

internal/console/ladder_test.go

Loading diff…

internal/console/materialize.go

Loading diff…

internal/console/materialize_test.go

Loading diff…

internal/console/metricsview.go

Loading diff…

internal/console/ownership.go

Loading diff…

internal/console/server.go

Loading diff…

internal/console/server_test.go

Loading diff…

internal/console/store.go

Loading diff…

internal/console/store_test.go

Loading diff…

internal/console/templates/app.html

Loading diff…

internal/console/templates/apps.html

Loading diff…

internal/console/templates/cli_tokens.html

Loading diff…

internal/console/templates/fleet.html

Loading diff…

internal/console/templates/ladder.html

Loading diff…

internal/console/templates/trash.html

Loading diff…

internal/console/view.go

Loading diff…

internal/console/view_test.go

Loading diff…

internal/domains/reconcile.go

Loading diff…

internal/domains/reconcile_internal_test.go

Loading diff…

internal/domains/reconcile_test.go

Loading diff…

internal/edge/dns.go

Loading diff…

internal/edge/dns_test.go

Loading diff…

internal/edge/edge.go

Loading diff…

internal/edge/route53dns.go

Loading diff…

internal/edge/route53dns_test.go

Loading diff…

internal/edge/tunnel.go

Loading diff…

internal/edge/tunnel_e2e_test.go

Loading diff…

internal/edge/tunnel_test.go

Loading diff…

internal/edge/wildcard.go

Loading diff…

internal/edge/wildcard_test.go

Loading diff…

internal/host/adopt_advice.go

Loading diff…

internal/host/adopt_advice_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/caps_pass.go

Loading diff…

internal/host/caps_pass_test.go

Loading diff…

internal/host/host_test.go

Loading diff…

internal/host/probes.go

Loading diff…

internal/host/tunnel_client.go

Loading diff…

internal/host/tunnel_client_test.go

Loading diff…

internal/host/units/carlos-adopt.path

Loading diff…

internal/host/units/carlos-config-sync.service

Loading diff…

internal/lease/lease.go

Loading diff…

internal/lease/lease_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/release/adopt.go

Loading diff…

internal/release/adopt_test.go

Loading diff…

internal/release/golden_test.go

Loading diff…

internal/release/production.go

Loading diff…

internal/release/production_test.go

Loading diff…

internal/release/release.go

Loading diff…

internal/release/release_test.go

Loading diff…

internal/release/trash.go

Loading diff…

internal/release/trash_test.go

Loading diff…

internal/release/versions.go

Loading diff…

internal/release/versions_test.go

Loading diff…

internal/status/assets/index.html

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…

internal/tunnelclient/tunnelclient.go

Loading diff…

internal/tunnelclient/tunnelclient_test.go

Loading diff…

main.go

Loading diff…

scopedkeys_e2e_test.go

Loading diff…

scripts/seed-pi-demo.sh

Loading diff…

statuslive_test.go

Loading diff…