Release 0.2.0 to main
Brings main up to date. It had been sitting at the initial commit, so anything
installed from main was the pre-repair code: a test suite that never executed
and every defect fixed in #1 still present.
The project stays on 0.x because nothing has been published to npm. Under semver
that says what is true - the API may still move - where a 1.0.0/2.0.0 split
would have claimed a stability and a history that do not exist. A breaking change
is therefore a minor bump, which is exactly the relationship between the lines:
develop / main 0.2.0 TC39 standard decorators, rules type-checked
0.1.x 0.1.0 legacy experimentalDecorators, for oxc toolchains
What lands, across four merged PRs:
- The test suite had never run. Vitest 4 transpiles with oxc, which does not read
experimentalDecorators from a tsconfig excluding the files it transforms, so
every suite failed to parse and was reported as "0 test". Reviving it exposed
eight engine defects, each now pinned by a regression test - among them
inheritance silently discarding base-class rules, and a circular reference
exhausting an 8 GB heap.
- Field-name mapping, access control, transform options, error flattening, and
30 validation decorators.
- Performance: profiling showed roughly half of validation time re-deriving
answers that cannot change while the predicates themselves were under 1%.
Per-class plans are memoized and recursion is bounded.
- A synchronous API, built by making the engines sync internally rather than
duplicating the traversal, which sped up the async path as well.
- Standard decorators, so a rule that does not fit its field is a compile error.
Tests actually executing 0 -> 193
validate (50 orders) 221.6us -> 17.8us
toInstance (50 orders) 255.1us -> 31.7us
Clean fast-forward, no conflicts. Nothing is tagged or published.