Public: anyone can read this; the crew can change it.
Jay Moran's display model is on main: a display.json reads into items and selections, and the arcade shelf compiles and is tested #9338
Check · Review · Land · Live done — Landed and live in production.
Jay Moran's display model is now on this branch: `display.json` reads into a config, builds order into items and selections, and the arcade shelf compiles. `bun x tsc --noEmit` is clean. `test/display-model.test.ts` (5 tests) and `test/hollow.test.ts` (28) pass. I did not run the full suite, so the forge's check is the first full run, and the existing manifest tests were not run separately.
shipped production is serving it deploy fc82d1a
Jay Moran's display model is now on this branch: display.json reads into a config, builds order into items and selections, and the arcade shelf compiles. bun x tsc --noEmit is clean. test/display-model.test.ts (5 tests) and test/hollow.test.ts (28) pass. I did not run the full suite, so the forge's check is the first full run, and the existing manifest tests were not run separately.
The five files came over from origin/incoming/jay-main unchanged. Four things beyond that were missing on main, and I added exactly those:
launchOfis added tosrc/git/builds.ts, copied from his branch.app.pagesandapp.launchare added tosrc/apps/manifest.ts: the parsed fields, validation and error messages. I kept main'slooksAsOwner. His branch had removed it, which would have broken main.src/actions/pin_demos.tsis back with onlydemoFactsAtanddemoDefaults. Main had removed the file in #9314. I did not restore save, showcase or capture.scripts/hollow-allow.tslists those two functions, owned by #9208. Nothing routes to them until the display page lands, so the hollow-work test would otherwise go red. That issue should remove the entries when it wires them.
Nothing imports src/display/launch.ts, src/arcade/host.ts or src/arcade/snapshot.ts, and I did not touch src/http/api.ts.
The test covers three areas:
- Config: a good file reads into a config.
- Refusals: each malformed file is refused with its named error: bad JSON, not an object, bad layout, empty title, an unsafe source, a duplicate build, and an unknown key.
- Model: build ordering,
selectionsHolding, and an empty display giving an empty shelf.
I did not test readDisplay or displayItems against a real repository. His test/display.test.ts does that, but it needs the pages, actions and launch.ts that come later.
The commit carries Co-authored-by: Jay Moran <[email protected]>. That email is a placeholder, so please replace it with his real address if you want the credit to link.
To try it: bun test test/display-model.test.ts.
🤖 Generated with Claude Code
I added a commit to the pull that carries the lines the gate asked for, and pushed it. The code is unchanged. Running bun scripts/gate.ts locally printed nothing, so I take it to pass. I have not seen the forge's check run on the new push.
The commit message has these lines:
- Why now: #9208 waits on this model; its display page cannot read items or selections until they are on main.
- Pipeline: #9208
- Try:
bun test test/display-model.test.ts(no route reads the model yet, so the preview boots unchanged)
The pull's earlier description still applies.
This pull puts Jay Moran's display model on main: a display.json reads into items and selections, and the arcade shelf compiles. Nothing serves the model yet.
The check's every module under src/ is imported by another, or allowed failure was caused by this pull. The six new modules are reached by nothing yet, so I listed them in scripts/unreached-allow.json. They are src/display/{config,items,known,selections}.ts, src/arcade/shelf.ts and the slimmed src/actions/pin_demos.ts. The issue says to land the model without wiring it, so the entries come off that list when the display route lands (#9208, already named in scripts/hollow-allow.ts). test/unreached.test.ts now passes and tsc --noEmit is clean.
I did not change the egress failure, a connection that moves no bytes is cut after the idle timeout. It timed out at 60 s in shard 33, and this pull doesn't touch egress code. test/egress-leak.test.ts passes here, but the sandbox skips the unix-socket tests, so this run doesn't show whether the idle-timeout test is flaky under load or broken. If it fails again on this push, it needs its own look.
To try it: bun test test/display-model.test.ts and bun test test/unreached.test.ts.
Approved. It is a model with no door yet, as issue #9329 asks, so I judged it on the source, the tests and the allowlists. The preview boots unchanged. The new parsers fail closed, and a source like --upload-pack is refused. Every new module is listed in unreached-allow.json and the two orphans in hollow-allow.ts, each naming #9208 as the pull that removes them. I could not check the commit trailers from this clone, so box 4 rests on the builder saying the Co-authored-by line is there. Next: (1) when #9208 lands, remove the allowlist entries in the same pull. (2) Add a readDisplay/displayItems test against a real repository, so the privacy rule that an item the viewer cannot read is opaque (open:false) has a test. Also drop the stray trailing blank line at the end of src/actions/pin_demos.ts.
Jay Moran's display model is now on this branch:
display.jsonreads into a config, builds order into items and selections, and the arcade shelf compiles.bun x tsc --noEmitis clean.test/display-model.test.ts(5 tests) andtest/hollow.test.ts(28) pass. I did not run the full suite, so the forge's check is the first full run, and the existing manifest tests were not run separately.The five files came over from
origin/incoming/jay-mainunchanged. Four things beyond that were missing on main, and I added exactly those:launchOfis added tosrc/git/builds.ts, copied from his branch.app.pagesandapp.launchare added tosrc/apps/manifest.ts: the parsed fields, validation and error messages. I kept main'slooksAsOwner. His branch had removed it, which would have broken main.src/actions/pin_demos.tsis back with onlydemoFactsAtanddemoDefaults. Main had removed the file in #9314. I did not restore save, showcase or capture.scripts/hollow-allow.tslists those two functions, owned by #9208. Nothing routes to them until the display page lands, so the hollow-work test would otherwise go red. That issue should remove the entries when it wires them.Nothing imports
src/display/launch.ts,src/arcade/host.tsorsrc/arcade/snapshot.ts, and I did not touchsrc/http/api.ts.The test covers three areas:
selectionsHolding, and an empty display giving an empty shelf.I did not test
readDisplayordisplayItemsagainst a real repository. Histest/display.test.tsdoes that, but it needs the pages, actions andlaunch.tsthat come later.The commit carries
Co-authored-by: Jay Moran <[email protected]>. That email is a placeholder, so please replace it with his real address if you want the credit to link.To try it:
bun test test/display-model.test.ts.🤖 Generated with Claude Code
Closes #9329