Skip to content

robustness: atomic manifest, distro-name validation, log-rotation recovery, console attrs - #104

Merged
zcsizmadia merged 1 commit into
mainfrom
fix/state-robustness
Sep 6, 2026
Merged

zcsizmadia merged 1 commit into
mainfrom
fix/state-robustness

Conversation

@zcsizmadia

Copy link
Copy Markdown
Collaborator

P3 batch from the v0.2.0 review (#93):

  • writeManifest now writes tmp+rename like every other state file; a crash
    mid-write no longer corrupts manifest.json into a "no install found" state.
  • distro names are validated ([A-Za-z0-9._-]+, no . or ..) at the Install
    boundary, closing the class where a name reaches the /mnt/wsl unshare
    rm -rf path or a wsl-integrate profile-script line.
  • RotatingWriter recovers a nil handle: a rotation that closed the file and
    failed to reopen left w.f pointing at a closed handle, so every later line
    vanished silently; Write now reopens on demand, rotate closes best-effort
    (a Close error no longer aborts rotation), and open() clears a stale handle
    on failure.
  • consoleHandler.WithAttrs/WithGroup are implemented instead of dropped, so
    log.With(...) context survives (attrs render inline, groups become a key
    prefix).

Closes #93

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

…overy, console attrs

P3 batch from the v0.2.0 review (#93):

- writeManifest now writes tmp+rename like every other state file; a crash
  mid-write no longer corrupts manifest.json into a "no install found" state.
- distro names are validated ([A-Za-z0-9._-]+, no . or ..) at the Install
  boundary, closing the class where a name reaches the /mnt/wsl unshare
  rm -rf path or a wsl-integrate profile-script line.
- RotatingWriter recovers a nil handle: a rotation that closed the file and
  failed to reopen left w.f pointing at a closed handle, so every later line
  vanished silently; Write now reopens on demand, rotate closes best-effort
  (a Close error no longer aborts rotation), and open() clears a stale handle
  on failure.
- consoleHandler.WithAttrs/WithGroup are implemented instead of dropped, so
  log.With(...) context survives (attrs render inline, groups become a key
  prefix).

Closes #93

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@zcsizmadia
zcsizmadia merged commit 77dc2ea into main Sep 6, 2026
1 check passed
@zcsizmadia
zcsizmadia deleted the fix/state-robustness branch September 6, 2026 02:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

State/logging/input robustness: atomic manifest, rename retries, rotation recovery, WithAttrs, distro-name validation

1 participant