Repository navigation
Merge-campaign tracker (2026-10-16 night): 6 merged, verified queue ready for approving review #965
Copy link
Copy link
Open
Description
Context
Overnight fleet session pushing the queue forward (context: Amperstrand/ops#9 trail). Org Actions still frozen (#790), so all verification below is offline: per-module go build/vet/test + git merge-tree on ai-legion, toolchain go1.24.2 matching go.mod. Raw evidence: ai-legion:/tmp/pr-verify/ (REPORT.md + per-PR logs).
Merged tonight (squash, each with an evidence review)
| PR | What |
|---|---|
| #953 | docs: loopback rate-limit follow-up deferral |
| #963 | fix(ci): pr-conflict-sweep fail-closed on unfetchable heads |
| #910 | fix(upstream): BSSID-aware select/blacklist + layered connectivity probe |
| #898 | ci(router-test): TBMG Trust Pipeline + bench lanes |
| #959 + #960 | feat(wireless): vendor-IE price producer + reachable emitter (stack maintained post-squash; rebase evidence on #960) |
| Amperstrand/ccid-firmware-rs#215 | m5stick-lcd AXP192 register map + I2C-free ticker |
Also: #883, #864, #856 rebased onto current main (were CONFLICTING) — each carries a fresh evidence comment with local test runs.
Ready for approving review now (human click is the only gate)
- fix(wallet): enforce the single-writer invariant at boot and on the CLI socket (#504) #870 single-writer invariant — 3 modules green incl. merchant 304.9s (comment posted)
- chore(dev-env): guard the tree against dangling replaces and cloud-lab runtime state #864 dev-env guards — own contract suite 6/0, rebased, evidence comment
- fix(packaging): the wired LAN ports get a bridge of their own (br-mgmt) — rebased #856 br-mgmt bridge — 57+37 assertions green incl. negative controls, rebased, evidence comment
- fix(merchant): unmeterableReportInterval as per-merchant seam — the last harness-written package global #883 per-merchant seam — rebased; merchant suite evidence landing in its comment tonight
- fix(setup): fresh install left uhttpd.main with no listeners — entry_ui must not wait for the marker its writer has not yet run (#849) #899, fix(packaging): the NDS pre-auth allowlist executes — emitted at nft priority -2, ahead of the enforce reject (#754) #782 — merge-tree CLEAN, 0 Go files, builds OK (shell suites not yet re-run; earlier staged reviews docs(agents): VM-lane bench pitfalls and the merchant flake rule #797/test(merchant): drain owed-grant monitors and the late recorder in the harnesses — their ndsctl execs outlived the test #846 remain valid)
- CI chain ci: self-hosted runner — ai-legion-tbmg registered + adoption probe #881 → ci: frugality wave 1 — concurrency, timeouts, PR-path slimming, weekly scans (~70% PR-minute cut) #879 → ci(test): count-soak lane gates the state-leak family — per-PR -race count soaks + the nightly -timeout its merchant row always needed #905 — all merge-clean vs current main; ci: self-hosted runner — ai-legion-tbmg registered + adoption probe #881 first (runner probe, manual-only, zero risk), then ci: frugality wave 1 — concurrency, timeouts, PR-path slimming, weekly scans (~70% PR-minute cut) #879 (baseline), then ci(test): count-soak lane gates the state-leak family — per-PR -race count soaks + the nightly -timeout its merchant row always needed #905
Blocked on PR-inherent test failures (fixes in flight tonight)
- deps(wallet): bump gonuts-tollgate v0.14.0 — NUT-13 residue guard + amount==fee refusal (#705, #752) #908 (gonuts v0.14.0): the new forged-keyset-id guard correctly rejects 13 existing tollwallet test fixtures whose advertised keyset ids don't match their published keys — fixtures need regeneration (fix lane running).
- fix(config,cli): durable config writes + offline wallet.db corruption check (#505 audit) #871 (wallet.db corruption check): its own new test
TestCheckWalletDB_CorruptMetaPageIsFlaggedViaWorkerfails against its own implementation (fix lane running).
Owner-only items unchanged
- P0 infra: GitHub Actions frozen above the repo — zero runs on all 30 open PRs (org-level switch or billing; not a workflow regression) #790 org Actions unfreeze; rc-final tag decision; felixfelix-bot PR feat(cvm): CVM control plane — manage the TollGate CLI over Nostr #938 (CVM) — review-fix verification in flight.
This issue is the skim sheet: approve the Ready list top-down and the queue drains; the fixes above will re-post when green.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
Amperstrand commentedon Oct 16, 2026
State update (23:5x): the two blocked blockers are fixed with evidence on their PRs —
precheckMetaPagesadded; ×300 runs green on two machines,-race -count=3green.Also merged since the issue was filed: #927 (mptcp seam; fragment added, full module matrix green) and #938 (CVM control plane; blocking hex-vs-npuh identity fix + ADR/body reconciliation folded, rebuilt on main, all modules green — write gate now canonicalizes hex-vs-hex with production-pairing tests).
Ready-for-approval list is now: #870, #864, #856, #883, #908, #871, #927✅merged, #938✅merged, plus #899/#782/CI-chain pending their shell-suite evidence runs tonight.
Amperstrand commentedon Oct 16, 2026
FINAL STATE (01:0x — campaign close-out for tonight's window)
Merged tonight (10): #953 · #963 · #910 · #898 · #959 · #960 · #927 · #938 · #969 (this repo) + Amperstrand/ccid-firmware-rs#215.
Rebased off the conflict list with fresh verification + evidence comments: #883 · #864 · #856 · #793 · #936 (all five carry module-suite runtimes in their threads).
PR-inherent failures found by offline verification and FIXED on their branches: #908 (NUT-02 fixture derivation, @00b7d22) · #871 (deterministic meta-page precheck for the bbolt panic-race, @67906bc).
Evidence-verified, waiting only on approving review (top-down): #870 · #899 · #782 · #887 → #895 (stack order — 887 first) · #865 · #857 · #951 · #878 · #936 · #793 · #908 · #871 · #881 → #879 → #905 (CI chain order) · #877 · docs tier #891 → #893 (rename order per cilocal's note) · #892 · #912 · #916 · #922 · #901 · #934 · #948 · #951-family #968/#964 · #955/#956 (auto-merge armed on 955) · #874 (evidence done, owner v6 decision still open).
Post-merge test issues filed for agents: #966 (BSSID bench), #967 (vendor-IE hardware), #971 (CVM E2E), #972 (mptcp seam vlab).
Known leaves: #970 held as a hidden stack (comment explains the two clean paths); #927-era author items n/a (merged); drafts #917/#923/#944/#945/#957 untouched by design; m6fw slice-4 bench leg still awaiting owner authorization (specimen/image/slot).
Every PR above has its verification evidence in-thread — approval is a skim, not a re-derivation.
Amperstrand commentedon Oct 16, 2026
Deferred-queue triage (pre-#800 open PRs vs
main @ f66cd67)Method, per PR: head fetched → patch-equivalence (
git cherry, no cherry-picked twins anywhere — squash merges erase patch-ids) → semantic content probes on main (file presence, distinctive symbols, doctrine text) → successor scan against the open queue. No patch-ids matched, so every verdict below rests on the content probes, not on commit identity. Nothing has been closed.Totals: 11 superseded-close-candidates · 2 ready-for-evidence · 7 still-unique (19 non-draft + 1 draft = 20 in scope).
docs/reproducible-builds.md(era hits)drain_journal.gohas no liveness/checkstate.gitleaks.toml; the lane exists but references no in-repo configscripts/release-trust-scan.sh+docs/release-trust-model.mdboth absent.pre-commit-config.yamlpresent,.gitignorecarries env-class entries; the gitleaks staged-diff gate is absent (= #759's half)src/cli/operator_settings.go(Go single source, AGENTS.md doctrine)src/merchant/late_receive_outcome_test.goon main, evolved since (#837)check-changelog-duplicates.py,check-toolchain-parity.py,check-ssid-naming.shall on main;clean-container-gate.shabsentMintHealthTracker+ tests on mainsrc/tollwallet/cross_vectors_test.goon mainuci-defaults-ntp-preauth,-dns-preauth); mechanism differs from the PR's −2 chain31-…nftstill carriesbr-lanliterals, and main adopted declaration+D2-fence instead of a rendererresolve_*helpers in99-tollgate-setup+ AGENTS.md doctrineResumePendingSwapson maintests/vm-campaign/tollgate_prober.gostill carries rawTEMPORARY WORKAROUNDblocks the registry would manageStacking note: #782 → #784 → #785 → #786 are stacked branches (shared footprints incl. each other's fragments); their verdicts are per-PR, but closing/rebasing should treat the series as one decision.
Evidence: probes run on the ai-legion seat against
origin/main @ f66cd67; per-PR head SHAs pinned at triage time (/tmp/opencode/m3-heads.txtlocally). Click-close candidates are the owner's call — nothing was closed by this pass.Amperstrand commentedon Oct 16, 2026
Night regression gate —
main @ 8f66b4f(post-campaign, 10 merges)Full offline battery in a clean worktree at
8f66b4f(f66cd67 + #969's ADR doc): per-module gofmt / vet / build /go test -race -count=1 -tags testenv— no fast-fail, every module recorded — plus the four requested shell-suite axes. This is the campaign's regression evidence: the night merges carried offline evidence that did not include a per-module battery on merged main, and the battery is what's red.Go modules — 15 green / 3 RED
-tags testenv)(Module count is 18 now — tonight added
cmd/tollgate-cvm(#938) andmptcp_bonding(#927).)The red — repro + flagged PR
Repro (deterministic):
git worktree add --detach <wt> 8f66b4f && cd <wt>/src/upstream_detector && go build ./...→Same for
src/merchant_typesandsrc/upstream_session_manager.Flagged PR: #938 (CVM control plane,
f66cd67). Its newsrc/config_manager/config_maintainer_npub.go(package config_manager) importsgo-nostr/nip19— which pulls nip19 into the compile set of every module importing config_manager.go-nostr@v0.51.12itself importsbtcutil/bech32without declaring it in its own go.mod (upstream packaging bug), so each importer's go.sum must carry the bech32 sums explicitly. Modules whose graphs includebtcsuite/btcd v0.24.2(parent still ships the bech32 package — config_manager, identity, merchant, cli…) satisfy it silently; the three reds don't, and #938 tidied only config_manager's own sums, not its importers'.Fix shape (one small PR): in the three modules,
go get github.com/btcsuite/btcd/btcutil/bech32@<pinned>(orgo mod tidy) and commit the go.sum lines — then re-run this battery. Per the repo's deps doctrine the change should touch every carrier in one pass (check-deps-sync.pychecks go.mod Require sync; go.sum completeness is currently nobody's beat — worth a follow-up fence so this class can't land silently again).Shell suites — 4/4 green (with name mapping)
uci-defaults-lan-private-wired_test.sh(carries the br-mgmt/br-private admin-scope contract; no suite named "mgmt-bridge" exists)uci-defaults-ntp-preauth_test.sh+uci-defaults-dns-preauth_test.sh(the pre-auth allowlist assertions)Verdict: main is NOT battery-green — 3 modules red, attributed to #938, repro above. Everything else (15 modules incl. the two new ones, the wireless/BSSID/mptcp/CVM feature code, and all mapped shell axes) is green on the merged result.
Amperstrand commentedon Oct 16, 2026
🚨 URGENT for the morning skim — main is not battery-green; fix is one click away.
The night regression battery (cilocal, evidence above) found 3 modules RED on main@8f66b4f —
merchant_types,upstream_detector,upstream_session_managerfail to build (missing bech32 go.sum entries; root cause: #938's nip19 import surface + go-nostr@v0.51.12 not declaring bech32 upstream; #938 tidied only config_manager's sums).Fix: #975 — deterministic repro on the battery comment, post-fix all three modules build+test green, +270/−2 across exactly the six go.mod/go.sum files. First approving review merges it; everything else on this tracker is lower priority than this one.
Amperstrand commentedon Oct 17, 2026
Campaign end-state (02:5x). Two more merges since the last update: #977 (tunnel pinning
wg binddefect — hardware-found, mptcp module green, MERGED) and #973 (E2-R FAIL verdict as architecture-gate artifact — docs+harness only, MERGED). Tollgate total tonight: 11 merges; +3 on ccid (#215 #221 #222).New in the queue with evidence: #978 (mptcp disable-flush + CIDR validation — fixes the #972/#974 findings; 8 unit tests, 71-pass suite, vlab re-verify queued behind the rig).
Priority order for the morning remains: #975 (URGENT — restores battery-green main) → #870 → #899 → #887→#895 → #864 → #856 → #883 → #793 → #908 → #871 → #978 → CI chain #881→#879→#905 → the evidenced rest. m6fw's slice-4 question still stands (needs specimen+image+slot from you).
Amperstrand commentedon Oct 17, 2026
State comment 7 — Session-4 (2026-10-17 ~05:00 CEST, x280 orchestrator)
Merged this session: #979 (multi-WAN ADR amendment D10/D11, docs-only; evidence review + PR-link tail fix on the fragment; non-author approval path).
New, evidence-complete, awaiting approving review (priority order):
-tags e2e, vet clean, 13-test rig matrix listed; module suite green.Verified, stack-blocked: #970 (isStaleSocket pin) — mutation-proofed fail-closed guard, full cli suite green; merges only after #870 lands (cherry-pick onto main =
undefined: isStaleSocket).#980 residue: F3 (11317 p-tag) + F5 (announce PublishMany unchecked) unclaimed — pickable. Full vlab re-run of the #971 matrix against #982 head queued for the rig.
Queue otherwise unchanged from state comment 6.
Amperstrand commentedon Oct 17, 2026
State comment 8 — Session-4 mid-run (2026-10-17 ~06:10 CEST)
Merged this session: #979. Rebased off CONFLICTING (all MERGEABLE now, evidence on each PR): #885 (deps union + tidy), #942 (cvm stanza + #941 assertions union; fence test green), #918 (.gitignore union; syntax-verified).
Verified queue for approving review (priority order):
Stack-blocked: #970 (after #870). #980 residue: F5 only (announce PublishMany unchecked) — unclaimed.
Owner note: #975 → #985 in that order flips the fence green in the same skim.
Amperstrand commentedon Oct 17, 2026
State comment 9 — Session-4 (2026-10-17 ~06:05 CEST)
New verified, awaiting approving review: #986 (#980 F5 — race-green, mutation-checked; completes the #980 fix set: D1→#982, F2→#981, F3→#983, F5→#986) · #988 (#962 route-wipe — packaging tests PASS + live vlab seat evidence) · #987 (#947 suite hygiene — 10/10 strictness checks incl. foreign-holder safety on shared hosts).
Full priority stack for the skim, top to bottom: #975 → #985 (regression fix then fence; fence is red-on-main by design until #975 lands) → #982 (after #981) → #981 → #983 → #978 → #986 → #988 → #987 → #885 → #942 → #918 → #984. Stack-blocked: #970 (after #870). Drafts by design: #954/#957 (post-0.6.0 deferral).
Fleet: legion 17G→70G free (stale-target sweep, now codified as ops tools/cargo-target-sweep.sh; small 15G→25G).
Amperstrand commentedon Oct 17, 2026
Consolidated note — the MAC-in-p wire lane (tollgate#26) is fully verified and queue-ready as a pair.
abaedef, 2 commits)-raceok 281.6s203c1a8, 1 commit)DropsNonPubkeyRecipientFAILS, call-site-only → wire still clean (the choke-point guard alone holds it), both →OmitsPTagFAILS; merchant-raceok 283.4sProperties of the pair: disjoint code paths (session-event constructor vs notice constructor + call sites), no merge-order dependency (each diff leaves the other's lines untouched), and together they close
DIV-2026-10-mac-in-p-tagfrom the protocol repo's corpus — the consumer-conformance runner replays exactly these shapes (corpus/events/session-event-1022.json,notice-21023.json), so post-merge the whole lane re-verifies in one command against any rig.Both are Amperstrand-authored, human-gated per the campaign rules — the approving clicks are the only remaining step.
Amperstrand commentedon Oct 17, 2026
battery on main @ 9e4702e
Fresh full-tree
make go-batteryon current main (9e4702e, post-#979; checkout/root/tollgate-module-basic-go, run from module dirs per #961; ai-legion, offline): 15/18 modules green, red set = exactly #975's three —src/merchant_types,src/upstream_detector,src/upstream_session_manager, all failing with the one known nip19 go.sum class. Notable greens:src/merchant285.5s andsrc/tollwallet34.7s under-race -tags testenv, plus the two newest modules (cmd/tollgate-cvm,mptcp_bonding) green on their first main battery. Full logs:ai-legion:/tmp/opencode/battery-main-9e4702e.log(+-rest.logfor the modules after make's first-fail abort). Expected state change: 18/18 the moment #975 merges — its go.sum fix is the only red source (verified: all three transcripts are byte-identical in class; no other failure mode appears anywhere in either log).Trimmed transcripts, one per red module:
src/merchant_types (aborts the make run — first failure in sort order):
src/upstream_detector:
src/upstream_session_manager:
Green set (15): src, src/cli, src/cmd/tollgate-cli, src/cmd/tollgate-cvm, src/config_manager, src/identity, src/lightning, src/merchant, src/mptcp_bonding, src/sysexec, src/tollgate_protocol, src/tollwallet, src/utils, src/valve, src/wireless_gateway_manager.
Amperstrand commentedon Oct 17, 2026
Close-prep: verified redundant + ready-to-paste close comments
Re-verification pass at current main
9e4702e(fresh fetch; content probes per PR — same method as the original triage, no patch-ids exist for squash merges). All 8 clean close-candidates from the deferred-queue triage still hold. Ready-to-paste close comments follow; nothing closed here — owner executes.PR #711 (two-path build doctrine):
PR #773 (entry_ui port table → the binary):
PR #774 (de-flake suite trio):
PR #777 (event-driven mint-health):
PR #778 (rate-limit test-context bypass):
PR #779 (TIP cross-vectors, Go leg):
PR #782 (NDS pre-auth allowlist executes):
PR #785 (zone refs from router config):
Remote branch sweep — deletable (merged PRs, branches still on origin)
23 branches whose PRs are MERGED and whose heads still exist on
origin(owner executesgit push origin --delete <branch>; excluded: anything headedmain— 2 cross-repo PRs matched that name and are NOT deletable):Method:
gh pr list --state merged --limit 1000∩git ls-remote --heads origin, excluding themainhead name (2 merged cross-repo PRs used it;mainis not deletable). 23 deletable branches listed above; recount at execution time as merges continue.Amperstrand commentedon Oct 17, 2026
Wave battery — the 14-PR owner-gated queue tested against itself
Method: fresh
origin/main(9e4702e) + all 14 open owner-gated heads pinned; pairwisegit merge-treeacross all 91 pairs; cumulative sequential merge in a scratch worktree resolving NOTHING; then the full per-module battery + the-tags e2ecompile check + the four shell-suite axes on the merged tree. This converts the owner's 14 approve-and-merge clicks into a provably-safe sequence.1. Pairwise conflicts: 0 of 91
Every pair merges textually clean — including the predicted hotspots: #983↔#986 (both edit
announce.go'sBuildToolsAnnouncementregion — their edits don't overlap line-wise), #981↔#982 (both touch the cvm test surface; #981'sNewDispatcherarity fix and #982's 4-returnUnwrapRequestcoexist), and #985↔#989 (both in the test-runner/scripts neighborhood).2. Cumulative merge: 14/14 clean in one pass, zero resolutions
Order used (and recommended): 975 → 985 → 981 → 982 → 983 → 986 → 984 → 978 → 987 → 988 → 989 → 991 → 992 → 993 — merged tree
15bd667.Rationale for the ordering:
No alternative order is REQUIRED (zero constraints), but this one keeps every intermediate state green rather than only the endpoint.
3. Battery on the merged tree (15bd667) — 18/18 modules green
gofmt/go vet/go build/go test -race -count=1 -tags testenvper module dir, no fast-fail: all 18 PASS (merchant 333 s the long pole; the three #975 modules green — merchant_types, upstream_detector, upstream_session_manager).-tags e2ecompile check: OK — #981's fix verified with #982's 4-returnUnwrapRequestalso merged (the combination that would have broken had the two PRs' test edits collided semantically; they don't).Shell axes 4/4 PASS: entry-ui-mapping, lan-private-wired (the br-mgmt/admin-scope carrier), ntp-preauth + dns-preauth. (
dangling-replace: still no counterpart on this tree.)4. Verdict
The queue is provably self-compatible: any merge order is textually safe; the recommended order keeps every intermediate state battery-green. The owner can approve-and-merge all 14 in the listed order with no rebase anywhere. Evidence: pairwise matrix + cumulative merge + battery run on the ai-legion seat, this session; scratch worktree cleaned after evidence capture.
Amperstrand commentedon Oct 17, 2026
📋 THE COMPLETE APPROVAL PACKAGE (one comment, everything verified)
Recommended execution order (all no-rebase): #975 → #981 → #982 → #983 → #986 → #985 → #984 → #987 → #988 → #989 → #991 → #992 → #993 → #978 — then the 8 closes, then the branch sweep. A release-prep dry-run (rc-candidate + #919 fold-fence release-check) is being prepared now so the final cut can follow the drain immediately.
Amperstrand commentedon Oct 17, 2026
Release-prep dry-run — the #909 final-cut path (PREP ONLY: no tag, no refs pushed)
Tree: the 14-PR stacked battery tree rebuilt (order 975→985→981→982→983→986→984→978→987→988→989→991→992→993, all clean) plus #919's fold-fence PR merged as a 15th (clean) — the fence is an open PR, not on main, so it was added to exercise its behavior. Scratch worktree, destroyed after evidence capture.
1. The #919 fold fence — behaves exactly as specified
WARN-only at rc; REFUSES at final naming both missing states. Inside
release-check, the leg recordsChangelog fold state: PASS (pre-release: 42 unfolded …).2. Fold preview — what the final v0.6.0 diff would contain
changelog-assemble.py fold --target v0.6.0 --dry-runagainst a scratch## [v0.6.0]heading: 567-line diff, 43 bullets, 28 distinct PR links —(Full diff available on request; not pasted for thread size. rc5 as an intermediate rc keeps fragments unfolded per the fence — the preview above is the FINAL-cut content.)
3. release-check at v0.6.0-rc5 — the final-cut checklist it surfaces
Fast shape (repro/conformance skipped), VERSION=rc5 in the scratch tree: 7 PASS, 3 FAIL, verdict READY: NO — and each FAIL is a named prep item:
CHANGELOG.mdneeds the## [v0.6.0-rc5]section;RELEASE-NOTES.mdtitle must name rc5; new finding:src/mptcp_bonding/go.moddeclares go 1.24.2 while every other module declares 1.26.0 — a real cross-module toolchain drift to fix before the cut.CONTRIBUTING.md,scripts/go-battery.sh,scripts/release-check.sh) — a 3-line docs PR.scripts/bump-gonuts.sh v0.14.0or waive explicitly. Notably the go.sum fence passed 18/18 inside release-check (fix(deps): restore battery-green main — bech32 go.sum entries for #938's nip19 import surface #975's fix + fence: go.sum completeness across the multi-module tree (#976) #985's fence cooperating in the leg they were built for).Invariants (concurrent-duplicate, swap output-reuse, payment/recovery), release matrix, and the 16-module battery leg all PASS on the stacked tree.
4. Fragment-set fences — zero violations
changelog-assemble.py check(42 fragments, no findings) ·check-changelog-duplicates.py(no duplicate entries) ·changelog-fragments_test.sh(18 cases, 0 failed).5. Publish path, offline — planned and gated, nothing sent
ngit-ci-release.sh v0.6.0-rc5 alpha <main-sha> --dry-run: prints the full run shape — release run id, ref prefix, 11 shards / 17 legs from the matrix, "would run shard …" × 11,-- dry run: nothing triggered.ngit-release-announce.sh … --dry-run: the publication gate refuses the incomplete release by name (every shard's missing completion record listed) — the "no partial release can look finished" fence doing its job against a run that never happened.Bottom line
The rc5/final cut needs exactly four author actions, all mechanical: (1) fold + rc5 CHANGELOG section + RELEASE-NOTES title, (2) the mptcp_bonding go-directive alignment, (3) the 16→18 docs-claims PR, (4) the gonuts v0.14.0 bump-or-waive decision. Everything else on the stacked queue-tree is release-check green. No tags created, no refs pushed, scratch destroyed.
Amperstrand commentedon Oct 17, 2026
Fresh post-merge battery — main @ 5e50188 (#996/#997 docs): modules 15/18 green (3 red = the known pre-#975 go.sum class: merchant_types/upstream_detector/upstream_session_manager — unchanged, #975 still open); e2e compile: FAIL (the known #980-F2 class — the e2e_test.go NewDispatcher arity, #981 still open); shell axes 4/4 PASS (entry-ui-mapping, lan-private-wired, ntp-preauth, dns-preauth). No new regressions vs the last battery — the docs merges are clean. Approval package stays current: queue order + prep checklist unchanged; landing #975 + #981 flips both known reds.
Amperstrand commentedon Oct 17, 2026
Prepared post-release PR — #999
post-v0.6.0: exempt loopback from RateLimitMiddleware so the starting refusal wins (#953): #953's deferred fix, READY but held for post-0.6.0 per the operator decision. Content = #954's implementation (felixfelix-bot, fork, draft) verified here (vet + race suite green, real-route-table regression tests incl. the doc's two named scenarios + XFF-spoof controls), rebased onto current main, with one convention repair: #954's direct CHANGELOG.md edit re-expressed aschangelog.d/954-loopback-rate-limit-exempt.fixed.md(#919 fragment discipline). Suggested disposition: supersede #954 with #999 (content identical + fragment-correct + current-base). NOT to be merged until the 0.6.0 line ships.Amperstrand commentedon Oct 17, 2026
Release-prep checklist progress — two of the four mechanical items now have ready PRs: #1000 (module-count claims 16→18 plus a real fence repair: the backticked claim form was invisible to check-docs-facts — mutation-proven) and #1003 (mptcp_bonding go-directive alignment, toolchain-parity green). Remaining on the checklist: the gonuts v0.14.0 bump-or-waive decision (needs the owner), and the release-time fold itself.
Amperstrand commentedon Oct 19, 2026
tg-verify — PR #1011 verification result (tracker row note)
PR #1011 (foreign-mint settlement decision layer) verified 2026-10-19: battery
green (src/merchant 302.6s incl. 5 new decision tests; importers src/ + cli ok;
gofmt clean; toolchain go1.26.8 per manifest), merge-tree clean, one logical
change (2nd commit content-empty CI re-trigger). NOT merged — owner call:
(1) introduces a second, weaker mint-URL canonicalizer in src/merchant instead
of the exported tollwallet.NormalizeMintURL/MintURLMatches (drift class #375/#480;
path lowercasing can conflate distinct mints); (2) commit body misstates
MeltToLightning as mint→mint transport (it is mint→LN-address); (3)
SettlementTargetFor returns AcceptedMints[0] for trusted mints, contradicting
its "settles in place at its own mint" contract when >1 accepted mint.
Full review + fix suggestions posted on the PR. Unrelated note:
scripts/sdk-go-version.sh check currently RED (feed 1.26.9 vs manifest 1.26.8).
Amperstrand commentedon Oct 20, 2026
tg-verify — PR #1011 verification result (tracker row note)
PR #1011 (foreign-mint settlement decision layer) verified 2026-10-19: battery
green (src/merchant 302.6s incl. 5 new decision tests; importers src/ + cli ok;
gofmt clean; toolchain go1.26.8 per manifest), merge-tree clean, one logical
change (2nd commit content-empty CI re-trigger). NOT merged — owner call:
(1) introduces a second, weaker mint-URL canonicalizer in src/merchant instead
of the exported tollwallet.NormalizeMintURL/MintURLMatches (drift class #375/#480;
path lowercasing can conflate distinct mints); (2) commit body misstates
MeltToLightning as mint→mint transport (it is mint→LN-address); (3)
SettlementTargetFor returns AcceptedMints[0] for trusted mints, contradicting
its "settles in place at its own mint" contract when >1 accepted mint.
Full review + fix suggestions posted on the PR. Unrelated note:
scripts/sdk-go-version.sh check currently RED (feed 1.26.9 vs manifest 1.26.8).
Amperstrand commentedon Oct 20, 2026
Tracker update (queue sweeper, 2026-10-21): battery reds 3 → 2 — merchant_types cured on main by #1013 (felixfelix-bot, L1-verified+merged; hunks identical to #975's). #975 remains the URGENT first click for upstream_detector + upstream_session_manager (rebase drops its merchant_types hunks cleanly). Post-#975: battery should read 18/18 — worth one confirm run.
Amperstrand commentedon Oct 20, 2026
Tracker row (queue sweeper): #1014 evidenced — self-coherent at head (all touched modules green incl. its own usm go.sum cure); conflicts with #1009 surfaces (agg-run.sh + operator runbook, both-added); carries 2 payment-path fixes under a docs title (IPv6 gateway-URL bracketing, payer-MAC resolution via neighbor table). Owner disposition: land-whole-after-rebase vs extract-fixes vs keep-as-record.
Amperstrand commentedon Oct 21, 2026
tg-verify — PR #1011 verification result (tracker row note)
PR #1011 (foreign-mint settlement decision layer) verified 2026-10-19: battery
green (src/merchant 302.6s incl. 5 new decision tests; importers src/ + cli ok;
gofmt clean; toolchain go1.26.8 per manifest), merge-tree clean, one logical
change (2nd commit content-empty CI re-trigger). NOT merged — owner call:
(1) introduces a second, weaker mint-URL canonicalizer in src/merchant instead
of the exported tollwallet.NormalizeMintURL/MintURLMatches (drift class #375/#480;
path lowercasing can conflate distinct mints); (2) commit body misstates
MeltToLightning as mint→mint transport (it is mint→LN-address); (3)
SettlementTargetFor returns AcceptedMints[0] for trusted mints, contradicting
its "settles in place at its own mint" contract when >1 accepted mint.
Full review + fix suggestions posted on the PR. Unrelated note:
scripts/sdk-go-version.sh check currently RED (feed 1.26.9 vs manifest 1.26.8).