Branch prune — 2026-09-20
Twenty-five origin branches older than today were examined against origin/main (bd1c357, which contains e8a7060). Sixteen were provably contained and were deleted. Nine remain, each because it holds something main does not have — or because the owner ordered it kept.
Method, and the trap in it
The proof of containment is git cherry -v origin/main origin/<branch>: a - prefix means main already carries an equivalent patch, a + means it does not. For every + the question was then asked per file — git diff --numstat origin/main origin/<branch> -- <files the + touches> — and a branch was deleted only when main was ahead on every one of them and carried the same idea.
Two traps were hit and are recorded here so the next pass does not re-learn them:
git cherryskips merge commits. Thesalvage-stash-*andrescue/holger-cargo-locktips are stash WIP commits (two parents), so their actual stashed content is invisible tocherry. It was read separately withgit diff <tip>^1 <tip>— in all three cases:Cargo.lockonly.- "main lacks this file" is not the same as "this work is lost." Nearly every old branch shows
server/ui/**andholger-demo/**as files main lacks. Main removed them on purpose —7cb6a49 server/ui leaves for holger-eguiand71e9330 Drop holger-demo— so those trees are still in main's history and are recoverable from it. They were not counted as unique content unless the branch's own commits changed them.
holger-egui is not cloned on oden, so no branch was deleted on the strength of "its egui half surely lives there". The branches whose only unique content is an egui snapshot main never committed are kept.
Nothing under .nornir/ is include_str!'d anywhere in the workspace (all fifteen include_str!/include_bytes! sites listed and checked), so this file cannot affect a build.
Deleted — provably contained (16)
| branch | cherry | evidence |
ny_dok |
−0 +3 (+1 merge) | the three commits move every .md into source_md/ as pure renames (0-line diffs) of July originals that are in main's history; main is 23 534 lines ahead on the doc tree (4 279 in / 23 534 out). |
salvage-stash-0-2026-07-13 |
−0 +1 | stash WIP = Cargo.lock only, 141/141. Parent a7a5500 is an ancestor of main, so the whole tree is in main's history. |
salvage-stash-1-2026-07-13 |
−0 +1 | identical shape; parent 07a9d1a is an ancestor of main. |
rescue/holger-cargo-lock |
−0 +1 | stash WIP = Cargo.lock only, 4/4. Parent b234349 is an ancestor of main. |
feat/facett-scene |
−0 +2 | the scene layer landed: .nornir/scene-design.md is still in main, and main's last server/ui state (0b06503, just before the egui move) is ahead by 1 107 lines on app/scene.rs, 943 on tests/robot_scene.rs, 1 664 on app.rs. |
feat/facet-error-reactions |
−0 +1 | mannequin/src/facet_react.rs and tests/facet_reaction_matrix.rs are byte-identical in main (absent from the diff). Only Cargo.toml/lib.rs differ, and main is ahead 42 out / 7 in. |
fix/robotui-trigger-specification |
−0 +1 | one Cargo.toml comment. Main carries the same correction, one step further on (lines 145-150: "0.3.0 is published — the egui-0.35, glow-free release, carrying wire/cmd_json"). The branch's Cargo.toml is an old workspace list that still re-adds server/ui and omits the whole plugin/ lane. |
feature/holger-secure-update-gateway-mvp |
−6 +2 | both + are docs/meta, and main is ahead on every file they touch (README.md 16/37, .nornir/README.md 9/39, docs/ai-context-full.md 4 172/6 803, server/cli/Cargo.toml 21/196, traits/Cargo.toml 2/12). The authorship change it carries is already in main: LICENSE reads "Rickard Ernst Björn Lundin & Henrik Torp" and the string "Wilhelm" appears nowhere in main. |
build-thing-code-recipe |
−0 +0 | ancestor of origin/main. |
cleanup/one-build-thing |
−0 +0 | ancestor of origin/main. |
egui/out |
−0 +0 | ancestor of origin/main — fully merged, so the holger-egui question does not arise for it: deleting it loses nothing whatever lives on gunnar.rs. |
holger-passkey |
−0 +0 | ancestor of origin/main. |
holger-rs |
−0 +0 | ancestor of origin/main. |
merge/passkey |
−0 +0 | ancestor of origin/main. |
feat/holger-appliance-iso |
−0 +0 | ancestor of origin/main. |
feat/front-feature-and-ui-bff |
−0 +3 | the front feature landed — main's server/lib/Cargo.toml declares front in default and gates holger-front. Main is ahead on all ten files the three commits touch: 203 lines in against 1 628 out (exposed/http.rs 60/635, server/lib/Cargo.toml 13/239, xtask/src/main.rs 56/266, …). Its three commits also survive intact on deploy/front-page, which is kept. |
Local refs deleted with them: feat/facet-error-reactions, fix/robotui-trigger-specification.
Kept (9)
| branch | cherry | what it holds that main does not |
pages |
−0 +1 | a publishing target, not work to merge: five files (index.html, holger-demo.js, holger-demo_bg.wasm 4.2 MB, .domains, .nojekyll) and nothing else. Main has none of them; deleting it takes the live web demo down. |
feat/facet-react-consumer-wiring |
−0 +1 | genuinely unmerged: mannequin/src/facet_react.rs +20/−0, mannequin/src/gui.rs +51/−15, tests/facet_reaction_matrix.rs +78/−0. Main has facet_react.rs but its gui.rs never references it — the declaration landed, the consumer wiring did not. |
park/matrix-naming-2026-08-02 |
−1 +1 | .nornir/build-variants.toml holds 633 lines main lacks (main is ahead on the other files: suite_build_shape.rs 95/171, xtask/src/main.rs 247/698). Written in the pre-2026-08-26 vocabulary ("every atom names its delivery"), so it is a parked design, not current — but main is not ahead on it, so it is not contained. |
rescue/holger-uncommitted-2026-08-04 |
−0 +2 | the only copy of a 13 000-line snapshot of work that was never committed on 2026-08-04, across ~170 files, including server/ui/** and holger-demo/** versions that main never received. holger-egui is not on oden, so the egui half cannot be cross-checked. |
fix/installer-iso-payload-freshness |
−0 +1 | main has neither file: xtask/src/payload_provenance.rs (245 lines) and xtask/tests/installer_iso_payload_freshness.rs (232 lines). The refusal of a payload whose binary moved underneath it does not exist in main. |
holger-installer |
−1 +2 | main is ahead on five of six files, but not on xtask/src/installer_iso.rs (+59/−16). What main lacks is a donorless() test fixture and the_declared_row_names_its_kernel_donor(). This is the vacuous-guard shape: main's kernel-rule tests all build on row(), which now declares a donor, so they can bail on the donor check before reaching the rule they name. |
deploy/front-page |
−0 +6 (+1 merge) | holger-front/assets/arrow.svg and holger-front/assets/ferris.svg exist on no other ref — checked against main, fix/front-marks, lane-f/front-publish, lane/deploy-today. It also carries the credit block, the re-sampled background and the mvp-server-musl-front variant. |
feat/metering-doors |
−0 +0 | kept by order. See below — it is an ancestor of main. |
monetize-doors |
−0 +1 | kept by order. See below. |
?3 — "which metering branch is the base?"
HOLGER-PLAN.md asks which of the two ~2 300-line metering branches is the base, worrying that they drift further apart. The factual half is now settled:
feat/metering-doors is the base, and it is not a branch any more — it is main. Its tip f6ff7ec ("The two doors monetize has been waiting for: usage, and a signed entitlement") is an ancestor of origin/main; git cherry reports −0 +0. What landed with it: proto/holger-metered.proto, server/lib/src/metered.rs, metering.rs, meter_services.rs, promote/meter_gate.rs, generated/holger.metered.v1.rs, the plugin/{abi,host} meter lane, and the tests metering_doors.rs and the_meter_is_what_answers.rs.
monetize-doors is the rival, and it is the one that is behind. One commit (f0ce959, 2 355 lines) that main never took, proposing the same two doors under different names:
monetize-doors |
origin/main (via feat/metering-doors + R13) |
|
| entitlement file | proto/holger-entitlement.proto |
folded into proto/holger-metered.proto |
| entitlement rpcs | Set, Get |
Get, Set, List |
| usage rpc | UsageService.Read |
UsageService.ReadUsage (in holger.proto) |
| impl | server/lib/src/entitlement.rs, usage.rs |
metered.rs, metering.rs, meter_services.rs |
So the two do not need reconciling in both directions. Main's shape is a superset of what monetize-doors proposes — it has the third rpc (List) and the WASM meter lane the branch has no equivalent of. The drift is one-sided: monetize-doors is a superseded spelling of doors that already exist. The remaining question for the owner is only whether anything in its open_build_speaks_no_money.rs (239 lines) is worth lifting across before it goes; both branches were left in place pending that ruling.
What remains
After this pass the pre-today branches on origin are exactly the nine above. Everything else on origin is from 2026-09-20 (the lane/*, stinky/*, lane-f/*, fix/front-marks work) and was out of scope.