nordisk/gunnar
Commits
b1e09a392a86Merge gun-merge-engine/2026-11-01 into master (lane GUN-MERGE-ENGINE): gunnar merges a pull request whose branch fell behind its target101d155066c0GUN-PR-FIELD-2026-11-01 item 3 GREEN: a head already in the target is marked merged outside Gunnarfeeb3ec236c9GUN-PR-FIELD-2026-11-01 item 3 RED: a head already in the target is merged outside Gunnar16be71036761GUN-MERGE-ENGINE GREEN: gunnar merges a branch behind its target with a merge commit592846e5accaGUN-MERGE-ENGINE RED: a pull request behind its target must merge with a merge commit5672ebad0b05Merge holxfp/estate-front-034 into master (lane HOL-DOCFIND): crates/gunnar-front/Cargo.lock follows edda estate-front 0.3.4 (path dependency; edda main 4538cfb). Gate (oden ci4, edda 4538cfb): gunnar-front cargo metadata --locked, lib 75/75 and every gunnar-front test target green, clippy -D warnings --all-targets438154173dccgunnar-front lock follows edda estate-front 0.3.4 (lane HOL-DOCFIND: the front writes x-forwarded-proto/-host and drops a client's forwarded headers; edda main 4538cfb)e5b180e3c8dcMerge hol311korp/identity-024 into master (lane HOL-311-KORP): bench, gunnar-front and installtest follow nornir-identity 0.2.4 (edda sibling path), entry only. Gate (oden ci4, sibling mains: holger 29c8242f, edda 82bbc28, tunnr 2fc7d74): cargo metadata --locked on every lock of gunnar, gunnar-ui, holger-ui, dwarves and holger (29/29)89edfacab19fbench, gunnar-front and installtest locks follow nornir-identity 0.2.4 (edda main 82bbc28, by path): the nornir-identity entry only (lane HOL-311-KORP)ea31b3c1a0a8Merge hol311korp/korp-0211 into master (lane HOL-311-KORP, plan row HOL-CDS-6): the five locks that name korp-installer follow 0.2.11 (tunnr main 2fc7d74, crates.io), the korp-installer entry only. Gate (oden ci4): cargo metadata --locked on all 17 gunnar workspaces with tunnr 2fc7d74 (edda ddec35b; edda main 82bbc28 nornir-identity 0.2.4 is a separate follow for bench, gunnar-front and installtest)4eae75ae7f38Locks follow korp-installer 0.2.11 (tunnr main 2fc7d74, crates.io): root, bench, gunnar-front, gunnar-growbench, installtest; the korp-installer entry only (lane HOL-311-KORP)e025ecf8bbe7Merge gunfetch/znippy-024 into master (lane GUN-PERF-FETCH): locks follow znippy-plugin-git 0.2.4 (client_bases answers from the last committed fold during an index build) and GF-4 is dropped. RED 34aaf98a + 673df0c9 (fixture fixed): a thin fetch that lands in another request's fold went out unvouched on 0.2.3; GREEN 0253fff4 lock follow, 3/3 thin; d2ca1e4e drops the re-emit. Gate (oden ci4): metadata --locked root + perfbench, lock_current 4/4, wire/policy/ssh 522/0, gunnar-server --lib engine-gix 543/0, thin_fetch_stock_git 2/0, clippy --workspace and gunnar-server engine-gix -D warnings, xtask fmt --checkd2ca1e4e5c88GUN-PERF-FETCH: drop the GF-4 re-emit without the voucher (71023a43) and its fake-store test; on znippy-plugin-git 0.2.4 a thin fetch that meets a fold is served thin without it (thin_fetch_stock_git, 673df0c9)10a03b8aeb0aMerge fix/gunfield-pr-check-merge-2026-11-01 into master (lane GUN-FIELD-TEST): PullRequests.CheckMerge runs every check the merge makes and writes nothing, so a console offers Merge only where gunnar would take it (RED 5f65c81b, GREEN cafa9466). Gate (oden ci4, this merged tree): xtask fmt --check, metadata --locked, gunnar-grpc 297/0, gunnar-cli forge_merge + forge_control_cli + forge_service 26/0, gunnar-server --lib 542/0, clippy --workspace --all-targets -D warnings0253fff4615aLocks follow znippy-plugin-git 0.2.4 (znippy 26ede82: client_bases answers from the last committed fold while the indexer holds the gate); only that package moves (lane GUN-PERF-FETCH). GREEN for 673df0c9: a thin fetch during a fold is thin, 3/3673df0c929efGUN-PERF-FETCH RED (fixture fixed): the new commit is in the indexed history, so the same fetch after the fold is thin; during the bulk fold it still goes out unvouched on 0.2.3 (3 objects, not 4)34aaf98aef9aGUN-PERF-FETCH RED: a thin fetch that lands while another request folds a pushed pack goes out unvouched on znippy-plugin-git 0.2.3 (GF-4 re-emit: 3 objects indexed, not thin)030945c8c8b1fmt: cargo xtask fmt --write on the CheckMerge branchcafa94665fb7GREEN GUN-FIELD-TEST: PullRequests.CheckMerge runs the merge's checks and writes nothing5f65c81b7ab5RED GUN-FIELD-TEST: a merge can be checked ahead, with the merge's own answer and no write5062f5540b1eMerge fix/gunfield-clients-2026-10-31 into master (lane GUN-FIELD-TEST): four field-test bugs from real clients, each RED then GREEN: an LFS batch over a TLS listener answers https at the request host also over h2 (53fcfdc5 -> 0a50fb65); policy gates lists the gates the push path runs (fc9f8c16 -> 6fd4afc5); mirror add --create reads its registration back before the first sync (c0eca84b -> fe41c034); a person push into a pull mirror is refused by name (80950bb2 -> d01437cf). Gate (oden ci4, on this merged tree): xtask fmt --check, metadata --locked, gunnar-cli policy_mirror + control_cli 25/0, gunnar-wire/http/ssh 458/0, clippy --workspace --all-targets -D warnings; on the tree before 0fd5035e also gunnar-grpc/http/ssh 572/0 and gunnar-server --lib 542/00fd5035e263fMerge gunfetch/2026-10-31 into master (lane GUN-PERF-FETCH): a one-commit fetch of git.git in well under a second on both engines. GF-1 the thin-pack voucher is the edge commits' trees, not the negotiated commits (RED 44486fbb, GREEN 2b38caf9; stock-git e2e on both engines). GF-2 the gix arm's served handle declines select with haves and no bitmap (efafbe77, 46974c37). GF-3 the store's client_has is kept as a count (592d2ea1, 69821d45). GF-4 an engine that meets the index while vouching re-emits without the voucher (09bcfef0, 71023a43). Bench (perfbench fetch, oden, znippy-plugin-git 0.2.3) fetch_inc history p50: gix 47.8 s -> 0.15 s (ssh), 48.7 s -> 0.12 s (http). Harness on the merged tree: gix 0.15-0.29 s (60 ms CPU), znippy 0.11-0.14 s (10-30 ms CPU, was 80-90 ms). Gate (oden ci4): metadata --locked root + perfbench, wire/policy/ssh 523/0, gunnar-server --lib engine-gix 543/0, thin_fetch_stock_git 1/0, clippy --workspace and gunnar-server engine-gix -D warnings, xtask fmt --check538282e3e4ccMerge origin/master into gunfetch/2026-10-31 (GP-7 back)9a1296389799Merge gunfetch/gp7-back into master (lane GUN-PERF-FETCH, GP-7 back by coordinator decision): a blob-tip want is answered from the index again on znippy-plugin-git 0.2.3. git.git full clone 28.0 s -> 11.5 s, peak 1.15 -> 1.23 GiB (gitidx window, oden ~/tgt/gitidx/res/w-after{,-gp7}.jsonl). Gate (oden ci4): metadata --locked, gunnar-wire 178/0 incl. blob_tag_clone, clippy -D warnings, xtask fmt --check; gunnar-server --lib 541/1, the one red a_stalled_poll_hands_back_for_a_redial_at_once is a timing flake under the full suite (3/3 green alone, red on master without this change)f848af40a9e8Merge readmebench/window-2026-11-01 into master (lane README-BENCH): README rows from lane gitidx's quiet window (znippy-plugin-git 0.2.3 + GP-7) and the server's index build on git.git976cf29b7713README-BENCH GREEN 3: the README leads with znippy-plugin-git 0.2.3 + GP-7 on git.git, and the server's index build5f28713ed13aGP-7 back: revert 18c10860, so a blob-tip want (git.git junio-gpg-pub) is answered from the index again (znippy-plugin-git 0.2.3)47ea5b8e3799fmt: cargo xtask fmt --write on the GUN-FIELD-TEST clients branchd01437cf3acbGREEN GUN-FIELD-TEST: a person's push into a pull mirror is refused, by namedfed169a1663README-BENCH RED 3: gunnar-perfbench's JSON lines import into the schema; the server's index build is a cost row6683dad26cb1Merge origin/master into gunfetch/2026-10-312e2c35e5dff4Merge origin/master into gunfetch/2026-10-316a39c48b88a6GUN-PERF-FETCH: the served-a-packfile line reports what the client holds beside what was vouched; clippy -D warnings cleanc6c50dd6d810Merge readmebench/2026-10-31 into master (lane README-BENCH): the README's measured table is rendered from bencher runs on git.git5c71b25356e4README-BENCH GREEN: the README's measured table is rendered from bencher runs on git.git80950bb23473RED GUN-FIELD-TEST: a person's push into a pull mirror is accepted and the next sync erases itfe41c034359cGREEN GUN-FIELD-TEST: Mirror.Status takes the namespace's grant for a repository still to be createdc0eca84be156RED GUN-FIELD-TEST: a mirror add --create is refused its own read-back before the first sync8cd391bfe10aMerge fix/gunfield-ciq-2026-10-31 into master (lane GUN-FIELD-TEST, fork CIQ): the ci --quick reds GUN-SEO-GUEST saw, sorted. Flakes under load made load-proof: grpc_bind_patience (RED 341254c4, GREEN 25a43151), stock_clients delayed ACK counted by its own size (3695690a: fix out 8/8 red, fix in 12/12 green at load 60-80), restore_after_snapshot drains the index queue first (011c0d07, as twin/tests.rs). gunnar-front joins the quick set as its last row (RED 7fad00da, GREEN d6a2cadc). enterprise is a real bug in nornir-identity 0.2.3 (edda fix, not published); one-clone, lock_current and vendor_patch red only where the declared siblings are not checked out19ccfada4d95fmt: cargo xtask fmt --write (GUN-FIELD-TEST)3695690aa4a0a_stock_openssh_exec_pays_no_delayed_ack_in_the_handshake counts the stall by its own size (GUN-FIELD-TEST): 30 single round trips, a stall 33 to 60 ms over the run's fastest (the delayed-ACK timer is 40 ms; a scheduling delay is any size), the line a quarter. Best-of-three hid the stall too often: with the fix taken out it caught 5 of 8 runs. Now, oden at load 60 to 80: fix out 8 of 8 red (12 to 24 of 30 stalled), fix in 12 of 12 green6fd4afc5b798GREEN GUN-FIELD-TEST: policy gates lists the gates the push path runsd6a2cadcfe68GREEN quick_runs_the_quick_rows_and_one_graph_into_one_target (GUN-FIELD-TEST): the quick set's last row, front, runs gunnar-front's tests at its defaults by manifest path (xtask::ci_quick::FRONT), into the same target with the quick environment; front-features stays in the full set. ci_quick 1/1, front_tests_run_in_ci 2/2fc9f8c162e28RED GUN-FIELD-TEST: policy gates says a fresh repository rejects nothing while ai-trailers refuses0a50fb656ee8GREEN GUN-FIELD-TEST: an LFS batch over TLS answers https at the request's host, also over h27fad00da9428RED quick_runs_the_quick_rows_and_one_graph_into_one_target (GUN-FIELD-TEST): the quick set runs gunnar-front's tests (a detached workspace no --workspace line builds; only the full set's front rows ran it)53fcfdc56d50RED GUN-FIELD-TEST: an LFS batch over a TLS listener points the client at http://localhost011c0d074a67restore_after_snapshot waits for the index the way twin/tests.rs does (GUN-FIELD-TEST): index_now empties the drain queue before the progress rows are read. A queued pack reads as finished, and under load (oden, ci --quick at load 130) the second snapshot met "index in progress for this repository: pack 1 100% (1/1 objects, done) — reachability needs the whole graph"d26b919e57a1a_stock_openssh_exec_pays_no_delayed_ack_in_the_handshake read against the box's own speed (GUN-FIELD-TEST): each round trip the fastest of three connections, a stall 30 ms over the run's fastest round trip, 20 round trips, under a quarter stalled. The fixed 35 ms line was red under load with the fix in (oden, load 80 to 136: 4 and 7 of 15 single trips over 35 ms, fastest 17 to 26 ms; 1 of 8 runs red at load 80)25a43151b429GREEN an_address_that_never_comes_gives_up_after_the_patience (GUN-FIELD-TEST): the test holds what is true on any box (the wait is named in the error, every retry is one more attempt, no attempt after the patience is spent), not how many retries the scheduler fits in 30 ms. The retry count itself stays pinned by an_address_that_arrives_later_is_bound_and_the_retries_are_counted