Skip to content

docs(adr): address four external reviews of ADR-016 and ADR-017 - #235

Merged
Polichinel merged 1 commit into
developmentfrom
docs/adr-016-017-review-findings
Aug 10, 2026
Merged

docs(adr): address four external reviews of ADR-016 and ADR-017#235
Polichinel merged 1 commit into
developmentfrom
docs/adr-016-017-review-findings

Conversation

@Polichinel

Copy link
Copy Markdown
Collaborator

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

protect_main [active]   bypass_actors: NONE
branches/main/protection -> 404 Branch not protected

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

finding source resolution
coupling rate unstated #231 F2 §7a — five registry editions in four days, four observation-only, each would have blocked a release
moving-main vs pin-by-tag #233 F3 §7b — drift tripwires vs reachability checks
G7's explanation embeds a decaying fact #231 F3 now a dated observation
crafd's third leg never filed #232 F2 views-crafdapi#39 filed; Appendix B step 4
crafd's label value isn't decided yet #234 F1 Appendix B records the block; asked views-appwrite#75 to split the halves so the FAO row lands independently
ADR pre-claimed another repo's assent #232 F3 §5 now "subject to views-appwrite accepting"
wrong fact carrying §5 item 3 #234 F3 it is free because the registry is public, not because we are — the consumer never reads us at all
edition skew unstated #234 F2 stated: the label is contract-immutable
§9 over-reaches for behaviour #232 F4 scoped to declarable facts; semantics for behaviour, with views-models#327/D-05 named

Declined, 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

ruff check .        # clean
pytest -q           # 399 passed, 40 xfailed

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

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant