Skip to content

Say when Windows starts an ended service again, before and after the run - #38

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

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

Conversation

@donislawdev

Copy link
Copy Markdown
Owner

What changes

  • The recovery list is read with its delays. IEndingFactsReader.ReadRecovery returns RecoveryItem (kind and delay) instead of bare kinds.
  • The recoveryRestarts warning says when, beside every entry: Spooler (5 s later), W32Time (60 s or 120 s later). Every different delay in the list, in list order, because which item runs depends on a failure count Windows does not hand out (SERVICE_FAILURE_ACTIONSW on learn.microsoft.com). Carried on PlanWarning.Restarts, empty for every other kind.
  • After a run that ended a process, the report says who comes back (PlanRun.ComingBack): the terminal in a paragraph under the steps, the window as a second sentence of the notice. Left out: an entry that reported Stopped before the ending, the entry Windows started again at once (its own line says so), and anything the run started again itself. A neighbour still in StopPending when the process went is named - it never reported Stopped, so by the documented rule it fails with the process.
  • No field is added to the JSON. The delays reach --json only inside the warning's message.

Checked

  • Narrow test run: core 54, command line 18, window 28, architecture 182, integration 2 - all green. RecoveryContractTests now holds the delays against sc.exe qfailure RpcSs.
  • 29 of 29 mutation entries caught (16 new, 2 re-anchored, neighbours).
  • bws kill Spooler --dry-run on a real machine: Spooler (5 s later), matching sc.exe qfailure Spooler (5000 ms twice). WpnService shows its five delays, W32Time its two.

Not checked

  • The line after a run on a real service manager - it needs a process to be ended, so a throwaway machine.
  • The full gate.

🤖 Generated with Claude Code

The recovery list is now read with the delay of every item. The warning that
ending a process makes Windows start a service again names the delays beside
each entry ("Spooler (5 s later)", "W32Time (60 s or 120 s later)"), every
different one, because which item runs depends on a failure count Windows does
not hand out.

After a run that ended a process, the report says who comes back and when: the
terminal in a paragraph under the steps, the window as a second sentence of the
notice. An entry that reported Stopped before the ending, one Windows started
again at once and one the run started again itself are left out. The rule is
Microsoft's own - a service fails when its process ends without reporting
Stopped - so a neighbour still in StopPending when the process went is named.

No field is added to the JSON - the delays reach it only inside the message.

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: 8a1cfce2-a501-421a-9f75-f17127fccef0


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 0429e10 into main Sep 30, 2026
8 checks passed
@donislawdev
donislawdev deleted the fix/stability-package-501 branch September 30, 2026 12:38
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