Skip to content

A hand-edited instruction file is never silently overwritten

If a projection target on disk matches neither the stamp it carries nor the freshly generated output, update refuses to touch it (exit code 15), names the file, and points at update --diff <target>. Overwriting requires --force, given knowingly. Nothing you typed into a generated file disappears without a decision.

declared statusdeclared status: guaranteed Declared deterministic and blocking, implemented, and naming the behavioural test that is to prove it. Whether a recorded run supports it is the evidence verdict, shown beside it.

recorded evidencerecorded evidence: not run Declared guaranteed, and not supported by a recorded run: the test is named, and no passing run of the current inputs is recorded. how evidence is recorded

update refuses, offers a diff, and overwrites only under an explicit flag.

What it means

If a projection target on disk matches neither the stamp it carries nor the freshly generated output, update refuses to touch it (exit code 15), names the file, and points at update --diff <target>. Overwriting requires --force, given knowingly. Nothing you typed into a generated file disappears without a decision.

How it works

Before writing anything, lib/update.sh renders every target into a temporary directory and classifies each as unchanged, updatable (the content on disk matches the hash its own stamp names), creatable (absent), or hand-edited (the content differs from its stamp, or there is no stamp at all). One hand-edited target aborts the whole run before any write, so a partial update cannot occur. --dry-run prints the plan without writing.

How to see it

echo "my own rule" >> CLAUDE.md
majordomus update
# REFUSE projection CLAUDE.md — current content matches neither its own stamp nor the new output (hand-edited?); use --diff CLAUDE.md, then --force
majordomus update --diff CLAUDE.md
majordomus update --force

What it does not cover

--force is a deliberate override; Majordomus records nothing about the discarded edit beyond the diff you were shown.

Why it exists

The general rule for every command: no silent destructive behaviour. The same protection covers init (refuses an existing installation) and start (refuses while a task is active).

Detail rendered from docs/claims/no-silent-overwrite.md.

From the statement to the proof

  1. 1 · the public statement

    A hand-edited instruction file is never silently overwritten

    Made on Policy, Projection.

  2. 2 · the canonical claim

    no-silent-overwritedeclared status: guaranteed in docs/CLAIMS.yaml

    Defined in read it on this site · docs/CLI.md

  3. 3 · the implementation

    lib/update.sh · majordomus update

  4. 4 · the test and the scenarios

    Test: test/cases/03_update.sh

    Executed in Adopt a repository that already has its own rules, Keep every provider bootstrap thin, generated and within budget.

  5. 5 · the recorded runs

    recorded evidence: not run how evidence is recorded

Verify it yourself

The test runs in a disposable temporary repository and asserts the behaviour, not a string in the source.

from a clone of the repository
bash test/run.sh 03_update

Where this claim is used

Related claims same implementation

The moments this answers

Searches the titles and descriptions of every page this site publishes.