You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Correction, 2026-08-25 — the premise below is measured on one column of three, and it is too strong.
July 2026 is not a zero-filled month. It carries 6 non-zero cells of 64,742: lr_ged_sb = 0.0 (the figure below, correct) but lr_ged_ns = 12.0 and lr_ged_os = 3.0. So it is a month reported at ~1% of normal coverage, not a month nobody reported.
That confirms candidate 1: the producer's inferred boundary (C-355) saw those six cells, declared July observed, and the clip kept it — correctly, by its own contract. Nothing in this repository was broken. Candidates 3 and 4 are eliminated from code. Full working in this review; the original body is preserved below unchanged.
CRAF'd received a historical artifact containing a complete, zero-filled month for a month nobody had reported — July 2026, all 64,742 cells, sum(lr_ged_sb) = 0.0 — indistinguishable from a month with genuinely no fatalities. Filed downstream as views-datafactory#476 (now closed); measured on historical_dataset_20260814_203554.parquet.
The producer half is fixed and merged — views-datafactory#478 / ADR-052. Every source's coverage bounds are now published in the store attrs and the consumer manifest, where before only the leading edge was.
This half is ours. We already have the clip: _read_historical_frame in views_postprocessing/crafd/managers/crafd.py reads last_valid_month_id, calls observed_range.fabricated_months, and drops anything above it. It landed in 9799e87 on 2026-08-02, twelve days before the affected artifact was cut.
Three candidates, and one of them is not our bug
1. The clip worked correctly and the producer's boundary was too permissive.
The datafactory cron is monthly, the 21st at 00:00. So the store live on 2026-08-14 was the 2026-07-21 export — and that export's boundary reflected UCDP as of 21 July, when July was at best partially reported.
The producer's boundary is inferred, not declared: a month counts as observed when its slice sums above zero (views-datafactory C-355). Any non-zero July event present on 21 July would have set last_valid_month_id = 559, and the clip would then have kept July — correctly, by its own contract. The zero-filled month would be the producer's fault, not the clip's.
2. It degraded open. The same function catches broadly and warns:
last_valid_month_id could not be read; skipping the observed-range clip (degrade-open, C-26). Any unobserved months above the producer's boundary WILL ship as observed history in this delivery.
3. That artifact came via a different read path than the frame-native one the clip guards — _read_historical_data versus _read_historical_frame.
Candidate 1 was missing from the first version of this issue and may well be the answer. It is also the only one where nothing here is broken.
The decisive number, and why it is probably gone
All three are settled by one fact: what was last_valid_month_id when that artifact was cut?
≥ 559 → the clip behaved correctly; the defect is the producer's inferred boundary (C-355), and this issue closes as not our bug.
< 559 → the clip should have dropped July and did not; candidate 2 or 3.
Both places it might be recorded turn out to be empty:
The previous store does not survive.export_zarr.py renames the live store to .old and then rmtrees it in the same run. There is no 2026-07-21 export on disk.
The artifact does not carry it.delivery/provenance.py::build_provenance records lookup_version, region, expected_cell_count, actual_cell_count and unmapped_count — not the boundary it clipped against.
So the specific 2026-08-14 cause may be unrecoverable. Say so if it is, rather than picking the most plausible candidate and writing it down as fact.
Correction to the first version of this issue: there is no run log to check
It said "check the 2026-08-14 run log". This repository configures no logging and has no delivery entrypoint — no logging.basicConfig, no FileHandler, no run script. The manager executes under views-pipeline-core's postprocessor machinery and its logger output goes wherever that configures it.
The realistic place to look is wandb — CrafdManager.__init__ takes wandb_notifications: bool = True. If the degrade-open warning was emitted on 2026-08-14, that is where it survives.
What is worth doing regardless of whether the cause is recoverable
Stamp the observed-range boundary into the delivery provenance record.
This question — was this month observed or fabricated, and against what boundary did you decide? — is exactly what a partner asks after the fact, and right now the artifact cannot answer it. One field in build_provenance makes every future instance answerable from the artifact itself, with no logs and no guessing.
The producer now publishes last_valid_month_ids (per source) alongside last_valid_month_id, so there is more to stamp than there was.
Definition of done
Check wandb for the 2026-08-14 run and the degrade-open warning
If found: candidate 2 — decide whether this degrade-open should remain open, given the failure it produces is a partner receiving fabricated history labelled as observed, and record the decision
If not found: check whether that artifact used _read_historical_data rather than _read_historical_frame — candidate 3 means the clip guards one read path and not the other
If neither: record that the cause is unrecoverable. Do not attribute it to the most plausible candidate
Regardless: stamp last_valid_month_id and last_valid_month_ids into build_provenance, so the next instance is answerable from the artifact
Tell CRAF'd the outcome on views-datafactory#476 (closed, but reopenable)
One producer-side caveat that affects any fix here
Even a working clip currently keeps partial months, because the boundary it trusts is inferred (C-355). The store exported 2026-08-21 declares last_valid_month_id = 560 — August 2026, the month the export ran in.
When C-355 closes, the boundary moves earlier, never later. Anything built here should treat it as a ceiling rather than a frontier.
Important
Correction, 2026-08-25 — the premise below is measured on one column of three, and it is too strong.
July 2026 is not a zero-filled month. It carries 6 non-zero cells of 64,742:
lr_ged_sb = 0.0(the figure below, correct) butlr_ged_ns = 12.0andlr_ged_os = 3.0. So it is a month reported at ~1% of normal coverage, not a month nobody reported.That confirms candidate 1: the producer's inferred boundary (C-355) saw those six cells, declared July observed, and the clip kept it — correctly, by its own contract. Nothing in this repository was broken. Candidates 3 and 4 are eliminated from code. Full working in this review; the original body is preserved below unchanged.
CRAF'd received a historical artifact containing a complete, zero-filled month for a month nobody had reported — July 2026, all 64,742 cells,
sum(lr_ged_sb) = 0.0— indistinguishable from a month with genuinely no fatalities. Filed downstream as views-datafactory#476 (now closed); measured onhistorical_dataset_20260814_203554.parquet.The producer half is fixed and merged — views-datafactory#478 / ADR-052. Every source's coverage bounds are now published in the store attrs and the consumer manifest, where before only the leading edge was.
This half is ours. We already have the clip:
_read_historical_frameinviews_postprocessing/crafd/managers/crafd.pyreadslast_valid_month_id, callsobserved_range.fabricated_months, and drops anything above it. It landed in9799e87on 2026-08-02, twelve days before the affected artifact was cut.Three candidates, and one of them is not our bug
1. The clip worked correctly and the producer's boundary was too permissive.
The datafactory cron is monthly, the 21st at 00:00. So the store live on 2026-08-14 was the 2026-07-21 export — and that export's boundary reflected UCDP as of 21 July, when July was at best partially reported.
The producer's boundary is inferred, not declared: a month counts as observed when its slice sums above zero (views-datafactory C-355). Any non-zero July event present on 21 July would have set
last_valid_month_id = 559, and the clip would then have kept July — correctly, by its own contract. The zero-filled month would be the producer's fault, not the clip's.2. It degraded open. The same function catches broadly and warns:
3. That artifact came via a different read path than the frame-native one the clip guards —
_read_historical_dataversus_read_historical_frame.Candidate 1 was missing from the first version of this issue and may well be the answer. It is also the only one where nothing here is broken.
The decisive number, and why it is probably gone
All three are settled by one fact: what was
last_valid_month_idwhen that artifact was cut?≥ 559→ the clip behaved correctly; the defect is the producer's inferred boundary (C-355), and this issue closes as not our bug.< 559→ the clip should have dropped July and did not; candidate 2 or 3.Both places it might be recorded turn out to be empty:
export_zarr.pyrenames the live store to.oldand thenrmtrees it in the same run. There is no 2026-07-21 export on disk.delivery/provenance.py::build_provenancerecordslookup_version,region,expected_cell_count,actual_cell_countandunmapped_count— not the boundary it clipped against.So the specific 2026-08-14 cause may be unrecoverable. Say so if it is, rather than picking the most plausible candidate and writing it down as fact.
Correction to the first version of this issue: there is no run log to check
It said "check the 2026-08-14 run log". This repository configures no logging and has no delivery entrypoint — no
logging.basicConfig, noFileHandler, no run script. The manager executes under views-pipeline-core's postprocessor machinery and itsloggeroutput goes wherever that configures it.The realistic place to look is wandb —
CrafdManager.__init__takeswandb_notifications: bool = True. If the degrade-open warning was emitted on 2026-08-14, that is where it survives.What is worth doing regardless of whether the cause is recoverable
Stamp the observed-range boundary into the delivery provenance record.
This question — was this month observed or fabricated, and against what boundary did you decide? — is exactly what a partner asks after the fact, and right now the artifact cannot answer it. One field in
build_provenancemakes every future instance answerable from the artifact itself, with no logs and no guessing.The producer now publishes
last_valid_month_ids(per source) alongsidelast_valid_month_id, so there is more to stamp than there was.Definition of done
_read_historical_datarather than_read_historical_frame— candidate 3 means the clip guards one read path and not the otherlast_valid_month_idandlast_valid_month_idsintobuild_provenance, so the next instance is answerable from the artifactOne producer-side caveat that affects any fix here
Even a working clip currently keeps partial months, because the boundary it trusts is inferred (C-355). The store exported 2026-08-21 declares
last_valid_month_id = 560— August 2026, the month the export ran in.When C-355 closes, the boundary moves earlier, never later. Anything built here should treat it as a ceiling rather than a frontier.
Cross-ref: views-datafactory#476, #478, ADR-052, C-355, C-352 · register C-22, C-26, C-103