Handover 2026-09-29 evening — dwarf's claude container → oden
nornir:class=design · written on dwarf at the move to oden. Continues handover-2026-09-29-navgraph-gpu.md (read that first for the owner orders; they all still hold).
Owner orders added today
- Use up to 3 agents (owner, 2026-09-29 afternoon; the morning order was 2).
- Merge to main when tests pass — CPU suite on the build box AND the GPU-only tests on a real GPU. A failure that also fails on main is main debt and does not block; a new one blocks.
- Second wasm bundle: yes. docview, manual and model3d must not grow the default bundle (12.64 MB → 16.44 MB measured). Grouping: yes — groups of facets are declared in the build thing (facett-build-thing code): one wasm row per group, the routing table emitted from the recipe, never a hand list. Groups today:
core(default, byte-identical to main's),docs(docview + manual),model3d. - The t14s (owner's laptop) is a GPU box for tests:
ssh rickard@100.67.148.64, Radeon 890M (RADV STRIX1), glibc 2.43, Chrome. The owner works on its screen: headless Chrome only:--headless=new --enable-unsafe-webgpu --enable-gpu --ignore-gpu-blocklist --disable-software-rasterizer --enable-features=Vulkan --use-angle=vulkan --render-node-override=/dev/dri/renderD128(without--enable-gpu/--use-angle=vulkanheadless gets SwiftShader, which does not count;--use-gl=angleor--ozone-platform=headlesscrash the GPU process). Never compile there. One test binary at a time,--test-threads=1,VK_LOADER_DRIVERS_SELECT=*radeon*(hides llvmpipe), 30 s pause before heavy binaries, stop if Tctl > 95 °C, never all-pairs layout at 100k on it (it caused one amdgpu ring reset at 10:06:53). Clean~/runsand/tmpthere afterwards. - loki slept all day; the RTX 5080 rows are still owed (
stage-int/RUNBOOK.txton dwarf; the runbook text is at the end of.nornir/facett-benchmarks.md).
On main (728c4fe)
| merge | what |
e03f2df |
lanes A + B of the morning handover: navgraph live read-back, osm2d adapter preflight + retry, GPU cloud lanes for graph2d/geomap, 0 undeclared atoms, 45 → 48 registry entries, GridLane parity, graphview flake fixed (gputurn::hold), graphnav GPU layout at any size, 100k benches (t14s numbers in facett-benchmarks.md), knut dependency restored |
daddd0a |
gallery_probe uses browser_bench's headless flags + software-adapter check (one copy) |
537ea35 |
CPU main debt: road_rank motorway tier, map3d houses fixture, one MSAA source, graph3d mds asserts the fallback |
728c4fe |
xtask build is a thin door onto facett-build-thing (.nornir/xtask-thin-door-audit.md) |
Open branches (all pushed; check git ls-remote for the final shas)
| branch | state | next |
lane-b/main-debt-gpu |
3 GPU main-debt fixes: geomap osm_paint_order fixture, map3d item6 cull pad, ortho depth bug in facett-core/src/render/view.rs (plan view drew no ground). CPU suite on check/main-debt-gpu (= main 537ea35 + this) clean: 3562 passed, every failure "no GPU adapter". Plus 67a3dfb grid snapshot tolerance (may be on lane-b/grid-tolerance-unproven). Per-binary GPU results: .nornir/gpu-gate-2026-09-29.md on that branch if the gate got that far. |
Finish the GPU gate on the Radeon at check/main-debt-gpu, then merge together with lane-a/ortho-depth-test |
lane-a/ortho-depth-test |
3b6ab20: CPU test for the ortho fix; proven red on main's view.rs (depth exactly 1.0), green with the fix |
merge with lane B's fix |
lane-a/last-seams (+ maybe lane-a/bundle-groups) |
docview + manual + model3d data seams (1f9a52d, 3bf5044); feature gating for the bundle split in progress (WIP) |
finish grouping (facet-wrapped side: entry → group, per-bundle manifest, loader routing from the recipe table, refusal naming the right bundle); gallery probe headless on the Radeon |
lane-c/bundle-groups |
recipe side of grouping (WIP) | BUNDLE_GROUPS in facett-build-thing, one row per group, routing table emitted, wheel carries all dists |
lane-c/container-road |
law: build in a container, never on the host (WIP) | build_variant_in_container + DraupnirCargoRunner, pinned toolchain digest 2cf9b012… |
check/main-debt-gpu, integration/0929 |
merge-check branches | delete once merged |
Final shas at the move (verified with ls-remote)
| branch | sha | note |
lane-a/last-seams |
59b8767 |
WIP. Core bundle byte-identical to main (sha256 d1806046…). Groups live in a NEW package facet-wrapped-group ([lib] path = facet-wrapped's src/lib.rs, lib name facet_wrapped_group, features group-only, docs, model3d) because ANY [features] table on facet-wrapped — even docs = [] — changes 14 517 bytes of the release wasm. Group dists facet-wrapped-group/dist-docs (9.03 MB wasm) and dist-model3d (7.25 MB), files facet_wrapped_group{.js,_bg.wasm} + manifest.json. src/groups.rs: GROUP_ENTRIES, group_of, THIS_BUNDLE, wrong_bundle. Loader routing NOT done (index.html loads core only). |
lane-c/bundle-groups |
e4d2c1a |
WIP, recipe side: BundleGroup { name, variant, features, no_default_features, dist_dir, wheel_dir }, BUNDLE_GROUPS, routing_json()/write_routing() → pkg-facet-wrapped/src/facet_wrapped_web/assets/bundles.json, rows facet-wrapped-wasm / facet-wrapped-docs-wasm / facet-wrapped-model3d-wasm. edda allows a package one from_wasm producer, so it is None now (edda needs a list). |
lane-c/container-road |
74e5bd9 |
WIP. cargo xtask build = build_variant_in_container + DraupnirCargoRunner, host road removed. Toolchain pin moved 2cf9b012… → 3d5115ba… (the old pin was never built; 3d5115ba… = edda's and holger's pin, SOURCE_DATE_EPOCH 1783900800). facet-wrapped-wasm built in the container in 421 s: manifest identical to host, wasm differs (rustc 1.97.1 in image vs 1.98.1 host; 27 /home/rickard paths in the host wasm, 0 in the container's). wasm stages (bindgen, manifest) still on the host. Full cargo test -p xtask not re-run. dwarf: rootless podman 5.7.0. |
| lane-b/main-debt-gpu | 56ee32f | 14b1c6e + WIP results file .nornir/gpu-gate-2026-09-29.md. GPU gate NOT run: 0 of 82 binaries (the copy to the t14s was stopped at the move). Staged only on dwarf (stage-gpugate/, 15 GB, run.sh with the heat rules) — rebuild on oden rather than copying. | | lane-b/grid-tolerance-unproven | 67a3dfb | assert_golden_within, facett-grid snapshot tolerance 2. Not proven on a GPU; look at the diff image (anti-aliasing only?) before fast-forwarding main-debt-gpu to it. |
Next on oden, in order: (1) the GPU gate at check/main-debt-gpu (+ ortho-depth-test 3b6ab20's facett-core lib): every GPU-only test binary on a real GPU, one at a time; a red that main 537ea35 also has is debt, a new red is bisected; then merge lane-b/main-debt-gpu + lane-a/ortho-depth-test. (2) Grouping: align lane C's rows to lane A's facet-wrapped-group package, loader routing from bundles.json, headless gallery probe on the GPU, merge. (3) Container road: full cargo test -p xtask, rebase over grouping, merge.
⚠ The two grouping halves do not match yet. Lane C's rows assume facet-wrapped declares features docs/model3d and writes facet-wrapped/dist-<g> with facet_wrapped* file names; lane A proved facet-wrapped cannot carry features and built a separate package facet-wrapped-group with facet_wrapped_group* files. The recipe must follow lane A's package (row = -p facet-wrapped-group --features <g>, dist facet-wrapped-group/dist-<g>, lib name facet_wrapped_group). lane-c/bundle-groups and lane-c/container-road both touch facett-build-thing/src/lib.rs, xtask/src/door.rs and the emitted toml: the second to merge needs a rebase.
Still owed, needs the owner
- korp
navgraph-overlay@76b7e4b, dwarvesnavgraph-overlay@0763014: not compiled — they need../tunnrand../gunnar, which codebergnordisk/answers "not found" for. cargo xtask test-demo: needs a holger pip index on :8455; holger needsedda/crates/appliance-grow, which edda main does not have.- xtask still has 11 deps (law: one) — the extra ones serve verbs that build nothing;
panel_wasm, edda'snornir_pages::demo_wasmandpublish-pipstill write their own argv (audit §5).
How it ran on dwarf (for the next box)
Fresh clones side by side under ~/runs/facett-0929/; one worktree + one CARGO_TARGET_DIR per lane; nice -n 10 cargo … -j 4. Worktrees get Git-LFS pointer stubs: fetch with inline -c filter.lfs.* settings (no config written); git status reads clean either way, and facett-docview fails to build on a stub font. Codeberg rejects pushes often ("Internal Server Connection Error" / "pre-receive hook declined"): retry and verify with git ls-remote, never by grepping push output (the rejection line also says main -> main). A shared target dir between worktrees gave byte-identical binaries for different trees once — use one target dir per tree.