← back to pin list

Brick 30: the part-list delivery — versioned set, floor packet, placement→part map, customer sheet

kerfmaster pin list · The interface — recorded intent (build later)

recordStates what the code does today. Auditable against the code — this is the only type that can go stale.

Content last changed 2026-09-20 — computed from the item itself, not typed.

Built 2026-09-02 (Aristide 'next natural brick'). run_pldeliver mirrors the ruled delivernest shape on the part-list job kind: POST/GET /api/jobs/<id>/pldeliver (+ per-version file routes) requires the posted sheet programs (refusal in honest words) and writes an IMMUTABLE version dir per delivery on its own append-only chain — per sheet the audited O<num>.nc (warnings riding in the file), the MetaCam-safe DXF of the WHOLE PLACED SHEET (every placement's healed geometry world-transformed by the pack contract, census-checked on the written file — a FAIL on any sheet refuses), tooling doc + slug report; ONE placement→part-number map CSV whose part column names each placement's OWN part (the 2026-08-31 map ruling's real multi-part form — 'placement 001 is BNM78655'); the floor packet with per-sheet program lines, asked-BESIDE-filled per row (excluded qty-0 rows named, filler extras counted) and REAL usage over all sheets on true outlines; the CUSTOMER SHEET under all four brick-16 split rules with the exemption generalized — every row's part name is the customer's own word, marked span-scoped via a two-pass token replace so one name can never rewrite another name's markup; a zip and a numbered board build. Versions immutable forever: re-delivery supersedes as metadata, files never touched (byte-proven). Stale rule: a list edit or re-pack marks the delivered version replanned (drawer says so in honest words even when the pack itself is gone); every sheet keeps its O-number through re-pack→re-post→re-deliver. Warn never block: a flagged pack delivers flagged.

Proven: test_pl_deliver.py 27 NEW server controls (full HTTP e2e on a temp jobs dir + redirected board) + verify_pldeliver.js 14 live checks over the public URL (real Deliver button, served packet/customer/map/zip/board, DXF re-censused on the served bytes, supersede, replanned marker, numbers kept, nav209 untouched); all 19 prior suites green. Honest limits: 'by whom' awaits operator accounts; time estimate PENDING; nest-level click-in-order for part lists is a later brick.

DELIVERY FILES VISIBLE 2026-09-17 (Jordan's CAMP v1 catch -- 'Where is the GCode? Where are the rest of the deliverable files?': the version row linked only board/packet/customer sheet/part map/zip; the per-sheet NC, sheet DXF, tooling doc and slug report lived in the version record and the zip but had no visible door): every delivery version row now renders a per-file download button for each remaining file in the set -- the delivernest treatment, one vocabulary across both delivery surfaces. Client-only app.js, live on refresh; NC serve verified on the live CAMP v1 (O33342.nc, 200, byte-size match).

Extended 2026-09-20 (Jordan's 26342 catch -- 'Why is it rejecting my post? It says to go back to nest and post, but I don't see that option'). The no-programs delivery refusal was a bare RuntimeError, so the dispatcher printed the class name ('RuntimeError: ...') on his screen, and its words still said 'post them on the Nest tab first' -- stale since the tab unification moved posting to the Post tab; he went to the Nest tab and correctly found no post door there. FIX: both pldeliver refusals (missing programs; posted programs not covering the packed sheets) are RequestError in honest words naming the POST tab ('a re-pack or nest update drops the programs, numbers kept; so pack, post, then deliver'); the single-part and nested-sheet deliver doors' same-shape RuntimeErrors joined (no class name ever leaks). CLIENT: a refused Deliver click now PERSISTS as a red banner on the Deliver drawer (doorRefused 'pldeliver' -- the prod-post-loss-incident principle, a refusal that vanishes as a toast is a message never delivered), tail 'nothing was delivered; earlier versions stand (immutable)', with a one-click 'Go to the Post tab and post' when the words point there; cleared by the next clean delivery or a job switch. Proven live on dev (banner + words + one-click landing on the Post tab) + verify_pldeliver 14/14 and verify_refusal 16/16 (the pldeliver suite's fixtures consumed dev O33397-33398, stated).