Skip to content

Extend the vegetation timeline to the published July 2026 composite - #1015

Merged
zkWizard merged 2 commits into
mainfrom
codex/environmental-science-20260817-1800
Aug 17, 2026
Merged

Extend the vegetation timeline to the published July 2026 composite#1015
zkWizard merged 2 commits into
mainfrom
codex/environmental-science-20260817-1800

Conversation

@zkWizard

Copy link
Copy Markdown
Owner

Extend the vegetation timeline to the published July 2026 composite

Visible: select Vegetation (NDVI) (or Vegetation (EVI)) and drag the
time slider to its right-hand end. Before this change the slider stopped at
Jun 2026 and the status row read the vegetation record as a month further
behind than it is; after it, Jul 2026 is selectable and renders real GIBS
imagery. The same month becomes reachable in the probe series, the place panel,
and any export or share link that carries the selected month.

The defect

LAYERS.ndvi.latest and LAYERS.evi.latest were both pinned to 2026-06,
verified on 2026-08-15. MOD13A3 has since published July, so the compiled pins
were one publication behind the archive. A pin that trails the product is not a
cosmetic lag: monthRangeForLayer clamps the timeline to it, so the newest
published composite was unreachable in the app, and dataCurrencyNote measured
the vegetation record's currency against the stale end.

This is the failure mode the freshness pins exist to prevent, and the one that
already cost SST a full publication cycle when nobody owned the check.

Verification

Probed GIBS DescribeDomains directly on 2026-08-17, on each layer's own tile
matrix set (1km), which is what describeDomainsUrl builds:

Layer wmsLayer Advertised domain (tail) Pin before Pin after
ndvi MODIS_Terra_L3_NDVI_Monthly 2025-05-01/2026-07-01/P1M 2026-06 2026-07
evi MODIS_Terra_L3_EVI_Monthly 2025-05-01/2026-07-01/P1M 2026-06 2026-07

The response splits at 2025-04 — exactly the month catalogued in
MOD13A3_UNPUBLISHED_MONTHS — which independently confirms the domain parse
rather than assuming it.

NDVI and EVI are one granule and one entry in FRESHNESS_FAMILIES
({ probe: "ndvi", layers: ["ndvi", "evi"] }), so they extend together; bumping
one alone would have split the family.

MODIS_Aqua_L3_SST_Thermal_9km_Day_Monthly was re-probed in the same pass and
still ends 2026-04-01, matching its pin — no bump due.

Not verified this run, stated plainly: DescribeDomains returned an empty
time domain for lst, snow, airtemp, aerosol, precip and soil across
four retries with backoff, while sst on the same tile matrix set answered
normally — so this is an upstream per-layer hiccup, not a wrong tile set. Those
six pins are therefore left untouched rather than guessed at, and are carried
forward to the next freshness check.

DATA_LATEST is unchanged at 2026-07 (it is set by the MODIS thermal
families, which already reach July), so this bump does not move the global
horizon.

Datasets

  • MOD13A3.061 — MODIS/Terra Vegetation Indices Monthly L3 Global 1 km,
    DOI 10.5067/MODIS/MOD13A3.061.
    Backs both the NDVI and EVI layers; served via NASA GIBS
    MODIS_Terra_L3_NDVI_Monthly / MODIS_Terra_L3_EVI_Monthly.

Both layers remain clear-sky composites, not monthly means — their captions and
disclosures are untouched by this change.

Test change

briefRecordDepth.test.ts asserted the vegetation archive end as the literal
{ year: 2026, month: 6 } with a hardcoded 316-month span, so it failed on the
bump. It now derives both from LAYERS.ndvi.latest, which is the precedent this
repo already set for beyond-the-record fixtures: a pin bump should carry the
expectation with it instead of failing a test that only restated the constant.

Proved the assertion still detects rather than merely passing — mutating the
span arithmetic in briefRecordDepth.ts fails 4 of the 9 tests in that file;
restoring it passes 9/9, byte-identical. Worth noting for the next bump: now
that ndvi.latest coincides with DATA_LATEST, the endMonth assertion no
longer distinguishes "measured to catalog end" from "measured to horizon" on its
own — endIsHorizon (derived from pin presence, not a month comparison) is what
carries that discrimination, and it is asserted.

Gates

  • npx tsc --noEmit — clean (no errors in touched files).
  • Full npm test313 files / 4724 tests, all passing.
  • npx prettier --write on both touched files — already formatted.
  • No wiring and no new imports, so no bundle delta; BUDGETS_KB untouched.
  • Caveat budget untouched: this corrects a date, and adds no on-screen clause.

Scope

Catalog data only — two latest pins and the test that reads them. No CI
workflow, budget, or comms/ change. Neither open PR (#1014, #959) touches
these files.

🤖 Generated with Claude Code

zkWizard and others added 2 commits August 17, 2026 12:56
MOD13A3 (NDVI and EVI) published 2026-07 upstream, but both layers were
still pinned to 2026-06, so the vegetation timeline stopped a month short
of the data GIBS actually serves and the status row overstated the lag.

Verified against GIBS DescribeDomains on 2026-08-17: the advertised
domain is now 2025-05-01/2026-07-01/P1M for both layers (the 2025-04
break matches the catalogued MOD13A3_UNPUBLISHED_MONTHS gap, confirming
the parse). NDVI and EVI share one granule and one freshness family, so
they extend together.

Derive the record-depth expectation from the pin instead of restating
it: MOD13A3 publishes on its own schedule, and the next bump should move
this expectation with it rather than fail a test that only ever repeated
the constant.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@zkWizard
zkWizard merged commit d31a567 into main Aug 17, 2026
13 checks passed
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.

1 participant