Skip to content

release: v1.16.0 - #813

Merged
VijitSingh97 merged 12 commits into
mainfrom
develop
Aug 1, 2026
Merged

release: v1.16.0#813
VijitSingh97 merged 12 commits into
mainfrom
develop

Conversation

@VijitSingh97

Copy link
Copy Markdown
Collaborator

Promote develop to main for the v1.16.0 release (tag already published; tag commit == develop tip, no post-cut commits).

🤖 Generated with Claude Code

VijitSingh97 and others added 12 commits July 31, 2026 20:39
procps' ps caps the CMD column at 15 characters, so the probe's grep for
the 23-character 'minotari_console_wallet' could never match: the wallet
container reported unhealthy forever while the wallet ran fine. Match on
'[m]inotari_consol' — the truncated form ps actually prints.

Closes #777

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
chore: back-merge main into develop after v1.15.0
…on-issues-74050a

fix(compose): tari-wallet healthcheck pattern survives ps CMD truncation
compose up --remove-orphans never removes the container of a service
whose profile just went inactive — the service is still in the compose
file, so compose does not count it as an orphan. A tari local→remote
switch therefore left the old minotari_node running (offline,
re-syncing) against a remote-mode config; monerod local→remote had the
same latent bug, and the apply-path comment claiming --remove-orphans
covered it was wrong (disproven empirically against compose v2 /
docker 29.0.1).

compose_up_checked now reconciles from the committed .env before the up:
every profile-gated service (monerod, tari, wallet-rpc, tari-wallet)
whose profile token is absent gets 'compose rm -sf'. The command
resolves named services regardless of active profiles and exits 0 when
nothing runs, so the steady state is a no-op and a box already stuck
with a stale node container heals on its next up.

Closes #795

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ctivation-containers

fix(cli): remove profile-deactivated containers before every compose up
The dashboard computed both halves of "am I earning what this hashrate
should?" but never put them side by side: estimates lived in the
Advanced-only Earnings tabs, confirmed payouts in other tabs of the same
card, XvB wins in a text log — and the Simple view carried no earnings
figure at all.

One compact card now shows, per stream, the expectation over a trailing
window beside what was actually confirmed over that SAME window:

- Monero over 7d, expected from the time-weighted routed P2Pool average
  over the window itself (new Metrics.p2pool_7d/_30d) — not the current
  1h figure, so a fleet that changed mid-week is judged against what
  actually ran — with a percent-of-expected;
- Tari over 30d in BLOCKS (solo merge-mining pays whole blocks; each
  confirmed payout is one), expected = hashrate x window / difficulty,
  shown to two significant digits because a fraction of a block per
  month is the normal case;
- XvB wins over 30d beside XvB's published tier estimate, deliberately
  with no ratio — a win pays out through ordinary small payouts the
  payout table cannot attribute, so an "XvB XMR earned" figure would
  be an invention.

The card carries neither view class (card-simple/card-advanced are
disjoint), making it the one earnings surface both views share. Rows
degrade honestly: payout confirmation off shows the config key to set,
never a zero that reads as "earned nothing"; partial windows keep the
confirmed roll-up's asterisk. confirmed_payouts_summary grows per-window
counts (n_24h..n_30d) to feed the Tari block count; the summary builder
reuses the same build_earnings dict the Earnings card renders, so the
two surfaces cannot disagree.

Closes #808

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s-actual

feat(dashboard): expected-vs-actual earnings card, in both views
…iring, count trim

Pre-v1.16.0 repo review riders:

- Regenerate the frontend fixture (state.json) — it predated #808's
  earnings_summary key, so ExpectedVsActualCard's null-guard silently
  skipped the card in EVERY frontend render test; add four node tests
  covering its real branches (both views, empty-yield, stale-payload
  survival, percent + partial asterisk + footnote, view-key hints,
  two-sig-fig Tari blocks, XvB win row and its gating).
- Standing drift guard: a pytest pins the fixture's top-level key set to
  the live build_state() contract, so a new payload key without a
  fixture regen fails loudly instead of silently disabling coverage.
- Assert build_metrics wires p2pool_7d/p2pool_30d with their OWN
  windows (a 3-day-old sample is in, a 40-day-old one is out) — a wrong
  window constant previously passed every test.
- Trim the unconsumed n_24h/n_yesterday/n_7d payload keys — n_30d (the
  Tari block count) is the only consumer; the sibling assertion counting
  confirmed sub-panels is scoped to the panel class, not tooltip prose.
- testing-strategy scenario F gains the #808 catalog row; two doc
  wording fixes (hashrate_drop_threshold phrasing, last-win recency).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
test(dashboard): close the #808 review gaps — fixture drift, window wiring, count trim
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
chore(release): v1.16.0 prep — version bump + changelog
@VijitSingh97
VijitSingh97 merged commit d303ff0 into main Aug 1, 2026
32 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