Skip to content

Add noaa-hrrr-forecast-18-hour-virtual and noaa-hrrr-forecast-48-hour-virtual-fast#740

Draft
mrshll wants to merge 5 commits into
mainfrom
claude/hrrr-18h-feasibility-assessment-a8s89q
Draft

Add noaa-hrrr-forecast-18-hour-virtual and noaa-hrrr-forecast-48-hour-virtual-fast#740
mrshll wants to merge 5 commits into
mainfrom
claude/hrrr-18h-feasibility-assessment-a8s89q

Conversation

@mrshll

@mrshll mrshll commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

Stacked on #743 (the shared HRRR virtual base extraction — review that first). This PR adds the two new datasets as thin consumers of that base, plus the plan doc they implement:

  • noaa-hrrr-forecast-18-hour-virtual — every hourly HRRR cycle (all 24/day) to f18.
  • noaa-hrrr-forecast-48-hour-virtual-fast — the 48-hour virtual trimmed to the materialized noaa-hrrr-forecast-48-hour variable set, to measure the operational-lag difference between a reduced-variable and full-variable virtual product.

The 18-hour dataset

All 24 hourly init cycles (append_dim_frequency=1h), leads f00–f18, archive start HRRR v3 (2018-07-13T12Z). expected_forecast_length is a constant 18h — every hourly cycle reaches f18 across v3+, verified against the live bucket. Manifest splits {pressure_level: 450, model_level: 400, None: 6000} from the measured ~16.4 B/ref scaled 49→19 leads. Hourly updates at :50 with a 55m deadline (race-the-init for seconds-latency; the lagged-window fallback is one classvar), hourly validation at :48 (30m deadline) with completeness thresholds (0.0, 0.0, 1.0) tolerating the two still-publishing newest positions.

The 48-hour-fast dataset

Variable subset derived from the materialized config at template-build time, with asserts pinning the substitute mapping to exactly the deaccumulate_to_rate variables (precipitation_surfacetotal_precipitation_surface + precipitation_rate_surface; snowfall_surfacetotal_snowfall_run_total_surface) — drift in either direction fails loudly. 27 vars, all single-level → only wrfsfc is polled (pinned by test). It subclasses the full 48-hour dataset, so identical operational timing holds by construction; only the variable set (and thus files polled and manifest count) differs. The -virtual-fast naming convention is documented in AGENTS.md.

Verification

  • 1671 fast tests pass on the stack's final tree; registry-driven template-subclass and CF-compliance suites auto-cover both datasets with no allowlist edits.
  • Slow tests: 18-hour end-to-end backfill + hourly operational update against the live bucket on a non-synoptic t01z init (exact decoded snapshots checked in); the fast variant's backfill decodes values byte-identical to the full dataset's snapshots (same source messages).
  • The stack's final tree is byte-identical to the tree on which the full verification battery (including an xhigh-effort multi-agent code review with fixes) was run.

Remaining before launch (ops, not code)

Backfills (18-hour: ~70k inits, ~2.3× the 48-hour wall-clock at ≤10 workers; fast: sfc-only, ~1/3 of the full 48-hour), then deploy crons and watch first fires — runbook in the plan doc §6/§8/§9.

🤖 Generated with Claude Code

@mrshll mrshll changed the title Feasibility assessment: HRRR 18-hour virtual dataset HRRR 18-hour virtual dataset — feasibility & implementation plan Jul 13, 2026
@mrshll mrshll changed the title HRRR 18-hour virtual dataset — feasibility & implementation plan Add noaa-hrrr-forecast-18-hour-virtual on a shared HRRR virtual base Jul 13, 2026
@mrshll mrshll changed the title Add noaa-hrrr-forecast-18-hour-virtual on a shared HRRR virtual base Shared HRRR virtual base + 18-hour and 48-hour-fast virtual datasets Jul 13, 2026
claude added 5 commits July 13, 2026 13:52
…paths

Byte-for-byte copies of forecast_48_hour_virtual/{template_config,region_job}.py
at their new shared locations, with no edits, so the following commit's diff
shows exactly what the extraction changes relative to the shipped code.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PSMv3HgaxKHdUaLk56bXxt
…alRegionJob

Edit the verbatim copies from the previous commit into the shared form:
forecast_virtual_template_config.py keeps the full variable catalog,
coordinate builders, and encoding factories unchanged and turns the class
head into NoaaHrrrForecastVirtualTemplateConfig with per-variant hooks
(forecast_length, dataset-identity attributes via _dataset_attributes,
expected-forecast-length values/statistics, _catalog_data_vars, and
dims-driven vertical coordinates); forecast_virtual_region_job.py renames
the coord and job classes to the shared NoaaHrrrForecastVirtual* names and
adds the hrrr_virtual_chunk_containers factory. The 48-hour dataset becomes
thin subclasses with unchanged public class names and module paths, and its
checked-in template regenerates byte-identically.

The single-polling-job operational_update_jobs, previously duplicated
line-for-line by this dataset and GEFS 10-day spatial, moves to common
VirtualRegionJob parameterized by an operational_update_window classvar;
GEFS sets its 24h window and example_virtual's stub becomes a classvar
teaching note. A construction-time guard rejects a virtual dataset whose
region job uses the default update factory without declaring the window.
Cache the HRRR latitude/longitude grid computation, which every HRRR
dataset shares and each template build requests once per zarr group.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PSMv3HgaxKHdUaLk56bXxt
The feasibility assessment and implementation plan the stacked dataset
additions follow, including the manifest-split math, hourly operational
design, and the materialized-mirror (virtual-fast) variant.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PSMv3HgaxKHdUaLk56bXxt
Every hourly HRRR cycle (all 24/day) to f18 as a virtual icechunk dataset on
the shared HRRR virtual base: append_dim_frequency=1h, 19 leads, constant
18h expected forecast length (every hourly cycle reaches f18 across v3+),
manifest splits sized per group from the measured ~16.4 bytes/ref, hourly
operational updates racing the in-flight init with a 55m deadline, and
hourly validation with completeness thresholds tolerating the two
still-publishing newest positions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PSMv3HgaxKHdUaLk56bXxt
The 48-hour virtual dataset trimmed to the materialized
noaa-hrrr-forecast-48-hour variable set, for measuring the operational-lag
difference between a reduced-variable and full-variable virtual product.
The subset derives from the materialized config with asserts on the
deaccumulated-variable mapping, every variable is single-level so only
wrfsfc files are polled, and all operational configuration is inherited by
subclassing the full dataset. Document the -virtual-fast naming convention
in AGENTS.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PSMv3HgaxKHdUaLk56bXxt
@mrshll
mrshll force-pushed the claude/hrrr-18h-feasibility-assessment-a8s89q branch from d7af96c to c99086a Compare July 13, 2026 13:55
@mrshll mrshll changed the title Shared HRRR virtual base + 18-hour and 48-hour-fast virtual datasets Add noaa-hrrr-forecast-18-hour-virtual and noaa-hrrr-forecast-48-hour-virtual-fast Jul 13, 2026
@mrshll
mrshll changed the base branch from main to claude/hrrr-virtual-shared-base-a8s89q July 13, 2026 13:56
Base automatically changed from claude/hrrr-virtual-shared-base-a8s89q to main July 23, 2026 16:19
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.

2 participants