[verified] Restore Details update retries and live Nix build counts #30

Merged
astaranix merged 1 commit from astaranix/details-retry-live-progress into main 2026-09-12 19:12:04 -04:00 AGit
Owner

Fixes

  • Derive update availability from canonical candidate evidence independently of the aggregate status label. A failed update or reboot reminder no longer disables the top-left Details update button when a candidate is available.
  • Preserve active-operation, pending-request, permission, stale-observation, and shutdown gates, including the shared duplicate-click latch.
  • Request Nix internal-json through the existing nh os build --no-nom command. Decode and sanitize structured output, track bounded build aggregate identities, and keep substitution totals separate.
  • Reconcile completed/expected build counters only for the active primary service invocation. Show both visible and semantic text as a Nix estimate, not a percentage: Nix can revise its expected count.
  • Keep truthful indeterminate progress when counters are missing, invalid, zero, or their aggregate start was missed by the bounded journal tail. Preserve the raw-output fallback.

Candidate-lock handling, activation order, request authorization, toolkit selection, and C++ source are unchanged. No system update or activation was performed.

Verification

  • Native aarch64 Nix Rust package: 186 tests passed. The external-log replay test is deliberately opt-in and was run separately below.
  • Native no-default-features package: 80 tests passed.
  • Real Iced mouse press/release regression for retry after failure in narrow and wide layouts; all 18 Details unit tests also passed with desktop font discovery disabled.
  • Real unprivileged nh 4.4.2 / Nix 2.34.8 temporary-derivation build emitted structured aggregate counters. Replaying the actual emitted log through the Rust parser, reconciliation, and live view passed.
  • 11 selected native Nix outputs/checks realized successfully: Rust tray, updater, module, shell tests, nh override, request broker, request policy, no-default tests, tray lock, Wayland/X11 desktop smoke, and Details geometry smoke. Built with Rust 1.97.1.
  • cargo fmt --check passes. Clippy has zero new warnings against the unchanged baseline (21 existing unique warnings remain).
  • Independent immutable-tree review passed; the final test-only lint cleanup received a focused follow-up review.

Existing check limitation

tray-rust-package-audit still fails its source-text clipboard assertion. The unchanged regular expression matches the unchanged test-only iced::advanced::clipboard::Null helpers in details.rs on both the baseline and this branch. No clipboard I/O was introduced. The actual packaged desktop and geometry smoke tests above were run separately and passed; this PR does not claim that the entire check set is green.

## Fixes - Derive update availability from canonical candidate evidence independently of the aggregate status label. A failed update or reboot reminder no longer disables the top-left Details update button when a candidate is available. - Preserve active-operation, pending-request, permission, stale-observation, and shutdown gates, including the shared duplicate-click latch. - Request Nix `internal-json` through the existing `nh os build --no-nom` command. Decode and sanitize structured output, track bounded build aggregate identities, and keep substitution totals separate. - Reconcile completed/expected build counters only for the active primary service invocation. Show both visible and semantic text as a **Nix estimate**, not a percentage: Nix can revise its expected count. - Keep truthful indeterminate progress when counters are missing, invalid, zero, or their aggregate start was missed by the bounded journal tail. Preserve the raw-output fallback. Candidate-lock handling, activation order, request authorization, toolkit selection, and C++ source are unchanged. No system update or activation was performed. ## Verification - Native aarch64 Nix Rust package: **186 tests passed**. The external-log replay test is deliberately opt-in and was run separately below. - Native no-default-features package: **80 tests passed**. - Real Iced mouse press/release regression for retry after failure in narrow and wide layouts; all 18 Details unit tests also passed with desktop font discovery disabled. - Real unprivileged `nh 4.4.2` / Nix `2.34.8` temporary-derivation build emitted structured aggregate counters. Replaying the actual emitted log through the Rust parser, reconciliation, and live view passed. - **11 selected native Nix outputs/checks realized successfully**: Rust tray, updater, module, shell tests, nh override, request broker, request policy, no-default tests, tray lock, Wayland/X11 desktop smoke, and Details geometry smoke. Built with Rust 1.97.1. - `cargo fmt --check` passes. Clippy has **zero new warnings** against the unchanged baseline (21 existing unique warnings remain). - Independent immutable-tree review passed; the final test-only lint cleanup received a focused follow-up review. ## Existing check limitation `tray-rust-package-audit` still fails its source-text clipboard assertion. The unchanged regular expression matches the unchanged **test-only** `iced::advanced::clipboard::Null` helpers in `details.rs` on both the baseline and this branch. No clipboard I/O was introduced. The actual packaged desktop and geometry smoke tests above were run separately and passed; this PR does not claim that the entire check set is green.
## Fixes

- Derive update availability from canonical candidate evidence independently of the aggregate status label. A failed update or reboot reminder no longer disables the top-left Details update button when a candidate is available.
- Preserve active-operation, pending-request, permission, stale-observation, and shutdown gates, including the shared duplicate-click latch.
- Request Nix `internal-json` through the existing `nh os build --no-nom` command. Decode and sanitize structured output, track bounded build aggregate identities, and keep substitution totals separate.
- Reconcile completed/expected build counters only for the active primary service invocation. Show both visible and semantic text as a **Nix estimate**, not a percentage: Nix can revise its expected count.
- Keep truthful indeterminate progress when counters are missing, invalid, zero, or their aggregate start was missed by the bounded journal tail. Preserve the raw-output fallback.

Candidate-lock handling, activation order, request authorization, toolkit selection, and C++ source are unchanged. No system update or activation was performed.

## Verification

- Native aarch64 Nix Rust package: **186 tests passed**. The external-log replay test is deliberately opt-in and was run separately below.
- Native no-default-features package: **80 tests passed**.
- Real Iced mouse press/release regression for retry after failure in narrow and wide layouts; all 18 Details unit tests also passed with desktop font discovery disabled.
- Real unprivileged `nh 4.4.2` / Nix `2.34.8` temporary-derivation build emitted structured aggregate counters. Replaying the actual emitted log through the Rust parser, reconciliation, and live view passed.
- **11 selected native Nix outputs/checks realized successfully**: Rust tray, updater, module, shell tests, nh override, request broker, request policy, no-default tests, tray lock, Wayland/X11 desktop smoke, and Details geometry smoke. Built with Rust 1.97.1.
- `cargo fmt --check` passes. Clippy has **zero new warnings** against the unchanged baseline (21 existing unique warnings remain).
- Independent immutable-tree review passed; the final test-only lint cleanup received a focused follow-up review.

## Existing check limitation

`tray-rust-package-audit` still fails its source-text clipboard assertion. The unchanged regular expression matches the unchanged **test-only** `iced::advanced:📋:Null` helpers in `details.rs` on both the baseline and this branch. No clipboard I/O was introduced. The actual packaged desktop and geometry smoke tests above were run separately and passed; this PR does not claim that the entire check set is green.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
astaranix/nixos-updater!30
No description provided.