Repository navigation
docs(governance): a requirement written after the work, and a gate that called it absent - #115
Merged
Conversation
…at called it absent Eleven requirements locked into the v2.0 manifest are cited by nothing in the product repository, and nine of them never could have been: the requirement was written to describe work that had already merged, so no trailer on the implementing commit could have named it. Two are measurable to the second — E2-R22's implementation merged at 20:31:49 and the identifier was minted at 21:02:33; E5-R27's merged twenty-six seconds after the specification change that created it. Three parts, and none of them is the whole answer. A record satisfies the citation box where a citation was impossible (GOV-R26). Where the identifier did not exist when the work merged, a record in the implementing repository naming the identifier, the seam and the commit ticks the definition of done's first box for that requirement. It is not a citation and does not pretend to be: the implementing change stays uncited and the gate's answer about it does not change. What it buys is the thing that was genuinely missing — an identifier appearing nowhere cannot be told apart from one nobody implemented, and separating them otherwise costs every future audit a hand re-derivation of all eleven seams. Two of the eleven derivations already came back different from the audit that had attributed them. What does not qualify is enumerated rather than implied, because the risk is that this becomes a way to skip citing work that could have cited: a trailer that could have carried the identifier and did not, work still in flight, a record in the same pull request as the work, an entry naming no commit or the wrong one, and a record standing in for the requirement itself. The ordering rule is restated about the requirement rather than the change (GOV-R27). GOV-R4 ordered a behavioural change; a requirement written only to describe existing behaviour is not one, which is exactly the gap nine of the eleven walked through. It sits in change-lifecycle.md beside GOV-R4 because that is where a reader asking about order already goes. Neither rule is machine- checked, and both pages now say so about themselves. The gate names what it read (GOV-R28). spec_check.py kept only identifiers on a line matching ^\s*Spec:, so four of the eleven — A3-R23, E5-R27, E6-R14, E6-R16 — read as uncited purely for being named in a sentence instead of a trailer: a guard keyed on a line format reclassifying documented differently as not documented. The trailer stays the only form that passes, because "unlike A3-R23" and "superseded by A3-R23" name an identifier while citing none of it. What changed is that prose is now read and reported distinctly — a failing run names the identifiers it found outside a trailer and prints the trailer to add, and a passing run warns about identifiers named but left out of the Spec: line, which is the case that let a squash trim four ids to one in silence. Two of the eleven are slips, not inversions, and this deliberately does not close them. A3-R23 and the second half of E6-R14 had the identifier available and left it out of the trailer; they need a later change on the same seam carrying it, or a recorded override. No merged commit is amended and no version status moves. Spec: GOV-R26, GOV-R27, GOV-R28, ADR-0034, GOV-R11, Q-R23 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Wessel Verheij <info@nightworks.io>
|
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.



Eleven requirements locked into the v2.0 manifest are cited by nothing in the
product repository. Nine of them never could have been: the requirement was
written to describe work that had already merged, so no trailer on the
implementing commit could have named it. Two are measurable to the second —
E2-R22's implementation merged at 20:31:49 and the identifier was minted at21:02:33;
E5-R27's merged twenty-six seconds after the specification changethat created it.
Three parts, and none of them is the whole answer.
A record satisfies the citation box where a citation was impossible
GOV-R26, and a new When the requirement postdates the work section in40-quality/definition-of-done.md.Where the identifier did not exist on this repository's default branch when the
work merged, a record in the implementing repository — naming the identifier,
the seam that implements it, and the commit that merged it — ticks the citation
box for that requirement.
It is not a citation and does not pretend to be. The implementing change stays
uncited and the gate's answer about it does not change. What it buys is the
thing that was genuinely missing: an identifier appearing nowhere cannot be told
apart from one nobody implemented, and separating them otherwise costs every
future audit a hand re-derivation of all eleven seams — two of which already
came back different from the audit that had attributed them.
What does not qualify is enumerated rather than implied, because the risk is
that this becomes a way to skip citing work that could have cited: a trailer
that could have carried the identifier and did not; work still in flight; the
record and the work in the same pull request; an entry naming no commit or the
wrong one; a record standing in for the requirement itself.
The ordering rule, restated about the requirement
GOV-R27, in50-governance/change-lifecycle.mdbeside
GOV-R4, which is where a reader asking about order already goes.GOV-R4orders a behavioural change; a requirement written only to describeexisting behaviour is not one, which is exactly the gap nine of the eleven
walked through. Neither rule is machine-checked and both pages now say so about
themselves.
The gate names what it read
GOV-R28.spec_check.pykept only identifiers on a line matching^\s*Spec:, soA3-R23,E5-R27,E6-R14andE6-R16read as uncited purelyfor being named in a sentence — a guard keyed on a line format reclassifying
documented differently as not documented.
The trailer stays the only form that passes: "unlike A3-R23" and "superseded
by A3-R23" name an identifier while citing none of it, and a gate that accepted
them would grade changes as cited on a reading no reviewer agreed to. What
changed is that prose is now read and reported distinctly.
Planted, against a body naming ids only in prose and against one naming none:
Before this change both printed the identical
noSpec:citation found. Onthe passing path a trailer that lost a sibling to a squash now warns rather than
passing in silence:
What this deliberately does not close
A3-R23and the second half ofE6-R14are slips, not inversions: theidentifier existed and the trailer left it out.
GOV-R26refuses them bydesign. They need a later change on the same seam carrying the trailer, or a
recorded override.
No merged commit is amended.
70-operations/versions/2.0.0.tomland its statusare untouched.
Gates run locally:
integrity.py,manifest_check.py,commit_lint.py,dco_check.py,typos,markdownlint-cli2,lychee— all clean.Spec: GOV-R26, GOV-R27, GOV-R28, ADR-0034, GOV-R11, Q-R23