4. Solution Strategy

Goal Strategy
Conformance parity between TS and Python (Quality Goal 1) Monorepo with a language-neutral shared/ contract (schema, error-code registry, conformance fixtures) that both packages import unchanged. See ADR-0001.
Actionable feedback (Quality Goal 2) A single, language-neutral result format ({valid, errors[], warnings[]}, each issue carrying code, severity, message, path, data) defined once and mirrored in both languages — never ad hoc per-rule return shapes.
Fail-safe schema gate (Quality Goal 3) Two-stage validation pipeline: Level 0 (JSON Schema via AJV / jsonschema) always runs first and short-circuits Level 1 (semantic rules) on failure. See ADR-0002.
Deliberate schema evolution (Quality Goal 4) The vendored schema is never fetched at validation time. Updates only happen through an explicit, reviewed PR — either a manual re-sync or the automated sync-from-spec.yml workflow, which itself only opens a PR and never auto-merges. See ADR-0003.
Low integration friction (Quality Goal 5) Both packages expose the same CLI shape (ocf-validate [--json] [--quiet] [--strict]) and the same library entry points (validate, validate_file), so switching consumer tooling between languages requires no conceptual relearning.
Parity enforcement without manual discipline ci.yml runs both packages' test suites against shared/conformance/cases.json on every push — drift between implementations is a CI failure, not something that has to be caught in review.

Key technology choices

← All sections