Skip to content

Compare snapshots on configuration, leave session copies out, spell JSON values as the listing does - #39

Merged
donislawdev merged 1 commit into
mainfrom
fix/stability-package-e
Sep 30, 2026
Merged

donislawdev merged 1 commit into
mainfrom
fix/stability-package-e

Conversation

@donislawdev

Copy link
Copy Markdown
Owner

Package E of the stability report: snapshot comparison and the spelling of values in machine-readable output.

What changes for somebody using the tool

  • snapshot diff --exit-code and "differs" answer about configuration only. An entry added or removed, or one set up differently, ends with 5. An entry that only stopped or started by itself is still reported, under "Changed" and marked as running state, and no longer fails a nightly check.
  • Per-user session copies are left out of a comparison and counted - one line at the top of the text report, "instancesLeftOut": {"earlier": n, "later": n} in --json. Matched by the role the type bits give an entry, never by its name. The template is still compared.
  • Snapshot schema 5. The metadata records operatingSystemVersion (Windows down to the monthly update, e.g. 10.0.26200.9550) and namesLanguage (the language the service manager names things in). Version 4 files are still read and compared, with a line saying what they do not record. A version 5 file is refused by 0.3.0.
  • New caveats in the comparison: a different Windows update, a different account, a different names language (display names and descriptions are then not compared on any entry), and notKnown in --json for metadata one side does not carry.
  • Fixed: a snapshot with a null in an entry's notRead list gets a sentence naming the entry and exit code 2 instead of a null dereference and exit code 1. snapshot create given a folder refuses at once instead of verifying every signature and then failing with "Access to the path is denied".
  • Breaking in 0.x: every enumerated value in the JSON of a plan (action, operation, reason, outcome, skippedBecause, warning kind) and of a comparison (group) is spelled the way the listing and the snapshot spell theirs - "Succeeded" beside "Running". Table of old and new values in CHANGELOG.md.

How it was checked

  • Narrow test runs of the classes this touches (core, command line, architecture, the text guards of the window, integration) - green after two passes. The full gate was not run.
  • Mutations of the new and re-anchored entries and their neighbours: 51 of 51 caught.
  • On a real machine, read-only: snapshot create <folder> refuses in 239 ms with exit code 2 (1545 ms and "Access denied" before), a fresh snapshot compared with the live machine reports nothing and 23 session copies left out on each side, a hand-damaged notRead gets the sentence and exit code 2, a file rewritten as schema 4 compares with exit code 0 and the notKnown line, bws restart AxInstSV --dry-run --json writes Restart, Start/Requested and RestartOnlyStarts.

Not checked

  • Whether the service manager names services in the calling user's own display language - only the calling thread's language was measured (it has no effect). Two accounts on one machine are caught by the "different account" caveat.
  • A comparison of two real machines with different system languages.

🤖 Generated with Claude Code

…ll JSON values as the listing does

Snapshot comparison:
- --exit-code and "differs" answer about configuration only. An entry that
  differs only in running state is still reported and no longer ends with 5.
  The text report asks a separate question before saying "No differences.",
  so a state-only change is never hidden. A new integration test runs exit
  code 5 on a real snapshot and two copies edited in one field each - nothing
  in the suite ran it before.
- Per-user session copies (role Instance, read from the type bits, never from
  the name) are left out on both sides and counted: one line in the text,
  "instancesLeftOut" in --json. The template is still compared.
- Snapshot schema 5: the metadata records the Windows version with the monthly
  update (UBR from the registry, the only place Microsoft documents it) and
  the language the service manager names things in (the system's preferred UI
  language - the manager was measured not to follow the calling thread's
  language). Version 4 files are still read, with both fields "not known".
- New caveats: a different update, a different account, a different names
  language (display names and descriptions are then left out of every entry),
  and "notKnown" for metadata one side does not carry.
- A null in an entry's "notRead" list is refused with a sentence naming the
  entry, instead of a null dereference and exit code 1.
- snapshot create given a folder refuses at once, before the signature pass.

Machine-readable output:
- Breaking in 0.x: every enumerated value in the JSON of a plan (action,
  operation, reason, outcome, skippedBecause, warning kind) and of a
  comparison (group) is spelled the way its enumeration spells it, like the
  listing and the snapshot. Table of old and new values in CHANGELOG.md.
  MachineDocumentValueGuards puts every member of every enumeration through
  both writers.

README, the usage text and the site say what exit code 5 now means.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 30, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Advanced

Run ID: b7522d93-087d-456d-9513-41c81a73c0fa

  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@donislawdev
donislawdev merged commit 60c93a6 into main Sep 30, 2026
8 checks passed
@donislawdev
donislawdev deleted the fix/stability-package-e branch September 30, 2026 14:23
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.

1 participant