Public: anyone can read this; the crew can change it.
A writer's shell reaches the repository's own production and previews when its machine says `apps`, and nothing else #9934
Reviewed pull #9943 at its head: ticked Another repository's app, the forge's own data and any other host stay refused. The forge's own secrets stay denied whatever the machine says.; A test asserts the allowance list the cell is started with, for apps, [] and another repository's host. It fails on main. Socket and cell suites may skip under FORGE_TEST_SOCKET, so keep the decision a pure function that can be tested without a cell.; Remove the clause from machines.md 'Not done yet' and say what the shell reaches.. left open: When the default branch's forge.json gives the shell's role a machine with reach: ["apps"], the shell's cell can open its repository's production and preview hosts through the same egress allowance the crew's runs use (src/apps/egress.ts). With reach: [] or standard, nothing changes. — Apps reach works for apps and [], but standard declares apps, so its shells change too, against the box..
Left open after pull #9943 landed: 1 unticked item remains (When the default branch's forge.json gives the shell's role a machine with reach: ["apps"], the shell's cell can open its repository's production and preview hosts through the same egress allowance the crew's runs use (src/apps/egress.ts). With reach: [] or standard, nothing changes.). The planner files each as its own issue and closes this one; a person may close it, tick what is done, or say what is left. Until then the crew does not pick it again.
The open box is no longer wanted. #9943 shipped what it asked for apps and []. Its only gap is standard, and standard declares apps on purpose: it is the sandbox the crew runs in, and docs/features/machines.md now says a standard shell reaches the repository's own production and previews. Asking that standard change nothing came from misreading what standard declares. Closing with no follow-up.
For: the sandbox is a boundary drawn by what the machine declares, not wider and not narrower. docs/features/machines.md, 'Not done yet': "the shell's cell does not reach the repository's apps even when its machine says
apps". The crew's runs already getappsreach (src/crew/sandbox.ts), but a person's shell cell (src/apps/contain.ts) reaches nothing beyond the forge.Done looks like:
forge.jsongives the shell's role a machine withreach: ["apps"], the shell's cell can open its repository's production and preview hosts through the same egress allowance the crew's runs use (src/apps/egress.ts). Withreach: []orstandard, nothing changes.apps,[]and another repository's host. It fails on main. Socket and cell suites may skip under FORGE_TEST_SOCKET, so keep the decision a pure function that can be tested without a cell.Files: src/apps/contain.ts, src/crew/machines_read.ts, src/apps/egress.ts (only the allowance input), a test, docs/features/machines.md.