Skip to content

release: v1.12.0 → main#744

Merged
VijitSingh97 merged 16 commits into
mainfrom
develop
Jul 22, 2026
Merged

release: v1.12.0 → main#744
VijitSingh97 merged 16 commits into
mainfrom
develop

Conversation

@VijitSingh97

Copy link
Copy Markdown
Collaborator

Promote develop → main for the v1.12.0 cut.

Contents (all merged + validated on develop):

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.

VijitSingh97 and others added 16 commits July 21, 2026 17:49
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
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)
@VijitSingh97
VijitSingh97 merged commit 6e75e05 into main Jul 22, 2026
31 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant