rabadon

overview / rules / baseline-branch-delete

baseline-branch-delete

Deleting a shared branch removes it for everyone, with every commit reachable only from it, and the remote keeps no reflog to walk back through.

what it refuses, and what it lets through

a push that removes a shared branch from the remote: the empty-source refspec (git push origin :main, git push origin :refs/heads/main), --delete and -d. A deletion is not a force-push and does not carry -f, which is how it walked past both the compiled law and the --force|-f deny regex most projects write. It has its own id on purpose: a repo that silenced baseline-force-push because one person rewrites their own trunk has not agreed to that trunk being deleted, and a force-push replaces history other people already have while a deletion removes the branch and every commit reachable only from it, with no remote reflog to walk back through. Deleting a branch you own is ordinary work and passes: git push origin :feature/x, git push --delete origin my-branch. So does deleting a tag (git push origin :refs/tags/nightly) and a branch merely named after one (:main-backup).

From the floor table in docs/guard.md.

the refusal, as the agent reads it

rabadon BLOCKED this action. Rule: baseline-branch-delete — deleting a shared branch removes it for everyone, with every commit reachable only from it, and the remote keeps no reflog to walk back through git push deletes shared branch '<operand>' on the remote (written as '<operand>') — delete your own branch instead, or silence baseline-branch-delete by id Adjust the approach instead of retrying the same action. (only the user can override this: they may add "baseline-branch-delete" to disabled[] in .rabadon/guard.json or run `rabadon off`. If this rule looks wrong for the task, stop and ask the user; do not switch supervision off yourself.)

Rendered from the strings in native/baseline.h and the envelope in native/gate_pre.h (Judge::refuse). A word in <angle brackets> is filled in from the command at the moment it is refused.

in watch mode the same verdict is recorded, and nothing is stopped

rabadon (watch) would have blocked this. Rule: baseline-branch-delete — deleting a shared branch removes it for everyone, with every commit reachable only from it, and the remote keeps no reflog to walk back through git push deletes shared branch '<operand>' on the remote (written as '<operand>') — delete your own branch instead, or silence baseline-branch-delete by id Nothing was stopped. `rabadon on` makes this a real refusal.

switching it off

Only the user can switch it off, by id, in the project's guard:

{ "disabled": ["baseline-branch-delete"] }

or by pausing supervision with rabadon off, which records the change. Every other rule keeps running.

in the field

7 of the 778 records in the published field dataset (field.jsonl, 2026-07-27 to 2026-08-26) carry this id. STOP is a refusal in enforce mode; WOULD_BLOCK is the same verdict recorded in watch mode, where nothing is stopped.

eventrecords
WOULD_BLOCK5
STOP2

Counted from field.jsonl, the file the field page is built from.

rules

baseline-force-push