Repository navigation
S7: delete both consumer source-reads — the category is wrong, proven twice in 24h #248
Description
Re-scoped 2026-08-12. The first draft asked "close it or own it" and leaned toward restoring the source read. An expert review and a second live breakage settled it: the category is wrong, and this story is a deletion.
Part of #241, Gate 1 — blocks PR #240. Registers C-92, C-94; sharpens C-87.
The evidence, which is now conclusive
| date | repo | what they did | what happened here |
|---|---|---|---|
| 2026-08-11 | views-faoapi | tidied managers/api.py — literal → named constant |
our FAO source-read went red |
| 2026-08-12 | views-crafdapi | APIPathManager(CONSUMER_DOCUMENT_NAME, validate=False) — the identical refactor |
our crafd source-read is red on development right now |
Two repositories, the same refactor, 24 hours apart, both times because their code got better. The regex was measuring their code quality and reporting it as our failure. ADR-017 §7 already said we were never entitled to depend on another repository's file layout; this is that prediction landing twice.
There is no version of this check that survives. A repo that renames a constant, extracts a helper, or moves a file breaks it — and every one of those is an improvement we would be penalising.
Work
- Delete
test_the_consumer_still_filters_on_the_name_until_it_checks_itselfand_CONSUMER_FILTER,_CONSUMER_PATH_MANAGER,_CONSUMER_SELF_CHECK_PENDING— both partners, the whole mechanism. - Drop the
views-crafdapisibling checkout from.github/workflows/run_pytest.ymland fromSIBLINGS, if that check was its only consumer — measure, do not assume. Update the note, which currently states a retirement condition contradicting ADR-017 §5. - Register the gap honestly (C-92) with an owner and a trigger. Do not pretend the consumer-side checks cover it — they do not:
| link | owner | mechanism | status |
|---|---|---|---|
| our upload writes name N | us | code | ✅ |
| N == registry row | us | test_the_declared_consumer_name_matches_the_registry |
✅ landed |
| their constant == registry row | them | views-faoapi's tests/test_seam_contract_binding.py |
✅ landed (their development) |
| document is findable by N in the store | us | nothing | ❌ deferred → C-94 |
| their query uses their constant | them | nothing | ❌ ask for it |
- File one issue each on views-faoapi and views-crafdapi: their registry-binding check binds a constant; ask them to bind the query to that constant. Note for views-faoapi that
prediction/manager.py:117applies the name filter conditionally (if hasattr(...) and model_name), so a falsy name drops it silently. This is a condition of being a consumer, statable in the contract, and it works for a third-party consumer too.
What is deferred, and why it is the right deferral
The expert review's answer is a producer-side read-only findability preflight: after upload, query the store read-only for a document whose name equals the declared label, assert non-empty, log and raise. It is legal — the registry's [test_environment] table says "read-only preflight validation is the only permitted live check" — the APPWRITE_READ_API_KEY slot already exists, and it is the only mechanism that survives a third-party private consumer, because it asks nothing of them.
It is still deferred, and honestly so. It needs a read credential wired into the launcher, which is an operator action and not a code change; it adds a live network call to the delivery path; and delivery works today. Building it now would be building the right thing at the wrong time.
Registered as C-94. Trigger: a delivery is reported empty, or APPWRITE_READ_API_KEY is provisioned for the launcher. Owner: this repository.
Acceptance criteria
- No test in this repository parses another repository's source. Verified by grep.
- The suite is green on
development— including the currently-red crafd case, green by deletion of the wrong check, not by weakening an assertion. -
SIBLINGSand the workflow agree, and no note states a retirement condition that contradicts an ADR. - Issues filed on views-faoapi and views-crafdapi, each with file:line evidence.
- C-92 records the gap, the table above, and C-94's trigger.
-
wc -l tests/test_product.pyis lower.
Note on sequencing
The crafd test is red now. Do not xfail it to buy time — land this story. It is a deletion; it is faster than the workaround.
Labels
story, implementation, documentation
Activity
[-]S7: the FAO consumer-filter gap — close it or own it[/-][+]S7: delete both consumer source-reads — the category is wrong, proven twice in 24h[/+]Polichinel commentedon Aug 12, 2026
Cross-repo half filed ahead of the local work, per this issue's own note that their response time is not ours:
One thing #55 changes about this issue's scope. ADR-017 §5 sequenced our crafd source-read retirement behind views-crafdapi#53. That constraint dissolves rather than resolves: we are deleting the check because the category is wrong, not because #53 landed. So this issue no longer waits on #53 at all — it should say so, and the ADR-017 §5 sequencing note needs an erratum when the local half lands.
Polichinel commentedon Aug 12, 2026
Landed in #254. Both source-reads gone, the crafdapi fetch with them, the suite fully green for the first time in this arc.
The correction worth carrying forward: my first ADR-017 §5 erratum claimed the sequencing constraint dissolved. It did not — views-crafdapi#53 closed six hours before that commit, and
8615574/0c493aeeach satisfied step 3 and broke our check in one edit. The constraint was discharged, not repealed, and the deletion stands on §7 alone.Gap registered as C-92; asks filed as views-faoapi#390 and views-crafdapi#55.
Merge pull request #254 from views-platform/fix/248-delete-the-consum…
Pre-release truth pass: a fired trigger, a permission read as a prohi…