docs(changelog): record the converged located-parse and conformance work

The located-parse port, per-document %TAG scoping with tag-handle diagnostics,
and the parse-gap fixes landed on main without CHANGELOG entries, and the new
canonical event-stream conformance gate was undocumented. Record them under
Unreleased so the changelog gate passes and the release notes are complete.
This commit is contained in:
Mihaela M 2026-06-29 12:21:20 +02:00
parent b35e2a04f0
commit 5e5e568e2c

View File

@ -9,6 +9,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- Opt-in located parse: `parseStreamLocated` returns a source-span projection of every document,
each node carrying its `SourceRange` (line/column start and end) through `Model.LocatedValue` and
`Model.LocatedPair`. It runs alongside the plain parse without changing it, for callers that need
exact source positions (diagnostics, surgical fixes, language servers).
- `%TAG` directives are now scoped per document rather than globally, and a tag shorthand whose
handle is not defined in its own document is diagnosed instead of silently resolved.
- Canonical event-stream conformance gate: the parser is checked against the official yaml-test-suite
event (yeast) format, the strongest oracle, comparing anchors, tags, scalar styles, flow vs block,
and aliases for every valid case including those with no `in.json`. It ships an explicit recorded-gap
set (never a silent skip) and a CI workflow that fetches the suite and runs it on every push.
- The tagged validator now enforces mapping-key uniqueness, the invariant the coverage manifest
already claimed for `Tagged.Mapping` and `Tagged.Node` but no check enforced. `Tagged.Mapping`
keeps every parsed pair, so a duplicate key survives into the tree; `Tagged.BuiltinCheck`
@ -84,6 +94,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- A repeated document-end marker (`...` immediately followed by another `...`) is now accepted.
- A root-level block scalar (`|`/`>` as the whole document) now ends at a following document marker
(`---`/`...`) rather than folding the marker into its content.
- An empty explicit key in a flow mapping now parses.
- An explicit mapping key that is only a node property (`? &e` then `: &a`) now parses as an empty
key carrying that property, completing the empty-property-key work for the explicit-key form. The
block parser rejected the `:` after a property-only explicit key with an `expectedNode` error;