merge: catch up with main (#151 route aliases) — aliases inherit multi-upstream entries
Main had moved well past #151 by the time this branch caught up: the merge
takes in route aliases (#151/#164), delegated wildcards (#168), woodstar docs
(#169), the unit-economics work (#171) and the account-default-resolution
seam. Seven files conflicted; all but two were additive-on-both-sides.
Resolutions that needed judgment rather than side-picking:
- internal/status/snapshot.go — both sides added a field to Probes AND to
BoxMetrics at the same offsets (ours Upstreams, theirs Aliases). Both are
kept, and CollectBox's "attach Metrics only when something is known" guard
now ORs both new tables (len(aliasReadings) > 0 || len(p.Upstreams) > 0).
Taking either side alone would have silently dropped the other's block from
status/boxes/<label>.json for a box that knew only that one thing.
- instances_cli.go — main replaced apiAccount with resolvedAccount ("the seam
every API-mode verb reaches through", apimode.go) across every instances
verb. `instances set-upstreams` was written on this branch before that seam
existed, so the mechanical resolution would have left it the ONLY instances
verb still defaulting -account to "ops" and skipping default-account
resolution: a user omitting -account would get create/list/delete resolving
correctly and set-upstreams 404ing against an "ops" account they don't
have. Converted it to -account "" + resolvedAccount to match its siblings.
- apimode.go — ours collapsed putJSON into sendJSON; main added #160's
consoleMoved handling to the then-inline putJSON body. Ours wins: the
auto-merged sendJSON already carries the consoleMoved branch, so the
collapse keeps main's behavior with one copy instead of two.
- internal/host/agent.go — the edge ready hook gained both sides' wiring
(setUpstreamSource for the probe table, then main's usage meter).
- internal/edge/edge_test.go, internal/status/status_test.go — both sides
appended whole test funcs at adjacent offsets and git interleaved them.
Neither side deletes a base line, so both files were rebuilt from the merge
base with each side's additions applied at their own offsets rather than
hand-splicing the interleaved hunks.
edge.go's Reload merged clean, and the ordering the branch needs holds:
alias wiring, then probers.Sync, then upstreams.Store. Aliases copy the
primary's upstream entry, whose proxy for a probed route is multiProxy
closed over the proberSet pointer and resolving Live(primaryHost) per
request — so an alias of a multi-upstream route inherits failover, and Sync
running after the entries are built is correct (it updates the set's
contents, never the table). TestAliasSharesUpstreamEntry is byte-identical
to main's and passes unchanged (-race -count=2).
Gate: build, vet, GOOS=darwin build, gofmt and all 27 test packages clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
account_choose.go+123 −0account_choose_test.go+89 −0accounts.go+71 −3accounts_list_test.go+81 −0accounts_resolve_test.go+12 −0apimode.go+393 −6apimode_test.go+536 −0appconfig_cli.go+16 −10apps.go+8 −7auth.go+57 −6auth_test.go+58 −7cli.go+29 −19cmd/console/main.go+25 −0config.go+115 −23config_test.go+96 −0deploy.go+2 −2docs/superpowers/plans/2026-08-11-unit-economics.md+2335 −0docs/superpowers/plans/2026-08-12-account-default-resolution.md+122 −0docs/superpowers/plans/2026-08-12-delegated-wildcard-certs.md+427 −0docs/superpowers/plans/2026-08-12-route-extra-hostnames.md+548 −0docs/superpowers/plans/2026-08-12-woodstar-w0-relay-fanout.md+751 −0docs/superpowers/specs/2026-08-11-unit-economics-design.md+282 −0docs/superpowers/specs/2026-08-12-account-default-resolution-design.md+182 −0docs/superpowers/specs/2026-08-12-proactive-cli-design.md+128 −0docs/superpowers/specs/2026-08-12-route-extra-hostnames-design.md+288 −0docs/superpowers/specs/2026-08-12-woodstar-carloku-migration-design.md+424 −0domains_cli.go+150 −0domains_cli_test.go+393 −0economics.go+231 −0economics_test.go+292 −0fleets.go+14 −13go.mod+1 −0go.sum+2 −5infra/modules/region-host/main.tf+20 −0infra/modules/region-host/variables.tf+6 −0instances_cli.go+9 −9internal/console/apidomains.go+335 −0internal/console/apidomains_test.go+480 −0internal/console/authcli.go+9 −2internal/console/cepull.go+173 −0internal/console/cepull_test.go+41 −0internal/console/econlistquery.go+219 −0internal/console/econlistquery_test.go+202 −0internal/console/economicsbill_test.go+448 −0internal/console/economicspage_test.go+466 −0internal/console/economicspass.go+1095 −0internal/console/economicspass_test.go+452 −0internal/console/economicsview.go+582 −0internal/console/economicsview_test.go+267 −0internal/console/server.go+363 −0internal/console/store.go+24 −0internal/console/templates/economics.html+739 −0internal/console/templates/economics_accounts.html+172 −0internal/console/templates/layout.html+22 −0internal/console/view_test.go+12 −0internal/domains/aliases.go+74 −0internal/domains/aliases_test.go+245 −0internal/domains/claims.go+251 −0internal/domains/claims_test.go+256 −0internal/domains/reconcile.go+43 −10internal/domains/reconcile_test.go+77 −0internal/economics/bill.go+31 −0internal/economics/bill_test.go+28 −0internal/economics/compute.go+153 −0internal/economics/compute_test.go+107 −0internal/economics/scenario.go+161 −0internal/economics/scenario_test.go+60 −0internal/edge/alias_test.go+277 −0internal/edge/edge.go+64 −3internal/edge/edge_test.go+70 −0internal/edge/storedoor.go+43 −7internal/edge/storedoor_test.go+20 −0internal/edge/usagemeter.go+84 −0internal/edge/usagemeter_test.go+66 −0internal/edge/wildcard.go+111 −24internal/edge/wildcard_test.go+134 −11internal/host/agent.go+27 −3internal/host/usage_loop.go+55 −0internal/host/usage_loop_test.go+48 −0internal/objstore/aws.go+21 −4internal/registry/registry.go+121 −3internal/registry/registry_test.go+186 −0internal/release/store.go+82 −0internal/release/store_test.go+26 −0internal/status/snapshot.go+61 −9internal/status/status_test.go+38 −0internal/usage/census.go+23 −0internal/usage/edge.go+100 −0internal/usage/edge_test.go+80 −0internal/usage/passes_test.go+70 −0internal/usage/statement.go+78 −0internal/usage/storage.go+24 −0internal/usage/usage.go+33 −0logs.go+2 −2main.go+16 −0restart.go+1 −1retention.go+1 −1store.go+6 −5update.go+358 −0update_test.go+261 −0
account_choose.goLoading diff…
account_choose_test.goLoading diff…
accounts.goLoading diff…
accounts_list_test.goLoading diff…
accounts_resolve_test.goLoading diff…
apimode.goLoading diff…
apimode_test.goLoading diff…
appconfig_cli.goLoading diff…
apps.goLoading diff…
auth.goLoading diff…
auth_test.goLoading diff…
cli.goLoading diff…
cmd/console/main.goLoading diff…
config.goLoading diff…
config_test.goLoading diff…
deploy.goLoading diff…
docs/superpowers/plans/2026-08-11-unit-economics.mdLoading diff…
docs/superpowers/plans/2026-08-12-account-default-resolution.mdLoading diff…
docs/superpowers/plans/2026-08-12-delegated-wildcard-certs.mdLoading diff…
docs/superpowers/plans/2026-08-12-route-extra-hostnames.mdLoading diff…
docs/superpowers/plans/2026-08-12-woodstar-w0-relay-fanout.mdLoading diff…
docs/superpowers/specs/2026-08-11-unit-economics-design.mdLoading diff…
docs/superpowers/specs/2026-08-12-account-default-resolution-design.mdLoading diff…
docs/superpowers/specs/2026-08-12-proactive-cli-design.mdLoading diff…
docs/superpowers/specs/2026-08-12-route-extra-hostnames-design.mdLoading diff…
docs/superpowers/specs/2026-08-12-woodstar-carloku-migration-design.mdLoading diff…
domains_cli.goLoading diff…
domains_cli_test.goLoading diff…
economics.goLoading diff…
economics_test.goLoading diff…
fleets.goLoading diff…
go.modLoading diff…
go.sumLoading diff…
infra/modules/region-host/main.tfLoading diff…
infra/modules/region-host/variables.tfLoading diff…
instances_cli.goLoading diff…
internal/console/apidomains.goLoading diff…
internal/console/apidomains_test.goLoading diff…
internal/console/authcli.goLoading diff…
internal/console/cepull.goLoading diff…
internal/console/cepull_test.goLoading diff…
internal/console/econlistquery.goLoading diff…
internal/console/econlistquery_test.goLoading diff…
internal/console/economicsbill_test.goLoading diff…
internal/console/economicspage_test.goLoading diff…
internal/console/economicspass.goLoading diff…
internal/console/economicspass_test.goLoading diff…
internal/console/economicsview.goLoading diff…
internal/console/economicsview_test.goLoading diff…
internal/console/server.goLoading diff…
internal/console/store.goLoading diff…
internal/console/templates/economics.htmlLoading diff…
internal/console/templates/economics_accounts.htmlLoading diff…
internal/console/templates/layout.htmlLoading diff…
internal/console/view_test.goLoading diff…
internal/domains/aliases.goLoading diff…
internal/domains/aliases_test.goLoading diff…
internal/domains/claims.goLoading diff…
internal/domains/claims_test.goLoading diff…
internal/domains/reconcile.goLoading diff…
internal/domains/reconcile_test.goLoading diff…
internal/economics/bill.goLoading diff…
internal/economics/bill_test.goLoading diff…
internal/economics/compute.goLoading diff…
internal/economics/compute_test.goLoading diff…
internal/economics/scenario.goLoading diff…
internal/economics/scenario_test.goLoading diff…
internal/edge/alias_test.goLoading diff…
internal/edge/edge.goLoading diff…
internal/edge/edge_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/edge/wildcard.goLoading diff…
internal/edge/wildcard_test.goLoading diff…
internal/host/agent.goLoading diff…
internal/host/usage_loop.goLoading diff…
internal/host/usage_loop_test.goLoading diff…
internal/objstore/aws.goLoading diff…
internal/registry/registry.goLoading diff…
internal/registry/registry_test.goLoading diff…
internal/release/store.goLoading diff…
internal/release/store_test.goLoading diff…
internal/status/snapshot.goLoading diff…
internal/status/status_test.goLoading diff…
internal/usage/census.goLoading diff…
internal/usage/edge.goLoading diff…
internal/usage/edge_test.goLoading diff…
internal/usage/passes_test.goLoading diff…
internal/usage/statement.goLoading diff…
internal/usage/storage.goLoading diff…
internal/usage/usage.goLoading diff…
logs.goLoading diff…
main.goLoading diff…
restart.goLoading diff…
retention.goLoading diff…
store.goLoading diff…
update.goLoading diff…
update_test.goLoading diff…