docs(adr): address four external reviews of ADR-016 and ADR-017 - #235
Merged
Conversation
Reviews arrived from the views-appwrite seat (#231, #232) and the views-faoapi/crafdapi seat (#233, #234). Both accepted; both found real defects. Two independently found the same one. VERIFIED BEFORE ACTING, since two reviews turned on it: protect_main [active] bypass_actors: NONE branches/main/protection -> 404 Branch not protected So ADR-016 §7's third justification — "the maintainer can merge over a failing check" — was false. A ruleset applies to everyone except the actors it names, and it names none. Withdrawn in place rather than deleted: the section now says there is no escape hatch, that adding a bypass actor is a console change nobody has made, and that such an override would in any case be one person's judgement available only while that person is. The coupling stands on the two reasons that survive. ADR-016: - §7a: the coupling RATE, from views-appwrite's own measurement — five registry editions in four days, four observation-only, each of which would have blocked a release. "The fix is minutes" reads differently at once a quarter than once a day. - §7b: drift tripwires (movement is the signal) versus reachability checks (movement is noise), so a reader knows which coupling they are accepting where. - G7's row is now a dated observation rather than a standing fact about someone else's default branch — a rule that stays right while its explanation rots is this document's own diagnosis. CODE, because one finding was a hole rather than a wording problem: - G4 fired only on ci_checkout=False, so the note recording that the crafdapi fetch is TEMPORARY was enforced by nothing — prose about another repo that nothing can check, which is precisely §3's failure, reintroduced for the one download the ADR calls temporary. G4 now follows the note, not the flag: any note must name a record. - Both fetched siblings gained one. crafdapi's records its temporariness and names ADR-017 §7; appwrite's records that its fetch is load-bearing and that pruning it would silently disable two checks. Mutation-proven both ways. ADR-017: - The transitional window, and the sharpest finding in the set: after the registry row lands and we switch to reading it, but before the consumer-side check exists, the green build proves only that two values this platform authored agree with each other — and the check that consulted real source would by then be deleted. Sequence now constrained: adding the registry check does not remove the source-reading one; that goes only when the consumer-side check lands. - crafd had no third leg filed and its label value is not decided yet. views-crafdapi#39 filed; Appendix B gains it as step 4, records that the CRAF'd registry row is blocked on that partner's data contract, and asks for the FAO half to land independently. - §5 no longer pre-claims views-appwrite's assent to hosting the declaration. - The consumer's check is free because the REGISTRY is public, not because this repository is — the consumer never reads us at all, which is the symmetry the rule is about. - Edition skew stated rather than assumed. - §9 scoped to declarable facts; behavioural agreement needs declared semantics instead, with views-models#327 / D-05 as the live instance. DECLINED: an interim tripwire failing CI if the manual check goes stale. The sequencing fix removes its premise — the source-reading check now survives until the consumer-side one exists — and a dated assertion needing periodic refresh is a guard whose likely first firing is a non-event, which is what G8 did in this very file before being deleted. Suite 399 passed / 40 xfailed; ruff clean. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Aug 10, 2026
Closed
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.
Reviews arrived from the views-appwrite seat (#231, #232) and the views-faoapi/crafdapi seat (#233, #234). Both accepted both ADRs; both found real defects; two independently found the same one. Consolidated response posted on #233.
The load-bearing finding, verified before acting
ADR-016 §7's third justification was false. It said the maintainer administers this repository and can therefore merge over a failing check. A ruleset applies to everyone except the actors it names, and it names none.
Withdrawn in place rather than deleted: the section now states there is no escape hatch, that adding a bypass actor is a console change nobody has made, and that such an override would in any case be one person's judgement available only while that person is. The coupling stands on the two reasons that survive on their own.
The sharpest finding — a green window that proves nothing
From #232. After the registry row lands and we switch our check to read it, but before the consumer-side check exists, the build is green and what it verifies is that two values this platform authored agree with each other — and the check that consulted the consumer's real source would by then be deleted. Strictly weaker than today, and exactly the objection ADR-016 raises against copies.
Sequence now constrained: adding the registry check does not remove the source-reading one. That goes only when the consumer-side check lands. Slightly redundant for a while, which is the right price.
One finding was a code hole, not a wording problem
From #233. G4 fired only on
ci_checkout=False— so the note recording that the crafdapi fetch is temporary was enforced by nothing. Prose about another repository that nothing can check, which is §3's failure reintroduced for the one download the ADR itself calls temporary.G4 now follows the note, not the flag: any note present must name a record. Both fetched siblings gained one — crafdapi's records its temporariness and cites ADR-017 §7; appwrite's records that its fetch is load-bearing and that pruning it would silently disable two checks. Mutation-proven both ways, including that a permanent fetch with no note is correctly left alone.
Everything else
mainvs pin-by-tagDeclined, with the reason
#234 F4 — an interim tripwire failing CI if the manual check goes stale. The sequencing fix removes its premise: the source-reading check now survives until the consumer-side one exists, so the interim state is not weaker than today. A dated assertion needing periodic refresh is a guard whose likeliest first firing is a non-event — which is what G8 did in this very file before being deleted.
Verification
Falsification probes re-run over both documents after editing; the widened G4 also caught its own stale table row in ADR-016.
🤖 Generated with Claude Code