Skip to content

Refuse to end a process under running dependants and ask the entry before its neighbours - #33

Merged
donislawdev merged 1 commit into
mainfrom
fix/stability-package-b
Sep 29, 2026
Merged

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

Conversation

@donislawdev

Copy link
Copy Markdown
Owner

What changes for somebody using the tool

  • bws kill NAME and the window's Force stop refuse while services depending on the entry, or on anything sharing its process, are running outside the plan. The sentence names them. --dependents still stops the entry's own dependents as part of the plan.
  • bws kill NAME --force --dependents is refused (exit code 2) before the machine is read. Its preview listed the dependents as stopping while the run skipped their stops and ended the process under them.
  • A force stop asks the entry to stop first, and the services sharing its process only if the entry did not stop. A neighbour refusing its stop no longer skips the entry's own polite stop, and a dependant that refuses holds the process ending back.
  • Steps not needed are reported with "skippedBecause": "processStays" in the JSON of a run - a new value, nothing existing changed - and the run still counts as completed.
  • The forced preview names a critical service arriving with the cascade, a neighbour that does not accept a stop, and a disabled neighbour a forced restart could not bring back.
  • The way back after a forced stop names the services that ended with the process, also under --force. A forced restart with --force no longer hands back "stop it" for a neighbour that was running before and after.
  • The equivalent command of kill carries --dependents, and the window offers no Force stop after error 1051 or 5.

How it was checked

  • New tests: ForcedStopRefusalTests (11 cases), ForcedRunTests (8), one each in ArgumentRefusalTests, EquivalentCommandTests and ForcedStopGuards (two cases). Existing forced stop tests moved to an entry nothing depends on, because they are about other properties and would otherwise meet the new refusal first.
  • Narrow runs: core 193 of 193 in the plan and run classes, command line 27 of 27, window 64 of 64 plus text guards 20 of 20, architecture 182 of 182.
  • Mutation registry: 20 new entries, 6 re-anchored, 9 neighbours of the topic - every one proved itself. One first came back MISSED and showed a redundant condition, which was removed.

Not in this change

  • Listing the process again just before it is ended, and a dependant started between the preview and the run - planned with the recovery actions package.
  • A real kill on a throwaway machine. Everything here was checked against the service manager double.

🤖 Generated with Claude Code

…fore its neighbours

A forced stop no longer ends a process that something outside the plan still
runs on. The plan refuses while entries depending on the target, or on an
entry sharing its process, are running and not stopped by the plan. An
unreadable answer about a neighbour's dependants is a casualty list known to
be short, and refused like the target's own.

kill --force --dependents is refused before anything is read, and the core
throws on that shape: skipping the courtesy skipped the cascade's stops too,
so the preview promised dependants stopped and the run ended the process
under them.

The steps now run cascade, the entry itself, its neighbours, then the ending.
A cascade step that does not arrive holds the neighbours and the ending. A
neighbour refusing its stop holds nothing back, since it dies with the process
either way. A neighbour is asked only while the entry is still held by the
process the plan named - otherwise it is skipped as processStays, a fourth
skip reason, and the run still counts as completed.

The forced preview names critical entries arriving with the cascade, a
neighbour that does not accept a stop, and a disabled neighbour a forced
restart could not bring back. The ending step carries the neighbours it takes
with it, so the way back names them even under --force - a forced restart
with --force used to hand back "stop it" for a neighbour running before and
after. The equivalent command of kill carries --dependents, and the window
offers no forced stop under error 1051 or 5.

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

coderabbitai Bot commented Sep 29, 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: ac4f19de-7624-44c6-9685-c45886a864a4


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 5950068 into main Sep 29, 2026
8 checks passed
@donislawdev
donislawdev deleted the fix/stability-package-b branch September 29, 2026 21:59
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