feat(schemas): strict-portable the 13 Class-A schemas + provider-parity guard (req_bfbdbux6 Lode 1/4)
WHAT: Apply the canonical Appendix A transform to the 13 Class-A *.schema.json files so they validate natively under Google response_json_schema, OpenAI strict:true, and Anthropic output_config json_schema. The transform strips $schema/$comment/length-numeric-items bounds, collapses oneOf, requires every property, and makes previously-optional properties nullable. meeting.box_2d and participation.participation_confidence are the only newly-required-nullable contract changes; this was pre-verified backward-compatible because consumers null/length-guard and journals validate on write only, so no migration is needed. The 3 dropped $comment notes are relocated as code/docstring comments.
GUARDS: Add tests/test_schema_strict_portability.py as the offline make ci guard, with a temporary PENDING_PORTABILITY allowlist covering the 4 Class-B schemas, chat, and build_rollup_schema(3). The guard also asserts allowlisted schemas still violate so the allowlist cannot rot. Add tests/integration/test_schema_provider_parity.py as an integration+requires_api raw-SDK strict parity test that skips cleanly without tests/fixtures/.env.
RATIFIED SCOPE DEVIATION (founder-approved during this session): scope §2/AC3 said tests/test_anthropic.py must be byte-unchanged, but its two sanitizes_describe_schema tests consumed the real describe.schema.json as a dirty-input fixture. Jer approved a minimal surgical edit: _load_describe_schema() now returns an inline dirty schema and the two tests plus that helper are the ONLY test_anthropic.py changes. All other test_anthropic.py tests and the test_sense_schema.py test_hydrate_runtime_enums_* block are byte-unchanged. The Anthropic sanitizer/forced-tool fallback in solstone/think/providers/ is intentionally unchanged because it remains load-bearing for Class B/C until Lodes 2-4.
SHIP OBLIGATION (AC7): the gated tests/integration/test_schema_provider_parity.py is run OUT-OF-BAND by VPE against the founder's solstone-scoped keys before ship and must pass 39/39 native (13x3, no fallback); that result is recorded in the ship/decision note. It was not run live in this lode because tests/fixtures/.env is absent.
SCOPE: this is Lode 1 of a founder-directed 4-lode program; req_bfbdbux6 closes when Lode 4 ships, not this commit. Lodes 2-4 remove their PENDING_PORTABILITY entries; Lode 4 deletes the allowlist mechanism and, after B/C/D land, the provider fallback.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>