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
2 changed files with 46 additions and 1 deletions
Showing only changes of commit 117082af8c - Show all commits
+17 -1
View File
@@ -20,6 +20,18 @@ _Avoid_: Future life, actual lifespan, failure date
The degree to which the observation history is sufficiently long, complete, and stable to support the usage-adjusted theoretical lifespan. The degree to which the observation history is sufficiently long, complete, and stable to support the usage-adjusted theoretical lifespan.
_Avoid_: Accuracy percentage, certainty _Avoid_: Accuracy percentage, certainty
**Projection stage**:
Where a usage-adjusted theoretical lifespan stands on its way to support: no observations yet, provisional, warming, limited, supported, or unavailable. Each stage is shown with the facts that place it there.
_Avoid_: Loading state, progress percentage
**Provisional projection**:
A lifespan shown from only a few hours of observation history, before a full daily cycle has been seen; it is labelled with the hours observed and its spread, and is expected to move.
_Avoid_: Estimate, preview, guess
**Evidence ladder**:
The conditions that supported projection confidence requires, each shown as met or unmet with its reason, so confidence visibly strengthens as each collection run adds evidence.
_Avoid_: Confidence score, accuracy meter
**Monitoring period**: **Monitoring period**:
A span during which Fenris monitoring is enabled; powered-off time remains part of the usage habit, while deliberately disabled time does not. A span during which Fenris monitoring is enabled; powered-off time remains part of the usage habit, while deliberately disabled time does not.
_Avoid_: Daemon uptime, calibration window _Avoid_: Daemon uptime, calibration window
@@ -56,6 +68,10 @@ _Avoid_: Missing bytes, estimated midnight split
The read/write measurement, date and point being inspected in live or historical drive activity. Live activity follows the newest point until deliberate inspection pins a point; historical selection survives refresh, while an expired live pin is explained before following resumes. The read/write measurement, date and point being inspected in live or historical drive activity. Live activity follows the newest point until deliberate inspection pins a point; historical selection survives refresh, while an expired live pin is explained before following resumes.
_Avoid_: Projection window, current usage habit _Avoid_: Projection window, current usage habit
**Activity readout**:
The ready-to-read account of an activity selection: measured read and write volume, thermal evidence, usage-habit split, coverage and drive warnings for the selected live interval, local hour or local day, expressed in local time with its timezone.
_Avoid_: Graph data, view model
**Usage-history window**: **Usage-history window**:
An exact consecutive span of UTC calendar days ending today, shown from day aggregates; a day without trustworthy evidence remains an explicit gap rather than disappearing or being estimated. An exact consecutive span of UTC calendar days ending today, shown from day aggregates; a day without trustworthy evidence remains an explicit gap rather than disappearing or being estimated.
_Avoid_: Available records, dataset range _Avoid_: Available records, dataset range
@@ -93,7 +109,7 @@ A sustained divergence between recent and earlier daily write rates that starts
_Avoid_: Spike, anomaly _Avoid_: Spike, anomaly
**Scenario range**: **Scenario range**:
The spread of lifespan projections computed from the 7-, 28-, and 90-day horizons of the observation history, shown in place of a statistical interval. The spread of lifespan projections computed from the horizons the observation history covers — 24-hour and 3-day horizons until a 7-day horizon exists, then 7-, 28-, and 90-day horizons — shown in place of a statistical interval.
_Avoid_: Confidence interval, error bar _Avoid_: Confidence interval, error bar
**Coverage**: **Coverage**:
@@ -0,0 +1,29 @@
# 12. Staged projection with an evidence ladder
Status: Accepted. Amends [ADR 0002](0002-projection-model-sustained-regime.md) §2, §6, §8 and §11, and [ADR 0003](0003-service-lifecycle-and-sanctioned-toggle.md) §4 and §8 for the TUI baseline entry.
## Context
Under ADR 0002 as implemented, a fresh install showed no usage-adjusted theoretical lifespan until a manual baseline existed and a complete local observation day had passed. Confidence then stayed Limited until two scenario horizons existed, about 28 days. Users read this as Fenris being slow and its confidence never moving. The architecture review of 2026-10-02 also found that the TUI and CLI each pre-gated the projection with rules the projection itself does not use.
## Decision
1. **Projection stages.** The projection reports one projection stage: no observations yet, provisional, warming, limited, supported, or unavailable. Provisional and warming add to ADR 0002's three confidence states, which remain the categorical judgement once warm-up ends. Callers render the stage. They never pre-gate.
2. **First number after 3 observed hours.** A provisional projection appears once at least 3 hours of hour observations with samples exist. Until 24 hours are observed, it carries the fact "daily cycle not yet seen". From 24 hours until ADR 0002's 14-qualifying-day warm-up completes, the stage is warming. The complete-local-day condition is a contributing fact, not a gate. The rate formula is unchanged; only the evidence span is shorter.
3. **Short horizons.** Until a 7-day horizon is covered, the scenario range uses 24-hour and 3-day horizons, each shown only once covered. They drop out when the 7-day horizon exists. The scenario range remains the only spread shown, and still no statistical interval appears.
4. **Horizon agreement over existing horizons.** As ADR 0002 §8 already says, agreement is judged across the horizons that exist. A single 7-day horizon passes, so Supported is reachable at 14 qualifying days when every other condition holds.
5. **Evidence ladder.** Each Supported condition from ADR 0002 §8 is reported as met or unmet with its reason. The headline shows a count of conditions met, and the outlook shows the full ladder. Confidence is never a percentage.
6. **Write rate without a baseline.** When no endurance baseline applies, the sustained-regime write rate is shown in place of a lifespan. No baseline is synthesized.
7. **TUI baseline entry.** The TUI offers an unverified-override entry: rated TBW plus an optional source URL. It is persisted through `fenris-monitor baseline set` under the existing polkit action. Verified overrides with full provenance stay CLI-only.
## Considered options
- **Numeric confidence percentage.** Rejected: it implies precision the evidence cannot support, and ADR 0002 §8 already rejected it.
- **Capacity-based default baseline.** Rejected: ADR 0002 dropped `capacity × 600`, and a fabricated baseline would mislabel the lifespan.
- **Keep the complete-local-day gate.** Rejected: it delays the first number by up to 34 hours while adding nothing the provisional label and spread do not already disclose.
## Consequences
- Early lifespans swing widely. The provisional label, the hours observed and the short-horizon spread carry that honestly.
- The projection module's interface becomes the single test surface for every gating rule.
- ADR 0002 §10's implied baseline still needs two Percentage Used increments. Entering a rated TBW remains the fast path to a lifespan.