How a confirmation is recorded
sheriff confirm <sid>... appends to specs/_confirmations.jsonl one line per node — its sid, the fingerprint of its wording and the owner confirming it, who is the email git is configured with — and sets the node's status to checked. It refuses a node whose owner is someone else, naming that owner, and appends nothing for a node where the latest line for that fingerprint is already a confirmation by its owner.
sheriff confirm --withdraw <sid>..., which anyone may run, appends a line withdrawing the confirmation of the wording the node holds, naming as by whoever withdraws it, the email git is configured with, and empties its status. Of the lines for one fingerprint, the latest decides.
The fingerprint is a SHA-256 hash of one canonical string holding the node's title, text and reason and the values its kind carries beside them, but neither the owner a node names nor what the reindex builds, the keys of an object sorted and a list in its own order. An owner is named by an email.
One line appended per confirmation merges between branches without a conflict and keeps every confirmation ever given, and with the latest line deciding, a withdrawal cannot be undone by typing a status back. SHA-256 is a hash every language provides. The email git is configured with is the one a commit names its author by, so a confirmation and the commit carrying it name the same person. The owner a node names says who reads its wording, not what the wording is, and what the reindex builds is no one's wording.
The links it makes
The links made to it
The decisions taken on it
- Problem
Confirmations were kept in one person's files outside the repository, guarded by that person's hooks, so nobody else could check a status and a lost file would have emptied every status.
- Ruling
The owner: a confirmation is kept with the specification, names who gave it and is accepted only under that owner's signature.
- Problem
The line withdrawing a confirmation named whoever withdrew it as its owner, though anyone may withdraw one.
- Ruling
Following the owner's ruling on §s-5ah25f6gy99panq: anyone runs the withdrawal, and its line names whoever withdraws it as by.
The tests bound to it
- skills/tools/test/e2e/commands.test.ts · s-v4qus7raqnwzneb sheriff confirm confirms as the email git is configured with, and refuses where that is not the owner
- skills/tools/test/unit/confirm.test.ts · s-v4qus7raqnwzneb appends nothing where the latest line for that wording is already its owner's confirmation
- skills/tools/test/unit/confirm.test.ts · s-v4qus7raqnwzneb appends one line per node, naming its sid, its fingerprint and the owner confirming it, and sets it checked
- skills/tools/test/unit/confirm.test.ts · s-v4qus7raqnwzneb keeps the confirmations one JSON object to a line, appended
- skills/tools/test/unit/confirm.test.ts · s-v4qus7raqnwzneb lets anyone withdraw a confirmation, its line naming whoever withdrew it as by
- skills/tools/test/unit/confirm.test.ts · s-v4qus7raqnwzneb refuses a node of the SpecSheriff guidelines outside the repository they are written in, and writes nothing
- skills/tools/test/unit/confirm.test.ts · s-v4qus7raqnwzneb refuses a sid no node holds, and a node no owner is named for
- skills/tools/test/unit/confirm.test.ts · s-v4qus7raqnwzneb withdraws a confirmation by a line of its own and empties the status, and the latest line decides
- skills/tools/test/unit/model.test.ts · s-v4qus7raqnwzneb fingerprints a node's wording and the values its kind carries, not its owner or what the reindex builds