Mark NWS forecast discussion resilience implemented

This commit is contained in:
2026-08-03 00:24:26 +00:00
parent 3740c779eb
commit 456a46e01b
2 changed files with 30 additions and 30 deletions

View File

@@ -2,10 +2,10 @@
## Status
The original heading-variant work and the first resilience follow-up are
implemented. A second resilience follow-up is proposed to cover additional
observed NWS heading and key-message formats without changing the canonical
forecast-discussion contract.
Implemented.
The original heading-variant work and both resilience follow-ups are
implemented without changing the canonical forecast-discussion contract.
## Completed Baseline
@@ -23,9 +23,10 @@ change markers, and keeps the first occurrence of each mapped role. Provider and
normalizer tests cover two office-format families while preserving the existing
wire contract.
## Remaining Problem
## Implemented Extensions
Observed AFDs still expose common forms outside the completed baseline:
The parser now handles common AFD forms that were outside the completed
baseline:
- a qualifier may appear between the identity and terminal ellipsis, as in
`.DISCUSSION (Today through Thursday)...`;
@@ -39,21 +40,20 @@ Observed AFDs still expose common forms outside the completed baseline:
`LONG TERM` sections, so wording flexibility cannot safely rely on treating
every similar identity as an alias.
These gaps do not undermine the provider-local architecture, but they mean the
parser is still brittle at its syntax, semantic-alias, and list-tokenization
extension points. The current compact cross-office fixture does not exercise
these format families.
These provider-local extensions preserve the architecture while strengthening
syntax, semantic-alias, and list-tokenization handling. Compact cross-office
fixtures exercise each added format family.
## Objective
## Implementation Approach
Make common, minor NWS presentation changes local and inexpensive to support
while preserving strict structural recognition and the existing canonical
schema. A new observed heading form should require an isolated grammar helper;
a true synonym should require one role-registry entry; and a new list marker
should require one marker-classifier case. None should require changes to the
scanner, canonical model, normalizer architecture, or downstream contracts.
Common, minor NWS presentation changes remain local and inexpensive to support
while strict structural recognition and the existing canonical schema are
preserved. Each observed heading form uses an isolated grammar helper, a true
synonym uses one role-registry entry, and each list marker uses one
marker-classifier case. None requires changes to the scanner, canonical model,
normalizer architecture, or downstream contracts.
## Target End State
## Implemented Behavior
### Heading syntax
@@ -85,7 +85,7 @@ ellipsis-first form. Malformed heading-like lines remain body content.
Every successfully parsed heading is a section boundary regardless of whether
its identity has a canonical role. This includes `DISCUSSION`, `NEAR TERM`,
aviation, marine, hydrology, office-specific sections, and future structurally
aviation, marine, hydrology, office-specific sections, and other structurally
compatible identities.
### Canonical role aliases
@@ -166,9 +166,9 @@ The implementation remains confined to the NWS provider parser plus owning
provider and normalizer tests. It uses the Go standard library and introduces no
runtime configuration or general parser framework.
## Acceptance Criteria
## Acceptance Coverage
The follow-up is complete when automated tests demonstrate that:
Automated tests demonstrate that:
- all previously supported heading, scanning, preamble, marker, and canonical
results remain compatible;

View File

@@ -2,10 +2,10 @@
## Purpose
Complete the remaining resilience work defined in
[`afd-section-heading-variants.md`](afd-section-heading-variants.md) without
changing the canonical forecast-discussion contract. Stages 1-8 summarize work
already completed. Implement Stages 9-13 in order.
All resilience work defined in
[`afd-section-heading-variants.md`](afd-section-heading-variants.md) is
complete without changing the canonical forecast-discussion contract. This plan
preserves the implementation details as a historical record.
## Cross-Stage Constraints
@@ -80,7 +80,7 @@ Focused tests, the full repository suite, static analysis, and diff checks
passed. The public model and schemas remained unchanged, and the roadmap was
updated to describe the completed behavior.
## Stage 9: Add Parenthesized-Terminal Heading Syntax
## Stage 9: Add Parenthesized-Terminal Heading Syntax — Completed
Recognize the observed `.<IDENTITY> (<qualifier>)...` family without weakening
generic identity validation.
@@ -141,7 +141,7 @@ go test -count=1 ./internal/providers/nws
Do not proceed until all previous heading and scanner tests still pass.
## Stage 10: Add Explicit Canonical Role Aliases
## Stage 10: Add Explicit Canonical Role Aliases — Completed
Make true wording synonyms cheap to support while preserving semantic
distinctions.
@@ -180,7 +180,7 @@ go test -count=1 ./internal/providers/nws
Do not change the canonical model to expose near-term or discussion content.
## Stage 11: Harden Key-Message Metadata and Item Parsing
## Stage 11: Harden Key-Message Metadata and Item Parsing — Completed
Replace prefix-sensitive, hyphen-only parsing with conservative metadata and
list classifiers.
@@ -247,7 +247,7 @@ gofmt -w internal/providers/nws/forecast_discussion.go internal/providers/nws/fo
go test -count=1 ./internal/providers/nws
```
## Stage 12: Add Representative Numbered and Key-Points Fixtures
## Stage 12: Add Representative Numbered and Key-Points Fixtures — Completed
Prove the new extension points through provider and normalizer boundaries.
@@ -290,7 +290,7 @@ gofmt -w internal/providers/nws/forecast_discussion_test.go internal/normalizers
go test -count=1 ./internal/providers/nws ./internal/normalizers/nws
```
## Stage 13: Reconcile Documentation and Perform Final Validation
## Stage 13: Reconcile Documentation and Perform Final Validation — Completed
Close the second resilience follow-up only after all behavior is implemented and
verified.