Files
Maximiliano Korp b51bc3dffa feat(intelligence): enforce the conformance corpus in Python and C#, not only TypeScript
The 315-case language-neutral corpus was only ever *validated* in TypeScript.
`sdk-python/tests/test_intelligence.py` and `IntelligenceClientTests.cs` read it
solely to extract the canonical error-code enums, so every declarative
assertion was unenforced outside TypeScript. Measured: 112 of the corpus's
negative cases are accepted by a vanilla Draft 2020-12 validator and are
enforceable only through `x-copilotkit-equal-properties` and
`x-copilotkit-assertions`, which existed in TypeScript alone.

Adds portable validators to both SDKs, peers of
`packages/intelligence/src/portable-validator.ts`, covering the Draft 2020-12
subset the corpus uses plus both custom keywords and all fifteen assertion
operations (compare, compare-values, unique, all-equal, strictly-increasing,
contiguous, values-in-range, references, disjoint, ordered-ranges, lookup-equal,
lookup-references, count, utf8-byte-length, bounded-json) with their
`caseFold`/`unicode` normalization, `where` predicates, and bounds. Both consume
the same corpus JSON with no per-language restatement of any rule, and both
reuse their language's single case-folding definition site.

Two properties keep the three implementations honest:

- Unknown schema keywords and unknown assertion operations are hard errors, not
  ignored annotations, so a future corpus keyword fails loudly instead of
  silently under-enforcing.
- ECMAScript `pattern` values are translated into each host dialect explicitly.
  Untranslated, `$` would also match before a trailing newline and `\d` would
  match non-ASCII digits in both Python and .NET, accepting strings the
  TypeScript reference validator rejects.

All 315 cases now pass in all three languages, each suite independently
re-measures the 112 figure as a regression guard, and the Python suite asserts
that every corpus assertion operation decides at least one case.
2026-07-24 16:34:13 -07:00
..