Mark NWS forecast discussion resilience implemented
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user