Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/facett

.nornir/handover-2026-09-29-oden.md

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

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

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.