Release v0.7.0 #113

Merged
xavierk merged 11 commits from release/v0.7.0 into main 2026-10-06 07:41:01 +00:00
Owner

Reconciles the staged-projection / Diagnostics feature work with the origin/main CI quality-gate commits, and prepares the v0.7.0 release.

Merge

origin/main had diverged (5 CI commits vs 8 feature commits). Merge commit resolves 8 conflicts; the origin side of each was lint-only, so the feature imports were kept and the ruff fixes re-applied (E402 noqa in fenris-monitor, F401 re-export noqa in the TUI, unused imports dropped). A clock-fragile TUI test was made date-independent.

Release prep

  • pyproject.toml -> 0.7.0
  • CHANGELOG: [Unreleased] -> [0.7.0] - 2026-10-06

Validation

  • ruff check src/ tests/ clean
  • pytest: 1005 passed, 43 skipped
  • jscpd exit 0
Reconciles the staged-projection / Diagnostics feature work with the origin/main CI quality-gate commits, and prepares the v0.7.0 release. ## Merge origin/main had diverged (5 CI commits vs 8 feature commits). Merge commit resolves 8 conflicts; the origin side of each was lint-only, so the feature imports were kept and the ruff fixes re-applied (E402 noqa in fenris-monitor, F401 re-export noqa in the TUI, unused imports dropped). A clock-fragile TUI test was made date-independent. ## Release prep - pyproject.toml -> 0.7.0 - CHANGELOG: [Unreleased] -> [0.7.0] - 2026-10-06 ## Validation - ruff check src/ tests/ clean - pytest: 1005 passed, 43 skipped - jscpd exit 0
xavierk added 10 commits 2026-10-06 04:47:03 +00:00
Add ADR 0012 amending ADR 0002 and ADR 0003: projection stages,
provisional lifespan after 3 observed hours, short scenario horizons,
evidence ladder, and TUI unverified TBW entry. Add Projection stage,
Provisional projection, Evidence ladder and Activity readout to the
glossary.
Use lifetime written bytes from the current segment's newest published
sample in the headline formula, select the Percentage-Used-implied
baseline after two increments in the segment (otherwise show the
too-coarse fact), and judge horizon agreement across existing horizons.
Make the vacuous projection tests assert unconditionally and add
coverage for implied-baseline gating and single-horizon agreement.
Report a projection stage, an evidence ladder and the sustained-regime
write rate from compute_projection, per ADR 0012. A provisional lifespan
appears after 3 observed hours and carries the hours observed and a
short-horizon spread; the complete-local-day condition becomes a fact
instead of a gate, and the write rate replaces the lifespan when no
baseline applies. The TUI and CLI render the stage, ladder count and
full ladder, and drop their own two-sample pre-gates.
Add a b key and a no-baseline banner that open a form for rated TBW and an
optional source URL. The value is persisted as an unverified override through
fenris-monitor baseline set under the existing polkit action, and the outcome
is reported synchronously. Verified overrides stay CLI-only (ADR 0012 section 7).
Move activity data assembly out of tui.py into activity_readout, behind
readout(conn, selection, now). Dashboard and fenris-monitor enable now show
local time with a timezone label, inspected points keep a secondary UTC line,
and the legacy UTC-relabelled day and hour branches are gone. Time formatting
(including freshness_age_human) lives in timefmt. Hour offsets now render as
+05:30 to match day labels.
Declare every dashboard key as a Binding on the widget that owns it, and
generate the footer, activity tool chips and help screen from those
bindings so they cannot drift. The footer collapses to "? help · q quit"
under 80x24.

Add Home/End and PgUp/PgDn (one week) navigation, mouse-wheel selection on
the graphs, click-to-focus on every panel, and clickable footer chips.
Tab and Shift+Tab now visit only the dashboard panels.
Toggle a Diagnostics panel with i, built on the Activity readout. It swaps
in for the Drive pane and shows the decoded critical_warning, power-on
hours, power cycles, unsafe shutdowns, media errors and available spare
with their change over the selection, and per-hour (Day) or per-day
(History) temperature min/avg/max, active/idle/powered-off/unknown split
and coverage. History bars draw reads beside writes while it is open, and a
set critical_warning shows as a badge in the endurance outlook without
affecting the projection. Counter deltas are withheld across a controller
segment change.
Record host read and write commands, controller busy time, error log
entries, warning and critical temperature time, and thermal management
transitions from the existing smartctl -a -j acquisition. Schema 7 adds
nullable columns to samples so legacy rows read as unknown, and the
Diagnostics panel shows each counter with its change.
Reconcile the staged-projection and Diagnostics feature work with the CI
quality-gate changes from origin/main. The origin side of every conflict was
lint-only, so the feature imports were kept and the ruff fixes re-applied:

- keep the branch's added imports (timefmt, activity_readout, projection
  ladder helpers) and drop the unused ones ruff reported
- restore `noqa: E402` on the post-bootstrap imports in fenris-monitor and
  keep the `noqa: F401` re-exports in the TUI that tests assert on
- make the TUI monitoring-glyph test clock-relative instead of pinned to a
  fixed date
chore: prepare v0.7.0 release
Release / release (push) Successful in 1m28s
CI / security (pull_request) Failing after 21s
CI / lint (pull_request) Successful in 36s
CI / ai-review (pull_request) Successful in 2m52s
670671cb25
Bump pyproject.toml to 0.7.0 and move the Unreleased section under
[0.7.0] - 2026-10-06.
Collaborator

PR Reviewer Guide 🔍

(Review updated until commit ef9e7fa7a8)

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 4 🔵🔵🔵🔵⚪
🧪 PR contains tests
🔒 No security concerns identified
⚡ No major issues detected

⚠️ Review coverage: The following files were not included in this review because of the token budget:

  • src/fenris/activity_readout.py
  • tests/test_activity_readout.py
  • tests/test_projection.py
  • tests/test_tui_navigation.py
  • tests/test_issue_111.py
  • tests/test_staged_projection.py
  • tests/test_tui_baseline_entry.py
  • tests/test_tui.py
  • src/fenris/activity_plot.py
  • src/fenris/status.py
  • tests/test_tui_diagnostics.py
  • tests/test_dashboard_design.py
  • tests/test_staged_projection_callers.py
  • src/fenris/collector.py
  • src/fenris/store.py
  • tests/test_live_graph.py
  • src/fenris/timefmt.py
  • tests/test_collector_history_tracer.py
  • tests/test_activity_plot.py
  • src/fenris/themes.py
  • tests/test_local_day.py
  • tests/test_issue_97.py
  • src/fenris/monitor.py
  • src/fenris/activity_selection.py
  • tests/test_status_composition.py
  • tests/test_acceptance_sweep.py
  • tests/test_monitor.py
  • src/fenris/status_composition.py
  • tests/test_issue_72_edge_cases.py
  • tests/test_measured_activity.py
  • README.md
  • docs/adr/0012-staged-projection-and-evidence-ladder.md
  • CONTEXT.md
  • CHANGELOG.md
  • docs/spec/glint-dashboard-design.md
  • pyproject.toml
## PR Reviewer Guide 🔍 <!-- pr-agent:review:full --> #### (Review updated until commit https://git.bongbetic.com/xavierk/Fenris/commit/ef9e7fa7a8b4bde27d1a38a12bf16457899bcd0a) Here are some key observations to aid the review process: <table> <tr><td>⏱️&nbsp;<strong>Estimated effort to review</strong>: 4 🔵🔵🔵🔵⚪</td></tr> <tr><td>🧪&nbsp;<strong>PR contains tests</strong></td></tr> <tr><td>🔒&nbsp;<strong>No security concerns identified</strong></td></tr> <tr><td>⚡&nbsp;<strong>No major issues detected</strong></td></tr> </table> <hr> ⚠️ **Review coverage:** The following files were not included in this review because of the token budget: - `src/fenris/activity_readout.py` - `tests/test_activity_readout.py` - `tests/test_projection.py` - `tests/test_tui_navigation.py` - `tests/test_issue_111.py` - `tests/test_staged_projection.py` - `tests/test_tui_baseline_entry.py` - `tests/test_tui.py` - `src/fenris/activity_plot.py` - `src/fenris/status.py` - `tests/test_tui_diagnostics.py` - `tests/test_dashboard_design.py` - `tests/test_staged_projection_callers.py` - `src/fenris/collector.py` - `src/fenris/store.py` - `tests/test_live_graph.py` - `src/fenris/timefmt.py` - `tests/test_collector_history_tracer.py` - `tests/test_activity_plot.py` - `src/fenris/themes.py` - `tests/test_local_day.py` - `tests/test_issue_97.py` - `src/fenris/monitor.py` - `src/fenris/activity_selection.py` - `tests/test_status_composition.py` - `tests/test_acceptance_sweep.py` - `tests/test_monitor.py` - `src/fenris/status_composition.py` - `tests/test_issue_72_edge_cases.py` - `tests/test_measured_activity.py` - `README.md` - `docs/adr/0012-staged-projection-and-evidence-ladder.md` - `CONTEXT.md` - `CHANGELOG.md` - `docs/spec/glint-dashboard-design.md` - `pyproject.toml`
xavierk added 1 commit 2026-10-06 07:31:38 +00:00
fix: satisfy semgrep on constant-column SQL; use injectable clock for baseline entry_date
CI / security (pull_request) Successful in 20s
CI / lint (pull_request) Successful in 39s
CI / ai-review (pull_request) Successful in 8m44s
ef9e7fa7a8
xavierk merged commit 558b59350a into main 2026-10-06 07:41:01 +00:00
Collaborator

Persistent review updated to latest commit ef9e7fa7a8

**[Persistent review](https://git.bongbetic.com/xavierk/Fenris/pulls/113#issuecomment-7472)** updated to latest commit https://git.bongbetic.com/xavierk/Fenris/commit/ef9e7fa7a8b4bde27d1a38a12bf16457899bcd0a
Sign in to join this conversation.