- Added 'contain' field to FastExtractedElement.style interface, removing
(s as any).contain property smuggling (line 682)
- Replaced (assertion as any) duck-typing in getSelectorsFromAssertion
with instanceof FluentRelation/FluentQuantifier/FluentAssertion checks
- Replaced (assertion as any) duck-typing in buildFluentLabel with
same instanceof pattern
- Structural baseline ratcheted: asAny 101→98, nullishZero 62→61
- Add scripts/check-structural.js: counts production as any, empty catch,
and ?? 0 patterns; fails CI if counts exceed committed baseline
- Add scripts/.structural-baseline.json: committed baseline (101 as any,
17 empty catch, 62 ?? 0); use --fix-baseline to ratchet down
- Add scripts/ci-verify.sh: ordered pipeline (build → typecheck → lint →
structural → unit tests → E2E) with pass/fail summary
- Add npm scripts: test:structural, test:structural:fix, ci:verify
- Add cache-staleness conformance test: verifies WORLD_CACHE_SCHEMA_VERSION
is prefixed to all cache keys for auto-invalidation on schema changes
- Cache test suite grows from 141 → 142 passes