[verified] Preserve Details live state during compilation #31

Merged
astaranix merged 1 commit from astaranix/details-compilation-telemetry into main 2026-09-13 11:09:38 -04:00 AGit
Owner

Fix

  • Retain the last known phase, package item, and structured build counts per service invocation independently of the bounded output scrollback.
  • Treat compiler output and counter-only updates as partial observations: do not replace known phase with Unknown or erase the package name. Genuine phase transitions clear the previous phase's item.
  • Keep structured builder-log payloads as sanitized output rather than interpreting them as updater lifecycle markers.
  • Require valid shared invocation identity for live state; missing/invalid IDs remain output-only. Keep run retention bounded, include invocation identity in deduplication, and prevent older replays from regressing newer state.

Verification

  • Red/green regressions cover phase loss, package-name loss, progress eviction, builder text impersonating phase markers, cross-invocation deduplication, and missing/invalid invocation isolation.
  • Final default-feature suite: 195 passed. Final no-default-feature suite: 80 passed. Both matrices also passed in the actual Nix release/sandbox builds.
  • Replayed real unprivileged nh os build --no-nom --log-format internal-json output from a C compilation with 750 builder-output lines through the incremental parser, bounded tail, and visible/semantic projection. Phase, package, and counts survived eviction of the counter-bearing log records.
  • Built the actual Rust tray, no-default package tests, lock check, Wayland/X11 desktop smoke, and X11 geometry smoke on aarch64-linux using nixpkgs eaad089433ca2bb662274377d33df3d0e51ef28b, without writing a flake lock.
  • Formatting and staged whitespace checks passed. Final Clippy diagnostics match all 24 distinct baseline diagnostics by code, message, source file, and source text; strict -D warnings remains non-green on those pre-existing diagnostics.

Known check limitations

  • The package-audit source scan has a baseline false positive on test-only iced::advanced::clipboard::Null in details.rs. The identical assertion and matching lines were reproduced on unchanged main and the candidate; this audit is not reported as green.
  • The initial candidate's desktop smoke passed after an unchanged-artifact retry following a worker-update failure. The final geometry smoke passed after one unchanged-artifact retry following a 500-record fixture shutdown timeout. These are documented retries, not uninterrupted first-pass successes.

Scope

Updater commands, privileges, dependencies, and the legacy C++ tray are unchanged. No system activation or installed-tray restart was performed. Progress remains indeterminate when a replay never observed the Nix aggregate start; missing totals are not inferred.

## Fix - Retain the last known phase, package item, and structured build counts per service invocation independently of the bounded output scrollback. - Treat compiler output and counter-only updates as partial observations: do not replace known phase with Unknown or erase the package name. Genuine phase transitions clear the previous phase's item. - Keep structured builder-log payloads as sanitized output rather than interpreting them as updater lifecycle markers. - Require valid shared invocation identity for live state; missing/invalid IDs remain output-only. Keep run retention bounded, include invocation identity in deduplication, and prevent older replays from regressing newer state. ## Verification - Red/green regressions cover phase loss, package-name loss, progress eviction, builder text impersonating phase markers, cross-invocation deduplication, and missing/invalid invocation isolation. - Final default-feature suite: 195 passed. Final no-default-feature suite: 80 passed. Both matrices also passed in the actual Nix release/sandbox builds. - Replayed real unprivileged `nh os build --no-nom --log-format internal-json` output from a C compilation with 750 builder-output lines through the incremental parser, bounded tail, and visible/semantic projection. Phase, package, and counts survived eviction of the counter-bearing log records. - Built the actual Rust tray, no-default package tests, lock check, Wayland/X11 desktop smoke, and X11 geometry smoke on aarch64-linux using nixpkgs eaad089433ca2bb662274377d33df3d0e51ef28b, without writing a flake lock. - Formatting and staged whitespace checks passed. Final Clippy diagnostics match all 24 distinct baseline diagnostics by code, message, source file, and source text; strict `-D warnings` remains non-green on those pre-existing diagnostics. ## Known check limitations - The package-audit source scan has a baseline false positive on test-only `iced::advanced::clipboard::Null` in details.rs. The identical assertion and matching lines were reproduced on unchanged main and the candidate; this audit is not reported as green. - The initial candidate's desktop smoke passed after an unchanged-artifact retry following a worker-update failure. The final geometry smoke passed after one unchanged-artifact retry following a 500-record fixture shutdown timeout. These are documented retries, not uninterrupted first-pass successes. ## Scope Updater commands, privileges, dependencies, and the legacy C++ tray are unchanged. No system activation or installed-tray restart was performed. Progress remains indeterminate when a replay never observed the Nix aggregate start; missing totals are not inferred.
## Fix

- Retain the last known phase, package item, and structured build counts per service invocation independently of the bounded output scrollback.
- Treat compiler output and counter-only updates as partial observations: do not replace known phase with Unknown or erase the package name. Genuine phase transitions clear the previous phase's item.
- Keep structured builder-log payloads as sanitized output rather than interpreting them as updater lifecycle markers.
- Require valid shared invocation identity for live state; missing/invalid IDs remain output-only. Keep run retention bounded, include invocation identity in deduplication, and prevent older replays from regressing newer state.

## Verification

- Red/green regressions cover phase loss, package-name loss, progress eviction, builder text impersonating phase markers, cross-invocation deduplication, and missing/invalid invocation isolation.
- Final default-feature suite: 195 passed. Final no-default-feature suite: 80 passed. Both matrices also passed in the actual Nix release/sandbox builds.
- Replayed real unprivileged `nh os build --no-nom --log-format internal-json` output from a C compilation with 750 builder-output lines through the incremental parser, bounded tail, and visible/semantic projection. Phase, package, and counts survived eviction of the counter-bearing log records.
- Built the actual Rust tray, no-default package tests, lock check, Wayland/X11 desktop smoke, and X11 geometry smoke on aarch64-linux using nixpkgs eaad089433ca2bb662274377d33df3d0e51ef28b, without writing a flake lock.
- Formatting and staged whitespace checks passed. Final Clippy diagnostics match all 24 distinct baseline diagnostics by code, message, source file, and source text; strict `-D warnings` remains non-green on those pre-existing diagnostics.

## Known check limitations

- The package-audit source scan has a baseline false positive on test-only `iced::advanced:📋:Null` in details.rs. The identical assertion and matching lines were reproduced on unchanged main and the candidate; this audit is not reported as green.
- The initial candidate's desktop smoke passed after an unchanged-artifact retry following a worker-update failure. The final geometry smoke passed after one unchanged-artifact retry following a 500-record fixture shutdown timeout. These are documented retries, not uninterrupted first-pass successes.

## Scope

Updater commands, privileges, dependencies, and the legacy C++ tray are unchanged. No system activation or installed-tray restart was performed. Progress remains indeterminate when a replay never observed the Nix aggregate start; missing totals are not inferred.
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!31
No description provided.