diff --git a/docs/roadmap/afd-section-heading-variants.md b/docs/roadmap/afd-section-heading-variants.md index 21fe077..effaa6c 100644 --- a/docs/roadmap/afd-section-heading-variants.md +++ b/docs/roadmap/afd-section-heading-variants.md @@ -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; diff --git a/docs/roadmap/implementation.md b/docs/roadmap/implementation.md index bc3ada6..0bdbe34 100644 --- a/docs/roadmap/implementation.md +++ b/docs/roadmap/implementation.md @@ -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 `. ()...` 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.