You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Single source of truth for the v1.0 release plan. This issue sequences the milestone v1.0 work into ordered waves so humans and agents can see what to do next and why, not just what's left. The milestone says what ships in 1.0; this issue says in what order and what blocks what.
How to use this
Pick up the lowest-numbered wave with unfinished work. Within a wave, follow the listed order (it encodes intra-wave dependencies).
Every issue carries a wave-N-* label, so you can query directly, e.g. is:open is:issue milestone:v1.0 label:wave-6-release.
Check the box here when an issue closes (GitHub keeps the cross-references live).
Status (updated 2026-06-11): v1.0 is 55 closed / 3 open — just the release-engineering finish line (#44, #80) plus this roadmap. Waves 1, 2, 3 and 5 are DONE; Wave 4 was slipped to v1.1. The security/privacy long pole (Wave 2) closed out: every clearnet leak fix landed (#161/#162/#163/#122/#153/#164), the stratum access-password #152 + dev-fee transparency #173 shipped (PR #207), dashboard auth #8 shipped (PR #217), and #57 (argv RPC creds) was closed wontfix with the rationale recorded in docs/privacy.md (PR #219). The whole Wave 3 dashboard cluster shipped (the #156→#159 metrics/layout chain, worker-table accuracy #169/#182, chart/badge polish #168/#184/#175, and correctness bugs #141/#136). Wave 5 test hardening is done (#124 CI image builds + hadolint; #140 backup/restore + caddyfile + host-helper tests, PR #220). The privacy-default flips (#165/#166), the #160 epic, and the #91/#183 hardening/convenience items, plus the Wave-4 alerting pair (#121/#79), were deferred to v1.1 (the privacy flips need live-mining benchmarking; the alerting pair is net-new and not launch-blocking).
What's actually left for v1.0: just the Wave 6 finish line — the release pipeline #44, then the launch assets #80 (both unblocked: #54 ✔ + VERSION ✔, and the dashboard UI is final). The Wave-4 alerting pair (#121/#79) was slipped to v1.1. That's it — two release-engineering items.
The long pole is cleared. Wave 2 (security & privacy) is closed for v1.0; the only privacy work left (the Tor-by-default flips) is consciously a benchmarked v1.1 change, not a launch blocker.
Credibility-critical for a private-Monero product. The leak fixes, the auth, and the access-control knobs all shipped; the privacy-default flips were consciously deferred to v1.1.
Wave 4 — Operator alerting wave-4-alerting ➡️ SLIPPED to v1.1
Feature track, deferred to v1.1 (2026-06-11). Net-new, default-off, not launch-blocking, and v1.1 already owns the richer Telegram bot (#45) and outage flagging (#99). Both have draft PRs but they're stale (opened 2026-06-04, predating the #124 CI expansion + the Wave-3 dashboard refactor) and need a rebase + full re-validation + un-draft before review — kept open as the v1.1 starting point.
How to use this
wave-N-*label, so you can query directly, e.g.is:open is:issue milestone:v1.0 label:wave-6-release.Status (updated 2026-06-11): v1.0 is 55 closed / 3 open — just the release-engineering finish line (#44, #80) plus this roadmap. Waves 1, 2, 3 and 5 are DONE; Wave 4 was slipped to v1.1. The security/privacy long pole (Wave 2) closed out: every clearnet leak fix landed (#161/#162/#163/#122/#153/#164), the stratum access-password #152 + dev-fee transparency #173 shipped (PR #207), dashboard auth #8 shipped (PR #217), and #57 (argv RPC creds) was closed wontfix with the rationale recorded in
docs/privacy.md(PR #219). The whole Wave 3 dashboard cluster shipped (the #156→#159 metrics/layout chain, worker-table accuracy #169/#182, chart/badge polish #168/#184/#175, and correctness bugs #141/#136). Wave 5 test hardening is done (#124 CI image builds + hadolint; #140 backup/restore + caddyfile + host-helper tests, PR #220). The privacy-default flips (#165/#166), the #160 epic, and the #91/#183 hardening/convenience items, plus the Wave-4 alerting pair (#121/#79), were deferred to v1.1 (the privacy flips need live-mining benchmarking; the alerting pair is net-new and not launch-blocking).Critical path (what gates "can we ship?")
VERSIONexists, so the pipeline is clear; the dashboard UI is final, so the launch screenshots can be captured.Parallel tracks
Both the backend/security track and the dashboard track have converged. All that remains is Wave 6 (#44 then #80), runnable now.
Wave 1 — Correctness, data-safety & setup
wave-1-correctness✅ DONESilent-failure bugs that burn early adopters, plus first-run/setup reliability.
Apply / upgrade / persistence path:
docker compose upleaves old containers running and re-apply is a silent no-op$PWDpaths)upgraderebuilds images but doesn't re-render.env/ Caddyfile / Tari config → stale generated configFirst-run / setup path:
setupcrashes during the disk-space check when the data directories don't exist yetoptimize_kernelwrites an invalid THP param → THP-disable silently never takes effectmining_netsubnet/base configurable (configurable subnet base, preserving the SSRF: miner-controlled worker name/IP becomes an outbound request host from the host-networked dashboard #122 SSRF CIDR guard + fixed bridge addressing)Wave 2 — Security & privacy
wave-2-security✅ DONE (for v1.0)Credibility-critical for a private-Monero product. The leak fixes, the auth, and the access-control knobs all shipped; the privacy-default flips were consciously deferred to v1.1.
Tier A — clearnet leaks & fail-closed:
XVB_ENABLEDTier B — hardening & limits:
--rpc-login) → closed wontfix (local-only, unfixable without removing RPC auth / an upstream change; rationale recorded indocs/privacy.md, PR docs: record the p2pool argv RPC-credential limitation (#57, wontfix) #219)assert_safe_dir) — moved to v1.1Tier C — privacy-first defaults (epic #160): the v1.0 leak-fixes (Tier A) are done; the default-flips need live-mining benchmarking and were deferred:
--socks5),p2pool.clearnetopt-out — moved to v1.1 (benchmark orphan/uncle-rate first)--donate-level 0,xvb.toropt-out — moved to v1.1 (benchmark reject-rate first)Tier D — dashboard auth & safe exposure:
Transparency:
donate-level(default0; PR Expose two xmrig-proxy config knobs: stratum access-password (#152) + dev-fee donate-level (#173) #207)Docs: [x] #164 —
docs/privacy.mdegress reference · [x] #113 — public-IP warning.Wave 3 — Dashboard
wave-3-dashboard✅ DONEThe thing people screenshot. The whole cluster shipped (PRs #210–#216, #218).
A. Core metrics & layout chain:
min(1h, 24h)credited avg, not 24h-onlyB. Worker-table accuracy:
DOWNfor offline workers + real in-dashboard uptimeC. Chart & badge polish:
D. Correctness bugs:
_parse_proxy_summaryno longer wipes last-good share-health totals on a malformed payloadWave 4 — Operator alerting
wave-4-alerting➡️ SLIPPED to v1.1Feature track, deferred to v1.1 (2026-06-11). Net-new, default-off, not launch-blocking, and v1.1 already owns the richer Telegram bot (#45) and outage flagging (#99). Both have draft PRs but they're stale (opened 2026-06-04, predating the #124 CI expansion + the Wave-3 dashboard refactor) and need a rebase + full re-validation + un-draft before review — kept open as the v1.1 starting point.
Wave 5 — CI & test hardening
wave-5-ci-tests✅ DONEbuild/*images + shellchecks build scripts + adds hadolintWave 6 — Release gate & launch
wave-6-release⬅ THE FINISH LINEStrictly ordered. The gate (#54) is cleared; both remaining items are unblocked.
VERSION✔)Cross-issue dependencies (still live)
VERSION✔last_activestateDeferred to v1.1 (the release valve — all actioned)
Explicitly NOT in v1.0
known_workersremoval Remove dead known_workers persistence layer (orphaned by the proxy-sourced worker rewrite) #144, the deferred Wave-2 privacy flips ([Epic] Privacy: no clearnet egress outside Tor — close leaks + privacy-first defaults #160/p2pool: route outbound sidechain P2P through Tor by default (--socks5), documented clearnet opt-out #165/XvB donation: route mining upstream through Tor by default + pin --donate-level 0 (xvb.tor opt-out) #166/Feature: optional clearnet initial sync (Monero + Tari) then switch to Tor — default off, privacy-first #183/Security follow-ups: dashboard host-networking, Tari gRPC allow-list, assert_safe_dir #91), and the dashboard features returned as too large for launch: Component Health panel Dashboard: Component Health panel with per-component + outbound-connection security status (Tor vs clearnet) #170, custom-token support Dashboard: config to read workers that use a custom XMRig API token #171, configurable worker ports Configurable worker ports & endpoints: non-standard stratum/API ports + per-worker host/port/token overrides (later) #172, Worker Inspect page Dashboard: Worker Inspect page — read/edit each miner's XMRig config over its API, with versioned config history + per-config hashrate stats #185. Post-launch test follow-ups e2e: deploy a NON-default network.subnet in the live matrix (#180) #201/e2e: fault-inject a dashboard DB write failure and assert db_healthy=false (#131) #202/e2e: assert an empty PROXY_AUTH_TOKEN makes the stack refuse to start (#153) #203/e2e: optional tier-4 live validation for already-unit-tested security features #206/Integration tests: RigForge worker ↔ Pithead xmrig-proxy (end-to-end flows) #209 (e2e + RigForge↔Pithead integration) are unmilestoned.