• v1.36.0 cbd8f95592

    v1.36.0
    All checks were successful
    CI / Rust clippy (push) Successful in 2m2s
    CI / Rust fmt (push) Successful in 1m15s
    CI / Rust test (push) Successful in 6m10s
    CI / UI (SvelteKit) (push) Successful in 1m20s
    CI / Security Audit (push) Successful in 1m20s
    docs / build (push) Successful in 38s
    Release / Docker Multi-Arch (push) Successful in 24m16s
    Release / Binary aarch64-unknown-linux-gnu (push) Successful in 12m3s
    Release / Binary x86_64-unknown-linux-gnu (push) Successful in 10m53s
    Release / Linux .deb + .rpm (amd64) (push) Successful in 2m6s
    Release / Linux .deb + .rpm (arm64) (push) Successful in 1m52s
    Release / Linux AppImage (aarch64) (push) Successful in 27s
    Release / Linux AppImage (x86_64) (push) Successful in 27s
    Release / Cosign sign artifacts (push) Successful in 28s
    Release / Forgejo Release (push) Successful in 38s
    Stable

    dvb-projekt released this 2026-10-03 06:41:11 +00:00 | 136 commits to main since this release

    Calibration by button for dvb-WarpTune. Calibration only ever lowers the
    core voltage below the hand-tuned point at the same frequency, so a miner
    never draws more power than there. Each voltage is judged on one window of
    200 pool shares, which still varies by several percent: a good voltage can
    occasionally fall short, and calibration then keeps more voltage, never
    less. A confirmation window near the floor and per-chip checks follow in a
    later release.

    Added

    • dvb-WarpTune: chip_error_trigger (under [defaults] or per miner)
      turns off the step-down and the up-hold on the firmware's chip error
      rate. WarpAxe v0.1.11 reports an instant value with a counter-restart
      spike after voltage writes and a BM1373 baseline of 5–8 %; with the
      trigger on, a healthy NerdAxe Gaia was walked from 400 to 320 MHz.
      Default on. The journal keeps the reading either way, and WarpTune
      prefers WarpAxe's 1-minute rate (errorPercentage1m, v0.1.12) over
      the instant value.
    • Devices page: calibration by button ("Einmessen"). Logged in, every
      device WarpTune controls live gets Start calibration; the sidecar then
      measures the miner's Eco step and its Max step (the hand-tuned point)
      one after the other — the reference voltage first, on 200 pool shares,
      then 10 mV less at a time until a step falls short — about 6–8 hours,
      the miner keeps mining. The card shows the stage, the voltage under
      test, the shares counted, the time left and a progress bar, with Pause
      and Stop; at the end the voltage found per step against the reference
      with the measured power and pool-side hashrate, and Apply / Discard.
      Nothing changes before Apply; the hand-tuned point stays the ceiling
      and the restore point. No button on an Avalon, on maker presets (BitForge
      Nano), in dry run or without a pool feed — the line says why. Eight
      languages, phone layouts.
    • Command path pool → WarpTune: POST /api/admin/tune/calib (admin only,
      audit action tune.calib.<action>) forwards start / stop / pause /
      resume / apply / discard to the sidecar's new POST /calib/{host}/{action},
      guarded by a shared key: [mining.tune] token_env on the pool and
      sidecar.control_token_env in warptune.toml name the same environment
      variable — or the key is entered under Admin → Profile → dvb-WarpTune
      coupling and stored in secrets.toml (tune_token), the way for
      Umbrel. Without the key the sidecar refuses every command; the
      snapshot stays readable. scripts/setup-warptune.sh exports
      warptune-control-token to the service as WARPTUNE_TOKEN.
    • WarpTune: the calibration job pins the miner to the stage's step (energy
      mode and the PV budget pause, every guard stays on and ends the stage),
      journals every state change and continues after a restart of the
      service where it was — the open voltage step keeps the shares it had
      already counted (journal samples now carry the share difficulty).
      Applied voltages are journaled and become the step voltages from then
      on, also after a restart; a reboot that puts the hand point back is
      followed by a step down to the calibrated voltage once settled.
      [defaults] calib_max_steps (6) and calib_timeout_s (4 h) bound a
      stage; a reference that is short of good ends its stage without a
      result. A failure the regulator's guards call on the firmware's
      reading, short of the 200 shares a verdict needs, does not end a stage
      (the voltage is held off and tried again; a second failure there, or a
      share-based one, does), and a stage that times out below a good
      voltage ends with that voltage.
    • WarpTune, calibration: Apply takes each found voltage over with a
      reserve — [defaults] calib_margin_mv, 20 mV by default, never above
      the stage's reference (the lowest good voltage sits one step above a
      failure; the reserve is the headroom). The result rows on the devices
      page show both ("1200 → 1180 mV, takes over 1200 mV (+20 reserve)"),
      the journal's CalibApplied line carries found next to points.
    • WarpTune: a calibrated voltage is re-adjusted in operation. When a
      calibrated step falls short of good on the pool's shares (200 under the
      bar, or clearly under it sooner; too many rejects count too), the
      regulator raises that step's voltage by 10 mV, up to the reference, and
      journals it as the new calibrated voltage instead of only stepping the
      frequency down. Heat, current, dead chips and the firmware's own stops
      keep their frequency downs.
    • WarpTune: the chip error rate lines are per miner — error_down_pct
      (step down, default 2 %) and error_up_max_pct (hold the way up and
      "short of good", default 1 %) under [defaults] or per [[miner]]; a
      BM1373 (NerdAxe Gaia) runs a healthy baseline of 5–8 %. The trigger acts
      on the firmware's 1-minute rate only (errorPercentage1m, WarpAxe
      ≥ 0.1.12; the instant value is journaled, never acted on), not within
      60 s of a point change, and steps down on two decisions in a row.
    • WarpTune: the journal memory of a host (steps judged healthy, voltage
      verdicts, core currents, calibrated voltages) ends at a firmware change
      of family or major (BitMaker → WarpAxe) with a device_changed line,
      as it does at a board swap; an update inside the family keeps it.
    • WarpTune: an invariant test runs the regulator over a grid of
      temperatures, hashrate ratios, error rates, input voltages and core
      currents in every mode and checks each point change against the
      window's top, the ladder cap, the hand voltage, a calibrated voltage,
      the restore point and the Eco cap.

    Fixed

    • Devices page: the running voltage search no longer reads
      "Calibrated" — that word belongs to the calibration by button. The line
      now says Voltage checked, the voltage found against WarpTune's table
      voltage for the step ("needs 960 mV (table 940)" / "runs at the table
      voltage") and why: the voltage that failed below it with its chip error
      rate and the rate now ("at 950 mV too many chip errors (4.6 %, now
      3.3 %)"), or "hashrate too low" where the firmware counts no errors.
      The power figure is marked as an estimate; the pool-side hashrate, a
      snapshot unrelated to the voltage, is gone from the line. WarpTune
      journals the chip error rate with every trial verdict
      (error_pct); older lines give it from their reason text.
    • WarpTune, Eco: a step was judged on one J/TH reading against the
      all-time minimum of every sample it had ever produced; the firmware's
      10-minute average overshoots by 10–15 % now and then, so the minimum
      was a bar every later reading failed. A Gamma walked 525 → 400 MHz on
      2026-09-30 and saw-sawed 525 ↔ 500 all morning on 2026-10-01 (thirteen
      writes in 100 minutes against a breaker of twelve an hour), a
      NerdQAxe++ 600 ↔ 590, a Gaia 350 ↔ 340. A step's efficiency is now the
      settled mean of its readings with the hashrate capped at the expected
      rate, fresh for an hour; Eco leaves a step after three decisions in a
      row and only for a step that can be better (measured better, or less
      core voltage), and the way back up stays closed while the worse reading
      is fresh.
    • WarpTune: the shutdown restore is written also after live control was
      switched off; the miner used to stay on whatever point the last write
      left it at, and the next start took that for the hand point (Gaia
      2026-09-30: breaker at 320 MHz, restore point 400 → 320). A start
      without stock warns when the point it finds differs from the last
      start's restore point. stock is range-checked and capped at the
      ladder's voltage ceiling; voltage_max_mv caps the ladder curve also
      without a trial; voltage_min_mv / voltage_max_mv are checked whether
      the trial is on or not; ladder_cap_mhz may go down to 200;
      calib_max_steps, calib_timeout_s and calib_margin_mv are
      range-checked.
    • WarpTune, calibration: with voltage_trial on, the step voltage came
      from the trial memory (the search's own verdicts, one reserve below the
      applied voltage) and the re-adjustment was off; the Octaxe's 700 MHz
      would have run at the found 1180 mV instead of the applied 1200, and
      the trial would have probed below it again. A calibrated step is
      written at its calibrated voltage, the trial does not go below it, the
      raise works with a window; only a running job searches below.
    • WarpTune: a write that failed with an HTTP error was never retried for
      a non-urgent decision (the proposal counted as "unchanged"); live-off
      mid-calibration left the job running with its writes dropped (it is
      stopped and journaled now); a dead chip that does not come back was
      rebooted every three minutes until the write breaker tripped (the
      fourth restart within an hour switches live control off).
    • WarpTune, calibration: a non-urgent move off the pinned step did not
      end the stage (it waited for a step just marked unstable, up to the
      timeout); any Down or Restore off the step ends it now, the trial does
      not give a pinned step up, and a reference short of good on the way back
      up ends the stage with the lowest good voltage. A stage starts without
      the trial's failure holds at its frequency (a 92 % error spike after a
      write had held 1200 mV off for an hour); the timeout clock continues
      across a restart; with 200 shares counted the hashrate reading no
      longer gates the verdict (WarpAxe 0.1.12 moves 1–3 % per five minutes
      whatever the point does).
    • WarpTune: the core current measured on a step is tied to the voltage
      it was measured at (journaled with it); a reading at another voltage
      is scaled and held under 97 % of the warn line, and a higher step
      bounds a lower one only at a voltage at or above the target's.
    • WarpTune, voltage trial: an early "short of good" call on fewer than
      200 shares has to beat the share count's own noise (two standard
      deviations, 2/√n) as well as the fixed 10-point gap. Forty shares read
      ±16 %, and a VarDiff move right after a voltage write skews the first
      minutes further: the Octaxe's 650 MHz @ 1200 mV was failed twice at
      77 % and 83 % on 41 shares while the reading said 97–98 % and 1210 mV
      booked 98–101 % on 203 (2026-10-01). The verdict text names the
      1-minute error rate, not the instant value.
    • WarpTune, calibration: a stage's result is the lowest voltage judged
      good strictly above the highest voltage judged bad, and a voltage good
      once and bad on a second measurement counts as bad. The old rule
      looked for a good verdict exactly one step above the failure and found
      none when the step above had been overturned; the Octaxe's run of
      2026-10-01/02 (Eco good 1210…1160, 1150 bad, 1160 bad again; Max good
      1210…1170, 1160 and 1170 bad) ran on in both stages until a guard
      stepped the miner off and failed the whole job without a result. A
      guard that ends a stage after good voltages were measured now ends it
      with their result (Eco 1170 → 1190 with the reserve, Max 1180 → 1200
      on that run); only a stage without one fails. A reference that is
      short of good on the way back up has no result above it and fails.
    • WarpTune, command path: a calibration command the miner loop has not
      picked up within 60 s is dropped (a Start must not fire hours later when
      the device answers again), and a command against a miner entry older
      than 90 s is refused with 409. A finished job leaves the snapshot after
      a day, so the regulator's own trial line shows again.
    • WarpTune, calibration: a stage's reference (and a search step on the
      window's floor) no longer waits for a trial verdict the regulator only
      reports when it is news to its trial memory. The Octaxe's re-run on
      2026-10-01 sat on the Eco reference for 1.5 h: 650 MHz @ 1210 mV had
      been read back from the day before's verdicts, the point was judged
      healthy at 08:12Z and no verdict followed. The stage now takes the
      regulator's share vote directly.
    • Devices page, calibration: the progress line names the stage as "Eco
      step (1/2)" / "Max step (2/2)", so a finished first stage no longer
      reads like a finished calibration.
    • UI translations (es, fr, it, ja, pt-BR, zh): the three list pages carry
      one name each, the same in the menu and as the page title (wallets,
      Stratum logins, devices); in Spanish, Japanese and Chinese two pages had
      shared a title, in Italian the menu item for the logins was named like
      the devices page. The size profiles are translated (es, fr, ja still
      showed the German "Klein / Mittel / Gross").
    • Header: the nav takes its own line whenever it does not fit beside the
      logo and the status pills, measured from the items themselves. A fixed
      breakpoint at 1100 px let the nav slide under the pills at wider
      windows, logged in and in German.
    • Admin → Notifications: the HTTP notice keeps its distance from the
      status row below and its badge sits at the first line.
    • Devices page: the WarpTune tooltip line for the PV surplus budget shows
      the watts instead of a literal {w} (placeholder written with single
      braces).

    dvb-WarpPool v1.36.0 — Downloads

    Docker

    git.warppool.org/dvb-projekt/dvb-warppool:v1.36.0 (multi-arch amd64+arm64, ohne v-Präfix)

    Native packages

    • Linux .deb: amd64 + arm64 → apt install ./dvb-warppool_*.deb
    • Linux .rpm: amd64 + arm64 → dnf install ./dvb-warppool-*.rpm
    • Linux AppImage: x86_64 + aarch64 portable
    • Linux tarballs: x86_64 + aarch64 for manual installs
    • macOS .dmg: added shortly after publish (built separately) — or build from source
    • Windows .msi: paused since the forge migration (no Windows runner yet)

    Signatures

    • SHA256SUMS + cosign bundle (SHA256SUMS.bundle, project key)
    • SBOM (SPDX) for all dependencies

    Verify (project public key cosign.pub in the repo root):

    cosign verify-blob \
      --key cosign.pub \
      --bundle SHA256SUMS.bundle \
      SHA256SUMS
    sha256sum --check SHA256SUMS
    

    First-time setup: run dvb-warppool-setup for the first-run wizard.

    Downloads