22
33All notable changes to ** jsonstat-validator** are recorded here. The format is based on
44[ Keep a Changelog] ( https://keepachangelog.com/en/1.1.0/ ) , and the project follows
5- [ Semantic Versioning] ( https://semver.org/spec/v2.0.0.html ) . The package is ** pre-1.0** : until
6- ` 1.0.0 ` the minor component may carry breaking changes; from ` 1.0.0 ` on, SemVer applies normally.
5+ [ Semantic Versioning] ( https://semver.org/spec/v2.0.0.html ) . From ` 1.0.0 ` on, SemVer applies
6+ normally; the full stability commitment (public API, diagnostic-result guarantees, error-code
7+ vocabulary, deprecation policy) is in [ ` STABILITY.md ` ] ( STABILITY.md ) .
78
89The error-code vocabulary is versioned ** independently** of the package via ` meta.ruleSetVersion `
910(append-only within a major), so consumers branch on the vocabulary, not the package version. See
@@ -13,13 +14,60 @@ The error-code vocabulary is versioned **independently** of the package via `met
1314
1415Staged for the next release. Not yet published.
1516
16- ### Added
17+ ## [ 1.0.0] - 2026-07-01
18+
19+ The ` 1.0.0 ` cut. The work tracked in the README "Toward 1.0.0" section is complete; this release
20+ makes the stability commitments in [ ` STABILITY.md ` ] ( STABILITY.md ) — the public ` validate() ` surface,
21+ the ` ValidationResult ` shape, and the error-code vocabulary are now stable.
22+
23+ ### Added — curated schema architecture (DESIGN.md §2.3)
24+ - A de-duplicated [ ` schemas/curated/ ` ] ( schemas/curated/core.json ) schema set: one shared
25+ [ ` core.json ` ] ( schemas/curated/core.json ) holding all ` $defs ` , plus four thin per-class files
26+ (` dataset ` , ` collection ` , ` dimension ` , ` index ` ) that ` $ref ` into it — replacing the triplicated
27+ definitions the verbatim vendored originals carried.
28+ - [ ` tools/bundle-schemas.mjs ` ] ( tools/bundle-schemas.mjs ) , which inlines every ` $ref ` into
29+ self-contained [ ` schemas/curated/bundled/ ` ] ( schemas/curated/bundled ) output. The TS
30+ ([ ` gen-assets.mjs ` ] ( packages/ts/tools/gen-assets.mjs ) ) and Rust
31+ ([ ` build.rs ` ] ( crates/validator/build.rs ) ) generators now embed the ** bundled curated** set, not the
32+ vendored originals. Committed, with a bundler-determinism check in CI.
33+ - The ** curated≡vendored structural-parity gate** , proving the de-duplicated set is behaviorally
34+ identical to the verbatim upstream originals on every corpus case:
35+ [ ` packages/ts/test/curated-parity.test.ts ` ] ( packages/ts/test/curated-parity.test.ts ) (identical
36+ outcomes + clean Unicode-RegExp compile + self-contained) and its Rust mirror
37+ [ ` crates/validator/tests/curated_equiv_vendored.rs ` ] ( crates/validator/tests/curated_equiv_vendored.rs ) .
38+ - A dedicated ** ` curated-parity ` CI job**
39+ ([ ` ci.yml ` ] ( .github/workflows/ci.yml ) ) that re-bundles and asserts the committed output is fresh,
40+ then runs the outcome-parity test — the guard against "edited the source, forgot to re-bundle".
41+ - [ ` STABILITY.md ` ] ( STABILITY.md ) — the SemVer / ` ruleSetVersion ` stability commitment artifact for the
42+ 1.0.0 cut.
1743- ` readme ` , ` keywords ` , and ` categories ` metadata to the Rust crate manifest
1844 ([ ` crates/validator/Cargo.toml ` ] ( crates/validator/Cargo.toml ) ) so crates.io renders the README and
1945 surfaces the crate under discovery tags. (` 0.3.0 ` shipped without a ` readme ` , so its crates.io page
2046 showed "no readme"; this takes effect from the next published version — published versions are
2147 immutable, so ` 0.3.0 ` itself cannot be retro-fixed.)
2248
49+ ### Fixed
50+ - The vendored ` updated ` date pattern carried an invalid ` \- ` RegExp escape (an escaped hyphen, which
51+ is a syntax error under the Unicode flag ` u ` ). The curated set replaces it with a literal ` - ` ,
52+ which matches the identical set of strings. This lets the structural pass compile cleanly under the
53+ default Unicode RegExp, removing the [ ` unicodeRegExp: false ` ] ( packages/ts/src/structural.ts )
54+ workaround in TS and the silent-skip-on-compile-failure fallback in
55+ [ ` structural.rs ` ] ( crates/validator/src/structural.rs ) (now a ` .expect() ` , since the embedded
56+ schemas must compile).
57+
58+ ### Changed
59+ - Bumped the package version and ` engineVersion ` from ` 0.3.0 ` to ** ` 1.0.0 ` ** across every surface —
60+ [ ` @jsonstat-validator/ts ` ] ( packages/ts ) , the [ ` jsonstat-validate ` ] ( cli ) CLI,
61+ [ ` @jsonstat-validator/wasm ` ] ( packages/wasm ) , and the [ ` jsonstat-validator ` ] ( crates/validator ) Rust
62+ crate — plus the npm and Cargo lockfiles. ` ruleSetVersion ` stays ` 1.0.0 ` (no rule changes).
63+ - [ ` @jsonstat-validator/wasm ` ] ( packages/wasm ) now declares its ` @jsonstat-validator/ts ` dev dependency
64+ as ` ^1.0.0 ` .
65+ - The Rust ` _vendored ` committed-snapshot drift guard
66+ ([ ` vendored_parity.rs ` ] ( crates/validator/tests/vendored_parity.rs ) ) now asserts the snapshot matches
67+ the ** curated/bundled** sources (its actual input), not the vendored originals.
68+ - Rewrote the README "Status" / "Versioning" sections for the 1.0.0 cut; retired the now-complete
69+ "Toward 1.0.0" section.
70+
2371## [ 0.3.0] - 2026-06-27
2472
2573` 0.3.0 ` was chosen over ` 1.0.0 ` on purpose — see the README "Status" section: the
@@ -64,6 +112,7 @@ follow-up release.
64112Initial TypeScript engine, full S/D/C rule set, shared corpus, and the CLI (M1/M2), and the Rust
65113port with corpus parity (M3). See the git history for details.
66114
67- [ Unreleased ] : https://github.com/jsonstat/validator/compare/v0.3.0...HEAD
115+ [ Unreleased ] : https://github.com/jsonstat/validator/compare/v1.0.0...HEAD
116+ [ 1.0.0 ] : https://github.com/jsonstat/validator/releases/tag/v1.0.0
68117[ 0.3.0 ] : https://github.com/jsonstat/validator/releases/tag/v0.3.0
69118[ 0.2.0 ] : https://github.com/jsonstat/validator/releases/tag/v0.2.0
0 commit comments