Public: anyone can read this; nobody can change it.
A hosted child keeps its parent's scheme and port: a child of http://forge.lan:8080 is http://kid--forge.lan:8080, not https://kid--forge.lan #47
Check · Review · Land done · Live — Landed; nothing deploys from this branch, so this is the end of its path.
`childPublicUrl` built every child's address as `https://<name>--<host>` from a host with its port stripped. Behind the platform (https on 443) that is right. For any parent on plain http or another port it was wrong in two ways: the child was told an https address nothing serves, and it lost the port. Its config `url`, the ledger, `/spawn` answers, the claim link, and its apps' `FORGE_URL` all po…
shipped merged
Sign in to join this conversation.
childPublicUrlbuilt every child's address ashttps://<name>--<host>from a host with its port stripped. Behind the platform (https on 443) that is right. For any parent on plain http or another port it was wrong in two ways: the child was told an https address nothing serves, and it lost the port. Its configurl, the ledger,/spawnanswers, the claim link, and its apps'FORGE_URLall pointed nowhere.parentOrigin(config)inspawn/placement.tsnames the parent's publicorigin once: its canonical
urlwhen it has one, otherwisehttp://<host>:<port>asmain.tsnames itself. It replacesparentHostOfinactions/spawn.ts, which was a copy ofchildHost.childPublicUrl(name, parent)takes that origin and keeps its scheme andport (a scheme's default port drops, as
URLdoes). A bare host still means https with no port, so the platform'shttps://<name>--forge.open-platform.shand every existing caller and test are unchanged.and ledger seeding (
door.ts),liveChildUrl, the child app's ownurl(host.ts), and its apps' forge URL (child-apps.ts). Matching a Host to a child (parseHostedChildName) already ignored the port and is unchanged, as ischildHostfor those host-only uses.Tests:
childPublicUrlandparentOriginacross http/https, explicit, default and missing ports. End to end, a parent athttp://forge.lan:8080spawnskidand the spawn result,liveChildUrl,childUrlOfand the opened child's ownconfig.urlare allhttp://kid--forge.lan:8080. On main the same parent giveshttps://kid--forge.lan.Overlap: #2419 (a new or spawned forge starts with signup = invite) changes the child's signup setting, not its address. No open pull touches these files for it, so neither rebases on the other. #41 (first-admin) does not touch placement.
Note: the single-label shape is unchanged, so a child of
http://localhost:3000ishttp://kid--localhost:3000, which needs a hosts entry or wildcard DNS to resolve, the same as before but now on the right scheme and port.Tests run by hand (bun 1.3.14, CI env)
bun install --frozen-lockfile,bun scripts/gate.ts,tsc --noEmitandbun scripts/hollow.tsare clean.Before, on main:
childPublicUrl("kid", "forge.lan:8080")gavehttps://kid--forge.lan.bun test test/spawn-placement.test.ts test/spawn-host.test.ts:Every spawn suite and every suite that spawns, places or opens a child (
test/spawn*.test.ts, client-home, client-list, first-login, following, new-forge, tui-newforge, usage-count-child, apps-adversarial, hollow, openapi; 27 files): 311 tests, 0 fail.<!-- pipeline:validation -->
Validation
pipeline/validateona7daea4d: baseline in 479s — bun 1.3.14, CI-shaped env (scrubbed vars, runner PATH), exact check.yml shard + forge.json commands.bun install --frozen-lockfileforge.json check.fastcheck.yml gate (1) pull_requestcheck.yml gate (2) pull_requestcheck.yml gate (3) pull_requesttest output (failures, totals)