Skip to content

UN-FAO delivery: is the sink still gated? The C-161 closure notice you were waiting on was delivered 2026-07-20 #294

Description

@Polichinel

From the views-faoapi seat (Hop-B consumer). Two questions and one offer — no code change is being requested in this repo.

What I am asking for

  1. What is the current delivery state for un_fao? Specifically: has a delivery run since 2026-07-27, and did it upload — both legs?
  2. If uploads are still gated by UPLOAD_ENABLED, is anything still blocking enabling it? If something is, I would like to know what, because from my side the stated precondition has been met for a month and I would rather find out I am wrong than keep assuming.

The precondition you set has been met since 2026-07-20

views_postprocessing/unfao/product.py states the interlock and names its own gate:

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.

That notice was delivered on 2026-07-20, as a seat report addressed to this repo among others — views-faoapi/reports/seat_reports/2026-07-20_guard_live_unfreeze.md. It was written directly against this seat's stated precondition ("nothing uploads yet: UPLOAD_ENABLED=False until your C-161 closure notice"), and its headline was:

Hop-B uploads to unfao_bucket are un-frozen. views-postprocessing may enable its sink, subject to its own run gating.

with the evidence: the §11.4 legacy transition guard live in production (v1.0.2, verified), LEGACY_ARTIFACT_TYPE="model" pinned on every category selection, and contract artifact types (sampled_forecast_{shard,manifest,sidecar}) provably disjoint from model — so the deployed selector cannot seize a contract artifact.

UPLOAD_ENABLED: bool = False is still what main carries today.

And the residual that kept it partly open has since closed too

The 2026-07-20 notice left one thing open on our side: manifest-first selection was not yet built, so a torn/partial run could in principle have been served. That is done. ADR-033 (fail-visible forecast selection) is Active, manifest-first selection shipped, and the guard went to production in v1.5.4 on 2026-08-21.

So both halves of the sequencing gate are closed from the consumer side. If there is a third condition I do not know about, that is exactly what I am asking.

What I can see, and what I cannot

Being precise here, because I nearly wrote this issue as an accusation and the evidence does not support one.

What I can see: a local Appwrite cache, last written 2026-08-11. Its newest artefacts are a wire-contract forecast run rusty_bucket_forecasting_20260727_095355 (108 shards + manifest + sidecar) and historical_dataset_20260727_211747.parquet. Both from 27 July — which means uploads were happening then, presumably via the per-run wire_upload_enabled override.

What I cannot see: the bucket's actual current contents. My cache is 11 days stale and I have not queried live. So I am not claiming nothing has been delivered since July — I am asking.

Why it matters right now

FAO's contracted monthly action is a full re-fetch of the historical series, not an append, because upstream event data is retro-updated — which is the same thing your #272 Q2 is asking about from the other end.

views-faoapi is mid-epic making that fetch work end to end (faoapi #438). The consumer-side defects are fixed and merged. But the whole thing has a failure mode no amount of consumer work can fix: if no new delivery arrives, FAO fetch successfully and receive last cycle's data, every month, silently. A stale-but-complete artefact looks exactly like a healthy one to everything except a freshness check — and until this week there was no freshness check.

There is one now (faoapi #439): it asserts that the served artefact was delivered recently and that its newest month has advanced. It will start failing in early September if no August delivery lands. That is the check working, not the check being wrong — but I would much rather resolve this before it fires than explain an alert.

What a delivery needs to include — and your code already does it

Both legs. The consumer's /historical/* endpoints and the s_actual column are fed by the category="historical" artefact, and a forecast-only delivery leaves them frozen (our register C-169).

This is already handled here, better than we asked for. _save_contract uploads category="historical" alongside the forecast, and _assert_delivery_is_findable then asks the store the question the consumer asks and refuses silence — with the comment "nothing above observes the OUTCOME of an upload. Every call reported success in run-0 too, and the historical leg still stranded." That is the right guard and it addresses the failure mode rather than the symptom. Noted with appreciation; nothing to change.

What I am not asking for

  • No contract change. ADR-013 is fine as it stands.
  • No new code in this repo, unless the answer to Q2 reveals something.
  • Not asking you to enable it on my say-so if your own run gating says otherwise — that is your call and your interlock exists for good reasons.

Related

Happy to be told I have misread the state — that answer is worth as much to me as the enablement.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions