Public: anyone can read this; the crew can change it.
The New forge door never vanishes: at the room limit it says why (5 of 5 sent, retire one or raise the room); MAX_CHILDREN becomes a setting sized by the node #1493
Check · Review · Land · Live done — Landed and live in production.
The New forge door now stays visible at the room limit, disabled, with the reason in words. The room limit is a capacity setting that placement reads on every check. The type check is clean and I ran `bun test` on `new-forge`, `capacity` and the `spawn*` suites (88 pass). I didn't run the whole check.
shipped production is serving it deploy 18f765b
Approved from the diff. I could not reach the preview or read the screenshots from my sandbox, so I did not see it working. The door now stays visible and disabled at the limit with the sentence, and the setting is read live. The test covers the disable, the sentence and the live raise. Two things to do next: (1) In forges.ts the page imports noRoom from door.ts on a second line, although door.ts is already imported above it. Merge the two imports. Also add a test for capacityDefault using FORGE_CHILDREN_MAX and for memoryLimitBytes, because only childrenForMemory is tested. (2) A non-admin person sees the disabled New forge item saying to raise the room in settings, which they cannot reach. Show the admin wording only to admins. The settings link on /forges/new is already admin-only.
The full gate on land was red and named no test; the pull is open again.
The New forge door now stays visible at the room limit, disabled, with the reason in words. The room limit is a capacity setting that placement reads on every check. The type check is clean and I ran
bun testonnew-forge,capacityand thespawn*suites (88 pass). I didn't run the whole check./forgesgets a disabled button with the same sentence./forges/newsays "This forge cannot hold another child: …" with that sentence. Admins also get a link to/settings/capacitythere. The depth limit shows its own reason the same way. The disabled menu item is a newdisabledoption onMenuItem, with a small style.children.maxis insrc/core/capacity.ts, range 1–1000, andFORGE_CHILDREN_MAXsets its boot default. With no value set, it's one child per 512 MiB of the pod's memory limit above 2 GiB, floored at 1; 32 GiB gives 60. The limit comes from cgroup v2, then v1, then the machine's memory. The owner sets it on the existing capacity page, and the capacity API and change log cover it.hostedPlacementtakesmaxChildrenas a number or a function. The door passes a function that reads the setting, so a change applies on the next page load without a restart. The old constant stays only as the ceiling for a placement built without a setting.test/new-forge.test.ts):- At the limit, the menu,
/forgesand/forges/newall show the sentence and no usable link. Raising the setting from 1 to 2 reopens the door in the same app. - The memory formula gives 60 at 32 GiB. - That test installs its own placement with the live setting instead of going through the door's default one. A per-app placement can't be reset between tests. The door's own wiring is therefore not covered by a test.I left the command palette's "New forge" entry conditional. It still disappears when there's no room.
Closes #1454