release: v1.12.0 → main#744
Merged
Merged
Conversation
back-merge: main → develop after v1.11.0
biome 2.5 deprecated `rules.recommended: true` in favor of `rules.preset: "recommended"` and warned on every `biome check` run. Migrated via `biome migrate`; no lint-behavior change. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Render the on-chain payout data the stack already scans for: a "Confirmed on-chain" block under the Monero/Tari earnings estimates (24h/7d/all-time + last-payout age), a gold Payouts coin marker per Monero payout on the hashrate chart, and a dashed XvB donation-% overlay on a right-side 0-100% axis so payouts line up against how much hashrate was being donated. Payout markers and the donation overlay are legend-toggleable like the other series. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The cap test asserted only len == limit — it would pass whether the code kept the newest 200 or the oldest 200. Now assert the newest survives, the limit-th newest is the last kept, and the over-cap/oldest markers are dropped, so a regression in storage ordering or the slice direction fails the test. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Caddy binds the host's 80/443 by default, so the stack fails to start on a machine already running another reverse proxy on those ports. Add a `dashboard.port` knob: "auto" (default) keeps the scheme's standard port and renders today's Caddyfile verbatim; a number moves the LAN vhost so an existing proxy can keep 80/443 and front the stack. In HTTPS mode a custom port also emits `auto_https disable_redirects` so Caddy doesn't hold :80 for the HTTP->HTTPS redirect — the fronting proxy owns that. The onion vhost is untouched (pinned to the bridge on 80/443 by Tor's HiddenServicePort mapping) and Caddy stays in the path, so the dashboard.auth login is unaffected. Split from the co-hosting umbrella (#181). Disabling Caddy entirely — the other half of #181 — stays out of scope (it removes the only place dashboard auth lives and needs a fail-closed design + security review). - new `is_valid_port` guard (blocks Caddyfile injection via the port value) - HOST_PORT threaded to .env, caddy_changed restart trigger, and change preview - stack unit tests for is_valid_port and the custom-port Caddyfile rendering - docs + CHANGELOG Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adversarial review of #741 surfaced gaps; this closes them: - onion + custom-port interaction: new stack test asserts the LAN vhost moves to the custom port and emits `disable_redirects`, while the onion vhost stays on the bridge's bare :80 (Tor's HiddenServicePort mapping must not shift). - is_valid_port: tightened to reject a leading zero (`0899` would otherwise reach `-le` as an invalid octal literal and error instead of cleanly failing); added a rejection test. - describe_change HOST_PORT: tests for the preview line and the default->default silence (the key is added empty on the first post-upgrade apply). - tier-4: assert HOST_PORT flows config -> .env (mirrors DASHBOARD_SECURE), and make the through-Caddy operator-path curl read HOST_PORT instead of a hardcoded 80/443, so it exercises the port Caddy actually binds. Full stack suite 1622/0; lint-sh + integration shellcheck clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…#181) Option B ("connect to a remote node") said "or a node you don't host", which sets the wrong expectation: a remote node only works if it exposes ZMQ, so a public "open node" won't. The constraint was already documented one click away in "Connecting to a remote Monero node", but a migrating reader lands on Option B first. Surface it at the decision point. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
CI's frontend completeness test (configlogic.test.mjs) requires every config.reference.json leaf to map to a REAL logical section, not the catch-all "Other" (#611). The new dashboard.port key had no LOGICAL_GROUPS entry, so it fell into Other and failed the test. Map it to "Dashboard & access" beside dashboard.host. It stays non-editable via the control channel (host-config only), shown greyed for visibility like dashboard.data_dir. Frontend suite 240/240. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(caddy): configurable dashboard host port (#740)
…q-clarify docs(configuration): flag the remote-node ZMQ requirement at Option B
Bumps VERSION 1.11.0 -> 1.12.0 (pyproject.toml in lockstep) and finalizes the CHANGELOG for the cut. v1.12.0 contents: - feat: configurable Caddy host port `dashboard.port` for co-hosting (#740, split from #181) — merged via #741. - docs: remote-node ZMQ requirement surfaced at the migration decision point (#181) — merged via #742. Also relocates the #740 CHANGELOG entry, which a divergent-base cherry-pick had wedged into the [1.4.0] section, up to [1.12.0] where it belongs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bumping pyproject.toml without regenerating uv.lock leaves the mining-dashboard package pinned at 1.11.0; CI's `uv sync --locked` then fails. Regenerate — only the mining-dashboard version line changes, no dependency updates. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
release: prep v1.12.0 — configurable Caddy host port
# Conflicts: # CHANGELOG.md
Review of #739 before folding it into v1.12.0: - Docs said the confirmed-payout coin marker is "gold"; the code renders it green (chart.mjs: payout = var(--ok) #3fb950, deliberately distinct from the gold XvB raffle star). Fix docs/dashboard.md and the CHANGELOG to "green". - Add a direct unit test for _confirmed_payouts_summary — the 24h/7d/all-time money bucketing was only covered indirectly. Cases: feature-disabled (None), empty list, window boundaries, all-older-than-windows, and the Tari unit/divisor reuse. Skipped the suggested views.py `p.get('ts', 0) or 0` guard: the same list is dereferenced as `p["ts"]` one line up, so a None/missing ts crashes there first — the payouts are pre-filtered to valid timestamps, making the guard dead. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
feat(dashboard): surface confirmed payouts on the earnings card + chart (#381)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promote develop → main for the v1.12.0 cut.
Contents (all merged + validated on develop):
dashboard.portfor co-hosting (Configurable Caddy host port (co-hosting: don't hard-bind 80/443) #740/feat(caddy): configurable dashboard host port (#740) #741, split from [Feature/Discussion] Support co-hosting via migration guides and relaxed reverse-proxy/network bindings #181)Gate: targeted e2e on gouda + borrowed miner-1 PASSED 380/0 (run4; two earlier runs flaked only on known Tor-timing assertions — mini sidechain #454, Tari post-restart resync). Unit/CI all green (frontend 243, pytest 1603 @ 96.87%, stack 1622, lint).
Real merge (keeps main an ancestor of develop); back-merge main→develop follows the cut.