Repository navigation
Formalize Manifest v1 and language v3 compatibility #450
Description
Goal and background
Use layered stability: Manifest v1 / languageVersion 3 is a public execution contract, not an authoring AST or a general-purpose lossless Styling IR.
Parent tracker: #445
Baseline: 70444b18c8102fa7a9d811ec51ef96902573792c
Phase: 2.0 freeze
Ownership and scope
mastercss-schema, @master/css-schema, engine, compiler, and runtime
Dependencies
- Freeze directive removal and native definition ownership #448
- Specify and verify the cascade priority matrix #449
Implementation tasks
- Document versions, public fields, meaningful order, codec normalization, rejection conditions, and actual unknown-field policies.
- Validate serialization, reloading, and execution using compiler output and minimal manifests constructed through public types.
- Cover missing and unknown versions, removed fields, and hydration mismatches.
- Explicitly exclude matcher indexes, caches, compiled state, comments, and complete authoring ASTs from the execution contract.
- Do not promise that arbitrary unknown fields can be safely ignored, or require identical original CSS or JSON bytes across versions.
Acceptance criteria
- Roundtripping preserves semantics, ordering, and resources.
- Incompatible versions are rejected before semantic execution.
- Differences between Rust, TypeScript codecs, and hydration contracts have explicit tests or documentation.
Validation
Schema codec/version tests, compiler/engine roundtrips, hydration rejection, and codegen checks plus parity if the ABI changes.
Completion report
Include source and test evidence, PRs, actual commands and results, and any CSS/API/syntax/migration impact. Checks that were not run or were blocked must not be reported as passing.
Final acceptance (2026-09-28)
Manifest v1 / languageVersion 3 remains an execution contract. Codec/version tests and compiler issue 450 cover native/Wasm reload, duplicate declaration order, transitive variables, keyframes, resource withdrawal and incompatible inputs. Compose removal changes binding/report APIs (ABI 14, diagnostics report 4 and lint batch 2), without changing the execution Manifest or language version.
Merged into rust through PR #461 at 262adb809b928af7082107e1b5633d945cb7f427. The verified candidate is 16a90bdde96ef08ba4312e5d94aaf36d50048dca; removal commit 9d9817241 is preserved through integration merge e231a700e.
Final CI passes Linux package tests/lint/types (111/111 tasks), site build/CSS contract/Playground/lint/types and examples (36/36); Windows package tests (59/59 tasks, including Vite 676/676) and examples (36/36); Rust fmt/Clippy/workspace/codegen/parity; eight native targets; and Linux runtime/Next E2E. Runtime E2E passes 432 cases across Chromium, Firefox and WebKit, plus 10 Next cases.
Both deployments at this exact candidate pass page, canonical and removal-notice checks: Cloudflare and Vercel. Cloudflare health passes. Visual checks on the preceding candidate cover identical production site sources.
The dated audit preserves scoped commands and historical failures; this final result supersedes its pending CI status. The Compose integration review and site CSS review explain intentional contract changes. Site lint has 265 existing warnings and zero errors. No npm publication, package rename, version bump, lockfile change or release-workflow change is included.
Activity