Record the operator's correction decisions; put the FAO half to them formally - #207
Merged
Conversation
…lf to them formally Simon Polichinel von der Maase is responsible for contacting the FAO when a delivery is found wrong — direct email, not an automated alert, as soon as the scope is established rather than after a correction is prepared. The intended treatment of a bad delivery is WITHDRAWAL. What is implemented is SUPERSESSION, and the procedure now states that gap in the section an operator reads at 22:00, because believing a bad delivery becomes unretrievable when it does not is worse than knowing it stays. Withdrawal has no wire mechanism: it needs an ADR-013 amendment and matching views-faoapi work, and whether that is worth building depends on FAO's answer about audit requirements. Both are put to FAO as Pre-Release Note 07 Topic B, with a table of the interim defaults marked as placeholders rather than policy — including the one that is the option we are NOT recommending. Recipients are deliberately not in this repository. It is public. Naming a responsible person on our side is one thing; publishing an external organisation's individual email addresses to a public repo as a side effect of documenting a runbook is another. The contacts live in the FAO-02 project materials. tests/test_doc_accuracy.py now refuses @fao.org anywhere in the repo, mutation-proven. The doc-accuracy guard fired on this change, which is what it was written for: it required that removing the "not decided" marker be accompanied by the decision. Its replacement guards the subtler failure — a half-answered question quietly becoming a whole answer, so the outstanding half stops being asked. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…uard Third instance in this epic of a guard catching the prose that explains it, after S3's retired contract name and S5's ledger-schema docstring. The fix is the same each time: name the thing without spelling it. Worth keeping the note rather than silently rewording, because the alternative each time was to weaken the guard, and three times would have made it worthless. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #206 (S8). The operator answered the two questions S8 surfaced — one fully, one partially.
Decided
Who notifies: Simon Polichinel von der Maase, direct email, as soon as the scope of the error is established. Not an automated alert — a correction needs judgement about scope and impact that a machine message cannot carry.
Treatment of a bad delivery: withdrawal is the intended policy.
The gap that now has to be visible
Intended: withdrawal. Implemented: supersession.
Supersession is in force because it is what the wire does, not because it was chosen — and it is the option we are not recommending. Withdrawal has no mechanism: an ADR-013 amendment plus matching views-faoapi work.
The procedure states this in the section an operator reads at 22:00. Believing a bad delivery becomes unretrievable when it does not is worse than knowing it stays.
Put to FAO formally
Pre-Release Note 07, Topic B — two decision points in the series' house style, plus a table of interim defaults marked as placeholders rather than policy:
Compiles clean, 8 pages.
One thing I changed on my own judgement — flagging it
This repository is public. I put the contacts in the pre-release note (which goes to the FAO, where naming them is appropriate) and not in the repo.
Naming a responsible person on our side is one thing. Publishing an external organisation's individual email addresses to a public GitHub repo as a side effect of documenting a runbook is another, and not something to do by default. The repo doc names Simon and points at the project materials.
tests/test_doc_accuracy.pynow refuses@fao.organywhere in the repo. Mutation-proven:If you want the addresses in the repo, say so and I will remove that guard — it is your call, not mine.
The guard fired on this change, as designed
S8's test asserted the document said
"not decided", with a docstring instructing whoever removed that marker to replace it with the decision. That is exactly what happened. Its replacement guards the subtler failure: a half-answered question quietly becoming a whole answer, so the outstanding half stops being asked.Verification
🤖 Generated with Claude Code