From 1292d6b7d4c3c7118e3a874bb813af0d695ac1f0 Mon Sep 17 00:00:00 2001 From: Polichinl Date: Wed, 26 Aug 2026 15:16:31 +0200 Subject: [PATCH] fix(product): the upload interlock named a gate that no longer gates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both products documented a precondition on first live enablement, and both had been satisfied: unfao "faoapi's C-161 closure notice" met 2026-07-20; the residual it left open shipped in faoapi v1.5.4 on 2026-08-21 crafd "the views-crafdapi selection guard met 2026-08-12, views-crafdapi#53; deployed in production" their production serves real data Neither named the gate that actually holds: views-appwrite#171, the non-production Appwrite decision, without which the upload path cannot be rehearsed against a real store at all (#18). This is not cosmetic staleness. product.py is the single source of truth for this switch, so a reader asking why nothing uploads got a wrong answer — in both partners, pointing at two different innocent repositories. It is the mechanism by which views-faoapi spent a month believing the hold was on their side before asking (#294, 2026-08-22). Found by /falsify, 2026-08-26. Its two stubs are disposed of in the same change rather than carried: S5 DISCHARGED — this fix is what it asked for. S6 WITHDRAWN — it asserted the correction-procedure banner disappears, which cannot happen until FAO answers Note 07 Decision B.1. A test that can only go green on an external party's reply is decoration (C-102), and #292 tracks the item better. Withdrawing it also corrects the audit: the nine mislabelled cells WERE disclosed to FAO as Note 07 Topic G on 2026-08-21, and the audit reported that disclosure as missing. Kept short deliberately. The first draft ran to twenty lines and put views-postprocessing/{unfao,crafd} over the 700-line partner budget that test_doc_accuracy enforces. The budget was right and the prose was not; the reasoning that did not fit lives in this message and on #294. Noted, not fixed: crafd/ now sits at 699/700. The budget exists to notice exactly that, and the next line added there will fail. Out of scope here. Co-Authored-By: Claude Opus 5 (1M context) --- tests/test_falsification_release_readiness.py | 28 +++++++++++++++++++ views_postprocessing/crafd/product.py | 8 ++++-- views_postprocessing/unfao/product.py | 8 ++++-- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/tests/test_falsification_release_readiness.py b/tests/test_falsification_release_readiness.py index a076698..ac4a2fc 100644 --- a/tests/test_falsification_release_readiness.py +++ b/tests/test_falsification_release_readiness.py @@ -118,3 +118,31 @@ def test_the_publish_job_cannot_ship_untested_code(): "publish validates only version-greater-than-PyPI; nothing establishes that " "the code being shipped passes its own suite" ) + + +# ───────────────────────────────────────────────────────────────────────────── +# Third audit, 2026-08-26. Claim: *"nothing more to do here now; no pressing GH +# issues or registered risk; no repos upstream or downstream blocked by this repo."* +# +# Verdict: FALSIFIED. Both of its stubs are disposed of here rather than carried: +# +# **S5 DISCHARGED 2026-08-26.** It asserted that neither product names a precondition +# that has already been satisfied. Both did — `unfao` cited faoapi's C-161 closure +# notice (delivered 2026-07-20), `crafd` cited the views-crafdapi selection guard +# (views-crafdapi#53, closed 2026-08-12). Both docstrings now name the gate that +# actually holds, views-appwrite#171. Removed by hand rather than left to XPASS. +# +# **S6 WITHDRAWN 2026-08-26 — it was not a guard that could fire.** It asserted the +# "step 4 is incomplete" banner disappears from `docs/operations/correction_procedure.md`. +# That banner cannot come down until FAO answers Pre-Release Note 07 Decision B.1, which +# is not an action available in this repository at any effort. A test that can only go +# green on an external party's reply is decoration (C-102), and **#292 already tracks the +# item with more precision than an assertion can carry** — including the part the audit +# got wrong: the nine mislabelled cells (views-datafactory#387) **were** disclosed to FAO +# as Note 07 Topic G on 2026-08-21. The audit reported that disclosure as missing. It +# was not. +# +# Two further findings from that audit are facts about the issue tracker, not the tree, +# and are recorded in the sprint rather than as assertions: views-faoapi is blocked +# downstream (#294), and #272's second question is unanswered. +# ───────────────────────────────────────────────────────────────────────────── diff --git a/views_postprocessing/crafd/product.py b/views_postprocessing/crafd/product.py index b378a9a..077c435 100644 --- a/views_postprocessing/crafd/product.py +++ b/views_postprocessing/crafd/product.py @@ -27,8 +27,12 @@ it is a contract amendment. - ``UPLOAD_ENABLED`` — the §11.4 upload interlock: ``False`` means the sink writes artifacts locally and never calls the store. Overriding requires an explicit - launch-config declaration, and the first live enablement is gated on the - views-crafdapi consumer's selection guard being deployed in production. + launch-config declaration. The consumer-side precondition this once named — the + views-crafdapi selection guard in production — was **met 2026-08-12** + (views-crafdapi#53). + What gates it now is **ours**: the upload path has never run against a real store — + þing-02 D2 forbids testing against production and the org holds no other project + (#18). That decision is **views-appwrite#171**. """ from __future__ import annotations diff --git a/views_postprocessing/unfao/product.py b/views_postprocessing/unfao/product.py index c9bbcac..dd6af5c 100644 --- a/views_postprocessing/unfao/product.py +++ b/views_postprocessing/unfao/product.py @@ -21,8 +21,12 @@ contract amendment. - ``UPLOAD_ENABLED`` — the §11.4 upload interlock: ``False`` means the sink writes artifacts locally and never calls the store. Overriding requires an explicit - launch-config declaration (wired in the sink story), and the first live - enablement is gated on faoapi's C-161 closure notice. + launch-config declaration (wired in the sink story). The consumer-side precondition + this once named — faoapi's C-161 closure notice — was **met 2026-07-20**, its + residual shipping in faoapi v1.5.4 on 2026-08-21. + What gates it now is **ours**: the upload path has never run against a real store — + þing-02 D2 forbids testing against production and the org holds no other project + (#18). That decision is **views-appwrite#171**. """ from __future__ import annotations