Skip to content

Freeze directive removal and native definition ownership #448

Description

@1aron

Goal and background

Freeze directive ownership after the complete removal of @compose. Native declarations and selectors are the stylesheet authoring contract; utilities remain available directly in markup and through @utilities definitions.

Parent tracker: #445
Original freeze baseline: 70444b18c8102fa7a9d811ec51ef96902573792c
Removal implementation: 9d9817241bede3f4cf8b542e5e59380ffa0d9272
Integration: #461

Ownership and scope

mastercss-compiler, mastercss-project, @master/css-compiler and site. Depends on #447.

Implementation tasks

  • Define responsibilities and valid positions of @theme, @mode, @custom-variant, @variant, @utilities and @reference.
  • Reject genuine @compose in every authoring context with removed-compose-directive; preserve comments, strings and unrelated directive names.
  • Remove Compose lowering IR, traces and dedicated formatting/lint/fix APIs rather than retaining semantic fallback paths.
  • Validate whole-definition replacement, empty definitions, cross-file imports/references, reference cycles, ambiguity and source locations.
  • Preserve native declaration order, duplicate fallback values, conditional order and native CSS token streams.
  • Retain key:<*> and prefix-<~namespace>; do not restore typed raw matchers or removed managed-layer directives.
  • Update the directive contract and retain the existing compose reference URL as a removal/migration notice.

Final acceptance (2026-09-28)

Genuine @compose directives now produce ranged removed-compose-directive errors. Compose lowering, traces, canonical-directive lint/autofix and related public APIs are removed. Native declarations, duplicate fallbacks, authored order and native selectors remain covered across native/Wasm execution. The removal commit is preserved in the integration ancestry; migration retirements retain their historical denominator.

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

  1. changed the title [-]Freeze directive composition and definition ownership[/-] [+]Freeze directive removal and native definition ownership[/+] on Sep 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions