diff --git a/docs/public-backlog.md b/docs/public-backlog.md index 300a557..e7bbc14 100644 --- a/docs/public-backlog.md +++ b/docs/public-backlog.md @@ -84,7 +84,16 @@ These remain candidates for later work: ## Open Maintenance / Trust Issues -No maintenance/trust issues are currently open in this public backlog snapshot. +Freshness and publication-safety alignment follow-ups, opened after a claim-hygiene pass on how the public mirror describes stale-data behavior: + +| Follow-up | Focus | Intent | +| --- | --- | --- | +| Publication-time stale-snapshot gate | Publication safety | The refresh pipeline already fails closed on stale FHABS resources, but the public mirror validator only *warns* when the committed snapshot or source observations are past the freshness threshold. Decide whether to add an enforced publication-time gate (or reviewed override) so a stale snapshot cannot be published as fresh. | +| Stale-source policy: fail vs warn | Publication safety | Make an explicit, documented decision on whether an over-threshold source observation should fail the mirror validator or remain a visible warning, and align the docs to that decision. | +| Unify Python and PowerShell validators | Reproducibility | Reduce drift between `validate-public-mirror.py` and `validate-public-mirror.ps1` by sharing one source of truth for required-text guards and freshness logic. | +| Compute source and weather stale status | Data trust | Derive `status` / `machineReadableStatus` from observation age at build or render time instead of trusting static fields that can misrepresent freshness. | + +These are documented as design/implementation follow-ups; none are enabled yet, and none change the current manual, reviewed publication posture. ## Open Reviewer-Readiness Issues diff --git a/docs/public-snapshot-release-note-2026-05-13.md b/docs/public-snapshot-release-note-2026-05-13.md index af89b57..6a9c6b9 100644 --- a/docs/public-snapshot-release-note-2026-05-13.md +++ b/docs/public-snapshot-release-note-2026-05-13.md @@ -17,7 +17,7 @@ This snapshot is not official public-health guidance, recreation guidance, emerg ## Static Snapshot Age Cue -Reviewed on May 28, 2026: this committed public mirror is a static snapshot generated on May 5, 2026, so the dashboard files are 23 days old at this review point. The latest USGS observation in the snapshot is May 3, 2026, which is 25 days old at this review point. +This committed public mirror is a static snapshot generated on May 5, 2026, with the latest USGS observation dated May 3, 2026. See the dashboard's snapshot-age badge for the current age of this reviewed static snapshot; the badge is computed at load time, so it does not go stale the way a hand-typed day count does. Treat the page as a dated portfolio/review artifact until a new reviewed refresh is generated, validated, and published. The stale FHABS dates above are intentional warning cues, not current bloom observations. diff --git a/docs/reviewer-demo-notes.md b/docs/reviewer-demo-notes.md index cf2071d..3c20481 100644 --- a/docs/reviewer-demo-notes.md +++ b/docs/reviewer-demo-notes.md @@ -7,7 +7,7 @@ These notes provide a short review path for Clear Lake Watch and captions for th ## Suggested Review Path 1. Open the public dashboard: . -2. Start with the snapshot status strip and confirm the source freshness dates. For this May 28, 2026 review point, the committed snapshot generated on May 5, 2026 is 23 days old and should be read as static portfolio evidence, not current conditions. +2. Start with the snapshot status strip and confirm the source freshness dates. The committed snapshot was generated on May 5, 2026; check the dashboard's snapshot-age badge for its current age. Regardless of age, read it as static portfolio evidence, not current conditions. 3. Review the map QA section and confirm unresolved site assignments remain visible. 4. Open the methodology page to inspect source boundaries and limitations. 5. Open the project page to inspect MVP scope, trust guardrails, and data-product framing. diff --git a/scripts/validate-public-mirror.ps1 b/scripts/validate-public-mirror.ps1 index 3d1a44e..0dc646d 100644 --- a/scripts/validate-public-mirror.ps1 +++ b/scripts/validate-public-mirror.ps1 @@ -644,7 +644,7 @@ try { Assert-TextContains -Text $publicBacklog -Needle "County GIS geometry publication boundary" -Message "Public backlog must include county GIS publication-boundary candidate." Assert-TextContains -Text $publicBacklog -Needle "Browser accessibility interaction pass" -Message "Public backlog must include browser accessibility interaction-pass status." Assert-TextContains -Text $publicBacklog -Needle "Maintenance file split" -Message "Public backlog must include maintenance file split status." - Assert-TextContains -Text $publicBacklog -Needle "No maintenance/trust issues are currently open" -Message "Public backlog must record that maintenance candidates are closed." + Assert-TextContains -Text $publicBacklog -Needle "Freshness and publication-safety alignment follow-ups" -Message "Public backlog must track the freshness and publication-safety alignment follow-ups." $releaseNote = Get-Content -LiteralPath (Resolve-ProjectPath "docs\public-snapshot-release-note-2026-05-13.md") -Raw Assert-TextContains -Text $releaseNote -Needle "Public Snapshot Release Note - 2026-05-13" -Message "Release note must include its title." @@ -655,7 +655,7 @@ try { Assert-TextContains -Text $releaseNote -Needle "September 7, 2025" -Message "Release note must include FHABS report freshness date." Assert-TextContains -Text $releaseNote -Needle "January 11, 2024" -Message "Release note must include FHABS lab-linked sample freshness date." Assert-TextContains -Text $releaseNote -Needle "Static Snapshot Age Cue" -Message "Release note must include a static snapshot age cue." - Assert-TextContains -Text $releaseNote -Needle "the dashboard files are 23 days old" -Message "Release note must make committed snapshot age visible." + Assert-TextContains -Text $releaseNote -Needle "snapshot-age badge" -Message "Release note must point to the dashboard's dynamic snapshot-age badge instead of a hardcoded day count." Assert-TextContains -Text $releaseNote -Needle "not current bloom observations" -Message "Release note must preserve stale FHABS warning framing." Assert-TextContains -Text $releaseNote -Needle "clear-lake-watch-homepage-desktop-2026-05-13.png" -Message "Release note must link the desktop screenshot." Assert-TextContains -Text $releaseNote -Needle "clear-lake-watch-homepage-mobile-2026-05-13.png" -Message "Release note must link the mobile-width screenshot." @@ -785,7 +785,7 @@ try { Assert-TextContains -Text $reviewerDemoNotes -Needle "Methodology page" -Message "Reviewer demo notes must caption the methodology screenshot." Assert-TextContains -Text $reviewerDemoNotes -Needle "Project page" -Message "Reviewer demo notes must caption the project-page screenshot." Assert-TextContains -Text $reviewerDemoNotes -Needle "dashboard-anatomy-review-guide.md" -Message "Reviewer demo notes must link the dashboard anatomy guide." - Assert-TextContains -Text $reviewerDemoNotes -Needle "the committed snapshot generated on May 5, 2026 is 23 days old" -Message "Reviewer demo notes must make committed snapshot age visible." + Assert-TextContains -Text $reviewerDemoNotes -Needle "snapshot-age badge" -Message "Reviewer demo notes must point to the dashboard's dynamic snapshot-age badge instead of a hardcoded day count." Assert-TextContains -Text $reviewerDemoNotes -Needle "not official public-health guidance" -Message "Reviewer demo notes must preserve public-health boundary." $portfolioEvidenceIndex = Get-Content -LiteralPath (Resolve-ProjectPath "docs\portfolio-evidence-index.md") -Raw