Skip to content

v0.6.0 final — release scope: the short list (blocker set + deferrals) #909

Open

Description

@Amperstrand

Goal

Ship v0.6.0 final as soon as safely possible. Scope = the minimum set that makes rc2 safe and correct to release. Everything else retargets to 0.6.1/0.7.0 — a smaller release is the goal, not a bigger one.

Blockers (fund safety / stop-ship)

PR Why it blocks
#908 gonuts v0.14.0 — NUT-13 residue-collision guard (the wallet-bricking duplicate-output class) + amount==fee local refusal. Script-generated bump, tests green, evidence in-thread.
#899 (+ #894, same #888 family) Fresh install leaves uhttpd.main with no listeners — the captive portal is dead on a clean apk-era install. Stop-ship. #894 carries install-time credentials through the same path.
#871 Durable config writes + offline wallet.db corruption check (#505 audit) — power-loss state/fund safety.
#870 Single-writer invariant at boot and on the CLI socket (#504).
#793 + #873 Swap-recovery pair: recover crashed swaps on wallet load (#497) + boot resume replays journaled swap intents (#719 crash window). Same family — land together.
#782 NDS pre-auth allowlist executes at nft priority −2 — completes merged #769 (pre-auth DNS) so it actually functions.
#874 IPv6 disabled globally until captivity is v6-aware. Largest review item (+2278) — flagging explicitly: either it blocks, or we consciously accept v6 exposure in final. Needs a decision, not a default.

Quick wins riding the release cut (small, release-relevant)

Deferred to 0.6.1+ / 0.7.0 (~45 PRs — not on the critical path)

Features: #549 (wallet recover CLI), #856 (br-mgmt bridge), #859 (hostmode), #860 (ssid leading-bang), #886 (cloud-lab scenario e'), #773 (port-table single source), #795 (upstream portal trigger hardening).
Merchant/ops quality: #777, #865, #869, #875, #887, #895, #715, #778.
Firewall family remainder: #784, #785, #786 (correctness hardening; #782 is the functional piece).
Test/docs/CI lanes: #711, #759, #762, #764, #774, #775, #779, #794, #797, #820, #823, #830, #846, #857, #861, #862, #863, #864, #868, #872, #878, #879, #881, #883, #898, #905.
(None of these are holding the release; several are already staged with review evidence and can merge at leisure, pre- or post-cut.)

Process from here (sequential)

  1. Confirm/amend this list (the fix(packaging): IPv6 disabled globally until captivity is v6-aware (#783 mitigation) #874 decision is the main fork in the road).
  2. Battery campaign against rc2 + the confirmed blocker set (tmux, ai-legion).
  3. Final cut: fold [Unreleased] → [v0.6.0], VERSION, tag, Nostr publish.

Scope drafted from the full open-PR audit on 2026-10-12; classifications from PR titles/bodies and the merged rc2 content. Amendments welcome in comments — this issue is the release scope of record.

Activity

  1. Amperstrand commented on Oct 13, 2026

    @Amperstrand
    CollaboratorAuthor

    Scope refresh (2026-10-13, post-rc4)

    The rc3/rc4 cuts changed the landscape under this scope:

    Release-notes draft #912 has been amended to match rc4 (credential model, decommission plan, upgrade notes).

  2. Amperstrand commented on Oct 13, 2026

    @Amperstrand
    CollaboratorAuthor

    Queue health — conflict sweep (2026-10-13, via #921)

    Open PRs: 65 · conflicting with origin/main: 6

    PR Title Conflicting files
    #899 fix(setup): fresh install left uhttpd.main with no listeners tests/uci-defaults-entry-ui-mapping_test.sh
    #883 fix(merchant): unmeterableReportInterval as per-merchant sea src/merchant/merchant.go
    #864 chore(dev-env): guard the tree against dangling replaces and .github/workflows/test.yml
    #856 fix(packaging): the wired LAN ports get a bridge of their ow .github/workflows/test.yml
    #793 feat(tollwallet): recover crashed swaps on wallet load — wir scripts/token-recovery/go.mod,scripts/token-recovery/go.sum,tests/cloud-lab/Dockerfile.client
    #764 fix(secrets): credentials doctrine — staged-diff gitleaks ga tree.

    Scope-relevant: #793 (swap-recovery blocker) is now CONFLICTING — it was mergeable at the last manual check; rc4's direct pushes broke it. #899 remains conflicting. Both need rebases before their approvals can convert to merges. The test.yml conflicts (#864, #856) are the hotspot disease #920 proposes to fix.

  3. Amperstrand commented on Oct 14, 2026

    @Amperstrand
    CollaboratorAuthor

    Status board — 2026-10-14 unattended audit (release lane)

    Verdicts from local test-merges against origin/main @ 7fec9e3 (current tip, fetched fresh today) — not GitHub's async mergeable field, which is provably stale on #793 (it reports MERGEABLE while the actual tree conflicts). Evidence reviews were posted today where threads lacked them; all cited test runs executed on ai-legion.

    Blockers

    PR Verdict today Notes
    #908 merge-ready / approval-blocked CLEAN vs main (5 behind). Evidence recap (10-12 21:18Z) postdates head 1945fdc (21:12Z) — current.
    #899 merge-ready / approval-blocked ⬆️ Conflict flag STALE — head rebased to 9795777 on 10-13 20:00Z; only 7fec9e3 after. Fresh 13-criteria delta review posted today at head fd77a3a: merged-tree runs 73/0 (install-sequence incl. new scenario 4/4b) + 162/0 (mapping).
    #894 closed / superseded Unchanged from the 10-13 scope refresh.
    #871 merge-ready / approval-blocked CLEAN (36 behind, old base — no conflicts; head unchanged since 10-08). #665 14-merge battery + felix review pass stand.
    #870 needs-work → fix posted: #932 felixfelix-bot CHANGES-REQUESTED at current head cd0a222 (probe-then-remove race). #932 (stacked, one commit) closes it: flock-serialized claim + concurrent-start regression test, mutation-checked red on pre-fix, full src/cli battery green under -race -tags testenv. Squash into #870 or merge after it.
    #793 needs-rebase — owner-declined flag CONFIRMED current Local merge-tree vs today's main conflicts: scripts/token-recovery/go.mod, go.sum, tests/cloud-lab/Dockerfile.client (the rc4-era direct pushes). Rubric review at current head e1f8330 stands; the rebase is the only remaining work once un-declined.
    #873 merge-ready / approval-blocked (pairs with #793) CLEAN (29 behind). Approve now; merge per the land-together rule once #793's disposition is decided.
    #782 merge-ready / approval-blocked CLEAN (10 behind). Base of the firewall stack — safe to merge alone; the #784/#785/#786 layers above are deferred per this issue's scope.
    #874 decision-blocked + approval-blocked CLEAN (10 behind). The IPv6 fork is the only open scope decision. c03rad0r review: land-with-followups (single-source the disable key set + release-notes behavior-change entry).

    Quick wins riding the cut

    PR Verdict today Notes
    #885 merge-ready / approval-blocked Evidence 10-13 at head; clears the repo's last dependabot alerts.
    #891 merge-ready / approval-blocked Trivial fragment renames; batch-2 triage stands.
    #893 merge-ready / approval-blocked ⬆️ Conflict flag STALE — rebased to 9795777 at 10-13 12:44Z, CLEAN today. Pre-review in-thread.
    #892 merge-ready / approval-blocked Fully-automated gate-run evidence at head (10-13 13:44Z) — current.
    #877 merge-ready / approval-blocked First rubric review with evidence posted today: wrapper mechanism verified live on ai-legion (scope cgroup confirmed), CLEAN vs main.

    Net: every blocker except #793 (owner-declined rebase) and #874 (owner decision) is merge-ready pending human write-access approval; the one open code finding in the set is fixed and posted as #932.

    The one recommended morning sequence

    1. Decide fix(packaging): IPv6 disabled globally until captivity is v6-aware (#783 mitigation) #874 (block on IPv6-disable vs accept v6 exposure). Gates only itself — everything below is independent of the answer.
    2. Close the code finding: squash-merge fix(cli): atomic cross-process socket claim — addresses the #870 review finding (flock the probe/remove/bind window) #932 into fix(wallet): enforce the single-writer invariant at boot and on the CLI socket (#504) #870 (or merge fix(wallet): enforce the single-writer invariant at boot and on the CLI socket (#504) #870 → fix(cli): atomic cross-process socket claim — addresses the #870 review finding (flock the probe/remove/bind window) #932).
    3. Approve + merge the merge-ready blockers: deps(wallet): bump gonuts-tollgate v0.14.0 — NUT-13 residue guard + amount==fee refusal (#705, #752) #908 → fix(config,cli): durable config writes + offline wallet.db corruption check (#505 audit) #871 → 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(wallet): enforce the single-writer invariant at boot and on the CLI socket (#504) #870(+fix(cli): atomic cross-process socket claim — addresses the #870 review finding (flock the probe/remove/bind window) #932) → fix(packaging): the NDS pre-auth allowlist executes — emitted at nft priority -2, ahead of the enforce reject (#754) #782 → fix(merchant): boot resume replays journaled swap intents — close the #719 crash window (#497) #873. (deps(wallet): bump gonuts-tollgate v0.14.0 — NUT-13 residue guard + amount==fee refusal (#705, #752) #908 first: the gonuts pin is the wallet foundation the swap-recovery family sits on.)
    4. Quick wins pre-tag at leisure: fix(deps): security sweep — grpc x3 advisories + otel family lockstep (dependabot #89/#90/#91/#88) #885, docs(changelog): rename the four drifted fragments to the numeric convention + PR-link tails #891, changelog: fix #850's fragment form — bullet body and PR-link tail #893, test(installer): contract lane for built packages on a pristine apk-era VM — #888/#890 acceptance, shipped red #892, test(battery): cgroup-bound test legs + ai-legion host-resource doctrine #877.
    5. feat(tollwallet): recover crashed swaps on wallet load — wire ResumePendingSwaps (#497 resume half, #703 item 1) #793 fork: un-decline the rebase (conflicts enumerated above — minutes once authorized; fix(merchant): boot resume replays journaled swap intents — close the #719 crash window (#497) #873 then merges right after), or defer the pair to 0.6.1 and shrink final.
    6. Step 2 of this issue's process: the battery campaign on the merged set, then the cut.

    — posted by the 909 release lane (handoff: /tmp/opencode/handoff-909.md on ai-legion).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions