Skip to content

Release 2026.7.0-rc11

Latest

Choose a tag to compare

@github-actions github-actions released this 12 Jul 09:45

Changelog

🔧 Chore

  • Migrate to TypeScript 7.0 RC (Go-based tsgo compiler):
    • Updated peer dependency to typescript: ^7.0.1-rc
    • Updated @typescript/native-preview to 7.0.0-dev.20260701.1
    • Updated tsconfig.json, migration docs, and instruction files
    • Patches esModuleInterop default and other TS 7.0 defaults

✨ Features

  • HDIdle per-disk model (Lab Mode feature): Replaced the global HDIdle
    enable/disable toggle with a fully per-disk configuration model gated behind
    Lab Mode (experimental_lab_mode=true). Key changes:
    • Per-disk enable/disable: each physical disk has its own HDIdle record
      (enabled: yes|custom|no); the service runs automatically when ≥1 disk is
      enabled. The five global Settings.hdidle_* fields have been removed.
    • Dashboard suggestion badge: HDDs that have not yet been configured show
      an inline "Enable HDIdle?" badge in the disk I/O table (visible only in Lab
      Mode). The badge provides Ignore (persists suggestion_ignored=true)
      and Enable (navigates to the per-disk card in the Volumes page).
    • Non-rotational guard: enabling HDIdle on an SSD/NVMe or a device with
      unknown rotational type opens a confirm dialog; accepting persists
      force_enabled=true so the warning does not repeat. The backend returns
      HTTP 409 if the flag is missing, preventing accidental spindowns of SSDs.
    • Rotational detection: Disk.is_rotational tri-state (HDD/SSD/unknown)
      is now derived from /sys/block/<dev>/queue/rotational (sysfs primary) with
      SMART rotation_rate as fallback. Unknown (e.g. USB enclosures) returns
      nil — treated as non-rotational for safety.
    • Ignore-suggestion endpoint: POST /api/disk/{id}/hdidle/ignore-suggestion
      persists the badge dismissal per disk.
    • Adaptive polling: the monitor goroutine polls every 60s when ≥1 disk is
      spun-up and slows to 5min when all monitored disks are already spun-down.
      The goroutine is never started when zero disks are enabled.
    • readOnly threading: the per-disk settings card now correctly propagates
      the readOnly flag from VolumeDetailsPanel.
  • mDNS Registration: Added optional mDNS registration of the SRAT service for local network discovery. When enabled, the backend registers a _srat._tcp service with the system mDNS responder, advertising the service name, port, and metadata. This allows compatible clients to discover the SRAT service on the local network without manual configuration. The feature is controlled by a new MDNSRegistration boolean setting in the advanced settings section.

🐛 Bug Fixes

  • HDIdle service permanently broken after first Stop(): Stop() no longer
    leaves stopChan non-nil after close. Subsequent Start() calls now succeed
    (idempotent). Fixes a latent bug where the service refused to restart after
    any config PUT.
  • Nested mutex deadlock in GetDeviceStatus, GetProcessStatus, and
    observeDiskActivity: calls to IsRunning() under an existing lock now read
    stopChan directly to avoid the deadlock inherent in re-acquiring an
    RWMutex that is not guaranteed reentrant.
  • GetDeviceConfig returned HTTP 500 when service disabled: the guard
    !s.config.Enabled → ErrorHDIdleNotSupported has been removed. The config
    endpoint is now always available for inspection/configuration regardless of
    whether the monitor goroutine is running.
  • disk_id injected unsanitised into file path: hdidle_handler.go was
    naïvely prefixing every disk_id with /dev/disk/by-id/ without validation.
    Replaced by HDIdleServiceInterface.ResolveDevicePath() which probes three
    candidate paths (absolute /dev/…, by-id, kernel name) and rejects inputs
    containing path-traversal characters.

🔄 Breaking Changes

  • Settings.hdidle_enabled, hdidle_default_idle_time, hdidle_default_command_type,
    hdidle_default_power_condition, and hdidle_ignore_spin_down_detection have
    been removed from the API and the DB (migration 00017 drops the
    corresponding rows from the properties table).
  • POST /api/hdidle/start and POST /api/hdidle/stop have been removed.
    The service lifecycle is now fully automatic (driven by the per-disk records).
  • PATCH /api/disk/{id}/hdidle/config has been removed (it was a dead spec
    entry with no handler).

🏗 Chore

  • DB migration 00017 (drop_global_hdidle_properties): deletes the five
    obsolete global HDIdle property rows. Down migration re-seeds them with their
    original defaults for dev/test rollback.
  • events.PowerEvent now carries a Kind PowerEventKind discriminant field
    (config or status) so subscribers can branch without comparing zero-values.
  • Two new dto.HDIdleDevice fields (SuggestionIgnored, ForceEnabled) and
    matching GORM/generated-layer/converter updates. Schema columns are added by
    GORM AutoMigrate on the next startup — no manual migration needed.
  • openapi.json is not regenerated in this branch — it requires a working
    Go toolchain and go run ./cmd/srat-openapi. CI must run
    go run ./cmd/srat-openapi -dir=backend/docs and
    cd frontend && bun run gen:api before merging to keep generated artifacts in
    sync. Three hand-edited generated files (config_to_dto_conv_gen.go,
    dto_to_dbom_conv_gen.go, g/hdidle_device_config.go) are aligned with their
    source directives — a go generate ./... run will produce the same output.

🔧 Maintenance

  • Multi-variant server release: Release archives now ship three srat-server variants — srat-server-static (fully static, zero shared-library dependencies), srat-server-musl (dynamic linked against musl libc, built via Zig), and srat-server-glib (dynamic linked against glibc, built via CGO). The srat-server entry in the archive is a symlink that defaults to srat-server-static; the upgrade process automatically updates it to the best available variant for the running system (musl → glibc → static). srat-openapi is no longer included in release archives. srat-cli is always statically linked.

What's Changed

  • 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #670
  • ⬆️ Update @biomejs/biome to v2.4.16 by @renovate[bot] in #673
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260527.2 by @renovate[bot] in #675
  • ⬆️ Update dependency hk to v1.46.0 by @renovate[bot] in #678
  • ⬆️ Update dependency ruff to v0.15.15 by @renovate[bot] in #676
  • ⬆️ Update dependency act to v0.2.89 by @renovate[bot] in #674
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260607.1 by @renovate[bot] in #685
  • ⬆️ Update BackEnd by @renovate[bot] in #683
  • ⬆️ Update dependency go to v1.26.4 by @renovate[bot] in #684
  • ⬆️ Update dependency ruff to v0.15.16 by @renovate[bot] in #686
  • ⬆️ Update FrontEnd by @renovate[bot] in #687
  • ⬆️ Update CI/CD to v7 by @renovate[bot] in #688
  • feat(release): multi-variant server builds (static, musl, glibc) by @dianlight in #672
  • ⬆️ Update ghcr.io/devcontainers/features/copilot-cli Docker tag to v1.1.3 by @renovate[bot] in #677
  • ⬆️ Update CI/CD by @renovate[bot] in #663
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260609.1 by @renovate[bot] in #692
  • fix(hdidle): per-disk rework + review bug fixes by @dianlight in #690
  • ⬆️ Update BackEnd by @renovate[bot] in #693
  • 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #691
  • ⬆️ Update dependency prettier to v3.8.4 by @renovate[bot] in #697
  • ⬆️ Update BackEnd by @renovate[bot] in #695
  • ⬆️ Update dependency ruff to v0.15.17 by @renovate[bot] in #699
  • ⬆️ Update mcr.microsoft.com/devcontainers/go:2-1.26-bookworm Docker digest to 85fff53 by @renovate[bot] in #694
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260615.1 by @renovate[bot] in #696
  • ⬆️ Update dependency python to v3.14.6 by @renovate[bot] in #698
  • ⬆️ Update dependency hk to v1.48.0 by @renovate[bot] in #700
  • ⬆️ Update dependency npm:doctoc to v2.5.0 by @renovate[bot] in #701
  • ⬆️ Update FrontEnd by @renovate[bot] in #703
  • ⬆️ Update dependency vale to v3.15.1 by @renovate[bot] in #702
  • ⬆️ Update FrontEnd to v20.10.5 by @renovate[bot] in #706
  • ⬆️ Update BackEnd by @renovate[bot] in #707
  • feat: implement server mDNS registration over WebSocket with HA reconnect hardening by @dianlight in #679
  • 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #708
  • ⬆️ Update CI/CD (major) by @renovate[bot] in #704
  • ⬆️ Update dependency jq to v1.8.2 by @renovate[bot] in #710
  • ⬆️ Update BackEnd by @renovate[bot] in #709
  • ⬆️ Update dependency ruff to v0.15.18 by @renovate[bot] in #712
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260620.1 by @renovate[bot] in #711
  • ⬆️ Lock file maintenance FrontEnd by @renovate[bot] in #667
  • ⬆️ Update actions/checkout to v7 by @renovate[bot] in #713
  • ⬆️ Update js-yaml to v5 by @renovate[bot] in #715
  • ⬆️ Update fastify-plugin to v6 by @renovate[bot] in #705
  • ⬆️ Update @happy-dom/global-registrator to v20.10.6 by @renovate[bot] in #717
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260622.1 by @renovate[bot] in #718
  • ⬆️ Update gorm.io/gorm to v1.31.2 by @renovate[bot] in #719
  • ⬆️ Update CI/CD by @renovate[bot] in #716
  • 🐛 fix(be): Add macOS development compatibility support by @dianlight in #720
  • ⬆️ Update FrontEnd by @renovate[bot] in #726
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260626.1 by @renovate[bot] in #723
  • ⬆️ Update dependency prettier to v3.8.5 by @renovate[bot] in #724
  • ⬆️ Update npm:@redocly/cli to v2.35.1 by @renovate[bot] in #727
  • ⬆️ Update dependency ruff to v0.15.20 by @renovate[bot] in #725
  • 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #722
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260627.2 by @renovate[bot] in #729
  • ⬆️ Update github.com/prometheus/procfs to v0.21.0 by @renovate[bot] in #731
  • ⬆️ Update dependency prettier to v3.9.0 by @renovate[bot] in #730
  • Added maxLength:128 to SharedResource.Name by @opencode-agent[bot] in #734
  • ⬆️ Update BackEnd by @renovate[bot] in #739
  • ⬆️ Update dependency prettier to v3.9.1 by @renovate[bot] in #742
  • ⬆️ Update mcr.microsoft.com/devcontainers/go:2-1.26-bookworm Docker digest to 090a56c by @renovate[bot] in #740
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260628.1 by @renovate[bot] in #741
  • Disk symlink mismatch → realpath fallback by @opencode-agent[bot] in #738
  • 📝 CodeRabbit Chat: Reduce lock scope in HDIdleService.Start config loading by @coderabbitai[bot] in #747
  • 🏗️ build: Migrate frontend to TypeScript 7.0 RC by @dianlight in #743
  • 📝 CodeRabbit Chat: Update TypeScript migration instructions for ES2022 by @coderabbitai[bot] in #748
  • Empty password fix + tests by @opencode-agent[bot] in #744
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260629.1 by @renovate[bot] in #749
  • ⬆️ Update dependency prettier to v3.9.3 by @renovate[bot] in #750
  • 📝 CodeRabbit Chat: Keep HDIdleDiskSettings controls reachable after toggle by @coderabbitai[bot] in #751
  • 🔄 synced file(s) with dianlight/opencode-actions by @dianlight in #752
  • ⬆️ Lock file maintenance by @renovate[bot] in #721
  • ⬆️ Update dorny/paths-filter to 7b450ff by @renovate[bot] in #753
  • ⬆️ Update dependency prettier to v3.9.4 by @renovate[bot] in #754
  • Auto-save HDIdle YES/NO toggle at line 202 by @opencode-agent[bot] in #737
  • 🔄 synced file(s) with dianlight/opencode-actions by @dianlight in #755
  • ⬆️ Update @biomejs/biome to v2.5.2 by @renovate[bot] in #758
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260703.1 by @renovate[bot] in #760
  • ⬆️ Update BackEnd by @renovate[bot] in #759
  • 🔄 synced file(s) with dianlight/opencode-actions by @dianlight in #757
  • ⬆️ Update dependency markdownlint-cli2 to v0.23.0 by @renovate[bot] in #762
  • ⬆️ Update dependency hk to v1.49.0 by @renovate[bot] in #761
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260704.1 by @renovate[bot] in #764
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260705.1 by @renovate[bot] in #765
  • ⬆️ Update BackEnd by @renovate[bot] in #766
  • ⬆️ Update github.com/oapi-codegen/oapi-codegen/v2 to v2.7.2 by @renovate[bot] in #767
  • ⬆️ Update FrontEnd to v4.1.10 by @renovate[bot] in #769
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260706.1 by @renovate[bot] in #768
  • ⬆️ Update oapi-codegen to v2.7.2 by @renovate[bot] in #770
  • ⬆️ Update dependency hk to v1.50.0 by @renovate[bot] in #771
  • ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260707.2 by @renovate[bot] in #772
  • ⬆️ Update msw to v2.14.7 by @renovate[bot] in #774
  • ⬆️ Update dependency go to v1.26.5 by @renovate[bot] in #773
  • ⬆️ Update msw to v2.15.0 by @renovate[bot] in #775
  • Feat/hdidle per disk rework by @dianlight in #689
  • ⬆️ Pin dependencies by @renovate[bot] in #777
  • ⬆️ Update FrontEnd by @renovate[bot] in #779
  • ⬆️ Update CI/CD by @renovate[bot] in #780
  • ⬆️ Update npm:@redocly/cli to v2.38.0 by @renovate[bot] in #781
  • ⬆️ Update dependency pkl to v0.32.0 by @renovate[bot] in #782
  • ⬆️ Update dependency ruff to v0.15.20 by @renovate[bot] in #778
  • ⬆️ Lock file maintenance by @renovate[bot] in #756
  • 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #776
  • chore(release): 2026.7.0-rc11 by @github-actions[bot] in #783

New Contributors

Full Changelog: 2026.5.0-rc9...2026.7.0-rc11