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-10-03-facett-lane-to-claude.md

Handover 2026-10-03 — the facett release lane hands over to the "claude" session

nornir:class=design · written by the facett release lane (Claude session working in ~/runs/facett-0929 inside dwarf's claude container) at the owner's order: the two sessions merge into one; the tmux session claude continues alone. No agent of the facett lane is running.

0. Read first

  1. THE LAW: ~/git/workspace_nordisk/nornir-workspace.toml lines 1-90 (read only; never write in the law segment).
  2. This file, then .nornir/handover-2026-09-29-oden-end.md (the running "Not done" list, lanes D-M, Y, C2, step a, p021), .nornir/facett-benchmarks.md, .nornir/pypi-publish.md, .nornir/xtask-thin-door-audit.md.
  3. Plan rows in workspace_nordisk/nornir-workspace.toml under [repos.facett] (2026-09-29 … 10-03), [repos.knut], [repos.korp], [repos.dwarves], row knut-ui-out.

1. Where things stand (verified with git ls-remote / the live sites when written)

what state
facett main 101030e — workspace version 0.2.0, license MIT, LICENSE + NOTICE in root and all 73 crates, ownership line "Copyright (c) 2026 Ignalina ApS (Rickard Ernst Björn Lundin)", PyPI name gate with the ownership-line exemption, PYPI_VERSION 0.2.1
knut main f51b296 — facett-pipeline >=0.1.19, <0.3, facett-pop >=0.1.9, <0.3
dwarves main 3aa037c (lock: dwarves-runa 0.2.4) — then possibly moved by the unexplained push (see §6)
edda main b8d49b8 (lock fix) — MOVED to becde09 by the unexplained push 12:18-12:25 UTC
korp main ecfe7f8 (proto comment without personal name) — MOVED to 89942c5 by the unexplained push
PyPI facett + facett-demo 0.2.0 (2026-10-02, MIT OR Apache-2.0) and 0.2.1 (2026-10-03, MIT; sha256 wheel f4c5602d…, demo wheel a5d665f5…, sdist c9655ed0…, built from 101030e). Release files: dwarf ~/runs/facett-0929/release-0.2.1b/, t14s ~/runs/laneY-publish-021/
Pages (web demo) https://nordisk.codeberg.page/facett/ serves ?v=620444e (pages branch 9c8aaf8, wasm sha256 069f6f97…). Rollback: git push --force origin 3ef70a7d1d6eadbdfd194c3fd9a66e9544b3623a:refs/heads/pages. NOT yet redeployed from 101030e (only license/name/docs changes since — redeploy when convenient: cargo ops deploy-pages from an LFS-smudged main checkout)
Streamlit demo container draupnir-facet-wrapped-demo on dwarf, 127.0.0.1:8501, runs the INSTALLED 0.2.0 wheels bound read-only from ~/runs/facett-0929/laneY/facett/{pkg-facet-wrapped,py}/dist (keep that worktree or rebind). Restart: cargo ops streamlit in that worktree. A reverse ssh tunnel to the t14s localhost:8501 may be up (ssh -f -N -R 127.0.0.1:8501:127.0.0.1:8501 rickard@100.67.148.64). Upgrade it to 0.2.1 when convenient
crates.io facett crates still 0.1.19 (2026-09-02). Publish of 0.2.0 ON HOLD — owner order: dependency bump merged → name scrub/squash → publish (owner's go, asked right before)
egui 0.36 NOT on main. Kept upgrade = lane H2: facett lane-h2/egui-0.36 @ 6179ea7 (+ korp a5481cf, dwarves d42ee7e, nornir a4a9df7, holger 513844e, edda 715d537 on branches egui-0.36). The claude session's extras (facett egui-0.36-extras @ 660d5fd5 GpuVello→Wgpu rename, nornir 200af82, dwarves 17c3b2a, tunnr 7fec871, knut 025c127, ordning a7e9855) were going into deps-integration-2026-10-03

2. What was built in this lane (2026-09-29 … 10-03), all on main unless noted

3. Open items, in the owner's order

  1. Finish the dependency integration (deps-integration-2026-10-03), take facett main 101030e; merge to mains only after the full test pass. Decide with the owner: fix forward vs force-restore the 10 repos moved by the unexplained push (the facett lane recommends fix forward — a force-push is irreversible for anyone who pulled).
  2. egui 0.36: merge H2 + extras together with the dependency integration. Owed before 0.3.0: publish nornir-robotui on egui 0.36 (facett/korp/holger carry a temporary [patch] to edda 715d537); vello has no wgpu-30 release (H2 keeps a wgpu29 alias for vello only; delete when vello ships); 16 heavy GPU test binaries (42 tests) need loki (too hot on the t14s); the demo snapshot golden is stale on main (lane G's size row) — re-bless on loki deliberately.
  3. Name scrub / squash (workspace_nordisk/PLAN-MOVE-SQUASH-RELEASE.md, owner GO 2026-10-02; who/when = owner). Exempt string: "Ignalina ApS (Rickard Ernst Björn Lundin)" on ownership lines only (facett's gate: facett-ops/src/pypi.rs is_ownership_credit).
  4. crates.io facett 0.2.0 (owner's go). Blockers: publish rotaryengine 0.1.13 + znippy-zoomies 0.1.26 (the gatling_map re-export facett-graph3d needs — published 0.1.25/0.1.12 lack it; same-version drift), then raise facett-graph3d's znippy-zoomies floor to 0.1.26. korp must move its 30 facett requirements (Cargo.toml:964-1064, 1207, 1605 + 2 in crates/korp-embed) to 0.2 and edda crates/step-board/Cargo.toml:46,53 (facett-jobview "0.1.17") too. Publish order: 7 waves, computed by lane C2 (in handover-2026-09-29-oden-end.md / C2 report): wave 0 facett-confirm facett-core … wave 5 facett, wave 6 facett-demo. Command (the cascade tool dwarves crate-release cannot build on dwarf): from an LFS-smudged main, on a temp commit with root [patch.crates-io] stripped: cargo publish --workspace --exclude facett-simview --exclude facet-wrapped --exclude facet-wrapped-group --exclude facett-build-thing --exclude facett-ops --exclude xtask. BEFORE any dry-run: rm -rf ~/.cargo/registry/src/-70f1a6198f08684d (stale overlay checked old code). New crates to publish first time: facett-graphgen, facett-dbexplorer. crates.io token: ~/.cargo/credentials.toml on dwarf and t14s (never print).
  5. After the release: knut UI into facett (plan row knut-ui-out: knut-pipelines gui/progress → facett-pipeline; knut-popviz app → facett-pop; korp features follow); input components for 0.3.0 (form, search, markdown, sdp, brokkr, auth-ui, file, deploykey, claude, video, korp via Streamlit two-way setComponentValue; overlays about/confirm/menu/toast/filedialog/zoneui; live sources dbexplorer/git need a data seam).
  6. Smaller: re-measure lineage at 100k on the RTX 5080 (fixed, measured only on the t14s); port py/tests/robot_streamlit.py (python+playwright) to Rust (owner parked it); find_cycles returns a bounded sample (a Johnson-style walk would make it exact); facet_completeness backlog at its 52 limit; yanked chacha20 in Cargo.lock; optional region-connector feature in facett-demo uses a type deleted from korp-collectors.

4. Boxes

box reach use rules
dwarf this container (claude), 12 cores, no GPU, rootless podman 5.7 ALL builds (nice -n 10, -j 4, wait if load > 20; one target dir per tree, delete when done) the gunnar session builds here too
t14s ssh rickard@100.67.148.64 (tailscale) — owner's laptop, Radeon 890M, glibc 2.43 GPU tests + browser probes 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; flock ~/runs/t14s.gpu.lock; one test binary/Chrome at a time; native tests with VK_LOADER_DRIVERS_SELECT=*radeon*; stop at Tctl > 85 °C, wait < 60 °C between heavy runs; never all-pairs layout at 100k; NEVER compile there; the owner's power profile (power-saver vs balanced) halves some fps — note it; ~/.pypirc holds the PyPI token (owner keeps it)
loki ssh rickard@192.168.1.102 (LAN) — RTX 5080; often OFF GPU tests, 5080 rows; the owner approved its use NEVER compile there (runs hot); headless NVIDIA set (as t14s without render-node, check adapter "nvidia blackwell"); DO NOT set VK_LOADER_DRIVERS_SELECT on NVIDIA (falls back to SwiftShader); flock ~/runs/loki.gpu.lock; stop at GPU > 85 °C; don't touch the korp-server unit or the owner's Chrome windows. Visible Chrome on loki's desktop works only via XWayland: DISPLAY=:0 XAUTHORITY=$(ls -t /run/user/1000/xauth_* | head -1) + --ozone-platform=x11 --enable-unsafe-webgpu --enable-features=Vulkan --ignore-gpu-blocklist (native Wayland gives a white window on NVIDIA/KDE)
oden ssh rickard@100.115.167.95 (tailscale; LAN IP is DHCP) — RTX 4090, 32 cores, /home ~58 % after cleanup shared with the gunnar/holger work dwarves-server.service is stopped + disabled (owner order); korp-server unit inactive with a new build installed (rollback in the oden-end handover)

5. Rules learned the hard way (follow them)

6. The unexplained push 12:18:39-12:25:41 UTC (2026-10-03)

The facett lane checked: none of its 22 transcripts (main + 21 subagents) has a command touching ~/d-integrate (only one read-only reflog check at 15:45 UTC); no facett-lane agent ran in that window. A grep of the other Claude projects on dwarf (~, ~/git, transcripts touched after 11:00) found no command with d-integrate + push either. The reflog shows only the shared git identity (Rickard Lundin rickard@ignalina.dk). So it was not a Claude Bash command in any transcript on dwarf — look for a script file, a terminal, or another box. facett main was NOT moved by it (still 101030e). The facett lane recommends fixing forward (no force-push); the owner decides.

RESOLVED (claude session, 2026-10-03): the push was made by the claude session itself, on the owner's explicit instruction "commit and merge and push": main/master + deps-integration-2026-10-03 in 23 repos, then knut main 5a198631 (facett by git rev bd448a7, skade stays a sibling path) and edda main 5330566 (cherry-pick of 20c8814). facett main was deliberately NOT moved (branch only). Owner decision: keep main, fix forward, no force-push. Verification of main runs in ~/d-mainverify; fixes go to fix/post-bump-2026-10-03.

7. Where the evidence lives

Logs: ~/runs/facett-0929/lane*/logs, laneP021/, laneH2/logs, laneL/logs, laneM/logs, release-0.2.1b/build.log, tmp/. Saved WIP: tmp/laneH-egui036-wip.patch (superseded by H2). Worktree kept on purpose: ~/runs/facett-0929/laneY/facett (the Streamlit container binds its dist dirs).