rabadon

overview / rules / baseline-overwrite-outside

baseline-overwrite-outside

`<verb>` onto an existing file outside the project tree replaces it, and git cannot undo it there.

what it refuses, and what it lets through

In one line, from native/baseline.h: mv/cp/install onto an existing file outside the project.

The same loss, spelled without deleting anything. A moved file still exists elsewhere; what is lost is a destination that already held a file (the loss > a.txt causes). So only the last operand is judged, and only when it is an existing non-directory file outside the project tree.

From the comment in native/baseline.h above the code that decides it.

the refusal, as the agent reads it

rabadon BLOCKED this action. Rule: baseline-overwrite-outside — `<verb>` onto an existing file outside the project tree replaces it, and git cannot undo it there <verb> would overwrite '<destination>', which resolves to <resolved path>, outside the project tree (<project root>) — that file's contents are gone the moment it runs. Move it aside first, or write to a name nothing holds Adjust the approach instead of retrying the same action. (only the user can override this: they may add "baseline-overwrite-outside" 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-overwrite-outside — `<verb>` onto an existing file outside the project tree replaces it, and git cannot undo it there <verb> would overwrite '<destination>', which resolves to <resolved path>, outside the project tree (<project root>) — that file's contents are gone the moment it runs. Move it aside first, or write to a name nothing holds 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-overwrite-outside"] }

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

in the field

No record in the published field dataset (field.jsonl, 778 records, 2026-07-27 to 2026-08-26) carries this id.

The dataset is on the field page.