diff --git a/.ai/context/index.md b/.ai/context/index.md
index 53ff3a66a..07b30be7a 100644
--- a/.ai/context/index.md
+++ b/.ai/context/index.md
@@ -30,6 +30,7 @@ For package code, read the affected manifest and local `AI.md`. For high-risk be
- Commands and CI equivalents: `.ai/commands.md`
- Style and path conventions: `.ai/code-style.md`
- PR review checklist: `.ai/review-checklist.md`
+- Dated 2.0 freeze evidence and unresolved gates: `.ai/freeze-audit.md`
## Accuracy Rule
diff --git a/.ai/context/rust-routing.md b/.ai/context/rust-routing.md
index 4fd92b5a7..08cd5d77c 100644
--- a/.ai/context/rust-routing.md
+++ b/.ai/context/rust-routing.md
@@ -26,7 +26,7 @@ own loading, filesystem, browser, editor, and platform adaptation.
| `mastercss-source` | HTML/JS/Vue/Svelte-neutral source extraction IR | `src/lib.rs` and scanner tests |
| `mastercss-scanner` | Multi-file scan state over source extraction and engine transitions | `src/lib.rs` and tooling scanner tests |
| `mastercss-validator` | Rust validation operations | `src/lib.rs` |
-| `mastercss-lint` | Ordering, conflict, compose, and recommendation policy | matching domain module and its tests |
+| `mastercss-lint` | Ordering, conflict, and recommendation policy | matching domain module and its tests |
| `mastercss-language` | UTF-16 positions, document analysis, formatting, semantic tokens | `src/session.rs`, then domain module |
| `mastercss-render` | Server render/hydration IR | `src/lib.rs` and server fixtures |
| `mastercss-diagnostics` | Dependency-light diagnostic/report contracts | `src/lib.rs` |
diff --git a/.ai/contracts/api-census.json b/.ai/contracts/api-census.json
index db057445e..04ff14ea9 100644
--- a/.ai/contracts/api-census.json
+++ b/.ai/contracts/api-census.json
@@ -11,11 +11,11 @@
"packages/mcp/src/**/*.ts"
],
"summary": {
- "records": 919,
+ "records": 914,
"byKind": {
"bin": 3,
"cli-command": 4,
- "export": 735,
+ "export": 730,
"mcp-prompt": 3,
"mcp-resource": 3,
"mcp-tool": 20,
@@ -2899,28 +2899,6 @@
"subpath": "./tooling",
"name": "MasterCSSLintCanonicalClassSuggestions"
},
- {
- "kind": "export",
- "owner": "@master/css-binding",
- "responsibility": "native and Wasm binding loading",
- "consumers": [
- "@master/css",
- "@master/css-compiler",
- "@master/css-preset",
- "@master/css-runtime",
- "@master/css-server",
- "@master/css-tooling",
- "@master/css-vscode"
- ],
- "platform": "conditional",
- "lifecycle": "binding-session",
- "visibility": "published-internal",
- "disposition": "loader",
- "id": "export:@master/css-binding:./tooling#MasterCSSLintCanonicalComposeDirective",
- "package": "@master/css-binding",
- "subpath": "./tooling",
- "name": "MasterCSSLintCanonicalComposeDirective"
- },
{
"kind": "export",
"owner": "@master/css-binding",
@@ -8238,46 +8216,6 @@
"subpath": "./css-directives",
"name": "createCSSDirectiveSourceReference"
},
- {
- "kind": "export",
- "owner": "@master/css-schema",
- "responsibility": "serializable contracts and codecs",
- "consumers": [
- "@master/create-css",
- "@master/css",
- "@master/css-astro",
- "@master/css-binding",
- "@master/css-binding-wasm-compiler",
- "@master/css-binding-wasm-engine",
- "@master/css-binding-wasm-tooling",
- "@master/css-cli",
- "@master/css-compiler",
- "@master/css-internal",
- "@master/css-language-server",
- "@master/css-language-service",
- "@master/css-mcp",
- "@master/css-next",
- "@master/css-nuxt",
- "@master/css-preset",
- "@master/css-runtime",
- "@master/css-server",
- "@master/css-svelte",
- "@master/css-tooling",
- "@master/css-vite",
- "@master/css-vscode",
- "@master/eslint-plugin-css",
- "master-css-angular-example",
- "site"
- ],
- "platform": "universal",
- "lifecycle": "value",
- "visibility": "public",
- "disposition": "retain",
- "id": "export:@master/css-schema:./css-directives#CSSCompositionTrace",
- "package": "@master/css-schema",
- "subpath": "./css-directives",
- "name": "CSSCompositionTrace"
- },
{
"kind": "export",
"owner": "@master/css-schema",
@@ -8838,46 +8776,6 @@
"subpath": "./css-directives",
"name": "CSSDirectiveSourceReference"
},
- {
- "kind": "export",
- "owner": "@master/css-schema",
- "responsibility": "serializable contracts and codecs",
- "consumers": [
- "@master/create-css",
- "@master/css",
- "@master/css-astro",
- "@master/css-binding",
- "@master/css-binding-wasm-compiler",
- "@master/css-binding-wasm-engine",
- "@master/css-binding-wasm-tooling",
- "@master/css-cli",
- "@master/css-compiler",
- "@master/css-internal",
- "@master/css-language-server",
- "@master/css-language-service",
- "@master/css-mcp",
- "@master/css-next",
- "@master/css-nuxt",
- "@master/css-preset",
- "@master/css-runtime",
- "@master/css-server",
- "@master/css-svelte",
- "@master/css-tooling",
- "@master/css-vite",
- "@master/css-vscode",
- "@master/eslint-plugin-css",
- "master-css-angular-example",
- "site"
- ],
- "platform": "universal",
- "lifecycle": "value",
- "visibility": "public",
- "disposition": "retain",
- "id": "export:@master/css-schema:./css-directives#CSSDirectiveStyleComposeDefinition",
- "package": "@master/css-schema",
- "subpath": "./css-directives",
- "name": "CSSDirectiveStyleComposeDefinition"
- },
{
"kind": "export",
"owner": "@master/css-schema",
@@ -16259,60 +16157,6 @@
"subpath": "./lint",
"name": "CanonicalClassNameOptions"
},
- {
- "kind": "export",
- "owner": "@master/css-tooling",
- "responsibility": "lexer, source, scanner, validator, lint, and language tooling",
- "consumers": [
- "@master/css-cli",
- "@master/css-compiler",
- "@master/css-language-server",
- "@master/css-language-service",
- "@master/css-mcp",
- "@master/css-next",
- "@master/css-server",
- "@master/css-vite",
- "@master/css-vscode",
- "@master/css-webpack",
- "@master/eslint-plugin-css",
- "site"
- ],
- "platform": "universal",
- "lifecycle": "tooling-session",
- "visibility": "public",
- "disposition": "retain",
- "id": "export:@master/css-tooling:./lint#CanonicalComposeDirectiveResult",
- "package": "@master/css-tooling",
- "subpath": "./lint",
- "name": "CanonicalComposeDirectiveResult"
- },
- {
- "kind": "export",
- "owner": "@master/css-tooling",
- "responsibility": "lexer, source, scanner, validator, lint, and language tooling",
- "consumers": [
- "@master/css-cli",
- "@master/css-compiler",
- "@master/css-language-server",
- "@master/css-language-service",
- "@master/css-mcp",
- "@master/css-next",
- "@master/css-server",
- "@master/css-vite",
- "@master/css-vscode",
- "@master/css-webpack",
- "@master/eslint-plugin-css",
- "site"
- ],
- "platform": "universal",
- "lifecycle": "tooling-session",
- "visibility": "public",
- "disposition": "retain",
- "id": "export:@master/css-tooling:./lint#CanonicalComposeDirectiveSuggestion",
- "package": "@master/css-tooling",
- "subpath": "./lint",
- "name": "CanonicalComposeDirectiveSuggestion"
- },
{
"kind": "export",
"owner": "@master/css-tooling",
@@ -24362,7 +24206,7 @@
"id": "wire-contract:packages/binding/src/protocol.ts#MASTER_CSS_BINDING_ABI_VERSION",
"name": "MASTER_CSS_BINDING_ABI_VERSION",
"source": "packages/binding/src/protocol.ts",
- "value": 12
+ "value": 14
},
{
"kind": "wire-contract",
@@ -24384,7 +24228,7 @@
"id": "wire-contract:packages/binding/src/protocol.ts#MASTER_CSS_DIAGNOSTICS_REPORT_VERSION",
"name": "MASTER_CSS_DIAGNOSTICS_REPORT_VERSION",
"source": "packages/binding/src/protocol.ts",
- "value": 3
+ "value": 4
},
{
"kind": "wire-contract",
@@ -24516,7 +24360,7 @@
"id": "wire-contract:packages/binding/src/protocol.ts#MASTER_CSS_LINT_BATCH_VERSION",
"name": "MASTER_CSS_LINT_BATCH_VERSION",
"source": "packages/binding/src/protocol.ts",
- "value": 1
+ "value": 2
},
{
"kind": "wire-contract",
@@ -24598,7 +24442,7 @@
"id": "wire-contract:packages/cli/src/lint.ts#REPORT_VERSION",
"name": "REPORT_VERSION",
"source": "packages/cli/src/lint.ts",
- "value": 3
+ "value": 4
},
{
"kind": "wire-contract",
@@ -24668,7 +24512,7 @@
"id": "wire-contract:packages/mcp/src/directives.ts#DIRECTIVE_INSPECTION_VERSION",
"name": "DIRECTIVE_INSPECTION_VERSION",
"source": "packages/mcp/src/directives.ts",
- "value": 1
+ "value": 2
},
{
"kind": "wire-contract",
@@ -24696,7 +24540,7 @@
"id": "wire-contract:packages/mcp/src/lint.ts#LINT_REPORT_VERSION",
"name": "LINT_REPORT_VERSION",
"source": "packages/mcp/src/lint.ts",
- "value": 3
+ "value": 4
},
{
"kind": "wire-contract",
diff --git a/.ai/contracts/public-api.json b/.ai/contracts/public-api.json
index df1c66f2d..21379f661 100644
--- a/.ai/contracts/public-api.json
+++ b/.ai/contracts/public-api.json
@@ -156,7 +156,6 @@
"MasterCSSLintBindingSession",
"MasterCSSLintCanonicalClassGroupSuggestions",
"MasterCSSLintCanonicalClassSuggestions",
- "MasterCSSLintCanonicalComposeDirective",
"MasterCSSLintRawValueCandidates",
"MasterCSSMatchStatus",
"MasterCSSNativeBindingLoadOptions",
@@ -194,7 +193,7 @@
"createToolingBindingSync"
]
},
- "surface": "8e819e88c71a3fd1"
+ "surface": "d77d0faee6b98cb6"
},
"@master/css-binding-darwin-arm64": {
"directory": "binding-darwin-arm64",
@@ -878,7 +877,6 @@
"serializeMasterCSSHydrationManifest"
],
"./css-directives": [
- "CSSCompositionTrace",
"CSSDirectiveAnimationDefinitions",
"CSSDirectiveAnimationOptions",
"CSSDirectiveConditionPathEntry",
@@ -893,7 +891,6 @@
"CSSDirectiveSourceLocation",
"CSSDirectiveSourceRange",
"CSSDirectiveSourceReference",
- "CSSDirectiveStyleComposeDefinition",
"CSSDirectiveStyleDefinition",
"CSSDirectiveStyleNativeDefinition",
"CSSDirectiveUtilityDefinition",
@@ -960,7 +957,7 @@
"isMasterCSSRenderingMode"
]
},
- "surface": "ac5522612740ed9c"
+ "surface": "31bc2d6d9c5f4277"
},
"@master/css-server": {
"directory": "server",
@@ -1110,8 +1107,6 @@
],
"./lint": [
"CanonicalClassNameOptions",
- "CanonicalComposeDirectiveResult",
- "CanonicalComposeDirectiveSuggestion",
"MasterCSSCanonicalClassesReportOptions",
"MasterCSSClassListEditOptions",
"MasterCSSClassListLintReportOptions",
@@ -1227,7 +1222,7 @@
"inspectClassNameSync"
]
},
- "surface": "0024cc5ce0fdb6ea"
+ "surface": "d425486d425e92f7"
},
"@master/css-vite": {
"directory": "vite",
diff --git a/.ai/freeze-audit.md b/.ai/freeze-audit.md
new file mode 100644
index 000000000..7f9bfc282
--- /dev/null
+++ b/.ai/freeze-audit.md
@@ -0,0 +1,394 @@
+# Master CSS 2.0 Freeze Audit
+
+Tracker: https://github.com/master-co/css/issues/445
+
+Baseline: `70444b18c8102fa7a9d811ec51ef96902573792c`.
+This is a dated evidence record, not a replacement for source, package guidance,
+or publication authorization. Local results below are from 2026-09-26–28,
+macOS arm64, Node 24.20.0, pnpm 12.3.4, Cargo 1.98.1.
+
+## Decisions
+
+- Native CSS property/value identity must not depend on value inference.
+- Hyphenated named styles select vocabulary; raw keys accept direct values.
+- Abbreviations shorten identity, not meaning. Explicit multi-property utilities
+ remain possible through the existing authoring contract.
+- Rule ordering is semantic; final deterministic tie-breakers remain internal.
+- Static is the normal integration path; runtime is an explicit capability.
+- Rust owns semantics. Hosts supply filesystem, platform and capability checks.
+- Stabilize Manifest v1 / language v3 execution, not caches or a lossless CSS AST.
+
+### Verifiable Principles (#446)
+
+| Principle | Observable contract | Executable evidence |
+| --- | --- | --- |
+| Native CSS semantics | `font:16px` stays a `font` declaration; matching does not certify its value | compiler `tests/issues/447.test.ts`, css `inspection-contract.test.ts` |
+| Explicit named styles | `fg-red` uses `--color-red`; a missing explicit token produces `UNKNOWN_TOKEN` | compiler `tests/issues/447.test.ts` |
+| Abbreviations without inference | `p:8px` emits `padding:8px` with the authored unit | compiler `tests/issues/447.test.ts` |
+| No value-based property inference | `flex:hover` stays raw `flex:hover`; `display:flex:hover` applies a selector state | compiler `tests/issues/447.test.ts`, Rust `utility_definition_contract` |
+| Semantic ordering | `display:block flex` and `block flex` can have different winners; unsafe canonicalization is suppressed | runtime `freeze-cascade-matrix`, compiler `public-inspection-workflow` |
+| Static first | Official adapter defaults generate CSS without browser execution assets | Vite/Webpack/Next and wrapper test suites; example builds remain a separate gate |
+| One semantic source | Both compilers and both engines agree on 34 language cases and reject removed settings | compiler `tests/issues/447.test.ts`, Rust parity |
+
+### Finding Classification
+
+| Finding | Decision | Tracking |
+| --- | --- | --- |
+| Missing public inspection status and diagnostic types | Required for 2.0; expose existing Rust output through the owner | #447, #452 |
+| Complete removal of `@compose` | Integrated from `9d9817241`; reject the directive and retain native declaration ordering | #448, #453 |
+| ABI census and schema export guidance drift | Required for 2.0 audit accuracy; no ABI change | #446 |
+| Native/Wasm, directive, cascade and roundtrip coverage | Required for 2.0; extend existing tests where coverage is missing | #447–#452 |
+| Joint JS/Wasm/manifest size gate | Deferred to 2.x measurement policy; measure the current assets without changing the gate | #451, #455 |
+| Editable source IR and semantic comparison API | Deferred to 2.x design; keep separate from execution data | #455–#456 |
+| Value-based property inference, typed raw matchers, removed managed layer directives, universal unknown-field compatibility | Intentionally rejected; preserve explicit language and version contracts | #447–#450 |
+
+## Contract Inventory
+
+| Area / issue | Semantic owner and public entry | Evidence / consumers |
+| --- | --- | --- |
+| Language / #447 | engine `utility.rs`, `condition.rs`, `named.rs`; `@master/css` inspection | `utility_entry_resolution`, `condition_ranges`, compiler `named_token_contract`; all renderers and tooling |
+| Directives / #448 | compiler `directives.rs`, `manifest/`, `lower/`; compiler compile APIs | `utility_definition_contract`, `native_components_compose`, `bug_hunt_native_conditionals`; project, stylesheet, integrations |
+| Cascade / #449 | engine `compare_rule_priority`, generation; lint recommendation shape check | runtime `named-token-contract`, `native-components-compose`, `freeze-cascade-matrix`; lint, SSR, CSSOM |
+| Manifest / #450 | schema `manifest.rs`; schema `./manifest`, compiler project APIs | schema codec tests; compiler `freeze_manifest_contract` and `public-inspection-workflow`; native/Wasm, hydration |
+| Rendering / #451 | engine/render semantics; server/runtime hosts; official adapters | runtime `final-semantic-modes`, `hydration-edge-cases`; adapter static/default tests |
+| Tooling / #452 | validator/lint/language Rust crates; tooling, compiler diagnostics | `parity/v2-tooling-workflows.json`, MCP `final-semantics`; ESLint, LSP, MCP |
+| Extensibility / #455 | existing compiler/tooling/schema public exports | `public-inspection-workflow.test.ts`; no private integration SPI |
+| Future compatibility / #456 | versioned schema and compiler authoring boundary | `site/architecture/styling-ir-roadmap.md`; separate authoring/editing proposal |
+
+Public language evidence lives in the style-declarations, conditional-queries,
+directives, cascade-layers and rendering-modes guides under `site/`.
+
+## Verified Findings And Changes
+
+1. **Contract bookkeeping:** the initial audit corrected the census from 12 to
+ the then-current ABI 13. The later authorized compose-removal integration
+ advances ABI to 14, diagnostics report to 4 and lint batch to 2. Manifest v1
+ and language v3 remain unchanged; generated protocol and census agree.
+2. **Guidance drift:** schema's AI notes listed private `./manifest-json` as a
+ public subpath and omitted emitted-globals, diagnostics and integration.
+ Corrected against `packages/schema/package.json`; codec helpers are exported
+ by the root and `./manifest`.
+3. **#444 current-language regression:** explicit dark mode plus breakpoint emits
+ two valid native media wrappers. The new compiler regression checks both suffix
+ orders, parses emitted CSS, roundtrips the manifest and compares reverse
+ incremental registration with batch generation. This does not prove the old
+ published RC is fixed; #444 remains open.
+4. **Canonicalization boundary:** `display:block flex` computes `block`, while
+ `block flex` computes `flex`. This is an existing cascade distinction, not an
+ alias-equivalence promise. The public tooling test confirms it does not suggest
+ the unsafe canonical rewrite. Do not erase this distinction by changing a test
+ expectation or silently changing priority.
+5. **Native cascade:** new browser cases cover equal-scope token/raw priority,
+ importance, reversed important layer precedence, unlayered declarations,
+ shorthand/longhand, groups and incremental re-insertion in four rendering modes.
+6. **Public workflow:** project loading, token enumeration, serialization,
+ inspection and validation work through public exports. Validation separates a
+ known-invalid value (`padding:red`) from unknown dynamic values and unmatched
+ classes. Explicit project entry paths in this example are absolute.
+7. **Public inspection types:** `MasterCSSEngineInspection` omitted the existing
+ Rust `cssSyntaxStatus` and optional `diagnostics` fields. The public interface
+ now derives their types from the binding session's inspection return type.
+ This is a type correction, with no new runtime logic, wire field or ABI change.
+ Both bindings distinguish syntax recognition from value validation and return
+ immutable diagnostics without registering inspected classes.
+8. **Language matrix:** `packages/compiler/tests/issues/447.test.ts` checks all
+ four compiler/engine binding combinations, 27 matched and seven diagnostic or
+ unmatched cases, removed settings, and saved media-mode migration. Reversed
+ insertion keeps rule order and resource content/ref counts; theme variable
+ declarations follow first activation order, so distinct variable declaration
+ order is not a byte-equality promise across different insertion sequences.
+9. **Directive removal integration:** the user requested integration of the
+ complete `@compose` removal committed in `9d9817241`. Compiler, lint, language,
+ CLI and MCP no longer expand or fix this directive. Public native/Wasm tests
+ now preserve duplicate fallbacks with explicit declarations in static, raw,
+ token and enum utilities, and reject fixed and dynamic compose targets.
+10. **Manifest boundary matrix:** `packages/compiler/tests/issues/450.test.ts`
+ roundtrips compiled and publicly constructed definitions through both bindings.
+ It preserves ordered duplicate declarations, transitive variables, keyframes
+ and resource withdrawal. It also checks missing/unsupported versions, removed
+ fields, strict nested mode fields and retained opaque envelope metadata. A
+ codec successfully serializing an object does not establish engine acceptance.
+11. **Integration documentation drift:** Next, Nuxt and Astro READMEs incorrectly
+ described progressive defaults and runtime disabling. They now match the
+ existing static defaults and reject contradictory runtime options. Next's
+ README also now states the existing opt-in native pruning behavior.
+12. **Progressive examples:** Astro and Svelte examples described progressive
+ delivery while selecting the static default. Both now explicitly select
+ progressive. Svelte also lacked a client bootstrap: its server hook emitted
+ CSS, but no runtime loaded and an unseen `padding:37px` class had no effect.
+ The client hook now imports the existing Vite `virtual:master-css-runtime`
+ module, whose ambient declaration is added to `@master/css/client`. Package
+ and site instructions explain this explicit SvelteKit setup. This changes
+ those examples' delivery and documents an existing bootstrap capability;
+ it does not change integration defaults or add a new runtime implementation.
+13. **Public extension example:** `packages/compiler/examples/inspect-project.ts`
+ makes the project → token → codec → inspection → validation workflow runnable
+ using public exports. The example is part of compiler type-check coverage and
+ was executed with Node 24 from a separate project directory. Valid, empty,
+ known-invalid, unmatched and failed-project outcomes stay distinct. It adds
+ no runtime import or public package export.
+14. **Migration ABI wording:** the initial audit corrected obsolete ABI 8 prose
+ to 13. Incoming removal documentation now records ABI 14 and the deleted
+ directive APIs; historical behavior is not described as current support.
+
+### Directive Review (#448)
+
+| Contract | Source / behavior evidence | Public documentation |
+| --- | --- | --- |
+| Global definition positions; rule-local variants and removed compose rejection | compiler `directives.rs`, `bug-hunt-directive-positions.test.ts`, `bug-hunt-ordered-direct-output.test.ts` | directives: Definition scope and imports; Removed utility composition |
+| Replacement, empty definitions, ambiguity and source locations | Rust `utility_definition_contract`, engine `utility_entry_resolution` | directives: Whole-definition replacement; Named token patterns |
+| Import/reference scope, graph ordering, reference cycles | project `bug_hunt_manifest_graphs`, compiler `bug-hunt-reference-source-maps.test.ts` | directives: Reference context; Stylesheet boundaries and resource URLs |
+| Duplicate declarations, removed compose rejection, native token streams | Rust `removed_compose`, `utility_definition_contract`; compiler `tests/issues/448.test.ts` | directives: Removed utility composition; Native CSS preservation |
+| Removed typed raw matchers and managed layer directives | Rust `removed_pattern_forms_and_duplicate_enum_keys_fail`, `removed_managed_directives_are_diagnosed` | directives: Dynamic values; Native defaults/components |
+
+## Validation Evidence Before Compose Removal
+
+These results establish the pre-integration freeze branch. Combined-version
+validation is tracked separately below; prior results are not carried forward
+as proof of unchanged behavior.
+
+| Command / scope | Result |
+| --- | --- |
+| `cargo test -p mastercss-schema -p mastercss-engine -p mastercss-compiler -p mastercss-lint -p mastercss-validator` | 329 tests passed before the new regression file |
+| `cargo test -p mastercss-compiler --test freeze_manifest_contract` | 2 passed |
+| npm tests: schema, css, compiler, tooling, MCP, server | 982 passed before the new public workflow file |
+| npm tests: Vite, Webpack, Next, Astro, Nuxt, Svelte, language-service, language-server, ESLint | 1,736 passed |
+| compiler `public-inspection-workflow.test.ts` | 3 passed after adding the executable example |
+| compiler `tests/issues/{447,448,450}.test.ts` and public workflow | 12 passed after rebuilding bindings |
+| `@master/css` full suite, including public inspection regression | 78 passed |
+| Rust lexer; focused engine; compiler language/migration suites | 23 + 13 + 46 passed |
+| `cargo test -p mastercss-project`; preset npm suite | 17 + 39 passed |
+| `cargo test -p mastercss-language -p mastercss-diagnostics -p mastercss-cli` | 33 passed |
+| runtime existing five focused suites, all three browsers | Chromium/WebKit passed; initial Firefox launch failures were environmental and superseded by the full isolated Firefox run below |
+| runtime `freeze-cascade-matrix.test.ts`, all three browsers | 12 passed within the full suites |
+| full runtime suite, Chromium/WebKit, after builds completed | 288 passed; supersedes the initial 287/288 run with one startup timeout |
+| full runtime suite, Firefox with isolated app-data launch | 144 passed; 432/432 across all three browsers |
+| `cargo xtask codegen --check` and `cargo xtask parity` | Passed |
+| `cargo clippy -p mastercss-compiler --tests -- -D warnings`, `cargo fmt --check` | Passed |
+| `check:boundaries`, `check:packages`, `check:api-census` | Passed after the single census correction |
+| `check:runtime-size` | Passed against the rebuilt global bundle |
+| schema/compiler/runtime package lint | Passed |
+| schema/compiler/runtime package type-check | Passed |
+| css/compiler lint, type-check and css/compiler package build | Passed after the public inspection type correction and executable example |
+| Astro/Next/Nuxt/Svelte package lint; Svelte example lint/check | Passed; Astro example defines no lint script |
+| site lint | Passed with 266 warnings, zero errors; no autofix applied |
+| site `test:docs-examples` | 17 passed |
+| site `test:reference` | 20 passed after adding the missing Guide entrance for `#priority-matrix` |
+| site type-check and focused changed-guide lint | Passed |
+| `pnpm build:site` | Passed; rebuilt native/Wasm and packages, exported 830 pages, verified 95 public assets |
+| `pnpm build:examples` | 36 build tasks passed, zero cache hits; Laravel task reports no declared outputs |
+| Astro/Svelte progressive example builds and live browser smoke | Both rebuilt after fixes; 6 app/browser combinations passed across Chromium, WebKit and Firefox |
+| public example CLI, valid and invalid project | Node 24 execution returned `ready`/exit 0 and `error`/exit 1 with no fallback |
+| site `test:syntax-migration` | 3 passed after building the site; earlier missing-export blocker resolved |
+| `pnpm run check:ai-context` | Passed for 3,084 files |
+| `git diff --check` | Passed |
+| `cargo xtask stage-native-target binding-darwin-arm64 --release` then native package smoke | Passed after updating its Manifest/method fixture |
+| Next static-export focused e2e | 1 passed after untracking generated `.master` outputs |
+| Next full package e2e, local macOS | 10/10 passed; repeated with `CI=true`, also 10/10 passed |
+| Next HMR e2e after changing the fixture import to a relative path | Initial local run passed 4/4; later focused local runs reproduced Webpack server and style-update timeouts. Package lint and type-check passed |
+| binding package local build, type-check, lint and tests | Passed on macOS; 33/33 tests passed. A temporary CRLF conversion of 34 binding source files also built, then was reverted without a source diff |
+| `pnpm run check:migration` | Failed on stale reviewed target digest `rc87-bc7adf7569796dc8` from the pre-existing baseline; a diagnostic regeneration also exposed 503 unapproved changed/removed Rust-refactor cases requiring individual review |
+| Windows compatibility CI on PR #461 | Checkout, pnpm installation and Rust Wasm build passed after fixing generated-file tracking and patch checkout line endings; package tests failed while building binding declarations |
+| Linux e2e CI on PR #461 | Initial and two later full runs failed the same 2/10 Webpack dev-HMR cases on timeouts; isolated job reruns at both `a654e5376` and `e2b181da3` passed 10/10 Next cases and 34/34 Turbo tasks |
+
+The second pass rebuilt native/Wasm and package artifacts with the normal
+repository build; the first pass used existing artifacts. No semantic
+production code changed. This was a local rebuild using the installed toolchain
+and dependencies, not an isolated clean-room release or cross-platform native
+binary certification.
+
+## Browser Payload Observation
+
+Measured with Node zlib (`gzipSync(bytes, { level: 9 })` and default
+`brotliCompressSync(bytes)`). The second pass remeasured the artifacts rebuilt by
+`pnpm build:site`; all sizes match the first-pass observation. These are separate
+asset bytes, not a claim about every integration's transport:
+
+| Artifact | Raw | Gzip | Brotli |
+| --- | ---: | ---: | ---: |
+| runtime `dist/global.min.js` | 48,219 | 13,332 | 12,027 |
+| engine Wasm | 1,044,735 | 325,055 | 247,306 |
+| preset source Manifest JSON | 90,403 | 12,832 | 10,188 |
+| Sum of these three separate files | 1,183,357 | 351,219 | 269,521 |
+
+The rebuilt static React, Vite and Webpack examples contained 16, 16 and 4 files
+respectively, with no Wasm files or engine/execution-manifest markers in their
+HTML/JS/JSON output. Adapter tests separately cover default mode and injection
+policy. Progressive example browser checks confirmed one adopted style, unseen
+dynamic class generation, and no page errors in all three browsers; Astro's
+button color changes also passed. These checks do not claim every framework route
+or deployment is covered.
+
+The existing runtime-size gate checks only the global JS bundle. It does not
+enforce the three-file total. This audit does not silently broaden that gate or
+raise its budget. No production hot path changed, so CPU/memory/cold-start
+benchmarks were not run.
+
+## Freeze Integration Status
+
+The user approved all outstanding reviewed differences on 2026-09-28. Commit
+`0509284e3` records the last 192 exact case decisions and the generated ledgers.
+Before compose integration, `check:migration` passed: 1,546 rc.87 cases, 1,033
+Rust-refactor cases, seven post-rc.87 files; all 503 changed cases approved,
+503 exact and 27 supersets. Earlier approval documents remain historical evidence.
+
+[CI at `0a81364e5`](https://github.com/master-co/css/actions/runs/36344836324)
+completed with Windows package validation 59/59 tasks and examples 36/36 tasks,
+Linux e2e 34/34 tasks (432 runtime and 10 Next cases), Rust quality and all eight
+native target jobs passing. Linux quality failed only the then-unapproved
+192-case migration gate, skipping its later quality checks. The local approval
+checkpoint resolves that earlier gate; it does not certify the combined branch.
+
+Earlier Windows repairs retained by this merge include canonical path identity,
+file-URL source mapping, watcher/recovery assertions, portable process handling,
+CRLF autofix preservation and immutable Next output bypass. VSCode's completion
+request allows 30 seconds for cold indexing while initialization/shutdown retain
+five seconds; Windows now passes all 33 tests with unchanged assertions.
+
+The successful pre-integration previews are
+[Vercel](https://master-mbyqnrl4l-aoyue.vercel.app) and
+[Cloudflare](https://b856d7d4.master-css-e8w.pages.dev). Root/TW compose reference
+and legacy guide routes returned HTTP 200 with expected canonicals; Cloudflare
+health returned `{"ok":true}`. These precede the new removal documentation and
+must be checked again on the integrated deployment. No storage writes were tested.
+
+### Compose Removal Integration
+
+The user asked whether to merge the result of chat
+`01a0e0b3-2b97-7bc1-9890-8a328f97f201` before finishing the freeze. Both dry-run
+merge directions had the same 11 content-conflict paths. Incoming commit
+`9d9817241bede3f4cf8b542e5e59380ffa0d9272` is merged into the freeze branch first
+so the final contract and CI are verified together before PR #461 joins `rust`.
+No primary-checkout changes or package publication are part of this integration.
+
+Conflict resolutions retain new native/theme/variant fixtures and removal
+error codes/ranges together with existing Windows normalization and recovery
+assertions. The obsolete positive compose ordering case is removed as upstream
+intended. The freeze-added issue #448 regression uses native declarations and
+checks compose rejection in both bindings; the 2.x roadmap no longer promises
+compose traces or composition-aware edits. Generic stylesheet composition APIs
+and engine composition rules remain separate, supported concepts.
+
+Combined-version native/Wasm and 32 package build tasks pass. Conflict-focused
+checks pass: Vite 153, Next 6, compiler migration/ordering 19 and issue #448 four,
+Rust removal four. Full Rust fmt, Clippy, workspace tests, codegen and parity pass.
+The complete package test/lint/type-check run passed 110/111 tasks; its four
+obsolete VSCode grammar expectations were corrected, and the scoped rerun passes
+36/36 tasks including all 34 VSCode tests. The Wasm smoke fixture also needed nine
+lint version fields (1 to 2) and two inspection fields (3 to 4) updated; all four
+smoke tests pass. Public API golden/census now remove five retired Compose types.
+Package contracts, boundaries, census and AI context checks pass. Site example,
+Reference and LLM-export tests pass 17 + 20 + 32; site lint/type-check pass
+with zero errors and 265 existing warnings. The final stale Compose ordering
+paragraph in the cascade guide is corrected; focused lint and all 20 Reference
+tests pass again. Site highlight tests pass 11/11 with React server conditions.
+Focused runtime Chromium/WebKit tests pass 16/16; package artifacts (788), runtime
+size, MDN registry and release-configuration checks also pass.
+
+The integration review records 102 affected historical cases: 76 changed/renamed
+executable cases and 26 explicit retirements. All 1,033 baseline cases remain in
+the denominator; 494 are approved changes, 488 exact, 25 supersets and 26 approved
+removals. The 21 Manifest test digests remain unchanged; four containing test-file
+hashes change. See `parity/compose-removal-integration-review.md` for source trees,
+old/new digests, removed API rationale and the authorized integration provenance.
+Six migration-gate tests verify rename/removal identity, approval and absence.
+No earlier approval digest is silently repurposed for new bytes. Rebuilt runtime
+JS remains 48,219 raw bytes; engine Wasm is 1,044,424 and the preset JSON 90,403.
+These separate artifacts total 1,183,046 raw bytes; this is an observation, not
+a new combined transport budget. The existing runtime JS size gate passes.
+
+Generated-ledger validation passes at merged source `e231a700e`: 1,546 rc.87
+cases, 1,033 Rust-refactor cases and seven post-rc.87 files. Combined-branch CI
+and refreshed previews are still required. Do not close #454 or #445 before those gates pass.
+
+Integrated CI run `36373117361` exposed a clean-checkout TypeScript resolution
+failure hidden by local build artifacts: the compiler project entry and private
+project helper did not map to their source files. Explicit project/project-sync
+and internal source paths fix the reproduced failure. All workspace type-check
+references pass with compiler/internal `dist` temporarily absent; root build and
+type-check pass 32/32 and 40/40 tasks. The corrected paths also exposed an inferred
+private type in Next's declaration output. Its entry-graph return type now uses
+the existing public compiler option type; all 788 published artifact checks pass.
+This changes build-time type resolution only, without changing emitted CSS or
+runtime execution. All 206 Next tests and Next/compiler/internal lint checks pass. The run's Linux
+E2E and eight native platform jobs pass; Windows compatibility is still running.
+
+Run `36374490996` passed the compiler checks and exposed the same missing-root-link
+problem for ESLint Config's plugin import. Its source alias now points directly
+to the workspace entry. A broader clean-source check reproduces that failure
+with all 27 package `dist` directories absent; the other errors are Webpack tests
+that intentionally import their built artifact. With only that required Webpack
+artifact retained, all workspace references pass without the other 26 `dist`
+directories. Root build passes 32/32 tasks, package artifacts 788/788, ESLint
+Config tests 4/4 and plugin tests 284/284; both packages' lint checks pass.
+Migration cases and approvals are unchanged. The run also passes Linux E2E,
+Rust quality and all eight native targets; final Windows and Linux quality
+validation must finish before integration.
+
+The Windows package step in that run timed out waiting for a Webpack watch
+callback after attaching two sheets. The previous run instead timed out during
+CLI initial readiness. Both retain bounded assertions and pass locally. Four
+concurrent Turbo tasks, each allowing a half-CPU Vitest pool, oversubscribe the
+runner; Windows test-task concurrency is reduced to two without changing product
+code, test deadlines or assertions. This is a resource-contention correction;
+the next complete Windows result is required before claiming it resolves the
+observed timeouts.
+
+At `5ee8e180e`, Linux E2E passes 432 runtime cases, 10 Next cases and all 34
+tasks. Linux quality advances past both source-alias failures, then under its
+default 10-task concurrency multiple bounded CLI watch waits expire (97/110
+tasks had passed). Linux package validation is likewise limited to two tasks,
+matching the shared half-CPU worker policy. No test is removed, skipped, retried
+automatically or given a longer deadline. The complete local package validation
+with two task slots passes 111/111 tasks (32 build tasks cached); all package
+test/lint/type-check tasks pass, including 678 Vite cases. Windows CLI passes
+87/87 at `5ee8e180e`; its complete Windows result is 58/59 package tasks. The
+only failure is a Sass SSR reimport exceeding `vi.waitFor`'s one-second default
+before its async assertion returns. That wait now uses the existing 30-second CI
+rebuild budget; the green-CSS and server-channel exclusion assertions remain.
+Focused Sass/SSR suites pass 21/21; remote confirmation is still required.
+
+The integrated site check exposed stale Compose-era Playground expectations and
+a pre-integration CSS snapshot. Native nesting and informative unknown-variable
+diagnostics now retain the original test intent; all 17 Playground cases pass.
+`parity/site-css-integration-review.md` explains the exact refreshed snapshot:
+1,240 retained routes, 1,811 identical rules, 16 size rules replaced by 32 width/
+height rules, native font resources and documented reference-page changes.
+The exact-byte gate and resource checks remain intact. Final CI remains required.
+
+The unmodified Playwright Firefox launcher on this macOS host exits before tests
+start with `Could not find profile folder`. Firefox 144/144 and both progressive
+examples passed using a temporary local wrapper that supplied an isolated
+application-data path to the same cached Playwright Firefox binary. The wrapper
+changed only browser launch, not test assertions or timeouts; it is not a
+repository configuration or a product fix. Ordinary Firefox launches on this
+host still need an environment-level repair. The temporary runner file must be
+removed from the committed change.
+
+The first full Chromium/WebKit run had one iframe initialization timeout during
+parallel example builds. The iframe suite passed three isolated repetitions
+(9/9), then the full suite passed 288/288 after package builds completed. No test
+timeout or assertion was weakened. Concurrent artifact changes are a possible
+cause, not a proven diagnosis. The earlier missing site-export blocker is resolved.
+
+No package was published and no version, release workflow, or lockfile was
+changed. Shared build, validation CI and preview configuration repairs were authorized. Domain issues should close only after their acceptance evidence is
+integrated and linked; this report alone does not merge the code.
+
+## Issue State And Remaining Work
+
+- #446–#452: prior acceptance evidence passed; compose-removal integration is
+ being validated before final acceptance and issue closure.
+- #453: directive, inspection, layer, Manifest, current ABI and integration
+ guidance are corrected; public examples, migration exports and Reference
+ checks passed locally.
+- #454: prior source-freeze assessment passed; the combined branch remains
+ under validation, with the environment and release-certification limits above.
+- #455–#456: a type-checked, executed public workflow and a separate 2.x RFC
+ define current capabilities, gaps and non-goals. Follow-up issues #457–#460
+ now track the individual proposals. They do not ship an editable IR or commit
+ to a new extension ABI.
+
+Open issues distinguish local acceptance evidence from code integration and
+release certification. The pull request and each issue should link this report
+before closure.
diff --git a/.ai/reports/rust-test-migration.md b/.ai/reports/rust-test-migration.md
index 68c1dbf4b..d94392b35 100644
--- a/.ai/reports/rust-test-migration.md
+++ b/.ai/reports/rust-test-migration.md
@@ -150,22 +150,26 @@ older API, export, binding ABI, language wire shape, or rendering-mode option co
| Measure | Count |
|---|---:|
| Baseline contract cases | 1033 |
-| Preserved exact cases | 1005 |
-| Verified supersets | 15 |
-| Approved contract changes | 13 |
-| Regressed or removed cases | 0 |
-| Target-added supplemental cases | 446 |
+| Preserved exact cases | 488 |
+| Verified supersets | 25 |
+| Approved contract changes | 494 |
+| Approved contract removals (historical cases retained) | 26 |
+| Unapproved regressions or removals | 0 |
+| Target-added supplemental cases | 1857 |
| Contract surface | Baseline → target digest | Status | Proof | Human approval |
|---|---|---|---|---|
| `published-package-exports` | `f9e136dac3935614d62c33ccf0afe651fe93a7aafb79b9d6e7289d8f157f3980` → `f9e136dac3935614d62c33ccf0afe651fe93a7aafb79b9d6e7289d8f157f3980` | preserved-exact | exact-source | — |
-| `public-api-contract` | `b3b0acf8161aae00605cd11228b77129eb1b12e37079fd6681dead85e23a5deb` → `71d3cf79e4fc73d15e08823e7cd73f89ed3c457ea7ca3e220d0b8c60107a148b` | approved-contract-change | approved-contract-change | `Aron ` `2026-08-01T12:55:21Z` `codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c` `3b75d42c2c71d39855e342bf207cc5991e8ab76b4b30f46d94fc24e29f6c6fd3` |
+| `public-api-contract` | `b3b0acf8161aae00605cd11228b77129eb1b12e37079fd6681dead85e23a5deb` → `dc932f985895b73e74651d6c657a2855c78c3ffcfd22ee9e8cbe8b26ac7f3564` | approved-contract-change | approved-contract-change | `Aron (authorized complete compose removal and integration in this task)` `2026-09-28T02:45:50.429Z` `parity/compose-removal-integration-review.md` `2bea184ca44377ee9156fc7bdbe3823c0194b924def36aa0dec91fb9bca29c2d` |
| `native-target-package-contract` | `d2d2e2067f675f975a1c2e74c1ac3363680876760ee0805fc272cc0675b8aef8` → `d2d2e2067f675f975a1c2e74c1ac3363680876760ee0805fc272cc0675b8aef8` | preserved-exact | exact-source | — |
-| `binding-version-contract` | `a647d5bdf4761c7b9ce77609df36cfedb1bb4385e5d5572830b75f28fd165389` → `16cda28179e52dde2751c452a0ce4ee5cff1612ade85bb50c90caf258b1b89dd` | approved-contract-change | approved-contract-change | `Aron ` `2026-08-01T12:55:21Z` `codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c` `be6e83be61df4f4a673dc2faa19853e668760c9cdf6e185e1413d98ffafd86d8` |
-| `native-engine-raw-surface` | `ddcb6c249f568ae66a85713793ad1517b28466848414e7068bbb25ecf3102b9a` → `c0fe94acfe7dccfe5e71270fcfd5849e1418185a267640bab7a9a22c89e084ac` | approved-contract-change | approved-contract-change | `Aron ` `2026-08-01T12:55:21Z` `codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c` `ad6fda408474c6d1576332ca4b340905689a1ac8cd1af1e4f4257ed7bc460636` |
-| `wasm-engine-raw-surface` | `da686c4f607ed538a4e61f3a15ed0bd559cf18e320f8c6a28b47d58eb187e012` → `6563b821480af814fefd211bd636c111eb9e361c83ea6ac467462df820ab4474` | approved-contract-change | approved-contract-change | `Aron ` `2026-08-01T12:40:43Z` `codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c` `667e82c6b9260004f951d92075a9edc30c56825eb0674a208919b8298e75c9cc` |
+| `binding-version-contract` | `a647d5bdf4761c7b9ce77609df36cfedb1bb4385e5d5572830b75f28fd165389` → `34c602f88db14176975785917fb088331f4092ce7d2ca7c78c079ca14fc2fe40` | approved-contract-change | approved-contract-change | `Aron (authorized complete compose removal and integration in this task)` `2026-09-28T02:45:50.429Z` `parity/compose-removal-integration-review.md` `cb223eaf9ef3009bb9bd47f8caf88f585e279259916d80dca4d3b33173edcb87` |
+| `native-compiler-raw-surface` | `c6b7384f29a6bdae96a002b7827b9e2c7b3d7bb994e32adaee4a70abba4324d5` → `c1cd47bbac3e82935d87c0b0561e71c5cb074a5ade5bbca5b9ef1d6bec7692a4` | approved-contract-change | approved-contract-change | `Aron (explicit implementation plan in this task)` `2026-09-25T09:11:22.490Z` `parity/utility-contract-validation.md#migration-evidence-audit` `415fc1a363ad91bf38693c8fbc2aa4979df28dabc80b78354a3fb9d31695869d` |
+| `wasm-compiler-raw-surface` | `7bb965109d8a7b8ebbb475dd67224b0b96493eb21700d553b49891ae4ee648bf` → `507d877ae52f114dc9414b79f3559c13ad4f74886e6fddb1311cefa48f6a47f1` | approved-contract-change | approved-contract-change | `Aron (explicit implementation plan in this task)` `2026-09-25T09:11:22.490Z` `parity/utility-contract-validation.md#migration-evidence-audit` `b65eaebed42a9b6050c9557ce935ffbc7971ec23cc860a5730687ee19e5e3472` |
+| `native-engine-raw-surface` | `ddcb6c249f568ae66a85713793ad1517b28466848414e7068bbb25ecf3102b9a` → `5057b2da9d1de9e4cea516ddd361b7e05a4ea7ad996ff812f7300f4237263a31` | approved-contract-change | approved-contract-change | `Aron (explicit implementation plan in this task)` `2026-09-25T09:11:22.490Z` `parity/utility-contract-validation.md#migration-evidence-audit` `1525142eb2028b73c58dacf875415c3d02c5b6ddfaf433a1b2ec9b7696491528` |
+| `wasm-engine-raw-surface` | `da686c4f607ed538a4e61f3a15ed0bd559cf18e320f8c6a28b47d58eb187e012` → `ca033fbbf6a3e9cca84804d3d49d69485ea9a5085ce8c86cee64da0bd22cba06` | approved-contract-change | approved-contract-change | `Aron (explicit implementation plan in this task)` `2026-09-25T09:11:22.490Z` `parity/utility-contract-validation.md#migration-evidence-audit` `16bffebc84aabbd9712bc62ae76ea18c466fc6190f1496412ddd7cd34ce9450a` |
| `language-wire-contract` | `1b3028403047459c52dc0b7778109b719db01e02e2700bcc6c7f6d23133c0560` → `1b3028403047459c52dc0b7778109b719db01e02e2700bcc6c7f6d23133c0560` | preserved-exact | exact-source | — |
-| `integration-rendering-options-contract` | `2a3221834490cd8fddc853aff2bb1bdea0c3f30fa9083512961c2ef3fb5e61ef` → `2a3221834490cd8fddc853aff2bb1bdea0c3f30fa9083512961c2ef3fb5e61ef` | preserved-exact | exact-source | — |
+| `language-batch-contract` | `a77053bed4610a35ef92202e2385f1b6f626a45db097e55d658395f21e948545` → `c883844892117362024847c0730cf7c8366e0e11a30b28e9d09973bc17ff4ed6` | approved-contract-change | approved-contract-change | `Aron (explicit implementation plan in this task)` `2026-09-25T09:11:22.490Z` `parity/utility-contract-validation.md#migration-evidence-audit` `2c40adb427bc4b403c5c80c187aabe4980232494b250f6e8f575746ca0c1d376` |
+| `integration-rendering-options-contract` | `2a3221834490cd8fddc853aff2bb1bdea0c3f30fa9083512961c2ef3fb5e61ef` → `b01643013d47a686698b74c9fc6c6826e676fa89e9cce2f4e8645d6fb39fff45` | approved-contract-change | approved-contract-change | `Aron (explicit implementation plan in this task)` `2026-09-25T09:11:22.490Z` `parity/utility-contract-validation.md#migration-evidence-audit` `2923dbfdb3cf0d572e37b4b8e7d4235abcf7e88d8c081a2d61a0b94af3a69d70` |
The rendering-mode surface preserves the current distinction between disabling an
integration with `enabled: false` and retaining host loaders without runtime injection
@@ -177,21 +181,21 @@ These entries do not affect rc.87 parity completion or belong in `parity-excepti
The browser manifest adaptation has its own approved decision source, implementation
commit, upstream and target scope digests, target test bindings, and human approval.
The target audit follows the latest package commit at
-`latest-target-change@f6d4fb9851fb4490afa241ee3bea4373287bb624`.
+`latest-target-change@658f46c8fbeded44811c283fe1a463cf1d03654c`.
| Decision | Status | Owner | Implementation commit | Upstream → target digest | Tests | Human approval |
|---|---|---|---|---|---:|---|
-| `post-rc87-browser-manifest-import-fallback` | approved-adaptation | `@master/css-runtime, @master/css-internal, and build integrations` | `becef751987086ffe7a93cdbd6985f1ac0158c08` | `ac5df2e06eef38ac2b851263a4d7fa90f6c2c6fb7c17fb263b31cbd772c3459d` → `65bce5983f2a05fea6fe10339768d726eb6ac655fe6e9a1bd52eec8b8cbad640` | 21 | `Aron ` `2026-08-01T12:46:46Z` `codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c` `004cf73c481819fb9bea3064499b04789bfd8d96c9c3514d6b71809957d032f0` |
+| `post-rc87-browser-manifest-import-fallback` | approved-adaptation | `@master/css-runtime, @master/css-internal, and build integrations` | `becef751987086ffe7a93cdbd6985f1ac0158c08` | `ac5df2e06eef38ac2b851263a4d7fa90f6c2c6fb7c17fb263b31cbd772c3459d` → `7e78c57bad6eb9692720f5580d92b62703f7a88445614b90781d1ab9774cdfa6` | 21 | `Aron (authorized complete compose removal and integration in this task)` `2026-09-28T02:45:50.429Z` `parity/compose-removal-integration-review.md#manifest-file-supplement` `c7765daa6db59019ae6949287a5c64b36975a3a15d5ff310b2e6e0bbfe2be4f5` |
| Priority | File | Decision | Behavior |
|---|---|---|---|
-| P0 | `packages/integration/src/manifest-facade.ts` | approved-adaptation | Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back. |
-| P0 | `packages/integration/tests/module.test.ts` | approved-adaptation | Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back. |
-| P0 | `packages/next/tests/css-manifest-loader.test.ts` | approved-adaptation | Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back. |
-| P0 | `packages/vite/tests/plugins/manifest-loader.test.ts` | approved-adaptation | Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back. |
-| P0 | `packages/vite/tests/plugins/manifest-virtual-module.test.ts` | approved-adaptation | Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back. |
+| P0 | `packages/integration/src/manifest-facade.ts` | approved-adaptation | The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax. |
+| P0 | `packages/integration/tests/module.test.ts` | approved-adaptation | The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax. |
+| P0 | `packages/next/tests/css-manifest-loader.test.ts` | approved-adaptation | The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax. |
+| P0 | `packages/vite/tests/plugins/manifest-loader.test.ts` | approved-adaptation | The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax. |
+| P0 | `packages/vite/tests/plugins/manifest-virtual-module.test.ts` | approved-adaptation | The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax. |
| P2 | `packages/vscode/package.json` | outside-semantic-parity | Post-rc.87 package metadata or peripheral change. |
-| P0 | `packages/webpack/tests/plugin.test.ts` | approved-adaptation | Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back. |
+| P0 | `packages/webpack/tests/plugin.test.ts` | approved-adaptation | The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax. |
## Completion rule
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..a74288247
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+patches/*.patch text eol=lf
diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml
index 0fcd09443..f49e94cd9 100644
--- a/.github/workflows/validation.yml
+++ b/.github/workflows/validation.yml
@@ -158,7 +158,9 @@ jobs:
FULL_VALIDATION: ${{ needs.preflight.outputs.full }}
run: |
set -euo pipefail
- args=(run test lint type-check '--filter=./packages/*')
+ # Each Vitest suite can use half the runner's CPU. Share that budget
+ # with lint, type-check and cold package builds instead of oversubscribing.
+ args=(run test lint type-check '--filter=./packages/*' --concurrency=2)
if [ "$FULL_VALIDATION" != true ]; then
args+=(--affected)
fi
@@ -385,7 +387,9 @@ jobs:
FULL_VALIDATION: ${{ needs.preflight.outputs.full }}
run: |
set -euo pipefail
- args=(run test '--filter=./packages/*' --concurrency=4)
+ # Each Vitest suite can use half the runner's CPU. Keep two task
+ # slots so concurrent cold builds do not starve bounded watch tests.
+ args=(run test '--filter=./packages/*' --concurrency=2 --continue=dependencies-successful)
if [ "$FULL_VALIDATION" != true ]; then
args+=(--affected)
fi
diff --git a/AGENTS.md b/AGENTS.md
index 140e13011..3f8fbbe3f 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -23,7 +23,7 @@ Master CSS turns markup classes such as `fg:red:hover@sm` into layered CSS acros
@layer theme, base, defaults, components, utilities;
```
-Native defaults and components use `@layer` with class selectors; removed `@defaults`/`@components` are errors. Only `@utilities` registers on-demand Master classes. Prefer native CSS, with `@compose` for shared utility behavior; preserve ordered declarations, duplicates and compose statement boundaries.
+Native defaults and components use `@layer` with class selectors; removed `@defaults`/`@components` are errors. Only `@utilities` registers on-demand Master classes. Use native CSS declarations and selectors in stylesheets and utilities directly in markup; `@compose` is removed. Preserve ordered declarations and duplicates.
Generated rules use those layer blocks without dynamically adding the layer statement. Keyframes remain outside layers. Any CSS output difference is an intentional, explained behavior change covered by tests or fixtures.
diff --git a/crates/mastercss-binding-native/src/lib.rs b/crates/mastercss-binding-native/src/lib.rs
index 62514efe2..5628edf99 100644
--- a/crates/mastercss-binding-native/src/lib.rs
+++ b/crates/mastercss-binding-native/src/lib.rs
@@ -119,8 +119,6 @@ struct LintClassListRequest {
disallow_unknown_class: bool,
raw_value_policy: Option,
canonical_options: Option,
- #[serde(default)]
- compose_directive: bool,
}
#[derive(Deserialize)]
diff --git a/crates/mastercss-binding-native/src/tooling.rs b/crates/mastercss-binding-native/src/tooling.rs
index e86ca0efa..99f761f82 100644
--- a/crates/mastercss-binding-native/src/tooling.rs
+++ b/crates/mastercss-binding-native/src/tooling.rs
@@ -126,7 +126,6 @@ impl NodeLintSession {
disallow_unknown_class: request.disallow_unknown_class,
raw_value_policy: raw_value_policy.as_ref(),
canonical_options: request.canonical_options.as_ref(),
- compose_directive: request.compose_directive,
},
)
.map_err(to_napi_error)?,
@@ -196,27 +195,6 @@ impl NodeLintSession {
)
}
- #[napi]
- pub fn canonical_compose_directive(
- &mut self,
- class_names: Vec,
- native_support: Option>,
- options_json: Option,
- ) -> Result {
- let options = options_json
- .as_deref()
- .map(serde_json::from_str::)
- .transpose()
- .map_err(|error| Error::new(Status::InvalidArg, error.to_string()))?
- .unwrap_or_default();
- to_json(
- &self
- .inner
- .canonical_compose_directive(&class_names, native_support.as_deref(), &options)
- .map_err(to_napi_error)?,
- )
- }
-
#[napi]
pub fn dispose(&mut self) {
self.inner.dispose();
diff --git a/crates/mastercss-binding-wasm-tooling/src/lib.rs b/crates/mastercss-binding-wasm-tooling/src/lib.rs
index b431a9302..8e1abd1f4 100644
--- a/crates/mastercss-binding-wasm-tooling/src/lib.rs
+++ b/crates/mastercss-binding-wasm-tooling/src/lib.rs
@@ -125,8 +125,6 @@ struct LintClassListRequest {
disallow_unknown_class: bool,
raw_value_policy: Option,
canonical_options: Option,
- #[serde(default)]
- compose_directive: bool,
}
#[derive(Deserialize)]
@@ -326,7 +324,6 @@ impl ToolingLintSession {
disallow_unknown_class: request.disallow_unknown_class,
raw_value_policy: raw_value_policy.as_ref(),
canonical_options: request.canonical_options.as_ref(),
- compose_directive: request.compose_directive,
},
)
.map_err(scanner_error)?;
@@ -421,34 +418,6 @@ impl ToolingLintSession {
.map_err(|error| JsValue::from_str(&error.to_string()))
}
- #[wasm_bindgen(js_name = canonicalComposeDirective)]
- pub fn canonical_compose_directive(
- &mut self,
- class_names: Vec,
- native_support: JsValue,
- options: JsValue,
- ) -> Result {
- let native_support = if native_support.is_null() || native_support.is_undefined() {
- None
- } else {
- Some(
- serde_wasm_bindgen::from_value::>(native_support)
- .map_err(|error| JsValue::from_str(&error.to_string()))?,
- )
- };
- let options = if options.is_null() || options.is_undefined() {
- mastercss_lint::CanonicalClassNameOptions::default()
- } else {
- serde_wasm_bindgen::from_value(options)
- .map_err(|error| JsValue::from_str(&error.to_string()))?
- };
- self.inner
- .canonical_compose_directive(&class_names, native_support.as_deref(), &options)
- .map_err(scanner_error)?
- .serialize(&serde_wasm_bindgen::Serializer::json_compatible())
- .map_err(|error| JsValue::from_str(&error.to_string()))
- }
-
pub fn dispose(&mut self) {
self.inner.dispose();
}
diff --git a/crates/mastercss-cli/tests/bug_hunt_ordered_output.rs b/crates/mastercss-cli/tests/bug_hunt_ordered_output.rs
index 6ef1d89d3..5be3354c9 100644
--- a/crates/mastercss-cli/tests/bug_hunt_ordered_output.rs
+++ b/crates/mastercss-cli/tests/bug_hunt_ordered_output.rs
@@ -5,7 +5,7 @@ use std::{
};
#[test]
-fn native_cli_keeps_composed_styles_in_one_anonymous_layer() {
+fn native_cli_keeps_native_variants_in_one_anonymous_layer() {
let root = std::env::temp_dir().join(format!(
"master-cli-ordered-{}-{}",
std::process::id(),
@@ -15,7 +15,7 @@ fn native_cli_keeps_composed_styles_in_one_anonymous_layer() {
.as_nanos()
));
fs::create_dir_all(&root).unwrap();
- fs::write(root.join("entry.css"), "@master entry;@utilities{paint{padding:2rem!important}low{padding:1rem!important}}@layer{.a{@compose paint;}.b{@compose low;}}").unwrap();
+ fs::write(root.join("entry.css"), r###"@master entry;@preserve native;@layer{.a{@variant media(all){padding:2rem!important}}.b{@variant media(all){padding:1rem!important}}}"###).unwrap();
let output = Command::new(env!("CARGO_BIN_EXE_mcss"))
.current_dir(&root)
.args(["--no-export", "-v", "0"])
diff --git a/crates/mastercss-compiler/src/compiled_stylesheet_graph.rs b/crates/mastercss-compiler/src/compiled_stylesheet_graph.rs
index 7e2680548..c80bb2107 100644
--- a/crates/mastercss-compiler/src/compiled_stylesheet_graph.rs
+++ b/crates/mastercss-compiler/src/compiled_stylesheet_graph.rs
@@ -29,7 +29,7 @@ pub struct CompileCssStylesheetGraphRequest {
pub classes_by_stylesheet: HashMap>>,
#[serde(default)]
pub prune_native_stylesheets: Option>,
- /// Only these files emit native rules/compose and unresolved external imports.
+ /// Only these files emit native rules/variants and unresolved external imports.
/// Local links from suppressed files only retain selected output descendants.
#[serde(default)]
pub native_stylesheets: Option>,
@@ -93,8 +93,7 @@ fn merge_input(target: &mut Map, next: &CssDirectiveManifestInput
fn is_managed(definition: &CssDirectiveStyleDefinition) -> bool {
match definition {
- CssDirectiveStyleDefinition::Native { name, .. }
- | CssDirectiveStyleDefinition::Compose { name, .. } => name.is_some(),
+ CssDirectiveStyleDefinition::Native { name, .. } => name.is_some(),
}
}
@@ -106,7 +105,7 @@ fn append_unique(target: &mut Vec, values: &[String]) {
}
}
-/// Compile the whole manifest while retaining native CSS and native @compose
+/// Compile the whole manifest while retaining native CSS and native @variant
/// output in their original stylesheet scopes. Import conditions belong to those
/// stylesheets; authoring definitions form the graph's shared manifest.
pub fn compile_css_stylesheet_graph(
@@ -293,14 +292,12 @@ pub fn compile_css_stylesheet_graph(
let order_offset = all_definitions
.last()
.map_or(0, |definition| match definition {
- CssDirectiveStyleDefinition::Native { order, .. }
- | CssDirectiveStyleDefinition::Compose { order, .. } => *order,
+ CssDirectiveStyleDefinition::Native { order, .. } => *order,
});
for definition in result.style_definitions.as_deref().unwrap_or_default() {
let mut definition = definition.clone();
match &mut definition {
- CssDirectiveStyleDefinition::Native { order, .. }
- | CssDirectiveStyleDefinition::Compose { order, .. } => {
+ CssDirectiveStyleDefinition::Native { order, .. } => {
*order = order
.checked_add(order_offset)
.ok_or_else(|| graph_error(&graph.entry, "Too many style definitions"))?
@@ -331,7 +328,6 @@ pub fn compile_css_stylesheet_graph(
resolution_manifest: request.resolution_manifest.clone(),
},
)?;
- combined.compositions = lowered.compositions;
combined.warnings = lowered.warnings;
// lower_css_directives resolves its own native rules after finalizing managed
// definitions, but its resolution_manifest field predates that finalization.
@@ -349,7 +345,6 @@ pub fn compile_css_stylesheet_graph(
let mut generated = Vec::new();
let mut raw_sources = Vec::new();
- let mut provenance_engine = None;
for ((node, result), slots) in graph.stylesheets.iter().zip(&parsed).zip(&native_slots) {
let emit_native = native_stylesheets
.as_ref()
@@ -365,20 +360,6 @@ pub fn compile_css_stylesheet_graph(
resolution_manifest: Some(resolution_manifest.clone()),
},
)?;
- for mut trace in native_lowered.compositions {
- if provenance_engine.is_none() {
- provenance_engine = Some(
- mastercss_engine::EngineSession::create(&resolution_manifest.to_string())
- .map_err(|error| graph_error(&node.id, error.to_string()))?,
- );
- }
- crate::lower::inspection::attach_definition_sources(
- &mut trace,
- combined.style_definitions.as_deref().unwrap_or_default(),
- provenance_engine.as_ref().unwrap(),
- )?;
- combined.compositions.push(trace);
- }
append_unique(&mut combined.warnings, &native_lowered.warnings);
if emit_native {
replacements.push((
@@ -523,7 +504,7 @@ pub fn compile_css_stylesheet_graph(
let start_byte = token.bytes.start;
let end_byte = start_byte + marker.len();
if asset.css.get(start_byte..end_byte) != Some(marker.as_str()) {
- return Err(graph_error(&asset.id, "Compiled compose slot was altered"));
+ return Err(graph_error(&asset.id, "Compiled style slot was altered"));
}
let start = previous_offset
+ asset.css[previous_byte..start_byte].encode_utf16().count() as u32;
@@ -544,7 +525,7 @@ pub fn compile_css_stylesheet_graph(
});
}
if edits.len() != replacements.len() {
- return Err(graph_error(&asset.id, "Compiled compose slots were lost"));
+ return Err(graph_error(&asset.id, "Compiled style slots were lost"));
}
let (css, output_mappings) =
crate::output_edits::apply_output_edits(&asset.css, &mappings, edits, &asset.id)?;
@@ -570,9 +551,6 @@ pub fn compile_css_stylesheet_graph(
.utility_sources
.splice(0..0, request.utility_sources.clone());
crate::utility_sources::resolve(&mut combined.utility_sources);
- for trace in &mut combined.compositions {
- crate::utility_sources::attach(trace, &combined.utility_sources);
- }
combined.css = entry.css.clone();
combined.native_css = entry.native_css.clone();
combined.generated_css = entry.generated_css.clone();
diff --git a/crates/mastercss-compiler/src/directives.rs b/crates/mastercss-compiler/src/directives.rs
index eaffd419b..beadb4d52 100644
--- a/crates/mastercss-compiler/src/directives.rs
+++ b/crates/mastercss-compiler/src/directives.rs
@@ -5,7 +5,8 @@ use super::{
ThemeAtRule, ThemeAtRuleParser, Visit, decode_css_quoted_string, directive_error,
extraction_policy_from_statements, filter_native_css_rules, lower_custom_variant_rule,
lower_managed_rule_list, lower_settings_rule, lower_theme_rule, mask_managed_pattern_names,
- rewrite_managed_variant_directives, validate_compose_syntax, validate_condition_variant_syntax,
+ reject_removed_directives, rewrite_managed_variant_directives,
+ validate_condition_variant_syntax,
};
use mastercss_lexer::{
find_css_reference_statements, find_standalone_css_directive_statements, utf16_to_byte_offset,
@@ -125,7 +126,7 @@ fn compile_css_directives_impl(
None => &mut local_slots,
});
validate_condition_variant_syntax(source, &options.from)?;
- validate_compose_syntax(source, &options.from)?;
+ reject_removed_directives(source, &options.from)?;
let reference_statements = find_css_reference_statements(source);
let standalone_directives = find_standalone_css_directive_statements(source);
// Parsing still addresses the original source. Blank consumed statements
@@ -413,7 +414,6 @@ fn compile_css_directives_impl(
};
Ok(CompileCssDirectivesResult {
utility_sources: crate::utility_sources::collect(source, &options.from),
- compositions: Vec::new(),
native_output,
native_mappings,
manifest_input,
@@ -438,7 +438,7 @@ pub(crate) fn native_style_slot<'a>(
) -> CssRule<'a, ThemeAtRule> {
let mut index = slots.len();
let name = loop {
- let name = format!("--master-css-compose-slot-{index}");
+ let name = format!("--master-css-style-slot-{index}");
if occupied.insert(name.clone()) {
break name;
}
diff --git a/crates/mastercss-compiler/src/lib.rs b/crates/mastercss-compiler/src/lib.rs
index 7eb6ff9aa..e574e6317 100644
--- a/crates/mastercss-compiler/src/lib.rs
+++ b/crates/mastercss-compiler/src/lib.rs
@@ -29,17 +29,16 @@ use lightningcss::properties::Property;
use lightningcss::rules::CssRule;
use lightningcss::rules::keyframes::KeyframesName;
use lightningcss::rules::style::StyleRule;
-use lightningcss::rules::unknown::UnknownAtRule;
use lightningcss::selector::{Component, Selector};
use lightningcss::stylesheet::{MinifyOptions, ParserOptions, PrinterOptions, StyleSheet};
use lightningcss::traits::{AtRuleParser, ToCss};
use lightningcss::visit_types;
use lightningcss::visitor::{Visit, VisitTypes, Visitor};
use mastercss_lexer::{
- StandaloneCssDirectiveStatement, byte_to_utf16_offset, collect_class_list_token_ranges,
- extract_top_level_at_rule_blocks, find_css_directive_ranges, find_css_import_statements,
- find_master_directive_statements, parse_css_import_source, remove_css_reference_statements,
- remove_standalone_css_directives, utf16_to_byte_offset,
+ StandaloneCssDirectiveStatement, byte_to_utf16_offset, extract_top_level_at_rule_blocks,
+ find_css_directive_ranges, find_css_import_statements, find_master_directive_statements,
+ parse_css_import_source, remove_css_reference_statements, remove_standalone_css_directives,
+ utf16_to_byte_offset,
};
use mastercss_schema::{
CssDeclaration, CssDirectiveBlocklistEntry, CssDirectiveConditionPathEntry,
@@ -114,8 +113,6 @@ pub struct CompileNativeCssResult {
pub struct CompileCssDirectivesResult {
#[serde(skip_serializing_if = "Vec::is_empty")]
pub utility_sources: Vec,
- #[serde(skip_serializing_if = "Vec::is_empty")]
- pub compositions: Vec,
#[serde(skip_serializing_if = "Option::is_none")]
pub native_output: Option,
#[serde(skip_serializing_if = "Vec::is_empty")]
@@ -690,7 +687,7 @@ pub(crate) use native_style::{
};
pub(crate) use pattern::{
ParsedManagedPattern, condition_properties, css_block_end, css_statement_delimiter,
- mask_managed_pattern_names, minified_css, trim_byte_range,
+ mask_managed_pattern_names, minified_css,
};
pub(crate) use syntax::{
collect_declarations, css_comment_end, css_quote_end, declaration_name, define_theme_variable,
@@ -700,7 +697,7 @@ pub(crate) use syntax::{
pub(crate) use theme::{lower_settings_rule, lower_theme_rule};
pub(crate) use variant::{
combine_managed_selectors, lower_custom_variant_rule, managed_selector_definition,
- printed_selectors, rewrite_managed_variant_directives, validate_compose_syntax,
+ printed_selectors, reject_removed_directives, rewrite_managed_variant_directives,
validate_condition_variant_syntax,
};
diff --git a/crates/mastercss-compiler/src/lower/api.rs b/crates/mastercss-compiler/src/lower/api.rs
index 5373caf1e..9722cd327 100644
--- a/crates/mastercss-compiler/src/lower/api.rs
+++ b/crates/mastercss-compiler/src/lower/api.rs
@@ -1,11 +1,8 @@
use super::merge::create_merged_style_definitions;
-use super::render::{
- managed_dependencies, managed_dependency_order, managed_refresh_count, managed_style_groups,
- push_static_utility_rule, render_style_definitions,
-};
+use super::render::{managed_style_groups, push_static_utility_rule, render_style_definitions};
use super::resolution::{compile_with_base, engine_for_manifest, finalize_utility_definitions};
use super::{
- CompilerError, CssDirectiveManifestInput, CssDirectiveStyleDefinition, HashMap, HashSet,
+ CompilerError, CssDirectiveManifestInput, CssDirectiveStyleDefinition, HashMap,
LowerCssDirectivesOptions, LowerCssDirectivesRequest, LowerCssDirectivesResult,
};
@@ -27,7 +24,6 @@ pub fn lower_css_directives(
return Ok(LowerCssDirectivesResult {
utility_sources: Vec::new(),
css: None,
- compositions: Vec::new(),
output_mappings: Vec::new(),
input,
manifest,
@@ -38,7 +34,7 @@ pub fn lower_css_directives(
diagnostic_counts: HashMap::from([("lower-managed-style-refresh-count".into(), 0)]),
});
}
- let (body_definitions, mut engine, mut resolution_manifest, body_refresh_count) =
+ let (mut engine, mut resolution_manifest, body_refresh_count) =
super::definitions::resolve_bodies(&mut input, resolution_base.clone())?;
let unfinalized_input = input.clone();
finalize_utility_definitions(&mut input, &mut engine)?;
@@ -48,43 +44,23 @@ pub fn lower_css_directives(
}
let groups = managed_style_groups(style_definitions);
- let dependencies = managed_dependencies(&groups);
- let managed_order = managed_dependency_order(&groups, &dependencies)?;
- let mut unrefreshed = HashSet::new();
- for index in &managed_order {
- if dependencies[*index]
- .iter()
- .any(|dependency| unrefreshed.contains(dependency))
- {
- let current_manifest = compile_with_base(
- &input,
- options
- .resolution_manifest
- .clone()
- .or_else(|| options.base_manifest.clone()),
- )?;
- engine = engine_for_manifest(¤t_manifest)?;
- unrefreshed.clear();
- }
- let ((name, layer), definitions) = &groups[*index];
+ for ((name, layer), definitions) in &groups {
for definition in create_merged_style_definitions(definitions, &mut engine, Some(*layer))? {
push_static_utility_rule(&mut input, name, *layer, definition)?;
}
- unrefreshed.insert(*index);
}
let native_definitions = style_definitions
.iter()
.filter(|definition| match definition {
- CssDirectiveStyleDefinition::Native { name, .. }
- | CssDirectiveStyleDefinition::Compose { name, .. } => name.is_none(),
+ CssDirectiveStyleDefinition::Native { name, .. } => name.is_none(),
})
.cloned()
.collect::>();
let (generated_css, generated_mappings) = if native_definitions.is_empty() {
(String::new(), Vec::new())
} else {
- if !unrefreshed.is_empty() {
+ if !groups.is_empty() {
let current_manifest = compile_with_base(
&input,
options
@@ -110,40 +86,11 @@ pub fn lower_css_directives(
let warnings = initial_warnings.to_vec();
let diagnostic_counts = HashMap::from([(
"lower-managed-style-refresh-count".into(),
- body_refresh_count
- + managed_refresh_count(
- &managed_order,
- &dependencies,
- !native_definitions.is_empty(),
- ),
+ body_refresh_count + u64::from(!groups.is_empty() && !native_definitions.is_empty()),
)]);
- let inspection_definitions = body_definitions
- .iter()
- .chain(style_definitions.iter())
- .cloned()
- .collect::>();
- let compositions = if inspection_definitions
- .iter()
- .any(|definition| matches!(definition, CssDirectiveStyleDefinition::Compose { .. }))
- {
- let final_manifest = compile_with_base(
- &input,
- options
- .resolution_manifest
- .clone()
- .or_else(|| options.base_manifest.clone()),
- )?;
- super::inspection::inspect_compositions(
- &inspection_definitions,
- &mut engine_for_manifest(&final_manifest)?,
- )?
- } else {
- Vec::new()
- };
Ok(LowerCssDirectivesResult {
utility_sources: Vec::new(),
css: None,
- compositions,
output_mappings: Vec::new(),
input,
manifest,
@@ -167,9 +114,6 @@ pub fn lower_css_directives_request(
)?;
result.utility_sources = request.utility_sources.clone();
crate::utility_sources::resolve(&mut result.utility_sources);
- for trace in &mut result.compositions {
- crate::utility_sources::attach(trace, &result.utility_sources);
- }
if let Some(output) = &request.native_output {
super::output::assemble_native_output(output, options, &mut result)?;
}
diff --git a/crates/mastercss-compiler/src/lower/definitions.rs b/crates/mastercss-compiler/src/lower/definitions.rs
index 4a2d5be43..5565c65c1 100644
--- a/crates/mastercss-compiler/src/lower/definitions.rs
+++ b/crates/mastercss-compiler/src/lower/definitions.rs
@@ -1,15 +1,13 @@
use super::resolution::{compile_with_base, directive_error, engine_for_manifest};
-use super::{
- CompilerError, CssDirectiveManifestInput, CssDirectiveStyleDefinition, EngineSession, Value,
-};
+use super::{CompilerError, CssDirectiveManifestInput, EngineSession, Value};
use crate::utility_definitions;
-/// Override complete units before building the composition graph. Ordered body
+/// Override complete units before lowering their ordered body.
/// fragments are lowered together; a nested rule can never outlive its owner.
pub(super) fn resolve_bodies(
input: &mut CssDirectiveManifestInput,
base: Option,
-) -> Result<(Vec, EngineSession, Value, u64), CompilerError> {
+) -> Result<(EngineSession, Value, u64), CompilerError> {
if let Some(utilities) = &mut input.utilities {
*utilities = utility_definitions::effective(utilities);
}
@@ -35,34 +33,8 @@ pub(super) fn resolve_bodies(
));
indices.push(index);
}
- let mut dependencies = vec![Vec::new(); groups.len()];
- for (index, (_, body)) in groups.iter().enumerate() {
- for fragment in body {
- if let CssDirectiveStyleDefinition::Compose { class_name, .. } = fragment {
- let names = engine
- .matched_utility_names(class_name)
- .map_err(|error| directive_error(error.to_string()))?;
- for (dependency, ((name, _), _)) in groups.iter().enumerate() {
- if names.contains(name) && !dependencies[index].contains(&dependency) {
- dependencies[index].push(dependency);
- }
- }
- }
- }
- }
- let order = super::render::managed_dependency_order(&groups, &dependencies)?;
- let mut dirty = std::collections::HashSet::new();
- let mut refresh_count = 0;
- for index in order {
- if dependencies[index]
- .iter()
- .any(|dependency| dirty.contains(dependency))
- {
- manifest = compile_with_base(input, base.clone())?;
- engine = engine_for_manifest(&manifest)?;
- dirty.clear();
- refresh_count += 1;
- }
+ let mut changed = false;
+ for index in 0..groups.len() {
let mut rules = Vec::new();
for style in super::merge::create_merged_style_definitions(
&groups[index].1,
@@ -84,19 +56,13 @@ pub(super) fn resolve_bodies(
.map(Ok)
.unwrap_or_else(|| utility_definitions::seed_rules(definition.as_object().unwrap()))?;
if previous != rules {
- dirty.insert(index);
+ changed = true;
}
definition["compiledBody"] = Value::Array(rules);
}
- if !dirty.is_empty() {
+ if changed {
manifest = compile_with_base(input, base)?;
engine = engine_for_manifest(&manifest)?;
- refresh_count += 1;
}
- Ok((
- groups.into_iter().flat_map(|(_, body)| body).collect(),
- engine,
- manifest,
- refresh_count,
- ))
+ Ok((engine, manifest, u64::from(changed)))
}
diff --git a/crates/mastercss-compiler/src/lower/inspection.rs b/crates/mastercss-compiler/src/lower/inspection.rs
deleted file mode 100644
index 9d2ccdf81..000000000
--- a/crates/mastercss-compiler/src/lower/inspection.rs
+++ /dev/null
@@ -1,123 +0,0 @@
-use super::{CompilerError, CssDirectiveStyleDefinition, EngineSession};
-use mastercss_schema::CssCompositionTrace;
-
-/// Compiler-only provenance. None of this is serialized into the runtime manifest.
-pub(super) fn inspect_compositions(
- definitions: &[CssDirectiveStyleDefinition],
- engine: &mut EngineSession,
-) -> Result, CompilerError> {
- let mut statements: Vec> = Vec::new();
- let mut previous = None;
- for definition in definitions {
- let CssDirectiveStyleDefinition::Compose { order, .. } = definition else {
- previous = None;
- continue;
- };
- if previous != Some(*order) {
- statements.push(Vec::new());
- }
- statements.last_mut().unwrap().push(definition.clone());
- previous = Some(*order);
- }
- statements
- .into_iter()
- .map(|statement| {
- let CssDirectiveStyleDefinition::Compose {
- order,
- directive_source,
- source,
- ..
- } = &statement[0]
- else {
- unreachable!()
- };
- let mut trace = CssCompositionTrace {
- order: *order,
- classes: Vec::new(),
- resolved_utilities: Vec::new(),
- source: directive_source.clone().or_else(|| source.clone()),
- definition_sources: Vec::new(),
- css: String::new(),
- variable_names: Vec::new(),
- animation_names: Vec::new(),
- };
- for definition in &statement {
- let CssDirectiveStyleDefinition::Compose { class_name, .. } = definition else {
- unreachable!()
- };
- trace.classes.push(class_name.clone());
- for rule in engine
- .inspect(class_name)
- .map_err(|error| super::resolution::directive_error(error.to_string()))?
- .rules
- {
- for name in rule.variable_names {
- if !trace.variable_names.contains(&name) {
- trace.variable_names.push(name);
- }
- }
- for name in rule.animation_names {
- if !trace.animation_names.contains(&name) {
- trace.animation_names.push(name);
- }
- }
- }
- }
- trace.css = super::render::render_style_definitions(
- super::merge::create_merged_style_definitions(&statement, engine, None)?,
- )
- .0;
- attach_definition_sources(&mut trace, definitions, engine)?;
- Ok(trace)
- })
- .collect()
-}
-
-pub(crate) fn attach_definition_sources(
- trace: &mut CssCompositionTrace,
- definitions: &[CssDirectiveStyleDefinition],
- engine: &EngineSession,
-) -> Result<(), CompilerError> {
- let mut pending = trace.classes.clone();
- let mut visited = std::collections::HashSet::new();
- while let Some(class) = pending.pop() {
- if !visited.insert(class.clone()) {
- continue;
- }
- let names = engine
- .matched_utility_names(&class)
- .map_err(|error| super::resolution::directive_error(error.to_string()))?;
- for name in &names {
- if !trace.resolved_utilities.contains(name) {
- trace.resolved_utilities.push(name.clone());
- }
- }
- for definition in definitions {
- let (name, source, dependency) = match definition {
- CssDirectiveStyleDefinition::Native {
- name: Some(name),
- selector_source,
- ..
- } => (name, selector_source, None),
- CssDirectiveStyleDefinition::Compose {
- name: Some(name),
- selector_source,
- class_name,
- ..
- } => (name, selector_source, Some(class_name)),
- _ => continue,
- };
- if names.contains(name) {
- if let Some(source) = source
- && !trace.definition_sources.contains(source)
- {
- trace.definition_sources.push(source.clone());
- }
- if let Some(dependency) = dependency {
- pending.push(dependency.clone());
- }
- }
- }
- }
- Ok(())
-}
diff --git a/crates/mastercss-compiler/src/lower/merge.rs b/crates/mastercss-compiler/src/lower/merge.rs
index 90e7d3454..dc6058c74 100644
--- a/crates/mastercss-compiler/src/lower/merge.rs
+++ b/crates/mastercss-compiler/src/lower/merge.rs
@@ -1,35 +1,9 @@
-use super::resolution::{
- combine_style_selectors, composition_rules, directive_diagnostic, resolve_configured_branches,
-};
+use super::resolution::resolve_configured_branches;
use super::{
CompilerError, CssDeclaration, CssDirectiveConditionPathEntry, CssDirectiveSourceReference,
- CssDirectiveStyleDefinition, EngineCompositionRuleIr, EngineSession, ErrorCode,
- MergedStyleDefinition, Ordering, RulePriorityIr, UtilityLayerName, natural_compare,
+ CssDirectiveStyleDefinition, EngineSession, MergedStyleDefinition, UtilityLayerName,
};
-fn compare_rule_priority(
- left: &EngineCompositionRuleIr,
- right: &EngineCompositionRuleIr,
-) -> Ordering {
- left.sort_tier
- .cmp(&right.sort_tier)
- .then_with(|| compare_features(&left.priority, &right.priority))
- .then_with(|| left.priority.selector.cmp(&right.priority.selector))
- .then_with(|| left.utility_type.cmp(&right.utility_type))
- .then_with(|| {
- left.priority
- .value_priority
- .cmp(&right.priority.value_priority)
- })
- .then_with(|| natural_compare(&left.priority.sort_key, &right.priority.sort_key))
- .then_with(|| natural_compare(&left.key, &right.key))
-}
-
-fn compare_features(left: &RulePriorityIr, right: &RulePriorityIr) -> Ordering {
- mastercss_engine::compare_condition_features(&left.features, &right.features)
- .then_with(|| left.conditions.cmp(&right.conditions))
-}
-
fn append_style(output: &mut Vec, mut next: MergedStyleDefinition) {
if next.declarations.is_empty() {
return;
@@ -69,106 +43,12 @@ pub(super) fn create_merged_style_definitions(
) -> Result, CompilerError> {
let mut definitions = definitions.iter().collect::>();
definitions.sort_by_key(|definition| match definition {
- CssDirectiveStyleDefinition::Native { order, .. }
- | CssDirectiveStyleDefinition::Compose { order, .. } => *order,
+ CssDirectiveStyleDefinition::Native { order, .. } => *order,
});
let mut output = Vec::new();
let mut index = 0;
while index < definitions.len() {
match definitions[index] {
- CssDirectiveStyleDefinition::Compose { order, .. } => {
- let statement_order = *order;
- let mut expanded = Vec::new();
- while let Some(CssDirectiveStyleDefinition::Compose {
- order,
- class_name,
- selector,
- conditions,
- condition_path,
- layer,
- source,
- selector_source,
- ..
- }) = definitions.get(index).copied()
- {
- if *order != statement_order {
- break;
- }
- let rules = composition_rules(engine, class_name)?;
- if rules.is_empty()
- && engine
- .matched_utility_names(class_name)
- .map_err(|error| super::resolution::directive_error(error.to_string()))?
- .is_empty()
- {
- return Err(directive_diagnostic(
- ErrorCode::InvalidComposeClass,
- format!(
- "Invalid @compose utility: {class_name}. Native CSS classes are not utility definitions"
- ),
- source.as_ref(),
- ));
- }
- for rule in rules {
- if rule.explicit_layer.is_some() {
- return Err(directive_diagnostic(
- ErrorCode::InvalidComposeLayer,
- "@compose cannot change layers; use native @layer around the destination rule",
- source.as_ref(),
- ));
- }
- let mut path = condition_path.clone().unwrap_or_else(|| {
- conditions
- .clone()
- .unwrap_or_default()
- .into_iter()
- .map(|value| CssDirectiveConditionPathEntry::Condition { value })
- .collect()
- });
- path.extend(
- rule.conditions
- .iter()
- .cloned()
- .map(|value| CssDirectiveConditionPathEntry::Condition { value }),
- );
- let combined = combine_style_selectors(selector, &rule.selector);
- let destination_layer = target_layer.or(*layer);
- for branch in resolve_configured_branches(
- &path,
- engine,
- &combined,
- destination_layer,
- )? {
- if branch.layer != destination_layer {
- return Err(directive_diagnostic(
- ErrorCode::InvalidComposeLayer,
- "@compose cannot change layers; use native @layer around the destination rule",
- source.as_ref(),
- ));
- }
- expanded.push((
- rule.clone(),
- MergedStyleDefinition {
- selector_source: selector_source
- .clone()
- .or_else(|| source.clone()),
- selector: branch.selector,
- conditions: branch.conditions,
- declarations: sourced_declarations(
- &rule.declarations,
- source.as_ref(),
- ),
- },
- ));
- }
- }
- index += 1;
- }
- expanded.sort_by(|(left, _), (right, _)| compare_rule_priority(left, right));
- for (_, style) in expanded {
- append_style(&mut output, style);
- }
- }
CssDirectiveStyleDefinition::Native {
selector,
declarations,
diff --git a/crates/mastercss-compiler/src/lower/mod.rs b/crates/mastercss-compiler/src/lower/mod.rs
index 1b2d4f86f..93997c348 100644
--- a/crates/mastercss-compiler/src/lower/mod.rs
+++ b/crates/mastercss-compiler/src/lower/mod.rs
@@ -1,11 +1,9 @@
-use std::cmp::Ordering;
-use std::collections::{HashMap, HashSet};
+use std::collections::HashMap;
-use mastercss_engine::{EngineCompositionRuleIr, EngineSession, natural_compare};
+use mastercss_engine::{EngineCompositionRuleIr, EngineSession};
use mastercss_schema::{
CssDeclaration, CssDirectiveConditionPathEntry, CssDirectiveManifestInput,
- CssDirectiveSourceReference, CssDirectiveStyleDefinition, CssOutputMapping, ErrorCode,
- RulePriorityIr, UtilityLayerName,
+ CssDirectiveSourceReference, CssDirectiveStyleDefinition, CssOutputMapping, UtilityLayerName,
};
use serde::{Deserialize, Serialize};
use serde_json::{Map, Value, json};
@@ -42,7 +40,6 @@ pub struct LowerCssDirectivesResult {
pub utility_sources: Vec,
#[serde(skip_serializing_if = "Option::is_none")]
pub css: Option,
- pub compositions: Vec,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub output_mappings: Vec,
#[serde(skip_serializing_if = "Vec::is_empty")]
@@ -73,7 +70,6 @@ struct MergedStyleDefinition {
mod api;
mod definitions;
-pub(crate) mod inspection;
mod merge;
mod output;
mod render;
diff --git a/crates/mastercss-compiler/src/lower/render.rs b/crates/mastercss-compiler/src/lower/render.rs
index 7c05404e4..5546f66c3 100644
--- a/crates/mastercss-compiler/src/lower/render.rs
+++ b/crates/mastercss-compiler/src/lower/render.rs
@@ -1,7 +1,7 @@
use super::resolution::directive_error;
use super::{
CompilerError, CssDirectiveManifestInput, CssDirectiveSourceReference,
- CssDirectiveStyleDefinition, CssOutputMapping, HashMap, HashSet, Map, MergedStyleDefinition,
+ CssDirectiveStyleDefinition, CssOutputMapping, HashMap, Map, MergedStyleDefinition,
UtilityLayerName, Value, json,
};
@@ -107,8 +107,7 @@ pub(super) fn managed_style_groups(
let mut indexes = HashMap::new();
for definition in definitions {
let (name, layer) = match definition {
- CssDirectiveStyleDefinition::Native { name, layer, .. }
- | CssDirectiveStyleDefinition::Compose { name, layer, .. } => {
+ CssDirectiveStyleDefinition::Native { name, layer, .. } => {
let Some(name) = name else { continue };
(name.clone(), layer.unwrap_or(UtilityLayerName::Components))
}
@@ -123,114 +122,6 @@ pub(super) fn managed_style_groups(
groups
}
-pub(super) fn managed_dependencies(
- groups: &[((String, UtilityLayerName), Vec)],
-) -> Vec> {
- let mut keys_by_name: HashMap<&str, Vec> = HashMap::new();
- for (index, ((name, _), _)) in groups.iter().enumerate() {
- keys_by_name.entry(name).or_default().push(index);
- }
- let mut names = keys_by_name.keys().copied().collect::>();
- names.sort_by_key(|name| std::cmp::Reverse(name.len()));
- let mut dependencies = vec![Vec::new(); groups.len()];
- for (index, (_, definitions)) in groups.iter().enumerate() {
- for definition in definitions {
- let CssDirectiveStyleDefinition::Compose { class_name, .. } = definition else {
- continue;
- };
- let dependency_name = names.iter().find(|name| {
- class_name.as_str() == **name
- || class_name
- .strip_prefix(**name)
- .and_then(|rest| rest.chars().next())
- .is_some_and(|next| matches!(next, ':' | '@' | '!'))
- });
- if let Some(dependency_name) = dependency_name {
- for dependency in &keys_by_name[*dependency_name] {
- if !dependencies[index].contains(dependency) {
- dependencies[index].push(*dependency);
- }
- }
- }
- }
- }
- dependencies
-}
-
-pub(super) fn managed_dependency_order(
- groups: &[((String, UtilityLayerName), Vec)],
- dependencies: &[Vec],
-) -> Result, CompilerError> {
- fn visit(
- index: usize,
- groups: &[((String, UtilityLayerName), Vec)],
- dependencies: &[Vec],
- seen: &mut HashSet,
- visiting: &mut Vec,
- output: &mut Vec,
- ) -> Result<(), CompilerError> {
- if seen.contains(&index) {
- return Ok(());
- }
- if let Some(start) = visiting.iter().position(|current| *current == index) {
- let mut cycle = visiting[start..]
- .iter()
- .map(|current| groups[*current].0.0.as_str())
- .collect::>();
- cycle.push(groups[index].0.0.as_str());
- return Err(directive_error(format!(
- "Circular @compose dependency detected: {}",
- cycle.join(" -> ")
- )));
- }
- visiting.push(index);
- for dependency in &dependencies[index] {
- visit(*dependency, groups, dependencies, seen, visiting, output)?;
- }
- visiting.pop();
- seen.insert(index);
- output.push(index);
- Ok(())
- }
- let mut seen = HashSet::new();
- let mut visiting = Vec::new();
- let mut output = Vec::new();
- for index in 0..groups.len() {
- visit(
- index,
- groups,
- dependencies,
- &mut seen,
- &mut visiting,
- &mut output,
- )?;
- }
- Ok(output)
-}
-
-pub(super) fn managed_refresh_count(
- order: &[usize],
- dependencies: &[Vec],
- has_native_definitions: bool,
-) -> u64 {
- let mut count = 0;
- let mut unrefreshed = HashSet::new();
- for index in order {
- if dependencies[*index]
- .iter()
- .any(|dependency| unrefreshed.contains(dependency))
- {
- count += 1;
- unrefreshed.clear();
- }
- unrefreshed.insert(*index);
- }
- if has_native_definitions && !unrefreshed.is_empty() {
- count += 1;
- }
- count
-}
-
pub(super) fn render_style_definitions(
definitions: Vec,
) -> (String, Vec) {
diff --git a/crates/mastercss-compiler/src/lower/resolution.rs b/crates/mastercss-compiler/src/lower/resolution.rs
index af7b62619..c3104b7c7 100644
--- a/crates/mastercss-compiler/src/lower/resolution.rs
+++ b/crates/mastercss-compiler/src/lower/resolution.rs
@@ -1,7 +1,7 @@
use super::{
CompileManifestOptions, CompilerError, CssDirectiveConditionPathEntry,
- CssDirectiveManifestInput, CssDirectiveSourceReference, EngineCompositionRuleIr, EngineSession,
- ErrorCode, Map, ResolvedStyleBranch, UtilityLayerName, Value, json,
+ CssDirectiveManifestInput, EngineCompositionRuleIr, EngineSession, Map, ResolvedStyleBranch,
+ UtilityLayerName, Value, json,
};
pub(super) fn directive_error(message: impl Into) -> CompilerError {
@@ -12,21 +12,6 @@ pub(super) fn directive_error(message: impl Into) -> CompilerError {
}
}
-pub(super) fn directive_diagnostic(
- code: ErrorCode,
- message: impl Into,
- source: Option<&CssDirectiveSourceReference>,
-) -> CompilerError {
- CompilerError::DirectiveDiagnostic {
- code,
- message: message.into(),
- filename: source
- .and_then(|source| source.file.clone())
- .unwrap_or_else(|| "manifest.css".into()),
- range: source.map(|source| source.range.clone()),
- }
-}
-
pub(super) fn engine_for_manifest(manifest: &Value) -> Result {
let json = serde_json::to_string(manifest)
.map_err(|error| directive_error(format!("Cannot serialize compiler manifest: {error}")))?;
@@ -65,63 +50,6 @@ pub(super) fn combine_selector_wrapper(selector: &str, wrapper: &str) -> String
mastercss_lexer::replace_nesting_selector(wrapper, selector).unwrap_or_else(|| wrapper.into())
}
-pub(super) fn split_selector_list(selector: &str) -> Vec {
- let mut selectors = Vec::new();
- let mut start = 0;
- let mut quote = None;
- let mut escaped = false;
- let mut depth = 0_u32;
- for (index, character) in selector.char_indices() {
- if escaped {
- escaped = false;
- continue;
- }
- if character == '\\' {
- escaped = true;
- continue;
- }
- if let Some(current_quote) = quote {
- if character == current_quote {
- quote = None;
- }
- continue;
- }
- if matches!(character, '\'' | '"') {
- quote = Some(character);
- } else if matches!(character, '(' | '[') {
- depth += 1;
- } else if matches!(character, ')' | ']') {
- depth = depth.saturating_sub(1);
- } else if character == ',' && depth == 0 {
- let value = selector[start..index].trim();
- if !value.is_empty() {
- selectors.push(value.into());
- }
- start = index + 1;
- }
- }
- let value = selector[start..].trim();
- if !value.is_empty() {
- selectors.push(value.into());
- }
- selectors
-}
-
-pub(super) fn combine_style_selectors(parent: &str, child: &str) -> String {
- let parents = split_selector_list(parent);
- let children = split_selector_list(child);
- let mut selectors = Vec::new();
- for child in children {
- for parent in &parents {
- selectors.push(
- mastercss_lexer::replace_nesting_selector(&child, parent)
- .unwrap_or_else(|| format!("{parent} {child}")),
- );
- }
- }
- selectors.join(",")
-}
-
pub(super) fn composition_rules(
engine: &mut EngineSession,
class_name: &str,
diff --git a/crates/mastercss-compiler/src/lower/tests.rs b/crates/mastercss-compiler/src/lower/tests.rs
index 02f58c4e4..ed12491ab 100644
--- a/crates/mastercss-compiler/src/lower/tests.rs
+++ b/crates/mastercss-compiler/src/lower/tests.rs
@@ -22,87 +22,6 @@ fn lower_for_test(
.unwrap()
}
-#[test]
-fn preserves_native_values_in_compose_for_tooling_validation() {
- let definition: CssDirectiveStyleDefinition = serde_json::from_value(json!({
- "type": "compose",
- "order": 1,
- "className": "background:neutral-120",
- "selector": ".card"
- }))
- .unwrap();
- let result = lower_css_directives(
- &CssDirectiveManifestInput::default(),
- &[definition],
- &[],
- &LowerCssDirectivesOptions {
- base_manifest: Some(json!({ "version": 1,"languageVersion":3, "utilities": [] })),
- resolution_manifest: None,
- },
- )
- .unwrap();
- assert_eq!(result.generated_css, ".card{background:neutral-120}");
-}
-
-#[test]
-fn accepts_valid_unparsed_native_declarations_in_compose() {
- let definitions: Vec = serde_json::from_value(json!([
- {
- "type": "compose",
- "order": 1,
- "className": "contain:content",
- "selector": ".card"
- },
- {
- "type": "compose",
- "order": 2,
- "className": "content:'stripe'",
- "selector": ".card"
- },
- {
- "type": "compose",
- "order": 3,
- "className": "fg:inherit!",
- "selector": ".card"
- },
- {
- "type": "compose",
- "order": 4,
- "className": "content:none",
- "selector": ".card::before"
- },
- {
- "type": "compose",
- "order": 5,
- "className": "text-underline-offset:2px",
- "selector": ".card"
- },
- {
- "type": "compose",
- "order": 6,
- "className": "outline-offset:0",
- "selector": ".card"
- }
- ]))
- .unwrap();
- let result = lower_css_directives(
- &CssDirectiveManifestInput::default(),
- &definitions,
- &[],
- &LowerCssDirectivesOptions {
- base_manifest: Some(json!({ "version": 1,"languageVersion":3, "utilities": [] })),
- resolution_manifest: None,
- },
- )
- .unwrap();
- assert!(result.generated_css.contains("contain:content"));
- assert!(result.generated_css.contains("content:'stripe'"));
- assert!(result.generated_css.contains("color:inherit!important"));
- assert!(result.generated_css.contains("content:none"));
- assert!(result.generated_css.contains("text-underline-offset:2px"));
- assert!(result.generated_css.contains("outline-offset:0"));
-}
-
#[test]
fn preserves_authored_order_for_native_conditions() {
let result = lower_for_test(
@@ -129,32 +48,6 @@ fn preserves_authored_order_for_native_conditions() {
);
}
-#[test]
-fn preserves_statement_order_for_compose_conditions() {
- let result = lower_for_test(
- CssDirectiveManifestInput::default(),
- json!([
- {
- "type": "compose",
- "order": 1,
- "className": "display:grid",
- "selector": ".card",
- "conditions": ["@media (width>=48rem)"]
- },
- {
- "type": "compose",
- "order": 2,
- "className": "display:block",
- "selector": ".card"
- }
- ]),
- );
- assert_eq!(
- result.generated_css,
- "@media (width>=48rem){.card{display:grid}}.card{display:block}"
- );
-}
-
#[test]
fn preserves_source_order_across_distinct_units() {
let result = lower_for_test(
diff --git a/crates/mastercss-compiler/src/managed.rs b/crates/mastercss-compiler/src/managed.rs
index 494be65d1..7234d5b90 100644
--- a/crates/mastercss-compiler/src/managed.rs
+++ b/crates/mastercss-compiler/src/managed.rs
@@ -1,11 +1,9 @@
use super::{
CompilerError, CssDirectiveConditionPathEntry, CssDirectiveManifestInput,
- CssDirectiveSourceReference, CssDirectiveStyleDefinition, CssRule, ErrorCode, HashMap,
- ParsedManagedPattern, StyleRule, UnknownAtRule, UtilityLayerName, Value,
- collect_class_list_token_ranges, collect_ordered_declarations, combine_managed_selectors,
- condition_properties, css_statement_delimiter, directive_error, managed_selector_definition,
- minified_css, next_char_end, preserve_ordered_literal_spelling, printed_selectors,
- trim_byte_range, utf16_to_byte_offset,
+ CssDirectiveSourceReference, CssDirectiveStyleDefinition, CssRule, HashMap,
+ ParsedManagedPattern, StyleRule, UtilityLayerName, Value, collect_ordered_declarations,
+ combine_managed_selectors, condition_properties, directive_error, managed_selector_definition,
+ minified_css, preserve_ordered_literal_spelling, printed_selectors,
};
use crate::source_index::SourceIndex;
@@ -43,103 +41,6 @@ pub(crate) fn push_managed_declarations(
});
}
-#[allow(clippy::too_many_arguments)]
-pub(crate) fn lower_compose_rule(
- source: &SourceIndex<'_>,
- filename: &str,
- body: &SourceIndex<'_>,
- body_start_byte: usize,
- rule: UnknownAtRule<'_>,
- context: &ManagedStyleContext,
- condition_path: &[CssDirectiveConditionPathEntry],
- layer: UtilityLayerName,
- style_definitions: &mut Vec,
- style_order: &mut u32,
-) -> Result<(), CompilerError> {
- if rule.block.is_some() {
- return Err(CompilerError::DirectiveDiagnostic {
- code: ErrorCode::ComposeGroupSyntax,
- message: "@compose does not accept group syntax".into(),
- filename: filename.to_owned(),
- range: None,
- });
- }
- let local_start = body
- .byte_offset_for_location(rule.loc.line, rule.loc.column)
- .ok_or_else(|| CompilerError::Directive {
- message: "Cannot resolve @compose source range".into(),
- filename: filename.to_owned(),
- range: None,
- })?;
- let body = body.text();
- let Some((semicolon, ';')) = css_statement_delimiter(body, local_start, body.len()) else {
- return Err(CompilerError::Directive {
- message: "@compose requires a semicolon".into(),
- filename: filename.to_owned(),
- range: None,
- });
- };
- let directive_end = semicolon + 1;
- let mut content_start = local_start + "@compose".len();
- while content_start < semicolon
- && body[content_start..]
- .chars()
- .next()
- .is_some_and(char::is_whitespace)
- {
- content_start = next_char_end(body, content_start);
- }
- let (_, content_end) = trim_byte_range(body, content_start, semicolon);
- let class_list = &body[content_start..content_end];
- if class_list.starts_with(['\'', '"']) {
- return Err(CompilerError::DirectiveDiagnostic {
- code: ErrorCode::ComposeQuotedSyntax,
- message: "@compose only accepts unquoted class lists".into(),
- filename: filename.to_owned(),
- range: None,
- });
- }
- let absolute_directive_start = body_start_byte + local_start;
- let directive_source = source.reference(
- filename,
- absolute_directive_start,
- body_start_byte + directive_end,
- );
- let (conditions, path) = condition_properties(condition_path);
- *style_order += 1;
- for token in collect_class_list_token_ranges(class_list) {
- if token.token.starts_with('{') {
- return Err(CompilerError::DirectiveDiagnostic {
- code: ErrorCode::ComposeGroupSyntax,
- message: "@compose does not accept group syntax".into(),
- filename: filename.to_owned(),
- range: None,
- });
- }
- let token_start = utf16_to_byte_offset(class_list, token.range.start)
- .expect("lexer ranges are valid UTF-16 boundaries");
- let token_end = utf16_to_byte_offset(class_list, token.range.end)
- .expect("lexer ranges are valid UTF-16 boundaries");
- style_definitions.push(CssDirectiveStyleDefinition::Compose {
- order: *style_order,
- class_name: token.token,
- selector: context.selectors.join(","),
- source: source.reference(
- filename,
- body_start_byte + content_start + token_start,
- body_start_byte + content_start + token_end,
- ),
- directive_source: directive_source.clone(),
- selector_source: context.selector_source.clone(),
- conditions: conditions.clone(),
- condition_path: path.clone(),
- layer: Some(layer),
- name: Some(context.name.clone()),
- });
- }
- Ok(())
-}
-
#[allow(clippy::too_many_arguments)]
pub(crate) fn lower_managed_style(
source: &SourceIndex<'_>,
@@ -478,27 +379,7 @@ pub(crate) fn lower_managed_rule_list(
style_order,
)?;
}
- CssRule::Unknown(rule) if rule.name.eq_ignore_ascii_case("compose") => {
- let Some(context) = &context else {
- return Err(CompilerError::Directive {
- message: "@compose requires a style rule".into(),
- filename: filename.to_owned(),
- range: None,
- });
- };
- lower_compose_rule(
- source,
- filename,
- body,
- body_start_byte,
- rule,
- context,
- condition_path,
- layer,
- style_definitions,
- style_order,
- )?;
- }
+
CssRule::LayerBlock(_) => {
return Err(directive_error(
source.text(),
diff --git a/crates/mastercss-compiler/src/manifest/preset.rs b/crates/mastercss-compiler/src/manifest/preset.rs
index 1da1b9bac..71981944f 100644
--- a/crates/mastercss-compiler/src/manifest/preset.rs
+++ b/crates/mastercss-compiler/src/manifest/preset.rs
@@ -19,12 +19,7 @@ pub(super) fn append_default_preset_styles(
layer,
name,
..
- } = definition
- else {
- return Err(manifest_error(
- "Default preset generation cannot contain @compose definitions",
- ));
- };
+ } = definition;
let name = name.as_deref().ok_or_else(|| {
manifest_error("Default preset managed style definition requires a name")
})?;
diff --git a/crates/mastercss-compiler/src/migration/mod.rs b/crates/mastercss-compiler/src/migration/mod.rs
index 9ebb67b25..64d59ea77 100644
--- a/crates/mastercss-compiler/src/migration/mod.rs
+++ b/crates/mastercss-compiler/src/migration/mod.rs
@@ -4,6 +4,7 @@ mod conditions;
mod configuration;
mod managed;
mod native;
+mod sizing;
mod stylesheets;
mod utilities;
mod values;
@@ -43,6 +44,7 @@ pub enum RcMigrationProfile {
RcNative,
RcManaged,
RcUtilities,
+ RcSizing,
}
#[derive(Debug, Serialize)]
@@ -96,6 +98,7 @@ struct Migration {
target_manifest: RefCell,
query_definitions: RefCell>,
native_alpha: bool,
+ sizing_helpers: Vec,
managed_names: Vec,
families: Vec,
static_families: Vec,
@@ -131,7 +134,18 @@ pub fn migrate_rc(request: &RcMigrationRequest) -> Result Result {
let after = self.convert_previous(source)?;
- self.utility_class(source, after)
+ let after = self.utility_class(source, after)?;
+ self.sizing_class(after)
}
fn convert_previous(&self, source: &str) -> Result {
+ if source.starts_with('{') {
+ return self.group(source);
+ }
if let Some(name) = self.managed_reference(source) {
return if name == source {
Ok(source.into())
@@ -458,7 +489,9 @@ impl Migration {
}
if matches!(
self.profile,
- RcMigrationProfile::RcManaged | RcMigrationProfile::RcUtilities
+ RcMigrationProfile::RcManaged
+ | RcMigrationProfile::RcUtilities
+ | RcMigrationProfile::RcSizing
) {
return Ok(source.into());
}
diff --git a/crates/mastercss-compiler/src/migration/native.rs b/crates/mastercss-compiler/src/migration/native.rs
index c1edc5494..8355102b7 100644
--- a/crates/mastercss-compiler/src/migration/native.rs
+++ b/crates/mastercss-compiler/src/migration/native.rs
@@ -68,6 +68,7 @@ impl Migration {
RcMigrationProfile::RcNative
| RcMigrationProfile::RcManaged
| RcMigrationProfile::RcUtilities
+ | RcMigrationProfile::RcSizing
)
}
}
diff --git a/crates/mastercss-compiler/src/migration/sizing.rs b/crates/mastercss-compiler/src/migration/sizing.rs
new file mode 100644
index 000000000..0f44d5f5b
--- /dev/null
+++ b/crates/mastercss-compiler/src/migration/sizing.rs
@@ -0,0 +1,192 @@
+//! Removed preset sizes are decoded only during explicit RC migration. These
+//! temporary definitions never escape the migration session or enter runtime.
+use super::{Migration, utilities::current_helper, values::split_rc_value_state};
+use mastercss_engine::EngineSession;
+use serde_json::{Value, json};
+
+fn has_entry(manifest: &Value, key: &str) -> bool {
+ manifest["utilities"]
+ .as_array()
+ .into_iter()
+ .flatten()
+ .any(|u| {
+ u["matchers"].as_array().into_iter().flatten().any(|m| {
+ (m["type"] == "static" && m["name"] == key)
+ || (matches!(m["type"].as_str(), Some("key" | "value" | "variable"))
+ && m["keys"]
+ .as_array()
+ .is_some_and(|keys| keys.iter().any(|k| k == key)))
+ })
+ })
+}
+
+pub(super) fn add_helpers(original: &Value, target: &mut Value) -> Vec {
+ let mut helpers = Vec::new();
+ for (key, width, height) in [
+ ("size", "width", "height"),
+ ("min-size", "min-width", "min-height"),
+ ("max-size", "max-width", "max-height"),
+ ] {
+ for token in [false, true] {
+ let prefix = format!("{key}-");
+ let owns = |u: &Value| {
+ u["matchers"].as_array().into_iter().flatten().any(|m| {
+ if token {
+ (m["type"] == "token" && m["prefix"] == prefix)
+ || (m["type"] == "variable"
+ && m["keys"]
+ .as_array()
+ .is_some_and(|keys| keys.iter().any(|k| k == key)))
+ } else {
+ matches!(m["type"].as_str(), Some("key" | "value" | "variable"))
+ && m["keys"]
+ .as_array()
+ .is_some_and(|keys| keys.iter().any(|k| k == key))
+ }
+ })
+ };
+ let saved: Vec<_> = original["utilities"]
+ .as_array()
+ .into_iter()
+ .flatten()
+ .filter(|u| owns(u))
+ .collect();
+ let emit = json!({"type":"static","rules":[{"declarations":{width:null,height:null}}]});
+ if saved.len() != 1
+ || saved[0]["emit"] != emit
+ || saved[0]["type"] != -1
+ || saved[0]
+ .get("layer")
+ .is_some_and(|layer| layer != "utilities")
+ || (token && saved[0]["variableAliasRefs"] != json!(["~container"]))
+ || !saved[0]["id"].as_str().is_some_and(|id| {
+ id == key
+ || id == format!("{key}:<*>")
+ || id == format!("{key}:")
+ || id == format!("{key}:<~container|number|*>")
+ || id == format!("{key}-<~container>")
+ })
+ || target["utilities"]
+ .as_array()
+ .into_iter()
+ .flatten()
+ .any(owns)
+ {
+ continue;
+ }
+ let id = format!(
+ "migration-sizing-{key}-{}",
+ if token { "token" } else { "raw" }
+ );
+ let alias = key.trim_end_matches("-size");
+ let include_alias =
+ !token && key != "size" && !has_entry(original, alias) && !has_entry(target, alias);
+ let mut utility = json!({"id":id,"type":-1,"emit":emit,"matchers":[if token {json!({"type":"token","prefix":prefix})} else {json!({"type":"key","keys":if include_alias {vec![key, alias]} else {vec![key]}})}]});
+ if token {
+ utility["variableAliasRefs"] = json!(["~container"]);
+ }
+ target["utilities"].as_array_mut().unwrap().push(utility);
+ if include_alias {
+ helpers.push(format!("{alias}:"));
+ }
+ helpers.push(if token { prefix } else { format!("{key}:") });
+ }
+ }
+ helpers
+}
+
+impl Migration {
+ pub(super) fn sizing_class(&self, source: String) -> Result {
+ let Some(prefix) = self
+ .sizing_helpers
+ .iter()
+ .find(|prefix| source.starts_with(prefix.as_str()))
+ else {
+ // Matching and ambiguity must not depend on current token values.
+ let inspection = self
+ .target
+ .borrow()
+ .inspect(&source)
+ .map_err(|e| e.to_string())?;
+ if let Some(diagnostic) = inspection.diagnostics.first() {
+ return Err(diagnostic.message.clone());
+ }
+ return Ok(source);
+ };
+ let token = prefix.ends_with('-');
+ let key = &prefix[..prefix.len() - 1];
+ let (value, suffix) = split_rc_value_state(&source[prefix.len()..]);
+ let stem = match key {
+ "min" => "min-",
+ "max" => "max-",
+ _ => key.strip_suffix("size").unwrap(),
+ };
+ let separator = if token { '-' } else { ':' };
+ let candidate =
+ format!("{{{stem}width{separator}{value};{stem}height{separator}{value}}}{suffix}");
+ let old = self.rules(&self.target, &source);
+ // A size rule becomes two independently sorted declarations. Compare
+ // each property with its complete selector/condition/layer context;
+ // width and height commute, but competition in the class list is still
+ // rejected by the shared overlap review.
+ let actual = self.rules(&self.target, &candidate);
+ let flatten = |rules: &[mastercss_engine::EngineCompositionRuleIr]| {
+ let mut entries = rules
+ .iter()
+ .flat_map(|r| {
+ r.declarations
+ .iter()
+ .map(move |d| json!([r.layer, r.selector, r.conditions, d]).to_string())
+ })
+ .collect::>();
+ entries.sort();
+ entries
+ };
+ if old.is_empty() || flatten(&old) != flatten(&actual) {
+ return Err(format!(
+ "Cannot prove saved sizing declarations, token identity and conditions equivalent for {candidate}"
+ ));
+ }
+ for r in &old {
+ for d in &r.declarations {
+ if !d
+ .value
+ .as_str()
+ .is_some_and(|v| super::valid_saved_declaration(&d.property, v))
+ {
+ return Err("Saved sizing value requires a CSS validity review".into());
+ }
+ }
+ }
+ let manifest = self
+ .target
+ .borrow()
+ .manifest_json()
+ .map_err(|e| e.to_string())?;
+ let mut saved: Value = serde_json::from_str(&manifest).map_err(|e| e.to_string())?;
+ current_helper(&mut saved);
+ let engine = EngineSession::create(&saved.to_string()).map_err(|e| e.to_string())?;
+ let resources = |class: &str| -> Result {
+ let mut probe =
+ EngineSession::create(&engine.manifest_json().map_err(|e| e.to_string())?)
+ .map_err(|e| e.to_string())?;
+ probe
+ .ensure_class_rules([class])
+ .map_err(|e| e.to_string())?;
+ let mut resources = probe.snapshot().map_err(|e| e.to_string())?.resources;
+ // Splitting a declaration changes ownership counts, never resource
+ // identity, dependencies, cascade order or emitted theme values.
+ for variable in &mut resources.variables {
+ variable.ref_count = 1;
+ }
+ for animation in &mut resources.animations {
+ animation.ref_count = 1;
+ }
+ serde_json::to_value(resources).map_err(|e| e.to_string())
+ };
+ if resources(&source)? != resources(&candidate)? {
+ return Err("Sizing migration changes token or animation resources".into());
+ }
+ Ok(candidate)
+ }
+}
diff --git a/crates/mastercss-compiler/src/migration/stylesheets.rs b/crates/mastercss-compiler/src/migration/stylesheets.rs
index a175cd255..4071141ff 100644
--- a/crates/mastercss-compiler/src/migration/stylesheets.rs
+++ b/crates/mastercss-compiler/src/migration/stylesheets.rs
@@ -42,7 +42,9 @@ impl Migration {
for statement in &statements {
if matches!(
self.profile,
- super::RcMigrationProfile::RcManaged | super::RcMigrationProfile::RcUtilities
+ super::RcMigrationProfile::RcManaged
+ | super::RcMigrationProfile::RcUtilities
+ | super::RcMigrationProfile::RcSizing
) {
break;
}
@@ -192,8 +194,13 @@ impl Migration {
Err(note) => result.notes.push(note),
}
}
+ if matches!(&first.kind, CssSyntaxKind::AtKeyword(name) if name.eq_ignore_ascii_case("compose"))
+ {
+ result.notes.push(format!("UTF-16 {}: @compose has been removed; replace it with native CSS declarations/selectors or use utilities in markup", byte_to_utf16_offset(source, first.bytes.start).unwrap()));
+ continue;
+ }
if let CssSyntaxKind::AtKeyword(name) = &first.kind
- && matches!(name.as_ref(), "compose" | "safelist" | "blocklist")
+ && matches!(name.as_ref(), "safelist" | "blocklist")
{
let body_start = first.bytes.end;
let body = &source[body_start..end];
@@ -227,7 +234,7 @@ impl Migration {
.filter(|byte| *byte == b'\n')
.count()
+ 1;
- if name == "compose" || name == "safelist" || name == "blocklist" {
+ if name == "safelist" || name == "blocklist" {
result.notes.push(format!("line {line}, UTF-16 {}: @{name} references removed managed class `{managed}`; write native declarations/selectors, or explicitly extract shared behavior into @utilities after reviewing its layer and emission", byte_to_utf16_offset(source, body_start + start).unwrap()));
continue;
}
diff --git a/crates/mastercss-compiler/src/migration/utilities.rs b/crates/mastercss-compiler/src/migration/utilities.rs
index 404eff49e..557e6fa4d 100644
--- a/crates/mastercss-compiler/src/migration/utilities.rs
+++ b/crates/mastercss-compiler/src/migration/utilities.rs
@@ -74,6 +74,7 @@ impl Migration {
if !matches!(
self.profile,
RcMigrationProfile::RcUtilities
+ | RcMigrationProfile::RcSizing
| RcMigrationProfile::RcManaged
| RcMigrationProfile::RcNative
| RcMigrationProfile::RcNamed
@@ -237,13 +238,16 @@ impl Migration {
Ok(candidate)
}
- fn utility_resources(
+ pub(super) fn utility_resources(
&self,
original: &EngineSession,
before: &str,
after: &str,
) -> Result<(), String> {
- if self.profile != RcMigrationProfile::RcUtilities {
+ if !matches!(
+ self.profile,
+ RcMigrationProfile::RcUtilities | RcMigrationProfile::RcSizing
+ ) {
return Ok(());
}
let resources = |engine: &EngineSession, class: &str| -> Result {
diff --git a/crates/mastercss-compiler/src/native_conditionals.rs b/crates/mastercss-compiler/src/native_conditionals.rs
index faae0227e..65251aa77 100644
--- a/crates/mastercss-compiler/src/native_conditionals.rs
+++ b/crates/mastercss-compiler/src/native_conditionals.rs
@@ -154,11 +154,6 @@ impl NativeConditionalLowerer<'_> {
conditions,
condition_path,
..
- }
- | CssDirectiveStyleDefinition::Compose {
- conditions,
- condition_path,
- ..
} => (conditions, condition_path),
};
let suffix = path.as_deref().unwrap_or_default()[retained_prefix..].to_vec();
diff --git a/crates/mastercss-compiler/src/native_output.rs b/crates/mastercss-compiler/src/native_output.rs
index d2be9ae9c..612e1da11 100644
--- a/crates/mastercss-compiler/src/native_output.rs
+++ b/crates/mastercss-compiler/src/native_output.rs
@@ -102,7 +102,7 @@ pub(crate) fn prepare_native_output(
})
}
-/// When native output is disabled, retain the context around composed styles but
+/// When native output is disabled, retain the context around lowered styles but
/// discard ordinary native rules. No container is reconstructed from strings.
pub(crate) fn retain_style_slots<'i>(
rules: Vec>,
diff --git a/crates/mastercss-compiler/src/native_style.rs b/crates/mastercss-compiler/src/native_style.rs
index 9c101a3ca..f6c5e83e6 100644
--- a/crates/mastercss-compiler/src/native_style.rs
+++ b/crates/mastercss-compiler/src/native_style.rs
@@ -1,10 +1,8 @@
use super::{
CompilerError, CssDirectiveConditionPathEntry, CssDirectiveSourceReference,
- CssDirectiveStyleDefinition, CssRule, ErrorCode, HashMap, StyleRule, ThemeAtRule,
- UnknownAtRule, collect_class_list_token_ranges, collect_ordered_declarations,
- combine_managed_selectors, condition_properties, css_statement_delimiter, minified_css,
- next_char_end, preserve_ordered_literal_spelling, printed_selectors, trim_byte_range,
- utf16_to_byte_offset,
+ CssDirectiveStyleDefinition, CssRule, HashMap, StyleRule, ThemeAtRule,
+ collect_ordered_declarations, combine_managed_selectors, condition_properties,
+ css_statement_delimiter, minified_css, preserve_ordered_literal_spelling, printed_selectors,
};
use crate::source_index::SourceIndex;
@@ -20,7 +18,7 @@ pub(crate) fn native_rule_list_has_directives(
variant_rule_offsets: &HashMap,
) -> bool {
rules.iter().any(|rule| match rule {
- CssRule::Unknown(rule) => rule.name.eq_ignore_ascii_case("compose"),
+ CssRule::Unknown(_) => false,
CssRule::Style(rule) => {
native_rule_list_has_directives(source, &rule.rules.0, variant_rule_offsets)
}
@@ -72,98 +70,6 @@ pub(crate) fn push_native_style_declarations(
});
}
-#[allow(clippy::too_many_arguments)]
-pub(crate) fn lower_native_compose_rule(
- source: &SourceIndex<'_>,
- filename: &str,
- rewritten: &SourceIndex<'_>,
- rule: UnknownAtRule<'_>,
- context: &NativeStyleContext,
- condition_path: &[CssDirectiveConditionPathEntry],
- style_definitions: &mut Vec,
- style_order: &mut u32,
-) -> Result<(), CompilerError> {
- if rule.block.is_some() {
- return Err(CompilerError::DirectiveDiagnostic {
- code: ErrorCode::ComposeGroupSyntax,
- message: "@compose does not accept group syntax".into(),
- filename: filename.to_owned(),
- range: None,
- });
- }
- let rewritten_source = rewritten.text();
- let local_start = rewritten
- .byte_offset_for_location(rule.loc.line, rule.loc.column)
- .ok_or_else(|| CompilerError::Directive {
- message: "Cannot resolve @compose source range".into(),
- filename: filename.to_owned(),
- range: None,
- })?;
- let Some((semicolon, ';')) =
- css_statement_delimiter(rewritten_source, local_start, rewritten_source.len())
- else {
- return Err(CompilerError::Directive {
- message: "@compose requires a semicolon".into(),
- filename: filename.to_owned(),
- range: None,
- });
- };
- let directive_end = semicolon + 1;
- let mut content_start = local_start + "@compose".len();
- while content_start < semicolon
- && rewritten_source[content_start..]
- .chars()
- .next()
- .is_some_and(char::is_whitespace)
- {
- content_start = next_char_end(rewritten_source, content_start);
- }
- let (_, content_end) = trim_byte_range(rewritten_source, content_start, semicolon);
- let class_list = &rewritten_source[content_start..content_end];
- if class_list.starts_with(['\'', '"']) {
- return Err(CompilerError::DirectiveDiagnostic {
- code: ErrorCode::ComposeQuotedSyntax,
- message: "@compose only accepts unquoted class lists".into(),
- filename: filename.to_owned(),
- range: None,
- });
- }
- let directive_source = source.reference(filename, local_start, directive_end);
- let (conditions, path) = condition_properties(condition_path);
- *style_order += 1;
- for token in collect_class_list_token_ranges(class_list) {
- if token.token.starts_with('{') {
- return Err(CompilerError::DirectiveDiagnostic {
- code: ErrorCode::ComposeGroupSyntax,
- message: "@compose does not accept group syntax".into(),
- filename: filename.to_owned(),
- range: None,
- });
- }
- let token_start = utf16_to_byte_offset(class_list, token.range.start)
- .expect("lexer ranges are valid UTF-16 boundaries");
- let token_end = utf16_to_byte_offset(class_list, token.range.end)
- .expect("lexer ranges are valid UTF-16 boundaries");
- style_definitions.push(CssDirectiveStyleDefinition::Compose {
- order: *style_order,
- class_name: token.token,
- selector: context.selectors.join(","),
- source: source.reference(
- filename,
- content_start + token_start,
- content_start + token_end,
- ),
- directive_source: directive_source.clone(),
- selector_source: context.selector_source.clone(),
- conditions: conditions.clone(),
- condition_path: path.clone(),
- layer: None,
- name: None,
- });
- }
- Ok(())
-}
-
#[allow(clippy::too_many_arguments)]
pub(crate) fn lower_native_style_rule(
source: &SourceIndex<'_>,
@@ -268,7 +174,7 @@ pub(crate) fn lower_native_rule_list(
CssRule::NestedDeclarations(child) => {
let Some(context) = &context else {
return Err(CompilerError::Directive {
- message: "Native @variant blocks only accept style rules, declarations, @compose, and nested at-rules".into(),
+ message: "Native @variant blocks only accept style rules, declarations, and nested at-rules".into(),
filename: filename.to_owned(),
range: None,
});
@@ -388,28 +294,10 @@ pub(crate) fn lower_native_rule_list(
style_order,
)?;
}
- CssRule::Unknown(rule) if rule.name.eq_ignore_ascii_case("compose") => {
- let Some(context) = &context else {
- return Err(CompilerError::Directive {
- message: "@compose requires a style rule".into(),
- filename: filename.to_owned(),
- range: None,
- });
- };
- lower_native_compose_rule(
- source,
- filename,
- rewritten,
- rule,
- context,
- condition_path,
- style_definitions,
- style_order,
- )?;
- }
+
_ => {
return Err(CompilerError::Directive {
- message: "Native CSS rules only accept declarations, @compose, nested selectors, and nested at-rules".into(),
+ message: "Native CSS rules only accept declarations, nested selectors, and nested at-rules".into(),
filename: filename.to_owned(),
range: None,
});
diff --git a/crates/mastercss-compiler/src/stylesheet_resources.rs b/crates/mastercss-compiler/src/stylesheet_resources.rs
index fa331d904..e5337fa8e 100644
--- a/crates/mastercss-compiler/src/stylesheet_resources.rs
+++ b/crates/mastercss-compiler/src/stylesheet_resources.rs
@@ -108,19 +108,6 @@ impl RelocatedStylesheet {
self.restore_reference(original, reference);
}
}
- CssDirectiveStyleDefinition::Compose {
- source,
- directive_source,
- selector_source,
- ..
- } => {
- for reference in [source, directive_source, selector_source]
- .into_iter()
- .flatten()
- {
- self.restore_reference(original, reference);
- }
- }
}
}
}
diff --git a/crates/mastercss-compiler/src/tests.rs b/crates/mastercss-compiler/src/tests.rs
index 3860fa4f4..0a808581a 100644
--- a/crates/mastercss-compiler/src/tests.rs
+++ b/crates/mastercss-compiler/src/tests.rs
@@ -1,9 +1,8 @@
use std::collections::HashMap;
use super::{
- CompileNativeCssOptions, CssDirectiveConditionPathEntry, CssDirectiveStyleDefinition,
- CssImportProvider, ErrorCode, SourceRange, compile_css_directives, compile_native_css,
- inspect_css, resolve_css_import_graph,
+ CompileNativeCssOptions, CssImportProvider, ErrorCode, SourceRange, compile_css_directives,
+ compile_native_css, inspect_css, resolve_css_import_graph,
};
struct MemoryImportProvider {
@@ -200,27 +199,6 @@ fn rejects_invalid_theme_modifier_combinations() {
);
}
-#[test]
-fn owns_compose_syntax_diagnostic_codes_and_utf16_ranges() {
- let quoted = compile_css_directives(
- "/*😀*/ .btn { @compose \"block\"; }",
- &CompileNativeCssOptions::default(),
- )
- .unwrap_err()
- .diagnostic();
- assert_eq!(quoted.code, ErrorCode::ComposeQuotedSyntax);
- assert_eq!(quoted.range, Some(SourceRange { start: 23, end: 30 }));
-
- let grouped = compile_css_directives(
- ".btn { @compose {block}; }",
- &CompileNativeCssOptions::default(),
- )
- .unwrap_err()
- .diagnostic();
- assert_eq!(grouped.code, ErrorCode::ComposeGroupSyntax);
- assert_eq!(grouped.range, Some(SourceRange { start: 16, end: 23 }));
-}
-
#[test]
fn lowers_static_theme_keyframes_outside_layers() {
let result = compile_css_directives(
@@ -337,64 +315,3 @@ fn lowers_static_managed_definitions_with_utf16_source_ranges() {
serde_json::json!({"start":96,"end":120})
);
}
-
-#[test]
-fn lowers_native_compose_and_variant_styles() {
- let result = compile_css_directives(
- "@custom-variant wide { @media (width >= 640px) { @slot; } }\n\
- @utilities { brand { color: red; } }\n\
- .button { @compose brand; @variant wide { @compose brand; } }",
- &CompileNativeCssOptions::default(),
- )
- .unwrap();
- let native_composes = result
- .style_definitions
- .as_ref()
- .unwrap()
- .iter()
- .filter_map(|definition| match definition {
- CssDirectiveStyleDefinition::Compose {
- selector,
- condition_path,
- name,
- ..
- } if name.is_none() => Some((selector, condition_path)),
- _ => None,
- })
- .collect::>();
- assert_eq!(native_composes.len(), 2);
- assert_eq!(native_composes[0].0, ".button");
- assert_eq!(
- native_composes[1].1,
- &Some(vec![CssDirectiveConditionPathEntry::Variant {
- token: "@wide".into()
- }])
- );
- assert!(result.native_css.is_empty());
-}
-
-#[test]
-fn lowers_numeric_leading_variant_names() {
- let result = compile_css_directives(
- ".button { @variant 3xs { @compose block; } }",
- &CompileNativeCssOptions::default(),
- )
- .unwrap();
- let condition_path = result
- .style_definitions
- .as_ref()
- .unwrap()
- .iter()
- .find_map(|definition| match definition {
- CssDirectiveStyleDefinition::Compose { condition_path, .. } => condition_path.as_ref(),
- _ => None,
- })
- .unwrap();
- assert_eq!(
- condition_path,
- &[CssDirectiveConditionPathEntry::Variant {
- token: "@3xs".into()
- }]
- );
- assert!(result.native_css.is_empty());
-}
diff --git a/crates/mastercss-compiler/src/utility_definitions.rs b/crates/mastercss-compiler/src/utility_definitions.rs
index e8ba3382c..cb98843d3 100644
--- a/crates/mastercss-compiler/src/utility_definitions.rs
+++ b/crates/mastercss-compiler/src/utility_definitions.rs
@@ -62,12 +62,6 @@ pub(crate) fn body(
conditions,
condition_path,
..
- }
- | CssDirectiveStyleDefinition::Compose {
- selector,
- conditions,
- condition_path,
- ..
} => (selector, conditions, condition_path),
};
if placeholder(selector)
@@ -98,14 +92,6 @@ pub(crate) fn body(
}
}
}
- CssDirectiveStyleDefinition::Compose { class_name, .. }
- if placeholder(class_name) =>
- {
- return Err(crate::manifest::definition_error(
- "@compose targets must be fixed classes; write width:--value() as a declaration instead",
- ));
- }
- _ => {}
}
}
}
@@ -119,12 +105,12 @@ fn placeholder(source: &str) -> bool {
pub(crate) fn seed_rules(definition: &Map) -> Result, CompilerError> {
let mut rules = Vec::new();
for fragment in body(definition)? {
- if let CssDirectiveStyleDefinition::Native {
+ let CssDirectiveStyleDefinition::Native {
declarations,
selector,
conditions,
..
- } = fragment
+ } = fragment;
{
append_rules(
&mut rules,
diff --git a/crates/mastercss-compiler/src/utility_sources.rs b/crates/mastercss-compiler/src/utility_sources.rs
index 69cade46f..b074846ef 100644
--- a/crates/mastercss-compiler/src/utility_sources.rs
+++ b/crates/mastercss-compiler/src/utility_sources.rs
@@ -1,6 +1,6 @@
use crate::source_index::SourceIndex;
use mastercss_lexer::{CssSyntaxKind, collect_css_syntax_statements, tokenize_css_syntax};
-use mastercss_schema::{CssCompositionTrace, CssUtilitySource};
+use mastercss_schema::CssUtilitySource;
pub(crate) fn collect(source: &str, filename: &str) -> Vec {
let index = SourceIndex::new(source);
@@ -76,17 +76,3 @@ pub(crate) fn resolve(definitions: &mut [CssUtilitySource]) {
.or_insert_with(|| definition.source.clone());
}
}
-
-pub(crate) fn attach(trace: &mut CssCompositionTrace, definitions: &[CssUtilitySource]) {
- trace.definition_sources.clear();
- for name in &trace.resolved_utilities {
- for definition in definitions {
- if definition.replaced_by.is_none()
- && *name == definition.name
- && !trace.definition_sources.contains(&definition.source)
- {
- trace.definition_sources.push(definition.source.clone());
- }
- }
- }
-}
diff --git a/crates/mastercss-compiler/src/variant.rs b/crates/mastercss-compiler/src/variant.rs
index c34d168b2..d74d819ef 100644
--- a/crates/mastercss-compiler/src/variant.rs
+++ b/crates/mastercss-compiler/src/variant.rs
@@ -2,8 +2,8 @@ use super::{
CompilerError, Component, CssDirectiveManifestInput, CssDirectiveSourceReference, CssRule,
ErrorCode, HashMap, ParserOptions, PrinterOptions, Selector, SourceLocation,
SourceLocationRange, SourceRange, StyleSheet, ThemeAtRule, ToCss, UtilityLayerName, Value,
- byte_to_utf16_offset, collect_declarations, css_block_end, css_comment_end, css_quote_end,
- directive_error, is_alias_character, minified_css, next_char_end, ranged_directive_diagnostic,
+ byte_to_utf16_offset, collect_declarations, css_comment_end, css_quote_end, directive_error,
+ is_alias_character, minified_css, next_char_end, ranged_directive_diagnostic,
};
pub(crate) fn custom_variant_branch(
@@ -567,79 +567,24 @@ pub(crate) fn validate_condition_variant_syntax(
Ok(())
}
-pub(crate) fn validate_compose_syntax(source: &str, filename: &str) -> Result<(), CompilerError> {
- let mut index = 0;
- while index < source.len() {
- let character = source[index..].chars().next().unwrap_or_default();
- if matches!(character, '\'' | '"') {
- index = css_quote_end(source, index, character);
- continue;
- }
- if source[index..].starts_with("/*") {
- index = css_comment_end(source, index);
- continue;
- }
- if !source[index..].starts_with("@compose")
- || source
- .as_bytes()
- .get(index + "@compose".len())
- .is_some_and(|byte| is_alias_character(*byte))
- {
- index = next_char_end(source, index);
+pub(crate) fn reject_removed_directives(source: &str, filename: &str) -> Result<(), CompilerError> {
+ use mastercss_lexer::{CssSyntaxKind, collect_css_syntax_statements, tokenize_css_syntax};
+ let tokens = tokenize_css_syntax(source);
+ for statement in collect_css_syntax_statements(&tokens) {
+ let Some(token) = tokens.get(statement.tokens.start) else {
continue;
- }
- index += "@compose".len();
- while source
- .as_bytes()
- .get(index)
- .is_some_and(u8::is_ascii_whitespace)
+ };
+ if matches!(&token.kind, CssSyntaxKind::AtKeyword(name) if name.eq_ignore_ascii_case("compose"))
{
- index += 1;
- }
- if source.as_bytes().get(index) == Some(&b'{') {
- let group_end = css_block_end(source, index, source.len())
- .map(|end| next_char_end(source, end))
- .unwrap_or(index + 1);
return Err(ranged_directive_diagnostic(
source,
filename,
- index,
- group_end,
- ErrorCode::ComposeGroupSyntax,
- "@compose does not accept group syntax",
+ token.bytes.start,
+ token.bytes.end,
+ ErrorCode::RemovedComposeDirective,
+ "@compose has been removed; use native CSS declarations and selectors, or use utilities directly in markup",
));
}
- let mut cursor = index;
- while cursor < source.len() {
- let character = source[cursor..].chars().next().unwrap_or_default();
- if matches!(character, '\'' | '"') {
- let quote_end = css_quote_end(source, cursor, character);
- if cursor != index {
- cursor = quote_end;
- continue;
- }
- return Err(ranged_directive_diagnostic(
- source,
- filename,
- cursor,
- quote_end,
- ErrorCode::ComposeQuotedSyntax,
- "@compose only accepts unquoted class lists",
- ));
- }
- if source[cursor..].starts_with("/*") {
- cursor = css_comment_end(source, cursor);
- continue;
- }
- if character == ';' {
- index = cursor + 1;
- break;
- }
- cursor = next_char_end(source, cursor);
- }
- if cursor >= source.len() {
- index = cursor;
- }
}
Ok(())
}
diff --git a/crates/mastercss-compiler/tests/bug_hunt_compiled_stylesheet_graph.rs b/crates/mastercss-compiler/tests/bug_hunt_compiled_stylesheet_graph.rs
index 57a0bbeb7..dbd571aa4 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_compiled_stylesheet_graph.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_compiled_stylesheet_graph.rs
@@ -18,7 +18,7 @@ fn request(entry: &str, child: &str) -> CompileCssStylesheetGraphRequest {
fn child_native_compose_resolves_managed_definitions_declared_by_parent() {
let request = request(
"@import './child.css' layer(shared);@utilities{paint{color:red}}",
- ".example{@compose paint;}",
+ ".example{@variant media(all){color:red;}}",
);
let output = compile_css_stylesheet_graph(&request).unwrap();
assert!(output.stylesheets[0].css.contains("layer(shared)"));
@@ -32,7 +32,7 @@ fn child_native_compose_resolves_managed_definitions_declared_by_parent() {
#[test]
fn manifest_and_managed_dependencies_match_concatenated_authoring_order() {
let entry = "@import './child.css';@theme{--tone:blue;}@utilities{second{color:red}}";
- let child = "@theme{--tone:red;}@utilities{first{@compose second;}}";
+ let child = r###"@theme{--tone:red;}@utilities{first{@variant media(all){color:red;}}}"###;
let output = compile_css_stylesheet_graph(&request(entry, child)).unwrap();
let flat = format!("{child}{}", entry.replace("@import './child.css';", ""));
let parsed = compile_css_directives(&flat, &CompileNativeCssOptions::default()).unwrap();
@@ -52,7 +52,7 @@ fn manifest_and_managed_dependencies_match_concatenated_authoring_order() {
#[test]
fn repeated_imports_use_occurrence_order_for_manifest_overrides() {
let mut request = request(
- "@import './child.css';@import './other.css';@import './child.css';.example{@compose paint;}",
+ "@import './child.css';@import './other.css';@import './child.css';.example{@variant media(all){color:red;}}",
"@utilities{paint{color:red}}",
);
request
@@ -88,7 +88,7 @@ fn repeated_imports_use_occurrence_order_for_manifest_overrides() {
fn native_filtering_does_not_remove_import_topology_or_manifest_definitions() {
let mut request = request(
"@import './child.css' print;@utilities{paint{color:green}}.unused{color:blue}",
- ".example{color:red}.unused{color:blue}",
+ r###".example{@variant media(all){color:red;}}.unused{color:blue}"###,
);
request.options.classes = Some(vec!["example".into()]);
request.options.prune_native_css = true;
@@ -108,7 +108,7 @@ fn native_filtering_does_not_remove_import_topology_or_manifest_definitions() {
fn generated_child_css_keeps_import_conditions_when_native_preservation_is_disabled() {
let mut request = request(
"@import './child.css' print;@utilities{paint{color:red}}",
- ".native{color:blue}.example{@compose paint;}",
+ ".native{color:blue}.example{@variant media(all){color:red;}}",
);
request.options.preserve_native_css = false;
let output = compile_css_stylesheet_graph(&request).unwrap();
@@ -141,7 +141,7 @@ fn compiled_browser_corpus_assets() {
fn native_compose_keeps_its_position_before_later_native_rules() {
let output = compile_css_stylesheet_graph(&request(
"@import './child.css';@utilities{paint{color:red}}",
- ".example{@compose paint;}.example{color:blue}",
+ ".example{@variant media(all){color:red;}}.example{color:blue}",
))
.unwrap();
let css = output.stylesheets[1]
@@ -162,31 +162,12 @@ fn native_compose_keeps_its_position_before_later_native_rules() {
fn authored_unknown_at_rules_cannot_collide_with_private_compose_slots() {
let output = compile_css_stylesheet_graph(&request(
"@import './child.css';@utilities{paint{color:red}}",
- "@--master-css-compose-slot-0;@--master-css-compose-slot-\\31;.example{@compose paint;}",
+ "@--master-css-style-slot-0;@--master-css-style-slot-\\31;.example{@variant media(all){color:red;}}",
))
.unwrap();
let css = &output.stylesheets[1].css;
- assert!(css.contains("@--master-css-compose-slot-0;"), "{css}");
- assert!(css.contains("@--master-css-compose-slot-1;"), "{css}");
- assert!(!css.contains("@--master-css-compose-slot-2;"), "{css}");
+ assert!(css.contains("@--master-css-style-slot-0;"), "{css}");
+ assert!(css.contains("@--master-css-style-slot-1;"), "{css}");
+ assert!(!css.contains("@--master-css-style-slot-2;"), "{css}");
assert!(css.contains("color:red"));
}
-
-#[test]
-fn graph_preserves_compose_statement_boundaries_in_utility_definitions() {
- let compile = |classes: &str| {
- let entry = format!(
- "@import './child.css';@utilities{{combo{{@compose {classes};}}}}.a{{@compose combo;}}"
- );
- compile_css_stylesheet_graph(&request(
- &entry,
- ".child{@compose color:red;@compose color:blue;}",
- ))
- .unwrap()
- };
- let first = compile("color:red color:blue");
- let second = compile("color:blue color:red");
- assert_eq!(first.manifest, second.manifest);
- assert_eq!(first.stylesheets, second.stylesheets);
- assert!(first.stylesheets[1].css.contains("color:red;color:blue"));
-}
diff --git a/crates/mastercss-compiler/tests/bug_hunt_directive_positions.rs b/crates/mastercss-compiler/tests/bug_hunt_directive_positions.rs
index 05975a0ed..2db9b2deb 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_directive_positions.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_directive_positions.rs
@@ -9,15 +9,9 @@ fn diagnostics_after_removed_directives_retain_original_utf16_offsets() {
"@source './😀.html';\n/*😀*/@master entry;\n",
] {
for (body, token) in [
- (
- ".example {\n @compose unknown-utility;\n}",
- "unknown-utility",
- ),
+ (".example {\n @compose unknown-utility;\n}", "@compose"),
("@utilities invalid {paint{color:red}}", "@utilities"),
- (
- "@utilities {paint{@compose unknown-utility;}}",
- "unknown-utility",
- ),
+ ("@utilities {paint{@compose unknown-utility;}}", "@compose"),
] {
let source = format!("{prefix}{body}");
let request = serde_json::from_value(json!({
diff --git a/crates/mastercss-compiler/tests/bug_hunt_graph_diagnostics.rs b/crates/mastercss-compiler/tests/bug_hunt_graph_diagnostics.rs
index 2ddd6261c..9693ddb6a 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_graph_diagnostics.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_graph_diagnostics.rs
@@ -17,7 +17,7 @@ fn graph_diagnostics_retain_original_utf16_ranges_after_resource_edits() {
for (source, token) in [
(
"/*😀*/.image{background:url(a.png)}\r\n.x{@compose unknown-utility;}",
- "unknown-utility",
+ "@compose",
),
(
"/*😀*/.image{background:url(a.png)} @utilities invalid {paint{color:red}}",
@@ -25,11 +25,11 @@ fn graph_diagnostics_retain_original_utf16_ranges_after_resource_edits() {
),
(
".a{background:image-set(\"a.png\" 1x,url(b.png) 2x)}\n/*😀*/.b{background:url(b.png)}.x{@compose unknown-utility;}",
- "unknown-utility",
+ "@compose",
),
(
"/*\u{1F600}*/.a{background:image-set(\r\n\"a.png\" 1x,\r\nurl(b.png) 2x)}\n.x{@compose unknown-utility;}",
- "unknown-utility",
+ "@compose",
),
] {
let error = compile_css_stylesheet_graph(&serde_json::from_value(request(source)).unwrap())
@@ -60,7 +60,9 @@ fn source_references(value: &Value, output: &mut Vec) {
#[test]
fn relocated_style_definition_metadata_uses_original_ranges_and_locations() {
- let source = "/*😀*/.a{background:image-set(\"a.png\" 1x,url(b.png) 2x)}\r\n@utilities{paint{background:url(a.png)}}\n.example{@compose paint;}";
+ let source = r###"/*😀*/.a{background:image-set("a.png" 1x,url(b.png) 2x)}
+@utilities{paint{background:url(a.png)}}
+.example{@variant media(all){background:url("a.png");}}"###;
let original = compile_css_directives(
source,
&CompileNativeCssOptions {
diff --git a/crates/mastercss-compiler/tests/bug_hunt_graph_output_mappings.rs b/crates/mastercss-compiler/tests/bug_hunt_graph_output_mappings.rs
index 809c11e79..91f603deb 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_graph_output_mappings.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_graph_output_mappings.rs
@@ -33,7 +33,7 @@ fn graph_native_anchor_survives_import_url_length_change() {
}
#[test]
fn graph_compose_and_native_siblings_keep_original_child_anchors() {
- let child = "/* 😀 */\n@layer{.card{@compose paint;}.card{padding:3rem}}";
+ let child = "/* 😀 */\n@layer{.card{@variant media(all){padding:2rem;}}.card{padding:3rem}}";
let result = compile(
"@import './child.css' layer;@utilities{paint{padding:2rem}}",
child,
@@ -46,13 +46,14 @@ fn graph_compose_and_native_siblings_keep_original_child_anchors() {
let composed = mapping(sheet, "padding:2rem");
assert_eq!(
composed["source"]["range"]["start"],
- offset(child, "paint;")
+ offset(child, "padding:2rem;")
);
assert_eq!(sheet["css"].as_str().unwrap().matches("@layer").count(), 1);
}
#[test]
fn graph_resource_relocation_preserves_later_authored_ranges() {
- let child = ".image{background:url('./dot.svg')}/* 😀 */\n.after{margin:1px}@utilities{paint{padding:2rem}}.card{@compose paint;}";
+ let child = r###".image{background:url('./dot.svg')}/* 😀 */
+.after{margin:1px}@utilities{paint{padding:2rem}}.card{@variant media(all){padding:2rem;}}"###;
let result = compile(
"@import './child.css';",
child,
@@ -63,20 +64,23 @@ fn graph_resource_relocation_preserves_later_authored_ranges() {
assert_eq!(map["source"]["file"], "/child.css");
assert_eq!(map["source"]["range"]["start"], offset(child, ".after"));
let map = mapping(sheet, "padding:2rem");
- assert_eq!(map["source"]["range"]["start"], offset(child, "paint;"));
+ assert_eq!(
+ map["source"]["range"]["start"],
+ offset(child, "padding:2rem;")
+ );
}
#[test]
fn graph_compose_slot_does_not_replace_a_quoted_marker() {
- let child = "@utilities{paint{padding:2rem}}.label{content:'@--master-css-compose-slot-0;'}.card{@compose paint;}";
+ let child = r###"@utilities{paint{padding:2rem}}.label{content:'@--master-css-style-slot-0;'}.card{@variant media(all){padding:2rem;}}"###;
let result = compile("@import './child.css';", child, Value::Null);
let css = result["stylesheets"][1]["css"].as_str().unwrap();
- assert!(css.contains("\"@--master-css-compose-slot-0;\""), "{css}");
+ assert!(css.contains("\"@--master-css-style-slot-0;\""), "{css}");
assert!(css.contains(".card{padding:2rem}"), "{css}");
}
#[test]
fn graph_native_suppression_keeps_composed_conditions_and_layer_identity() {
- let source = "@utilities{paint{padding:2rem}}.plain{margin:1px}@media print{@layer{.card{@compose paint;}.other{@compose paint;}}}";
+ let source = r###"@utilities{paint{padding:2rem}}.plain{margin:1px}@media print{@layer{.card{@variant media(all){padding:2rem;}}.other{@variant media(all){padding:2rem;}}}}"###;
let request: CompileCssStylesheetGraphRequest = serde_json::from_value(json!({
"graph":{"entry":"/entry.css","files":{"/entry.css":source},"edges":[]},
"urls":{"/entry.css":"/entry.css"},"options":{"preserveNativeCSS":false},
diff --git a/crates/mastercss-compiler/tests/bug_hunt_inline_graph_maps.rs b/crates/mastercss-compiler/tests/bug_hunt_inline_graph_maps.rs
index 0c971d360..324ce5f00 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_inline_graph_maps.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_inline_graph_maps.rs
@@ -11,7 +11,7 @@ fn compile(entry: &str, child: &str, child_url: &str) -> Value {
}
#[test]
fn inline_qualified_child_keeps_composition_and_original_anchors() {
- let child = "\n.card{@compose paint;}.card{padding:3rem}";
+ let child = "\n.card{@variant media(all){padding:2rem;}}.card{padding:3rem}";
let entry = "@import './child.css' layer supports(display:grid) screen;@utilities{paint{padding:2rem}}/* 😀 */\n.after{margin:1px}";
let result = compile(entry, child, "/child.css");
assert_eq!(result["stylesheets"].as_array().unwrap().len(), 1);
diff --git a/crates/mastercss-compiler/tests/bug_hunt_native_conditionals.rs b/crates/mastercss-compiler/tests/bug_hunt_native_conditionals.rs
index f461d725c..29f216472 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_native_conditionals.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_native_conditionals.rs
@@ -46,8 +46,9 @@ const WRAPPERS: [&str; 6] = [
#[test]
fn direct_native_conditionals_expand_compose() {
for wrapper in WRAPPERS {
- let source =
- format!("@utilities{{paint{{padding:2rem}}}}{wrapper}{{.card{{@compose paint;}}}}");
+ let source = format!(
+ "@utilities{{paint{{padding:2rem}}}}{wrapper}{{.card{{@variant media(all){{padding:2rem;}}}}}}"
+ );
let css = direct(&source);
assert!(!css.contains("@compose"), "{wrapper}: {css}");
assert!(css.contains("padding:2rem"), "{wrapper}: {css}");
@@ -57,8 +58,9 @@ fn direct_native_conditionals_expand_compose() {
#[test]
fn graph_native_conditionals_expand_compose() {
for wrapper in WRAPPERS {
- let source =
- format!("@utilities{{paint{{padding:2rem}}}}{wrapper}{{.card{{@compose paint;}}}}");
+ let source = format!(
+ "@utilities{{paint{{padding:2rem}}}}{wrapper}{{.card{{@variant media(all){{padding:2rem;}}}}}}"
+ );
let css = graph(&source);
assert!(!css.contains("@compose"), "{wrapper}: {css}");
assert!(css.contains("padding:2rem"), "{wrapper}: {css}");
@@ -67,7 +69,7 @@ fn graph_native_conditionals_expand_compose() {
#[test]
fn graph_preserves_unrelated_native_children_and_composed_style_order() {
- let source = "@utilities{paint{padding:2rem}}@media(min-width:1px){@font-face{font-family:probe;src:url(probe.woff2)}.before{color:red}.card{@compose paint;}.after{color:blue}@keyframes spin{to{opacity:0}}}";
+ let source = r###"@utilities{paint{padding:2rem}}@media(min-width:1px){@font-face{font-family:probe;src:url(probe.woff2)}.before{color:red}.card{@variant media(all){padding:2rem;}}.after{color:blue}@keyframes spin{to{opacity:0}}}"###;
let css = graph(source);
let tokens = [
"@font-face",
@@ -78,12 +80,12 @@ fn graph_preserves_unrelated_native_children_and_composed_style_order() {
];
let positions = tokens.map(|token| css.find(token).unwrap_or_else(|| panic!("{token}: {css}")));
assert!(positions.windows(2).all(|p| p[0] < p[1]), "{css}");
- assert_eq!(css.matches("@media").count(), 1, "{css}");
+ assert_eq!(css.matches("@media").count(), 2, "{css}");
}
#[test]
fn graph_preserves_one_anonymous_layer_and_nested_wrapper_structure() {
- let source = "@utilities{paint{padding:2rem}}@layer{.before{color:red}@supports(display:grid){.card{@compose paint;}.after{padding:3rem}}}";
+ let source = r###"@utilities{paint{padding:2rem}}@layer{.before{color:red}@supports(display:grid){.card{@variant media(all){padding:2rem;}}.after{padding:3rem}}}"###;
let css = graph(source);
assert!(css.contains("padding:2rem"), "{css}");
assert_eq!(css.matches("@layer").count(), 1, "{css}");
@@ -103,7 +105,7 @@ fn native_wrappers_without_directives_are_unchanged() {
#[test]
fn direct_native_conditional_order_is_preserved() {
- let source = "@utilities{paint{padding:2rem}}@media(min-width:1px){.card{@compose paint;}.card{padding:3rem}}";
+ let source = r###"@utilities{paint{padding:2rem}}@media(min-width:1px){.card{@variant media(all){padding:2rem;}}.card{padding:3rem}}"###;
let css = direct(source);
let normalized = css.replace([' ', '\n'], "");
assert!(
@@ -114,8 +116,7 @@ fn direct_native_conditional_order_is_preserved() {
#[test]
fn direct_anonymous_layer_remains_one_layer() {
- let source =
- "@utilities{paint{padding:2rem}}@layer{.card{@compose paint;}.after{padding:3rem}}";
+ let source = r###"@utilities{paint{padding:2rem}}@layer{.card{@variant media(all){padding:2rem;}}.after{padding:3rem}}"###;
let css = direct(source);
assert_eq!(css.matches("@layer").count(), 1, "{css}");
}
@@ -124,7 +125,7 @@ fn direct_anonymous_layer_remains_one_layer() {
fn conditional_selector_and_compose_origins_stay_at_authored_positions() {
for wrapper in WRAPPERS {
let source = format!(
- "/* 😀 */\n@utilities{{paint{{padding:2rem}}}}\n{wrapper}{{\n.card{{@compose paint;}}\n}}"
+ "/* 😀 */\n@utilities{{paint{{padding:2rem}}}}\n{wrapper}{{\n.card{{@variant media(all){{padding:2rem;}}}}\n}}"
);
let parsed = compile_css_directives(&source, &CompileNativeCssOptions::default()).unwrap();
let lowered = lower_css_directives(
@@ -134,7 +135,7 @@ fn conditional_selector_and_compose_origins_stay_at_authored_positions() {
&Default::default(),
)
.unwrap();
- for (generated, original) in [(".card", ".card"), ("padding", "paint;")] {
+ for (generated, original) in [(".card", ".card"), ("padding", "padding:2rem;")] {
let offset = lowered.generated_css[..lowered.generated_css.find(generated).unwrap()]
.encode_utf16()
.count() as u32;
@@ -157,8 +158,9 @@ fn conditional_selector_and_compose_origins_stay_at_authored_positions() {
#[test]
fn native_conditions_nested_inside_styles_expand_compose() {
for wrapper in WRAPPERS {
- let source =
- format!("@utilities{{paint{{padding:2rem}}}}.card{{{wrapper}{{@compose paint;}}}}");
+ let source = format!(
+ "@utilities{{paint{{padding:2rem}}}}.card{{{wrapper}{{@variant media(all){{padding:2rem;}}}}}}"
+ );
for css in [direct(&source), graph(&source)] {
assert!(!css.contains("@compose"), "{wrapper}: {css}");
assert!(css.contains("padding:2rem"), "{wrapper}: {css}");
diff --git a/crates/mastercss-compiler/tests/bug_hunt_native_output_selection.rs b/crates/mastercss-compiler/tests/bug_hunt_native_output_selection.rs
index 35d526be3..30aca0eed 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_native_output_selection.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_native_output_selection.rs
@@ -5,9 +5,9 @@ use serde_json::json;
fn selected_native_output_keeps_local_reachability_and_only_selected_external_imports() {
let base = json!({
"graph": {"entry":"entry", "files": {
- "entry":"@import './bridge.css' supports(display:grid);@import 'https://external.test/entry.css';@utilities{paint{color:blue}}.entry{color:red}.entry-compose{@compose paint;}",
+ "entry":r###"@import './bridge.css' supports(display:grid);@import 'https://external.test/entry.css';@utilities{paint{color:blue}}.entry{color:red}.entry-compose{@variant media(all){color:#00f;}}"###,
"bridge":"@import './selected.css' layer(base);@import 'https://external.test/bridge.css';.bridge{color:red}",
- "selected":"@import 'https://external.test/selected.css';.selected{color:blue}.selected-compose{@compose paint;}"
+ "selected":"@import 'https://external.test/selected.css';.selected{color:blue}.selected-compose{@variant media(all){color:purple;}}"
}, "edges":[
{"from":"entry","specifier":"./bridge.css","resolved":"bridge"},
{"from":"bridge","specifier":"./selected.css","resolved":"selected"}
@@ -76,10 +76,10 @@ fn selected_native_output_keeps_local_reachability_and_only_selected_external_im
fn suppressed_native_imports_do_not_declare_unused_layers() {
let base = json!({
"graph": {"entry":"entry", "files": {
- "entry":"@import './dead.css' layer(later);@import './bridge.css' supports(display:grid);@utilities{paint{color:purple}unused{color:red}}.live{@compose paint;}",
+ "entry":r###"@import './dead.css' layer(later);@import './bridge.css' supports(display:grid);@utilities{paint{color:purple}unused{color:red}}.live{@variant media(all){color:purple;}}"###,
"dead":".dead{color:red}",
"bridge":"@import './leaf.css' layer(base);",
- "leaf":".leaf{@compose paint;}"
+ "leaf":".leaf{@variant media(all){color:purple;}}"
}, "edges":[
{"from":"entry","specifier":"./dead.css","resolved":"dead"},
{"from":"entry","specifier":"./bridge.css","resolved":"bridge"},
diff --git a/crates/mastercss-compiler/tests/bug_hunt_ordered_output.rs b/crates/mastercss-compiler/tests/bug_hunt_ordered_output.rs
index 143031cd0..0ba1854cb 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_ordered_output.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_ordered_output.rs
@@ -29,7 +29,7 @@ fn render(source: &str, preserve: bool) -> LowerCssDirectivesResult {
#[test]
fn direct_slots_keep_repeated_selectors_separate_and_retain_important_order() {
- let source = "@utilities{paint{padding:2rem}low{padding:1rem}}@layer{.a{@compose paint;}.b{@compose low;}.a{padding:3rem!important}}";
+ let source = r###"@utilities{paint{padding:2rem}low{padding:1rem}}@layer{.a{@variant media(all){padding:2rem;}}.b{@variant media(all){padding:1rem;}}.a{padding:3rem!important}}"###;
let result = render(source, true);
let css = result.css.unwrap().replace([' ', '\n'], "");
assert_eq!(css.matches("@layer").count(), 1);
@@ -41,13 +41,19 @@ fn direct_slots_keep_repeated_selectors_separate_and_retain_important_order() {
#[test]
fn ordered_maps_anchor_each_retained_and_composed_rule_after_replacement() {
- let source = "/* 😀 */\n@utilities{paint{padding:2rem}}\n@layer{\n.before{margin:1px}\n.card{@compose paint;color:red}\n.after{padding:3rem}\n}";
+ let source = r###"/* 😀 */
+@utilities{paint{padding:2rem}}
+@layer{
+.before{margin:1px}
+.card{@variant media(all){padding:2rem;}color:red}
+.after{padding:3rem}
+}"###;
let result = render(source, true);
let css = result.css.as_ref().unwrap();
for (generated, original) in [
(".before", ".before"),
(".card", ".card"),
- ("padding:2rem", "paint;color"),
+ ("padding:2rem", "padding:2rem;}color"),
("color:red", "color:red"),
(".after", ".after"),
] {
@@ -69,7 +75,7 @@ fn ordered_maps_anchor_each_retained_and_composed_rule_after_replacement() {
#[test]
fn disabling_native_output_preserves_only_composed_rules_and_their_containers() {
- let source = "@utilities{paint{padding:2rem}}.plain{color:red}@media screen{@font-face{font-family:p;src:url(p.woff2)}.card{@compose paint;}}";
+ let source = r###"@utilities{paint{padding:2rem}}.plain{color:red}@media screen{@font-face{font-family:p;src:url(p.woff2)}.card{@variant media(all){padding:2rem;}}}"###;
let css = render(source, false).css.unwrap();
assert!(
!css.contains(".plain") && !css.contains("@font-face"),
@@ -83,48 +89,20 @@ fn disabling_native_output_preserves_only_composed_rules_and_their_containers()
#[test]
fn slot_markers_cannot_collide_with_authored_rules_or_strings() {
- let source = "@utilities{paint{padding:2rem}}@--master-css-compose-slot-0;.plain{content:'@--master-css-compose-slot-1;'}.card{@compose paint;}";
+ let source = r###"@utilities{paint{padding:2rem}}@--master-css-style-slot-0;.plain{content:'@--master-css-style-slot-1;'}.card{@variant media(all){padding:2rem;}}"###;
let css = render(source, true).css.unwrap();
- assert!(css.contains("@--master-css-compose-slot-0;"), "{css}");
- assert!(css.contains("@--master-css-compose-slot-1;"), "{css}");
+ assert!(css.contains("@--master-css-style-slot-0;"), "{css}");
+ assert!(css.contains("@--master-css-style-slot-1;"), "{css}");
assert!(css.contains("padding:2rem"), "{css}");
}
#[test]
fn stale_or_overlapping_serialized_slots_report_errors() {
let mut request = request(
- "@utilities{paint{padding:2rem}}.card{@compose paint;}",
+ r###"@utilities{paint{padding:2rem}}.card{@variant media(all){padding:2rem;}}"###,
true,
);
let output = request.native_output.as_mut().unwrap();
output.slots[0].end = u32::MAX;
assert!(lower_css_directives_request(&request, &Default::default()).is_err());
}
-
-#[test]
-fn overlapping_slots_and_backwards_mapping_ranges_are_rejected() {
- let original = request(
- "@utilities{paint{padding:2rem}}.a{@compose paint;}.b{@compose paint;}",
- true,
- );
- let mut overlapping = original.clone();
- let output = overlapping.native_output.as_mut().unwrap();
- output.slots[1] = output.slots[0].clone();
- assert!(lower_css_directives_request(&overlapping, &Default::default()).is_err());
- let mut backwards = original;
- let output = backwards.native_output.as_mut().unwrap();
- let source = output.slots[0]
- .definitions
- .iter()
- .find_map(|definition| match definition {
- mastercss_schema::CssDirectiveStyleDefinition::Compose { source, .. } => source.clone(),
- _ => None,
- })
- .unwrap();
- output.mappings.push(mastercss_schema::CssOutputMapping {
- generated_start: 2,
- generated_end: Some(1),
- source,
- });
- assert!(lower_css_directives_request(&backwards, &Default::default()).is_err());
-}
diff --git a/crates/mastercss-compiler/tests/bug_hunt_output_mappings.rs b/crates/mastercss-compiler/tests/bug_hunt_output_mappings.rs
index 4f3960d5a..3759add81 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_output_mappings.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_output_mappings.rs
@@ -72,7 +72,7 @@ fn native_rule_anchors_survive_crlf_unicode_masks_variants_and_minification() {
for source in [
"@reference \"./😀.css\";.card { padding: 1rem; }",
"/* 😀 */\r\n@master entry;\r\n.card { padding: 1rem; }",
- "@utilities { paint { color: red } } .managed { @variant dark { @compose paint; } } .card { padding: 1rem; }",
+ r###"@utilities { paint { color: red } } .managed { @variant dark { @variant media(all){color:red;} } } .card { padding: 1rem; }"###,
".empty {} .card { padding: 1rem; } .after { color: blue; }",
"@layer base { @supports (display:grid) { .card { padding: 1rem; } } }",
] {
@@ -104,8 +104,10 @@ fn native_rule_anchors_survive_crlf_unicode_masks_variants_and_minification() {
#[test]
fn lower_output_retains_compose_and_native_declaration_origins() {
- let source =
- "@utilities { paint { padding: 2rem; } }\n.card {\n @compose paint;\n color: red;\n}";
+ let source = r###"@utilities { paint { padding: 2rem; } }
+.card {
+ @variant media(all) { padding:2rem; color: red; }
+}"###;
let parsed = compile_css_directives(
source,
&CompileNativeCssOptions {
@@ -127,7 +129,7 @@ fn lower_output_retains_compose_and_native_declaration_origins() {
.expect("lowered output mappings");
for (generated, authored) in [
(".card", ".card"),
- ("padding", "paint;"),
+ ("padding", "padding:2rem;"),
("color", "color:"),
] {
let offset = result.generated_css[..result.generated_css.find(generated).unwrap()]
@@ -215,7 +217,8 @@ fn expanded_import_graph_retains_copied_spans_through_references_wrappers_and_ho
#[test]
fn composed_declaration_mappings_preserve_the_important_and_fallback_declarations() {
- let source = "@utilities{low{padding:2rem}high{padding:3rem!important}}\n.card{@compose high low;padding:4rem}";
+ let source = r###"@utilities{low{padding:2rem}high{padding:3rem!important}}
+.card{@variant media(all){padding:3rem !important;padding:2rem;}padding:4rem}"###;
let parsed = compile_css_directives(source, &CompileNativeCssOptions::default()).unwrap();
let lowered = mastercss_compiler::lower_css_directives(
&parsed.manifest_input,
@@ -226,24 +229,31 @@ fn composed_declaration_mappings_preserve_the_important_and_fallback_declaration
.unwrap();
assert_eq!(
lowered.generated_css,
- ".card{padding:3rem !important;padding:2rem;padding:4rem}"
+ "@media all{.card{padding:3rem !important;padding:2rem}}.card{padding:4rem}"
);
let mapping = lowered
.generated_mappings
.iter()
- .find(|mapping| mapping.generated_start == 6)
+ .find(|mapping| {
+ mapping.generated_start as usize == lowered.generated_css.find("padding:").unwrap()
+ })
.expect("winning declaration origin");
assert_eq!(
mapping.source.range.start as usize,
- source.rfind("high").unwrap()
+ source.rfind("padding:3rem !important").unwrap()
+ );
+ assert_eq!(
+ mapping.source.range.end - mapping.source.range.start,
+ "padding:3rem !important".len() as u32
);
- assert_eq!(mapping.source.range.end - mapping.source.range.start, 4);
}
#[test]
fn wrapped_lowered_selectors_map_after_generated_condition_prefixes() {
- let source =
- "@utilities{paint{padding:2rem}}\n@media (min-width:10px){\n.card{@compose paint;}\n}";
+ let source = r###"@utilities{paint{padding:2rem}}
+@media (min-width:10px){
+.card{@variant media(all){padding:2rem;}}
+}"###;
let parsed = compile_css_directives(source, &CompileNativeCssOptions::default()).unwrap();
let lowered = mastercss_compiler::lower_css_directives(
&parsed.manifest_input,
diff --git a/crates/mastercss-compiler/tests/bug_hunt_preserved_native_source.rs b/crates/mastercss-compiler/tests/bug_hunt_preserved_native_source.rs
index c7aeff134..aca4db447 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_preserved_native_source.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_preserved_native_source.rs
@@ -30,7 +30,7 @@ fn preserves_unicode_comments_and_literal_directive_text() {
#[test]
fn preserves_siblings_and_containers_around_lowered_slots() {
- let source = "@theme{--color-x:red}@media screen{/* keep */.empty{} .composed{@compose p:2rem;} .other{color:rgb(0, 0, 255)}}";
+ let source = r###"@theme{--color-x:red}@media screen{/* keep */.empty{} .composed{@variant media(all){padding:2rem;}} .other{color:rgb(0, 0, 255)}}"###;
let result = compile_css_directives(
source,
&CompileNativeCssOptions {
@@ -50,7 +50,9 @@ fn preserves_siblings_and_containers_around_lowered_slots() {
#[test]
fn consumed_definitions_and_composes_have_no_native_whitespace_output() {
- let source = "@theme{--color-x:red}\n@utilities{brand{color:red}}\n.button{@compose brand;}";
+ let source = r###"@theme{--color-x:red}
+@utilities{brand{color:red}}
+.button{@variant media(all){color:red;}}"###;
let result = compile_css_directives(
source,
&CompileNativeCssOptions {
diff --git a/crates/mastercss-compiler/tests/bug_hunt_resource_urls.rs b/crates/mastercss-compiler/tests/bug_hunt_resource_urls.rs
index 7185e96bb..b60db94f6 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_resource_urls.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_resource_urls.rs
@@ -47,11 +47,11 @@ fn opaque_url_payloads_and_invalid_values_do_not_create_nested_resources() {
}
#[test]
-fn source_owner_is_retained_when_managed_definition_is_composed_in_another_file() {
+fn source_owner_is_retained_when_theme_resource_is_used_in_another_file() {
let request = serde_json::from_value(json!({
"graph": {"entry":"entry", "files": {
- "entry":"@import './child.css';.example{@compose paint;}",
- "child":"@utilities{paint{background-image:url(image.png)}}.native{background:image-set('small.png' 1x,url(big.png) 2x)}"
+ "entry":"@import './child.css';.example{@variant media(all){background-image:var(--hero);}}",
+ "child":"@theme{--hero:url(image.png)}.native{background:image-set('small.png' 1x,url(big.png) 2x)}"
}, "edges":[{"from":"entry","specifier":"./child.css","resolved":"child"}]},
"urls":{"entry":"/output/main.css","child":"/output/child.css"},
"resourceURLs":{"child":{"image.png":"/original/child/image.png","small.png":"/original/child/small.png","big.png":"/original/child/big.png"}},
@@ -61,7 +61,7 @@ fn source_owner_is_retained_when_managed_definition_is_composed_in_another_file(
assert!(
result.stylesheets[0]
.generated_css
- .contains("/original/child/image.png")
+ .contains("background-image:var(--hero)")
);
assert!(
result.stylesheets[1]
diff --git a/crates/mastercss-compiler/tests/bug_hunt_rule_count_scaling.rs b/crates/mastercss-compiler/tests/bug_hunt_rule_count_scaling.rs
index 4f3b6383c..cbae55471 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_rule_count_scaling.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_rule_count_scaling.rs
@@ -11,8 +11,8 @@ use std::time::{Duration, Instant};
enum Shape {
/// Plain rules inside `@media`; every rule keeps an anchored output mapping.
Media,
- /// Native rules lowering `@compose`; every rule keeps selector and directive references.
- Compose,
+ /// Native rules lowering `@variant`; every rule keeps selector and directive references.
+ Variant,
/// Native rules with `url()` resources; every reference keeps a UTF-16 range.
Resources,
/// `@theme` variables merged into the manifest, with a base manifest holding as many.
@@ -23,7 +23,7 @@ enum Shape {
fn stylesheet(shape: Shape, rules: usize, multiline: bool) -> String {
let prefix = match shape {
- Shape::Compose => "@master entry;",
+ Shape::Variant => "@master entry;",
Shape::Theme => "@master entry;@theme{",
Shape::Components => "@master entry;@utilities{",
Shape::Media | Shape::Resources => "",
@@ -39,8 +39,11 @@ fn stylesheet(shape: Shape, rules: usize, multiline: bool) -> String {
"@media (min-width:{index}px){{.r{index}{{content:\"ü😀\";padding:{}px}}}}",
index % 9
),
- Shape::Compose => {
- format!(".r{index}{{@compose p:{}px;content:\"ü😀\"}}", index % 9)
+ Shape::Variant => {
+ format!(
+ ".r{index}{{@variant media(all){{padding:{}px;}}content:\"ü😀\"}}",
+ index % 9
+ )
}
Shape::Resources => {
format!(".r{index}{{background:url(\"./ü😀{index}.svg\");color:red}}")
@@ -65,12 +68,12 @@ fn compile(shape: Shape, rules: usize, multiline: bool) -> Duration {
let elapsed = started.elapsed();
match shape {
Shape::Media => assert_eq!(result.native_mappings.len(), rules * 2, "{rules} rules"),
- Shape::Compose => assert_eq!(
+ Shape::Variant => assert_eq!(
result
.style_definitions
.map_or(0, |definitions| definitions.len()),
rules * 2,
- "{rules} compose rules"
+ "{rules} variant rules"
),
Shape::Resources => assert_eq!(result.native_mappings.len(), rules, "{rules} rules"),
Shape::Theme | Shape::Components => {
@@ -139,8 +142,8 @@ fn native_mapping_anchors_scale_linearly_with_rule_count() {
}
#[test]
-fn native_compose_lowering_scales_linearly_with_rule_count() {
- assert_linear(Shape::Compose, "compose");
+fn native_variant_lowering_scales_linearly_with_rule_count() {
+ assert_linear(Shape::Variant, "variant");
}
#[test]
diff --git a/crates/mastercss-compiler/tests/bug_hunt_standalone_delivery.rs b/crates/mastercss-compiler/tests/bug_hunt_standalone_delivery.rs
index 12f215984..82ec437ac 100644
--- a/crates/mastercss-compiler/tests/bug_hunt_standalone_delivery.rs
+++ b/crates/mastercss-compiler/tests/bug_hunt_standalone_delivery.rs
@@ -5,8 +5,8 @@ use serde_json::json;
fn relative_resources_require_explicit_sibling_delivery_and_keep_cross_file_ownership() {
let base = json!({
"graph": {"entry":"entry", "files": {
- "entry":"@import './child.css';.example{@compose paint;}",
- "child":"@utilities{paint{background-image:url(image.svg)}}"
+ "entry":"@import './child.css';.example{@variant media(all){background-image:var(--hero);}}",
+ "child":"@theme{--hero:url(image.svg)}"
}, "edges":[{"from":"entry","specifier":"./child.css","resolved":"child"}]},
"urls":{"entry":"./main.css","child":"./child.css"},
"resourceURLs":{"child":{"image.svg":"./asset.svg?q=1#part"}},
@@ -19,7 +19,11 @@ fn relative_resources_require_explicit_sibling_delivery_and_keep_cross_file_owne
request["relativeResourceURLs"] = json!(true);
let result =
compile_css_stylesheet_graph(&serde_json::from_value(request.clone()).unwrap()).unwrap();
- assert!(result.stylesheets[0].css.contains("./asset.svg?q=1#part"));
+ assert!(
+ result.stylesheets[0]
+ .css
+ .contains("background-image:var(--hero)")
+ );
assert!(result.manifest.to_string().contains("./asset.svg?q=1#part"));
for invalid in [
"./nested/child.css",
diff --git a/crates/mastercss-compiler/tests/fixtures/v2-rc-syntax-map.json b/crates/mastercss-compiler/tests/fixtures/v2-rc-syntax-map.json
index 825b20ff0..83369d738 100644
--- a/crates/mastercss-compiler/tests/fixtures/v2-rc-syntax-map.json
+++ b/crates/mastercss-compiler/tests/fixtures/v2-rc-syntax-map.json
@@ -106,9 +106,10 @@
},
{
"rc": "size:20px",
- "v2": "size:20px",
+ "v2": "{width:20px;height:20px}",
"rcDeclarations": "width:20px;height:20px",
- "v2Declarations": "width:20px;height:20px"
+ "v2Declarations": "width:20px;height:20px",
+ "intentionalChange": "Preset sizing removed; paired declarations migrate to a group, with overlapping dimensional cascade reviewed separately by rc_sizing_migration."
},
{
"rc": "bg-cover",
diff --git a/crates/mastercss-compiler/tests/freeze_manifest_contract.rs b/crates/mastercss-compiler/tests/freeze_manifest_contract.rs
new file mode 100644
index 000000000..c02c5cca4
--- /dev/null
+++ b/crates/mastercss-compiler/tests/freeze_manifest_contract.rs
@@ -0,0 +1,82 @@
+//! Public compiler/engine boundary regressions for the 2.0 freeze (#447, #450).
+use mastercss_compiler::{
+ CompileManifestOptions, CompileNativeCssOptions, compile_css_directives, compile_manifest_input,
+};
+use mastercss_engine::EngineSession;
+use mastercss_schema::{MasterCssManifest, MatchStatus};
+
+fn manifest(source: &str) -> MasterCssManifest {
+ let parsed = compile_css_directives(source, &CompileNativeCssOptions::default()).unwrap();
+ let compiled =
+ compile_manifest_input(&parsed.manifest_input, &CompileManifestOptions::default()).unwrap();
+ MasterCssManifest::new(compiled.manifest).unwrap()
+}
+
+#[test]
+fn mode_and_breakpoint_wrappers_survive_manifest_roundtrip_and_batch_order() {
+ // Current-language counterpart of the old RC report #444. Keep both wrappers:
+ // joining media features with a space creates invalid CSS.
+ let original = manifest(
+ r#"
+ @mode dark {
+ @media (prefers-color-scheme: dark) { :root { @slot; } }
+ }
+ @custom-variant sm { @media (width >= 40rem) { @slot; } }
+ @theme { --color-brand: red; }
+ @utilities { paint-<~color> { color: --value(); } }
+ "#,
+ );
+ let encoded = original.to_json().unwrap();
+ let reloaded = MasterCssManifest::parse(&encoded).unwrap();
+ assert_eq!(original, reloaded);
+ let classes = ["paint-brand@dark@sm", "padding:8px@sm@dark"];
+ let mut batched = EngineSession::create(&encoded).unwrap();
+ let mut incremental = EngineSession::create(&reloaded.to_json().unwrap()).unwrap();
+ for class in classes {
+ let inspection = batched.inspect(class).unwrap();
+ assert_eq!(inspection.match_status, MatchStatus::Matched, "{class}");
+ assert!(!inspection.rules.is_empty(), "{class}");
+ for rule in inspection.rules {
+ assert_eq!(rule.text.matches("@media").count(), 2, "{}", rule.text);
+ assert!(
+ rule.text.contains("prefers-color-scheme:dark"),
+ "{}",
+ rule.text
+ );
+ assert!(rule.text.contains("40rem"), "{}", rule.text);
+ lightningcss::stylesheet::StyleSheet::parse(&rule.text, Default::default())
+ .unwrap_or_else(|error| panic!("{class}: {error}"));
+ }
+ }
+ batched.ensure_class_rules(classes).unwrap();
+ for class in classes.into_iter().rev() {
+ incremental.ensure_class_rules([class]).unwrap();
+ }
+ assert_eq!(
+ batched.snapshot().unwrap().text,
+ incremental.snapshot().unwrap().text
+ );
+}
+
+#[test]
+fn execution_rejects_missing_or_unsupported_versions_before_matching() {
+ let original = manifest("@utilities { probe { color:red; } }");
+ for field in ["version", "languageVersion"] {
+ for value in [None, Some(serde_json::json!(999))] {
+ let mut invalid = original.as_value().clone();
+ let object = invalid.as_object_mut().unwrap();
+ match value {
+ Some(value) => {
+ object.insert(field.into(), value);
+ }
+ None => {
+ object.remove(field);
+ }
+ }
+ assert!(
+ EngineSession::create(&invalid.to_string()).is_err(),
+ "{invalid}"
+ );
+ }
+ }
+}
diff --git a/crates/mastercss-compiler/tests/native_components_compose.rs b/crates/mastercss-compiler/tests/native_components_compose.rs
index 5d38747ae..51ce767d6 100644
--- a/crates/mastercss-compiler/tests/native_components_compose.rs
+++ b/crates/mastercss-compiler/tests/native_components_compose.rs
@@ -20,9 +20,9 @@ fn compile(source: &str) -> mastercss_compiler::LowerCssDirectivesResult {
}
#[test]
-fn compose_preserves_fallbacks_and_repeated_shorthand_order() {
+fn variant_preserves_fallbacks_and_repeated_shorthand_order() {
let result = compile(
- ".card{@compose color:red;display:block;display:made-up-value;padding-left:20px;padding:10px;padding-left:30px}",
+ r###".card{@variant media(all){color:red;}display:block;display:made-up-value;padding-left:20px;padding:10px;padding-left:30px}"###,
);
let css = result.css.unwrap();
assert!(css.contains("display:block;display:made-up-value"), "{css}");
@@ -33,28 +33,9 @@ fn compose_preserves_fallbacks_and_repeated_shorthand_order() {
}
#[test]
-fn compose_statements_keep_source_order_but_class_lists_use_master_priority() {
- assert_eq!(
- compile(".a{@compose color:red color:blue;}").css,
- compile(".a{@compose color:blue color:red;}").css
- );
- let separate = compile(".a{@compose color:red;@compose color:blue;}")
- .css
- .unwrap();
- assert!(separate.contains("color:red;color:blue"), "{separate}");
- let mixed = compile(".a{@compose color:red;color:green;@compose color:blue;}")
- .css
- .unwrap();
- assert!(
- mixed.contains("color:red;color:green;color:blue"),
- "{mixed}"
- );
-}
-
-#[test]
-fn utility_rules_preserve_fallbacks_through_manifest_and_composition() {
+fn utility_rules_preserve_fallbacks_through_manifest_and_variant() {
let result = compile(
- "@utilities{fallback{display:block;display:made-up-value;padding-left:20px;padding:10px;padding-left:30px}}.a{@compose fallback;}",
+ r###"@utilities{fallback{display:block;display:made-up-value;padding-left:20px;padding:10px;padding-left:30px}}.a{@variant media(all){display:block;display:made-up-value;padding-left:20px;padding:10px;padding-left:30px;}}"###,
);
let mut engine = EngineSession::create(&result.manifest.to_string()).unwrap();
engine.ensure_class_rules(["fallback"]).unwrap();
@@ -92,8 +73,9 @@ fn native_components_are_output_without_becoming_utilities() {
#[test]
fn nested_rules_are_not_moved_across_source_boundaries() {
- let result =
- compile(".a{@compose color:red;@media (width>1px){color:blue}@compose color:green;}");
+ let result = compile(
+ r###".a{@variant media(all){color:red;}@media (width>1px){color:blue}@variant media(all){color:green;}}"###,
+ );
let css = result.css.unwrap();
assert!(
css.find("color:red").unwrap() < css.find("color:#00f").unwrap(),
@@ -107,7 +89,7 @@ fn nested_rules_are_not_moved_across_source_boundaries() {
#[test]
fn preserves_importance_vendor_fallbacks_and_per_declaration_origins() {
- let source = "@utilities{fallback{display:-webkit-box;display:flex!important;display:grid}}.a{@compose fallback;display:block}";
+ let source = r###"@utilities{fallback{display:-webkit-box;display:flex!important;display:grid}}.a{@variant media(all){display:-webkit-box;display:flex !important;display:grid;}display:block}"###;
let parsed = compile_css_directives(source, &Default::default()).unwrap();
let value = &parsed.manifest_input.utilities.as_ref().unwrap()[0]["body"];
let declarations = value[0]["declarations"].as_array().unwrap();
@@ -126,101 +108,9 @@ fn preserves_importance_vendor_fallbacks_and_per_declaration_origins() {
}
let css = compile(source).css.unwrap();
assert!(
- css.contains("display:-webkit-box;display:flex !important;display:grid;display:block"),
- "{css}"
- );
-}
-
-#[test]
-fn unknown_native_class_and_cycles_fail_without_partial_output() {
- for source in [
- ".btn{color:red}.a{@compose display:block btn;}",
- "@utilities{a{@compose b;}b{@compose a;}}",
- ] {
- let parsed = compile_css_directives(source, &Default::default()).unwrap();
- assert!(
- lower_css_directives_request(
- &LowerCssDirectivesRequest {
- utility_sources: parsed.utility_sources,
- native_output: parsed.native_output,
- manifest_input: parsed.manifest_input,
- style_definitions: parsed.style_definitions.unwrap_or_default(),
- warnings: parsed.warnings,
- },
- &Default::default()
- )
- .is_err()
- );
- }
-}
-
-#[test]
-fn pattern_compose_accepts_fixed_classes() {
- let result = compile("@utilities{size-{@compose display:block;}}.x{@compose size-sm;}");
- assert!(result.css.unwrap().contains("display:block"));
-}
-
-#[test]
-fn composed_layer_switch_is_rejected() {
- let source =
- "@custom-variant target{@layer components{@slot;}}.a{@compose display:block@target;}";
- let parsed = compile_css_directives(source, &Default::default()).unwrap();
- let error = lower_css_directives_request(
- &LowerCssDirectivesRequest {
- utility_sources: parsed.utility_sources,
- native_output: parsed.native_output,
- manifest_input: parsed.manifest_input,
- style_definitions: parsed.style_definitions.unwrap_or_default(),
- warnings: parsed.warnings,
- },
- &Default::default(),
- )
- .unwrap_err();
- assert!(
- error.to_string().contains("cannot change layers"),
- "{error}"
- );
-}
-
-#[test]
-fn inspection_retains_statement_definition_and_resource_provenance() {
- let source = "@theme{--color-accent:red;@keyframes spin{to{opacity:1}}}@utilities{paint{color:var(--color-accent);animation:spin 1s}}.a{@compose paint;@compose color:blue;}";
- let result = compile(source);
- assert_eq!(result.compositions.len(), 2);
- let trace = &result.compositions[0];
- assert_eq!(trace.classes, ["paint"]);
- assert!(trace.css.contains("color:var(--color-accent)"));
- assert!(trace.variable_names.contains(&"color-accent".into()));
- assert!(trace.animation_names.contains(&"spin".into()));
- let location = trace.definition_sources.first().unwrap();
- assert_eq!(
- &source[location.range.start as usize..location.range.end as usize],
- "paint"
- );
- let call = trace.source.as_ref().unwrap();
- assert_eq!(
- &source[call.range.start as usize..call.range.end as usize],
- "@compose paint;"
- );
- assert!(!result.manifest.to_string().contains("definitionSources"));
-}
-
-#[test]
-fn pattern_nested_declarations_preserve_importance_and_fallback_order() {
- let result = compile(
- "@utilities{paint-{&:hover{display:block}display:flex!important;display:made-up-value;display:grid}}.a{@compose paint-a;}",
- );
- let css = result.css.unwrap();
- assert!(
- css.contains("display:flex !important;display:made-up-value;display:grid"),
+ css.contains("display:-webkit-box;display:flex !important;display:grid}}.a{display:block"),
"{css}"
);
- assert!(
- result.compositions[0]
- .definition_sources
- .iter()
- .any(|source| source.range.end - source.range.start == 11)
- );
}
#[test]
@@ -246,29 +136,6 @@ fn segmented_rules_keep_sort_classification_and_resource_lifetimes() {
assert!(empty.resources.animations.is_empty());
}
-#[test]
-fn inspection_uses_actual_matches_for_pattern_and_dependency_provenance() {
- let source = "@utilities{paint-{color:--value()}paint-{font-size:--value()}alias{@compose paint-red;}}.a{@compose alias:hover paint-blue:hover;}";
- let result = compile(source);
- let trace = result.compositions.last().unwrap();
- let definitions = trace
- .definition_sources
- .iter()
- .map(|location| &source[location.range.start as usize..location.range.end as usize])
- .collect::>();
- assert!(definitions.contains(&"paint-"), "{definitions:?}");
- assert!(definitions.contains(&"alias"), "{definitions:?}");
- assert!(
- !definitions.contains(&"paint-"),
- "{definitions:?}"
- );
- assert!(
- !serde_json::to_string(trace)
- .unwrap()
- .contains("resolvedUtilities")
- );
-}
-
#[test]
fn pattern_importance_spelling_and_comments_do_not_reorder_declarations() {
for declarations in [
@@ -276,14 +143,16 @@ fn pattern_importance_spelling_and_comments_do_not_reorder_declarations() {
"&:hover{display:block} DISPLAY:flex !/**/IMPORTANT; /* fallback */ display:made-up-value; display:grid!important",
] {
let result = compile(&format!(
- "@utilities{{paint-{{{declarations}}}}}.a{{@compose paint-a;}}"
+ "@utilities{{paint- {{{declarations}}}}}.a{{@variant media(all){{{declarations}}}}}"
));
let css = result.css.unwrap();
assert!(
css.contains("display:flex !important;display:made-up-value;display:grid !important"),
"{css}"
);
- let native = compile(&format!(".a{{@compose color:red;{declarations}}}"));
+ let native = compile(&format!(
+ ".a{{@variant media(all){{color:red;{declarations}}}}}"
+ ));
let css = native.css.unwrap();
assert!(
css.contains("display:flex !important;display:made-up-value;display:grid !important"),
diff --git a/crates/mastercss-compiler/tests/rc_managed_migration.rs b/crates/mastercss-compiler/tests/rc_managed_migration.rs
index 9bd78c919..b0b0a4441 100644
--- a/crates/mastercss-compiler/tests/rc_managed_migration.rs
+++ b/crates/mastercss-compiler/tests/rc_managed_migration.rs
@@ -9,7 +9,8 @@ fn request(classes: Vec>, stylesheets: Vec<&str>) -> RcMigrationReques
}
#[test]
fn migrates_static_names_without_rewriting_native_values_or_nested_rules() {
- let source = "@defaults{wide{width:10px}}@components{card{color:red;&:hover{color:blue}@compose display:block;}}";
+ let source =
+ "@defaults{wide{width:10px}}@components{card{color:red;&:hover{color:blue}display:block;}}";
let result = migrate_rc(&request(vec![vec!["card"]], vec![source])).unwrap();
assert!(result.notes.is_empty());
assert!(
@@ -26,7 +27,7 @@ fn migrates_static_names_without_rewriting_native_values_or_nested_rules() {
}
assert_eq!(
output,
- "@layer defaults{.wide{width:10px}}@layer components{.card{color:red;&:hover{color:blue}@compose display:block;}}"
+ r###"@layer defaults{.wide{width:10px}}@layer components{.card{color:red;&:hover{color:blue}display:block;}}"###
);
let second = migrate_rc(&request(vec![vec!["card"]], vec![&output])).unwrap();
assert!(second.stylesheets[0].edits.is_empty());
diff --git a/crates/mastercss-compiler/tests/rc_migration.rs b/crates/mastercss-compiler/tests/rc_migration.rs
index f2f0337f1..9153d88b3 100644
--- a/crates/mastercss-compiler/tests/rc_migration.rs
+++ b/crates/mastercss-compiler/tests/rc_migration.rs
@@ -128,7 +128,10 @@ fn migrates_directives_and_reports_selector_references() {
".p\\:md{color:red}".into()];
let result = migrate_rc(&input).unwrap();
assert!(
- result.stylesheets[0].notes.is_empty(),
+ result.stylesheets[0]
+ .notes
+ .iter()
+ .any(|note| note.contains("@compose has been removed")),
"{:?}",
result.stylesheets[0].notes
);
@@ -142,7 +145,7 @@ fn migrates_directives_and_reports_selector_references() {
assert!(!migrated.contains("base-unit"));
assert!(migrated.contains("font-<~font-size>"));
assert!(migrated.contains("font-size:<*>"));
- assert!(migrated.contains("@compose p-md font-mono"));
+ assert!(migrated.contains("@compose p:md font:mono"));
assert!(!result.stylesheets[1].notes.is_empty());
input.stylesheets = vec![migrated];
let again = migrate_rc(&input).unwrap();
diff --git a/crates/mastercss-compiler/tests/rc_sizing_migration.rs b/crates/mastercss-compiler/tests/rc_sizing_migration.rs
new file mode 100644
index 000000000..26b4ef7de
--- /dev/null
+++ b/crates/mastercss-compiler/tests/rc_sizing_migration.rs
@@ -0,0 +1,158 @@
+use mastercss_compiler::{RcMigrationRequest, migrate_rc};
+use serde_json::{Value, json};
+
+// Frozen pre-removal preset definitions; custom same-name definitions are tested
+// separately so a spelling alone never proves the old sizing intent.
+fn request(classes: Vec>) -> RcMigrationRequest {
+ let target: Value = serde_json::from_str(include_str!(
+ "../../../packages/preset/src/default-manifest.json"
+ ))
+ .unwrap();
+ let mut original = target.clone();
+ for (key, w, h) in [
+ ("size", "width", "height"),
+ ("min-size", "min-width", "min-height"),
+ ("max-size", "max-width", "max-height"),
+ ] {
+ for token in [false, true] {
+ let mut u = json!({"id":if token {format!("{key}-<~container>")} else {format!("{key}:<*>")},"type":-1,"emit":{"type":"static","rules":[{"declarations":{w:null,h:null}}]},"matchers":[if token {json!({"type":"token","prefix":format!("{key}-")})}else{json!({"type":"key","keys":[key]})}]});
+ if token {
+ u["variableAliasRefs"] = json!(["~container"]);
+ }
+ original["utilities"].as_array_mut().unwrap().push(u);
+ }
+ }
+ serde_json::from_value(json!({"from":"rc-sizing","sourceVersion":"2.0.0-rc.sizing","manifest":original,"targetManifest":target,"classLists":classes})).unwrap()
+}
+#[test]
+fn preserves_dimensions_conditions_importance_and_token_identity() {
+ let request = request(vec![
+ vec!["size:20px:hover@sm!"],
+ vec!["min-size:2rem"],
+ vec!["max-size-sm"],
+ ]);
+ let result = migrate_rc(&request).unwrap();
+ for (index, expected) in [
+ "{width:20px;height:20px}:hover@sm!",
+ "{min-width:2rem;min-height:2rem}",
+ "{max-width-sm;max-height-sm}",
+ ]
+ .iter()
+ .enumerate()
+ {
+ assert_eq!(
+ result.class_lists[index][0].after.as_deref(),
+ Some(*expected),
+ "{:?}",
+ result.class_lists[index][0].notes
+ );
+ }
+ let mut rerun = request;
+ rerun.class_lists = result
+ .class_lists
+ .into_iter()
+ .map(|list| list.into_iter().map(|item| item.after.unwrap()).collect())
+ .collect();
+ assert!(
+ migrate_rc(&rerun)
+ .unwrap()
+ .class_lists
+ .iter()
+ .flatten()
+ .all(|item| item.status == "unchanged")
+ );
+}
+#[test]
+fn reviews_dimension_competition_and_retains_explicit_custom_sizing() {
+ let mut input = request(vec![vec!["size:20px", "width:30px"]]);
+ assert!(
+ migrate_rc(&input).unwrap().class_lists[0]
+ .iter()
+ .all(|item| item.status == "review")
+ );
+ let custom = json!({"id":"project-size","type":-1,"emit":{"type":"property","property":"inline-size"},"matchers":[{"type":"key","keys":["size"]}]});
+ input.manifest["utilities"]
+ .as_array_mut()
+ .unwrap()
+ .retain(|u| u["id"] != "size:<*>");
+ input.manifest["utilities"]
+ .as_array_mut()
+ .unwrap()
+ .push(custom.clone());
+ input.target_manifest["utilities"]
+ .as_array_mut()
+ .unwrap()
+ .push(custom);
+ input.class_lists = vec![vec!["size:20px".into()]];
+ assert_eq!(
+ migrate_rc(&input).unwrap().class_lists[0][0].status,
+ "unchanged"
+ );
+}
+#[test]
+fn refuses_same_spelling_with_changed_intent_and_dynamic_values() {
+ let mut input = request(vec![vec!["size:20px"], vec!["size:${n}px"]]);
+ let old = input.manifest["utilities"]
+ .as_array_mut()
+ .unwrap()
+ .iter_mut()
+ .find(|u| u["id"] == "size:<*>")
+ .unwrap();
+ old["emit"]["rules"][0]["declarations"]["height"] = json!("auto");
+ assert!(
+ migrate_rc(&input)
+ .unwrap()
+ .class_lists
+ .iter()
+ .flatten()
+ .all(|item| item.status == "review")
+ );
+}
+
+#[test]
+fn every_profile_finishes_with_the_shared_sizing_stage() {
+ use mastercss_compiler::RcMigrationProfile;
+ for profile in [
+ RcMigrationProfile::RcLegacy,
+ RcMigrationProfile::RcNamed,
+ RcMigrationProfile::RcNative,
+ RcMigrationProfile::RcManaged,
+ RcMigrationProfile::RcUtilities,
+ RcMigrationProfile::RcSizing,
+ ] {
+ let mut input = request(vec![vec!["size:20px"]]);
+ input.from = profile;
+ let result = migrate_rc(&input).unwrap();
+ assert_eq!(
+ result.class_lists[0][0].after.as_deref(),
+ Some("{width:20px;height:20px}"),
+ "{profile:?}: {:?}",
+ result.class_lists[0][0].notes
+ );
+ input.class_lists = vec![vec!["size:20px".into(), "width:30px".into()]];
+ assert!(
+ migrate_rc(&input).unwrap().class_lists[0]
+ .iter()
+ .all(|item| item.status == "review"),
+ "{profile:?}"
+ );
+ }
+}
+
+#[test]
+fn sizing_helpers_do_not_replace_explicit_short_alias_definitions() {
+ let mut input = request(vec![vec!["min:20px"], vec!["min-size:20px"]]);
+ let custom = json!({"id":"project-min","type":-1,"emit":{"type":"property","property":"inline-size"},"matchers":[{"type":"key","keys":["min"]}]});
+ for manifest in [&mut input.manifest, &mut input.target_manifest] {
+ manifest["utilities"]
+ .as_array_mut()
+ .unwrap()
+ .push(custom.clone());
+ }
+ let result = migrate_rc(&input).unwrap();
+ assert_eq!(result.class_lists[0][0].status, "unchanged");
+ assert_eq!(
+ result.class_lists[1][0].after.as_deref(),
+ Some("{min-width:20px;min-height:20px}")
+ );
+}
diff --git a/crates/mastercss-compiler/tests/removed_compose.rs b/crates/mastercss-compiler/tests/removed_compose.rs
new file mode 100644
index 000000000..b83066567
--- /dev/null
+++ b/crates/mastercss-compiler/tests/removed_compose.rs
@@ -0,0 +1,75 @@
+use mastercss_compiler::{CompileNativeCssOptions, CompilerError, compile_css_directives};
+use mastercss_schema::{CssDirectiveStyleDefinition, ErrorCode};
+
+#[test]
+fn rejects_removed_compose_in_every_authoring_context() {
+ for source in [
+ "@compose block;",
+ r###".card { @compose block; }"###,
+ r###"@utilities { card { @compose block; } }"###,
+ r###"@utilities { box:<*> { @compose block; } }"###,
+ r###"@utilities { box- { @compose block; } }"###,
+ r###"@utilities { box-<~spacing> { @compose block; } }"###,
+ r###"@media print { .card { @compose block; } }"###,
+ r###".card { @variant sm { @compose block; } }"###,
+ ".card { @CoMpOsE block; }",
+ r".card { @\63 ompose block; }",
+ ".card { @compose { block } }",
+ ] {
+ let error =
+ compile_css_directives(source, &CompileNativeCssOptions::default()).unwrap_err();
+ assert!(
+ matches!(
+ error,
+ CompilerError::DirectiveDiagnostic {
+ code: ErrorCode::RemovedComposeDirective,
+ ..
+ }
+ ),
+ "{source}: {error}"
+ );
+ }
+}
+
+#[test]
+fn removal_diagnostic_uses_original_utf16_positions() {
+ let source = r###"/*😀*/
+.card { @compose block; }"###;
+ let options = CompileNativeCssOptions {
+ from: "card.css".into(),
+ ..Default::default()
+ };
+ let error = compile_css_directives(source, &options).unwrap_err();
+ let CompilerError::DirectiveDiagnostic {
+ code,
+ filename,
+ range: Some(range),
+ ..
+ } = error
+ else {
+ panic!("expected a ranged removal diagnostic");
+ };
+ assert_eq!(code, ErrorCode::RemovedComposeDirective);
+ assert_eq!(filename, "card.css");
+ assert_eq!(
+ range.start,
+ source[..source.find('@').unwrap()].encode_utf16().count() as u32
+ );
+ assert_eq!(range.end - range.start, 8);
+}
+
+#[test]
+fn leaves_strings_comments_custom_values_and_unrelated_at_rules_alone() {
+ let source = r#"/* @compose block; */ .card { content: "@compose block;"; --example: @compose; } @compose-other example;"#;
+ assert!(compile_css_directives(source, &CompileNativeCssOptions::default()).is_ok());
+}
+
+#[test]
+fn removed_compose_ir_is_not_an_accepted_lowering_input() {
+ assert!(
+ serde_json::from_value::(serde_json::json!({
+ "type": "compose", "order": 1, "className": "block", "selector": ".card"
+ }))
+ .is_err()
+ );
+}
diff --git a/crates/mastercss-compiler/tests/utility_definition_contract.rs b/crates/mastercss-compiler/tests/utility_definition_contract.rs
index 8a41ecc64..738293346 100644
--- a/crates/mastercss-compiler/tests/utility_definition_contract.rs
+++ b/crates/mastercss-compiler/tests/utility_definition_contract.rs
@@ -28,7 +28,8 @@ fn css(source: &str, classes: &[&str]) -> String {
}
#[test]
fn raw_intent_does_not_depend_on_value_kind() {
- let source = "@utilities{size:<*>{width:--value();height:--value()}}";
+ let source =
+ r###"@utilities{size:<*>{@variant media(all){width:--value();height:--value()}}}"###;
for value in ["red", "-1px", "var(--size)", "future(1px)", "1px|2px"] {
let generated = css(source, &[&format!("size:{value}")]);
assert!(generated.contains("width:"), "{value}: {generated}");
@@ -53,9 +54,9 @@ fn removed_pattern_forms_and_duplicate_enum_keys_fail() {
}
}
#[test]
-fn replacement_removes_nested_rules_and_obsolete_dependencies() {
+fn replacement_removes_nested_rules() {
let generated = css(
- "@utilities{card{color:red;&:hover{color:blue}@compose card;}card{padding:1px}}",
+ r###"@utilities{card{color:red;&:hover{color:blue}@variant media(all){}}card{padding:1px}}"###,
&["card"],
);
assert!(generated.contains("padding:1px"), "{generated}");
@@ -63,9 +64,10 @@ fn replacement_removes_nested_rules_and_obsolete_dependencies() {
assert!(!generated.contains(":hover"), "{generated}");
}
#[test]
-fn empty_utility_is_matched_and_can_be_composed() {
+fn empty_utility_is_matched() {
let result =
- compile("@utilities{card{color:red}card{}}.x{@compose card;display:block}").unwrap();
+ compile(r###"@utilities{card{color:red}card{}}.x{@variant media(all){}display:block}"###)
+ .unwrap();
let engine = EngineSession::create(&result.manifest.to_string()).unwrap();
let inspection = engine.inspect("card").unwrap();
assert_eq!(inspection.match_status, MatchStatus::Matched);
@@ -78,7 +80,6 @@ fn empty_utility_is_matched_and_can_be_composed() {
engine.inspect("{card}").unwrap().match_status,
MatchStatus::Matched
);
- assert!(result.css.unwrap().contains("display:block"));
}
#[test]
fn enum_identity_ignores_key_order_and_mapping_values() {
@@ -106,17 +107,6 @@ fn static_names_accept_future_pseudo_classes() {
}
}
#[test]
-fn patterns_compose_fixed_classes_with_forward_references() {
- let generated = css(
- "@utilities{size:<*>{@compose base; width:--value(); @compose color:blue;}base{display:block}}",
- &["size:20px"],
- );
- for declaration in ["display:block", "width:20px", "color:blue"] {
- assert!(generated.contains(declaration), "{generated}");
- }
- assert!(compile("@utilities{size:<*>{@compose width:--value();}}").is_err());
-}
-#[test]
fn template_replacement_respects_css_tokens_and_does_not_recurse() {
let generated = css(
"@utilities{sample:<*>{width:--value();--quoted:'--value()';--fragment:prefix--value();--escaped:\\--value();}}",
@@ -129,13 +119,6 @@ fn template_replacement_respects_css_tokens_and_does_not_recurse() {
"{generated}"
);
}
-#[test]
-fn compose_allows_strings_inside_class_values() {
- let result = compile(".x{@compose content:'hello';}").unwrap();
- assert!(result.css.unwrap().contains("hello"));
- assert!(compile(".x{@compose 'display:block';}").is_err());
-}
-
#[test]
fn identifiers_preserve_case_unicode_and_decoded_escapes() {
let generated = css(
@@ -153,26 +136,10 @@ fn identifiers_preserve_case_unicode_and_decoded_escapes() {
}
}
-#[test]
-fn inspection_traces_only_effective_definitions_and_retains_replaced_sources() {
- let result = compile("@utilities{card{color:red}card{color:blue}}.x{@compose card;}").unwrap();
- assert_eq!(result.utility_sources.len(), 2);
- assert_eq!(
- result.utility_sources[0].replaced_by.as_ref(),
- Some(&result.utility_sources[1].source)
- );
- assert!(result.utility_sources[1].replaced_by.is_none());
- assert_eq!(
- result.compositions[0].definition_sources,
- vec![result.utility_sources[1].source.clone()]
- );
- assert!(!result.manifest.to_string().contains("replacedBy"));
-}
-
#[test]
fn public_manifest_compilation_resolves_fixed_pattern_composition() {
let parsed = compile_css_directives(
- "@utilities{pair:<*>{@compose block; width:--value()}block{display:block}}",
+ r###"@utilities{pair:<*>{@variant media(all){display:block;} width:--value()}block{display:block}}"###,
&CompileNativeCssOptions::default(),
)
.unwrap();
@@ -205,7 +172,7 @@ fn conflicts_report_both_original_sources() {
#[test]
fn clearing_raw_and_token_definitions_does_not_fall_back_or_retain_resources() {
- let result = compile("@theme{--color-brand:red}@utilities{paint-<~color>{color:--value()}paint-<~color>{}size:<*>{width:--value()}size:<*>{}}.x{@compose size:red paint-brand;}").unwrap();
+ let result = compile(r###"@theme{--color-brand:red}@utilities{paint-<~color>{color:--value()}paint-<~color>{}size:<*>{width:--value()}size:<*>{}}.x{@variant media(all){}}"###).unwrap();
let mut engine = EngineSession::create(&result.manifest.to_string()).unwrap();
for class in ["size:red", "paint-brand"] {
assert_eq!(
@@ -221,21 +188,6 @@ fn clearing_raw_and_token_definitions_does_not_fall_back_or_retain_resources() {
);
}
-#[test]
-fn pattern_composition_cycle_is_checked_after_replacement() {
- assert!(
- compile(
- "@utilities{cycle-one:<*>{@compose cycle-two:x;}cycle-two:<*>{@compose cycle-one:y;}}"
- )
- .is_err()
- );
- let generated = css(
- "@utilities{cycle-one:<*>{@compose cycle-two:x;}cycle-two:<*>{@compose cycle-one:y;}cycle-two:<*>{color:red}}",
- &["cycle-one:x"],
- );
- assert!(generated.contains("color:red"), "{generated}");
-}
-
#[test]
fn custom_manifest_token_alias_content_does_not_change_definition_identity() {
use serde_json::json;
diff --git a/crates/mastercss-diagnostics/src/lib.rs b/crates/mastercss-diagnostics/src/lib.rs
index b9a9b46c8..1b51d9775 100644
--- a/crates/mastercss-diagnostics/src/lib.rs
+++ b/crates/mastercss-diagnostics/src/lib.rs
@@ -150,8 +150,6 @@ pub struct SourceInspection {
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct StylesheetInspection {
- #[serde(default)]
- pub compositions: Vec,
pub file_path: String,
#[serde(rename = "masterCSS")]
pub master_css: bool,
diff --git a/crates/mastercss-engine/src/completion.rs b/crates/mastercss-engine/src/completion.rs
index cebad4a0f..4515f9e9e 100644
--- a/crates/mastercss-engine/src/completion.rs
+++ b/crates/mastercss-engine/src/completion.rs
@@ -240,16 +240,26 @@ pub(crate) fn collect_class_completion_candidates(
let static_detail = static_utility_detail(utility);
for matcher in &utility.matchers {
match matcher {
- UtilityMatcher::Static { name } => push_value_completion_candidate(
- &mut candidates,
- &mut labels,
- name.clone(),
- if is_component {
- Some("component".into())
- } else {
- static_detail.clone()
- },
- ),
+ UtilityMatcher::Static { name } => {
+ push_value_completion_candidate(
+ &mut candidates,
+ &mut labels,
+ name.clone(),
+ if is_component {
+ Some("component".into())
+ } else {
+ static_detail.clone()
+ },
+ );
+ if mastercss_schema::is_native_css_property(name) {
+ push_property_completion_candidate(
+ &mut candidates,
+ &mut labels,
+ name,
+ None,
+ );
+ }
+ }
UtilityMatcher::Pattern { prefix, values, .. } => {
for value in values {
push_value_completion_candidate(
diff --git a/crates/mastercss-engine/src/manifest.rs b/crates/mastercss-engine/src/manifest.rs
index 6aa465300..e9b3d1b13 100644
--- a/crates/mastercss-engine/src/manifest.rs
+++ b/crates/mastercss-engine/src/manifest.rs
@@ -833,13 +833,11 @@ pub(crate) const BUILTIN_KEY_ALIASES: &[(&str, &str)] = &[
("iys", "inset-block-start"),
("leading", "line-height"),
("m", "margin"),
- ("max", "max-size"),
("max-h", "max-height"),
("max-size-x", "max-inline-size"),
("max-size-y", "max-block-size"),
("max-w", "max-width"),
("mb", "margin-bottom"),
- ("min", "min-size"),
("min-h", "min-height"),
("min-size-x", "min-inline-size"),
("min-size-y", "min-block-size"),
diff --git a/crates/mastercss-engine/src/named.rs b/crates/mastercss-engine/src/named.rs
index 0b389c632..627f2ab3c 100644
--- a/crates/mastercss-engine/src/named.rs
+++ b/crates/mastercss-engine/src/named.rs
@@ -46,15 +46,17 @@ pub(crate) fn matching_utilities(
}
if let Some(prefix) = token_prefix(source, manifest) {
- let mut matches = token_candidates(source, prefix, manifest);
- if matches.len() > 1 {
- let first = emitted_signature(&manifest.utilities[matches[0].0], &matches[0].1);
- if matches.iter().skip(1).any(|(index, matched)| {
- emitted_signature(&manifest.utilities[*index], matched) != first
+ let matches = token_candidates(source, prefix, manifest);
+ if let Some((first, _)) = matches.first() {
+ // The selected prefix is shared by all candidates. Namespace order
+ // completes its identity; current values and layers do not. The
+ // same family can intentionally emit in several cascade layers.
+ if matches.iter().skip(1).any(|(index, _)| {
+ manifest.utilities[*index].variable_alias_refs
+ != manifest.utilities[*first].variable_alias_refs
}) {
return Vec::new();
}
- matches.truncate(1);
}
return matches;
}
@@ -224,7 +226,20 @@ pub(crate) fn diagnostics(source: &str, manifest: &ManifestProjection) -> Vec 1 {
format!(
- "Ambiguous named token {source}; use an explicit utility name{}",
+ "Ambiguous named token {source}; conflicting definitions: {}. {}{}",
+ candidates
+ .iter()
+ .map(|(index, _)| {
+ let utility = &manifest.utilities[*index];
+ format!("{} [{}]", utility.id, utility.variable_alias_refs.join("|"))
+ })
+ .collect::>()
+ .join(", "),
+ if alternatives.is_empty() {
+ "Define distinct utility prefixes"
+ } else {
+ "Use an explicit utility name"
+ },
if alternatives.is_empty() {
String::new()
} else {
@@ -279,14 +294,6 @@ fn is_native_declaration(source: &str, manifest: &ManifestProjection) -> bool {
})
}
-fn emitted_signature(utility: &UtilityDefinition, matched: &UtilityMatch) -> String {
- format!(
- "{:?}:{:?}",
- utility.layer,
- emit_declarations(utility, matched.value.as_deref(), false)
- )
-}
-
pub(crate) fn sort_key(utility: &UtilityDefinition, matched: &UtilityMatch) -> String {
if utility.utility_type == -2 && matched.matcher_type != super::UtilityMatcherType::Token {
return String::new(); // Static/enum identities retain their existing semantic order.
diff --git a/crates/mastercss-engine/src/utility_identity.rs b/crates/mastercss-engine/src/utility_identity.rs
index d8b4070cd..486e53060 100644
--- a/crates/mastercss-engine/src/utility_identity.rs
+++ b/crates/mastercss-engine/src/utility_identity.rs
@@ -38,12 +38,52 @@ pub fn utility_identity(utility: &Value) -> String {
pub fn effective_utilities(utilities: &[Value]) -> Vec {
let mut seen = std::collections::HashSet::new();
- let mut output = utilities
- .iter()
- .rev()
- .filter(|utility| seen.insert(utility_identity(utility)))
- .cloned()
- .collect::>();
+ let mut output = Vec::new();
+ for utility in utilities.iter().rev() {
+ // An alias is an entry point, not part of another alias's identity.
+ // Keep invalid/empty matchers intact so manifest validation can reject
+ // them instead of silently dropping a malformed definition.
+ let Some(matchers) = utility
+ .get("matchers")
+ .and_then(Value::as_array)
+ .filter(|matchers| !matchers.is_empty())
+ else {
+ if seen.insert(utility_identity(utility)) {
+ output.push(utility.clone());
+ }
+ continue;
+ };
+ for matcher in matchers.iter().rev() {
+ let entries = if matcher.get("type").and_then(Value::as_str) == Some("key") {
+ matcher
+ .get("keys")
+ .and_then(Value::as_array)
+ .filter(|keys| !keys.is_empty())
+ .map(|keys| {
+ keys.iter()
+ .map(|key| {
+ let mut entry = matcher.clone();
+ entry["keys"] = json!([key]);
+ entry
+ })
+ .collect()
+ })
+ .unwrap_or_else(|| vec![matcher.clone()])
+ } else {
+ vec![matcher.clone()]
+ };
+ for matcher in entries.into_iter().rev() {
+ let mut entry = utility.clone();
+ entry["matchers"] = json!([matcher]);
+ if matcher["type"] == "key" && entry.get("keys").is_some() {
+ entry["keys"] = matcher["keys"].clone();
+ }
+ if seen.insert(utility_identity(&entry)) {
+ output.push(entry);
+ }
+ }
+ }
+ }
output.reverse();
output
}
diff --git a/crates/mastercss-engine/tests/utility_entry_resolution.rs b/crates/mastercss-engine/tests/utility_entry_resolution.rs
new file mode 100644
index 000000000..1b205f5e5
--- /dev/null
+++ b/crates/mastercss-engine/tests/utility_entry_resolution.rs
@@ -0,0 +1,100 @@
+use mastercss_engine::{EngineSession, effective_utilities};
+use mastercss_schema::MatchStatus;
+use serde_json::{Value, json};
+
+fn engine(utilities: Value, variables: Value) -> EngineSession {
+ EngineSession::create(
+ &json!({"version":1,"languageVersion":3,"utilities":utilities,"variables":variables})
+ .to_string(),
+ )
+ .unwrap()
+}
+fn raw(id: &str, keys: &[&str], property: &str) -> Value {
+ json!({"id":id,"type":-1,"emit":{"type":"property","property":property},"matchers":[{"type":"key","keys":keys}]})
+}
+fn token(id: &str, namespace: &str, layer: &str, property: &str) -> Value {
+ json!({"id":id,"type":0,"layer":layer,"variableAliasRefs":[namespace],"emit":{"type":"property","property":property},"matchers":[{"type":"token","prefix":"paint-"}]})
+}
+
+#[test]
+fn raw_alias_replacement_preserves_only_unmodified_entries() {
+ let definitions = vec![
+ raw("old", &["size", "box"], "width"),
+ raw("new", &["size"], "height"),
+ ];
+ let normalized = effective_utilities(&definitions);
+ assert_eq!(effective_utilities(&normalized), normalized);
+ let mut session = engine(json!(definitions), json!({}));
+ session
+ .ensure_class_rules(["size:20px", "box:30px"])
+ .unwrap();
+ let text = session.snapshot().unwrap().text;
+ assert!(text.contains(".size\\:20px{height:20px}"), "{text}");
+ assert!(text.contains(".box\\:30px{width:30px}"), "{text}");
+ assert!(!text.contains("width:20px"));
+}
+
+#[test]
+fn static_alias_replacement_removes_nested_rules_and_resources() {
+ let old = json!({"id":"old","type":-2,"matchers":[{"type":"static","name":"card"},{"type":"static","name":"panel"}],"emit":{"type":"static","rules":[{"declarations":{"color":"var(--color-old)"}},{"selector":"&:hover","declarations":{"color":"red"}}]}});
+ let new = json!({"id":"new","type":-2,"matchers":[{"type":"static","name":"card"}],"emit":{"type":"static","rules":[]}});
+ let mut session = engine(
+ json!([old, new]),
+ json!({"color":[{"key":"old","value":"blue"}]}),
+ );
+ assert_eq!(
+ session.inspect("card").unwrap().match_status,
+ MatchStatus::Matched
+ );
+ session.ensure_class_rules(["card"]).unwrap();
+ assert!(session.snapshot().unwrap().text.is_empty());
+ session.ensure_class_rules(["panel"]).unwrap();
+ assert!(
+ session
+ .snapshot()
+ .unwrap()
+ .text
+ .contains("--color-old:blue")
+ );
+ session.delete_class_rules(["panel"]).unwrap();
+ assert!(session.snapshot().unwrap().text.is_empty());
+}
+
+#[test]
+fn token_ambiguity_is_independent_of_inline_values_and_layers() {
+ for value in ["red", "blue"] {
+ for layer in ["utilities", "components"] {
+ let session = engine(
+ json!([
+ token("a", "~a", "utilities", "color"),
+ token("b", "~b", layer, "color")
+ ]),
+ json!({"a":[{"key":"brand","value":"red","inline":true}],"b":[{"key":"brand","value":value,"inline":true}]}),
+ );
+ let result = session.inspect("paint-brand").unwrap();
+ assert_eq!(result.match_status, MatchStatus::Ambiguous);
+ assert!(result.rules.is_empty());
+ assert!(result.diagnostics[0].message.contains("a [~a], b [~b]"));
+ assert!(result.diagnostics[0].notes.is_empty());
+ }
+ }
+}
+
+#[test]
+fn same_token_family_retains_each_layer_and_namespace_order() {
+ let mut session = engine(
+ json!([
+ token("a", "~color", "components", "color"),
+ token("b", "~color", "utilities", "background-color")
+ ]),
+ json!({"color":[{"key":"brand","value":"red"}]}),
+ );
+ let result = session.inspect("paint-brand").unwrap();
+ assert_eq!(result.match_status, MatchStatus::Matched);
+ assert_eq!(result.rules.len(), 2);
+ session.ensure_class_rules(["paint-brand"]).unwrap();
+ let text = session.snapshot().unwrap().text;
+ assert!(text.contains("@layer components{"), "{text}");
+ assert!(text.contains("@layer utilities{"), "{text}");
+ assert!(text.contains("background-color:var(--color-brand)"));
+}
diff --git a/crates/mastercss-language/src/document.rs b/crates/mastercss-language/src/document.rs
index 561dc2422..ddeb239e0 100644
--- a/crates/mastercss-language/src/document.rs
+++ b/crates/mastercss-language/src/document.rs
@@ -518,36 +518,7 @@ pub(crate) fn collect_css_directive_contexts(
) {
let offset = positions.byte_to_utf16(region.start).unwrap();
for directive in find_css_directive_ranges(&source[region]) {
- if directive.name == "compose" {
- if directive.block_range.is_some() || !directive.quoted_string_ranges.is_empty() {
- continue;
- }
- let Some(mut start) = positions.utf16_to_byte(offset + directive.prelude_range.start)
- else {
- continue;
- };
- let Some(mut end) = positions.utf16_to_byte(offset + directive.prelude_range.end)
- else {
- continue;
- };
- while start < end && source.as_bytes()[start].is_ascii_whitespace() {
- start += 1;
- }
- while end > start && source.as_bytes()[end - 1].is_ascii_whitespace() {
- end -= 1;
- }
- let Some(start) = positions.byte_to_utf16(start) else {
- continue;
- };
- let Some(end) = positions.byte_to_utf16(end) else {
- continue;
- };
- contexts.push(ClassListContextIr {
- start,
- end,
- unescape: Vec::new(),
- });
- } else if directive.name == "safelist" {
+ if directive.name == "safelist" {
for quoted in directive.quoted_string_ranges {
contexts.push(ClassListContextIr {
start: offset + quoted.content_range.start,
diff --git a/crates/mastercss-language/src/formatting.rs b/crates/mastercss-language/src/formatting.rs
index 2b35d0b01..ff53b9753 100644
--- a/crates/mastercss-language/src/formatting.rs
+++ b/crates/mastercss-language/src/formatting.rs
@@ -120,17 +120,6 @@ pub(crate) fn formatted_directive_prelude(
directive: &CssDirectiveRange,
) -> Option {
let prelude = source_slice(source, &directive.prelude_range)?;
- if directive.name == "compose" {
- if directive.block_range.is_some() || !directive.quoted_string_ranges.is_empty() {
- return None;
- }
- let formatted = format_class_list(prelude);
- return Some(if formatted.is_empty() {
- String::new()
- } else {
- format!(" {formatted}")
- });
- }
if directive.name == "safelist" {
let mut edits = Vec::new();
for quoted in &directive.quoted_string_ranges {
diff --git a/crates/mastercss-lexer/src/directives.rs b/crates/mastercss-lexer/src/directives.rs
index caf35fecd..6824d8793 100644
--- a/crates/mastercss-lexer/src/directives.rs
+++ b/crates/mastercss-lexer/src/directives.rs
@@ -4,7 +4,7 @@ use super::{
};
pub fn find_css_directive_ranges(source: &str) -> Vec {
- const NAMES: [&str; 19] = [
+ const NAMES: [&str; 18] = [
"master",
"settings",
"source",
@@ -19,7 +19,6 @@ pub fn find_css_directive_ranges(source: &str) -> Vec {
"components",
"utilities",
"custom-variant",
- "compose",
"variant",
"slot",
"dark",
diff --git a/crates/mastercss-lexer/src/tests.rs b/crates/mastercss-lexer/src/tests.rs
index 63bb322de..94e3ccea4 100644
--- a/crates/mastercss-lexer/src/tests.rs
+++ b/crates/mastercss-lexer/src/tests.rs
@@ -119,7 +119,7 @@ fn executes_rc87_lexer_parity_corpus() {
),
lexer_parity_case(
"rc87-0ecc38899002a5db",
- ".card { @dark { @compose fg:white; } @light { color: black; } }",
+ r###".card { @dark { color:white; } @light { color: black; } }"###,
"variants",
),
lexer_parity_case(
@@ -349,16 +349,12 @@ fn executes_rc87_lexer_parity_corpus() {
.iter()
.map(|range| range.name.as_str())
.collect::>(),
- ["compose", "variant", "compose"]
+ ["variant"]
);
assert_eq!(
- slice_utf16(&case.input, &ranges[1].prelude_range).trim(),
+ slice_utf16(&case.input, &ranges[0].prelude_range).trim(),
" {
let ranges = find_css_directive_ranges(&case.input);
@@ -367,10 +363,10 @@ fn executes_rc87_lexer_parity_corpus() {
.iter()
.map(|range| range.name.as_str())
.collect::>(),
- ["variant", "compose", "variant"]
+ ["variant", "variant"]
);
assert!(slice_utf16(&case.input, &ranges[0].range).starts_with("@dark"));
- assert!(slice_utf16(&case.input, &ranges[2].range).starts_with("@light"));
+ assert!(slice_utf16(&case.input, &ranges[1].range).starts_with("@light"));
}
"rc87-bf007c1edf054a11" => {
let ranges = find_css_directive_ranges(&case.input);
@@ -390,11 +386,7 @@ fn executes_rc87_lexer_parity_corpus() {
.iter()
.map(|range| range.name.as_str())
.collect::>(),
- ["components", "compose"]
- );
- assert_eq!(
- slice_utf16(&case.input, &ranges[1].prelude_range).trim(),
- "block"
+ ["components"]
);
}
"rc87-2f3cc1f8149e5aac" => {
diff --git a/crates/mastercss-lint/src/class_list.rs b/crates/mastercss-lint/src/class_list.rs
index 2aa3d6740..548f57481 100644
--- a/crates/mastercss-lint/src/class_list.rs
+++ b/crates/mastercss-lint/src/class_list.rs
@@ -1,7 +1,6 @@
use crate::{
- CanonicalClassGroupSuggestionIr, CanonicalClassSuggestionIr, CanonicalComposeDirectiveIr,
- CanonicalComposeSuggestionKind, LintBatchIr, LintClassListIr, LintDiagnosticIr, LintEditIr,
- LintEditScope, RawValueCandidateIr, RawValuePolicy,
+ CanonicalClassGroupSuggestionIr, CanonicalClassSuggestionIr, LintBatchIr, LintClassListIr,
+ LintDiagnosticIr, LintEditIr, LintEditScope, RawValueCandidateIr, RawValuePolicy,
};
use mastercss_lexer::utf16_len;
use mastercss_schema::{LINT_BATCH_VERSION, SourceRange};
@@ -591,75 +590,6 @@ pub(crate) fn add_canonical_class_diagnostics(
result.diagnostics.extend(diagnostics);
}
-pub(crate) fn add_canonical_compose_diagnostics(
- result: &mut LintClassListIr,
- class_list: &str,
- class_names: &[String],
- compose: &CanonicalComposeDirectiveIr,
-) {
- let items = parse_class_list(class_list, class_names);
- let fix = compose.replacement.as_ref().map(|text| LintEditIr {
- range: SourceRange {
- start: 0,
- end: utf16_len(class_list),
- },
- text: text.clone(),
- scope: LintEditScope::Directive,
- });
- for suggestion in &compose.suggestions {
- let range = suggestion
- .class_names
- .first()
- .and_then(|class_name| find_class_range(&items, class_name))
- .unwrap_or(SourceRange {
- start: 0,
- end: utf16_len(class_list),
- });
- let (code, message) = match suggestion.kind {
- CanonicalComposeSuggestionKind::Class => (
- "prefer-canonical-class",
- canonical_message(&suggestion.actual, &suggestion.recommended),
- ),
- CanonicalComposeSuggestionKind::NativeDeclaration => (
- "prefer-native-declaration",
- format!(
- "Use CSS declaration `{}` instead of class `{}`.",
- suggestion.recommended.replace('`', "\\`"),
- suggestion.actual.replace('`', "\\`")
- ),
- ),
- CanonicalComposeSuggestionKind::VariantBlock => (
- "prefer-variant-block",
- format!(
- "Move class `{}` into the canonical @compose block.",
- suggestion.actual.replace('`', "\\`")
- ),
- ),
- };
- result.diagnostics.push(LintDiagnosticIr {
- rule_id: "prefer-canonical-classes".into(),
- code: code.into(),
- message,
- range,
- data: serde_json::Map::from_iter([
- (
- "actual".into(),
- serde_json::Value::String(suggestion.actual.clone()),
- ),
- (
- "recommended".into(),
- serde_json::Value::String(suggestion.recommended.clone()),
- ),
- (
- "kind".into(),
- serde_json::to_value(suggestion.kind).unwrap_or_default(),
- ),
- ]),
- fix: fix.clone(),
- });
- }
-}
-
fn sort_class_list(items: &[ClassListItem], sorted_class_names: &[String]) -> String {
let mut raw_queues = HashMap::>::new();
for item in items {
diff --git a/crates/mastercss-lint/src/class_list/tests.rs b/crates/mastercss-lint/src/class_list/tests.rs
index aa71be8a9..e3d7af256 100644
--- a/crates/mastercss-lint/src/class_list/tests.rs
+++ b/crates/mastercss-lint/src/class_list/tests.rs
@@ -1,9 +1,5 @@
-use super::{
- CanonicalComposeDirectiveIr, CanonicalComposeSuggestionKind, ClassListPolicy,
- LINT_BATCH_VERSION, LintBatchIr, LintClassListIr, SourceRange,
- add_canonical_compose_diagnostics, create_class_list_ir,
-};
-use crate::{CanonicalComposeSuggestionIr, ClassConflictIr, PartialClassConflictIr};
+use super::{ClassListPolicy, LintBatchIr, SourceRange, create_class_list_ir};
+use crate::{ClassConflictIr, PartialClassConflictIr};
fn analysis() -> LintBatchIr {
LintBatchIr {
@@ -122,51 +118,3 @@ fn creates_invalid_and_unknown_class_diagnostics() {
assert_eq!(unknown[0].range, SourceRange { start: 22, end: 24 });
assert_eq!(unknown[1].range, SourceRange { start: 25, end: 32 });
}
-
-#[test]
-fn formats_canonical_compose_class_names_as_code_spans() {
- let mut result = LintClassListIr {
- version: LINT_BATCH_VERSION,
- analysis: analysis(),
- diagnostics: Vec::new(),
- sort_edit: None,
- conflict_range: None,
- conflict_edit: None,
- };
- add_canonical_compose_diagnostics(
- &mut result,
- "contain:content bg:blue-60:hover@sm",
- &["contain:content".into(), "bg:blue-60:hover@sm".into()],
- &CanonicalComposeDirectiveIr {
- version: LINT_BATCH_VERSION,
- suggestions: vec![
- CanonicalComposeSuggestionIr {
- actual: "contain:content".into(),
- recommended: "contain: content".into(),
- class_names: vec!["contain:content".into()],
- kind: CanonicalComposeSuggestionKind::NativeDeclaration,
- },
- CanonicalComposeSuggestionIr {
- actual: "bg:blue-60:hover@sm".into(),
- recommended: "&:hover { @variant sm { @compose bg:blue-60; } }".into(),
- class_names: vec!["bg:blue-60:hover@sm".into()],
- kind: CanonicalComposeSuggestionKind::VariantBlock,
- },
- ],
- structural_change: Some(true),
- replacement: None,
- },
- );
-
- assert_eq!(
- result
- .diagnostics
- .iter()
- .map(|diagnostic| diagnostic.message.as_str())
- .collect::>(),
- [
- "Use CSS declaration `contain: content` instead of class `contain:content`.",
- "Move class `bg:blue-60:hover@sm` into the canonical @compose block.",
- ]
- );
-}
diff --git a/crates/mastercss-lint/src/compose.rs b/crates/mastercss-lint/src/compose.rs
deleted file mode 100644
index 88ad2822f..000000000
--- a/crates/mastercss-lint/src/compose.rs
+++ /dev/null
@@ -1,247 +0,0 @@
-use super::{
- COMPOSITION_RECIPES, CanonicalComposeSuggestionIr, CanonicalComposeSuggestionKind,
- CanonicalGroupEntry, ComposeBucket, ComposeNativeDeclaration, CompositionRecipe, HashMap,
- HashSet, split_top_level,
-};
-
-pub(crate) fn replace_first_compose_class(
- class_names: &mut [String],
- source: &str,
- replacement: &str,
-) {
- if let Some(class_name) = class_names
- .iter_mut()
- .find(|class_name| *class_name == source)
- {
- *class_name = replacement.to_owned();
- }
-}
-
-pub(crate) fn remove_first_compose_class(class_names: &mut Vec, source: &str) {
- if let Some(index) = class_names
- .iter()
- .position(|class_name| class_name == source)
- {
- class_names.remove(index);
- }
-}
-
-pub(crate) fn replace_compose_class_group(
- class_names: &mut Vec,
- sources: &[String],
- replacement: &str,
-) {
- let Some((first, remaining)) = sources.split_first() else {
- return;
- };
- replace_first_compose_class(class_names, first, replacement);
- for source in remaining {
- remove_first_compose_class(class_names, source);
- }
-}
-
-pub(crate) fn is_safe_compose_variant_token(token: &str) -> bool {
- if token.is_empty() || (!token.starts_with(':') && !token.starts_with('@')) {
- return false;
- }
- token
- .split('@')
- .skip(1)
- .all(|segment| !segment.is_empty() && !segment.contains(':'))
-}
-
-pub(crate) fn compose_variant_keyword(condition: &str) -> String {
- let token = condition.strip_prefix('@').unwrap_or(condition);
- if matches!(token, "dark" | "light") {
- format!("@{token}")
- } else {
- format!("@variant {token}")
- }
-}
-
-pub(crate) fn compose_declaration_text(declaration: &ComposeNativeDeclaration) -> String {
- format!(
- "{}: {}{};",
- declaration.property,
- declaration.value,
- if declaration.important {
- " !important"
- } else {
- ""
- }
- )
-}
-
-pub(crate) fn compose_block_text(header: &str, body: &str, indent: &str) -> String {
- if !body.contains('\n') {
- return format!("{header} {{ {body} }}");
- }
- format!(
- "{header} {{\n{}\n{indent}}}",
- body.lines()
- .map(|line| format!("{indent} {line}"))
- .collect::>()
- .join("\n")
- )
-}
-
-pub(crate) fn compose_variant_condition_block_text(
- condition: &str,
- bucket: &ComposeBucket,
- indent: &str,
-) -> String {
- compose_block_text(
- &compose_variant_keyword(condition),
- &serialize_compose_bucket(bucket, &format!("{indent} ")),
- indent,
- )
-}
-
-pub(crate) fn compose_variant_block_text(
- token: &str,
- bucket: &ComposeBucket,
- indent: &str,
-) -> String {
- let parts = split_top_level(token, '@');
- let selector = parts.first().copied().unwrap_or_default();
- let condition = parts.iter().skip(1).copied().collect::>().join("@");
- if !selector.is_empty() {
- let selector_header = if selector.starts_with('&') {
- selector.to_owned()
- } else {
- format!("&{selector}")
- };
- let body = if condition.is_empty() {
- serialize_compose_bucket(bucket, &format!("{indent} "))
- } else {
- compose_variant_condition_block_text(&condition, bucket, &format!("{indent} "))
- };
- compose_block_text(&selector_header, &body, indent)
- } else {
- compose_variant_condition_block_text(
- if condition.is_empty() {
- token
- } else {
- &condition
- },
- bucket,
- indent,
- )
- }
-}
-
-pub(crate) fn serialize_compose_bucket(bucket: &ComposeBucket, indent: &str) -> String {
- let mut lines = Vec::new();
- if !bucket.classes.is_empty() {
- lines.push(format!("@compose {};", bucket.classes.join(" ")));
- }
- lines.extend(bucket.declarations.iter().map(compose_declaration_text));
- lines.extend(
- bucket
- .variants
- .iter()
- .map(|(token, bucket)| compose_variant_block_text(token, bucket, indent)),
- );
- lines.join("\n")
-}
-
-pub(crate) fn has_duplicate_compose_declaration_properties(bucket: &ComposeBucket) -> bool {
- let mut properties = HashSet::new();
- if bucket
- .declarations
- .iter()
- .any(|declaration| !properties.insert(&declaration.property))
- {
- return true;
- }
- bucket
- .variants
- .iter()
- .any(|(_, bucket)| has_duplicate_compose_declaration_properties(bucket))
-}
-
-pub(crate) fn process_compose_leaf(
- bucket: &mut ComposeBucket,
- class_name: &str,
- declaration: Option,
- report_native_declaration: bool,
- suggestions: &mut Vec,
-) -> bool {
- let Some(declaration) = declaration else {
- bucket.classes.push(class_name.to_owned());
- return false;
- };
- if report_native_declaration {
- let recommended = compose_declaration_text(&declaration)
- .strip_suffix(';')
- .unwrap_or_default()
- .to_owned();
- suggestions.push(CanonicalComposeSuggestionIr {
- actual: class_name.to_owned(),
- recommended,
- class_names: vec![class_name.to_owned()],
- kind: CanonicalComposeSuggestionKind::NativeDeclaration,
- });
- }
- bucket.declarations.push(declaration);
- true
-}
-
-pub(crate) fn matching_composition_recipe(
- left: &CanonicalGroupEntry,
- right: &CanonicalGroupEntry,
-) -> Option {
- COMPOSITION_RECIPES.iter().copied().find(|recipe| {
- (left.property == recipe.properties[0] && right.property == recipe.properties[1])
- || (left.property == recipe.properties[1] && right.property == recipe.properties[0])
- })
-}
-
-pub(crate) fn merge_group_declarations(
- left: &CanonicalGroupEntry,
- right: &CanonicalGroupEntry,
-) -> Option> {
- let mut merged = Vec::new();
- for (property, value) in left.declarations.iter().chain(&right.declarations) {
- if let Some((_, existing)) = merged
- .iter()
- .find(|(existing_property, _)| existing_property == property)
- {
- if existing != value {
- return None;
- }
- continue;
- }
- merged.push((property.clone(), value.clone()));
- }
- Some(merged)
-}
-
-pub(crate) fn normalize_composition_declarations(
- declarations: &[(String, String)],
- recipe: CompositionRecipe,
-) -> Vec<(String, String)> {
- let mut normalized = Vec::new();
- for (property, value) in declarations {
- if let Some((equivalent, properties)) = recipe.equivalent_property
- && property == equivalent
- {
- normalized.extend(
- properties
- .into_iter()
- .map(|property| (property.to_owned(), value.clone())),
- );
- } else {
- normalized.push((property.clone(), value.clone()));
- }
- }
- normalized.sort();
- normalized
-}
-
-pub(crate) fn push_index_value(map: &mut HashMap>, key: &str, value: &str) {
- let values = map.entry(key.to_owned()).or_default();
- if !values.iter().any(|existing| existing == value) {
- values.push(value.to_owned());
- }
-}
diff --git a/crates/mastercss-lint/src/composition.rs b/crates/mastercss-lint/src/composition.rs
new file mode 100644
index 000000000..bd442be75
--- /dev/null
+++ b/crates/mastercss-lint/src/composition.rs
@@ -0,0 +1,60 @@
+use super::{COMPOSITION_RECIPES, CanonicalGroupEntry, CompositionRecipe, HashMap};
+
+pub(crate) fn matching_composition_recipe(
+ left: &CanonicalGroupEntry,
+ right: &CanonicalGroupEntry,
+) -> Option {
+ COMPOSITION_RECIPES.iter().copied().find(|recipe| {
+ (left.property == recipe.properties[0] && right.property == recipe.properties[1])
+ || (left.property == recipe.properties[1] && right.property == recipe.properties[0])
+ })
+}
+
+pub(crate) fn merge_group_declarations(
+ left: &CanonicalGroupEntry,
+ right: &CanonicalGroupEntry,
+) -> Option> {
+ let mut merged = Vec::new();
+ for (property, value) in left.declarations.iter().chain(&right.declarations) {
+ if let Some((_, existing)) = merged
+ .iter()
+ .find(|(existing_property, _)| existing_property == property)
+ {
+ if existing != value {
+ return None;
+ }
+ continue;
+ }
+ merged.push((property.clone(), value.clone()));
+ }
+ Some(merged)
+}
+
+pub(crate) fn normalize_composition_declarations(
+ declarations: &[(String, String)],
+ recipe: CompositionRecipe,
+) -> Vec<(String, String)> {
+ let mut normalized = Vec::new();
+ for (property, value) in declarations {
+ if let Some((equivalent, properties)) = recipe.equivalent_property
+ && property == equivalent
+ {
+ normalized.extend(
+ properties
+ .into_iter()
+ .map(|property| (property.to_owned(), value.clone())),
+ );
+ } else {
+ normalized.push((property.clone(), value.clone()));
+ }
+ }
+ normalized.sort();
+ normalized
+}
+
+pub(crate) fn push_index_value(map: &mut HashMap>, key: &str, value: &str) {
+ let values = map.entry(key.to_owned()).or_default();
+ if !values.iter().any(|existing| existing == value) {
+ values.push(value.to_owned());
+ }
+}
diff --git a/crates/mastercss-lint/src/lib.rs b/crates/mastercss-lint/src/lib.rs
index 3115e6a22..cb179927f 100644
--- a/crates/mastercss-lint/src/lib.rs
+++ b/crates/mastercss-lint/src/lib.rs
@@ -150,10 +150,6 @@ pub struct CanonicalClassNameOptions {
pub prefer_composition_utilities: bool,
#[serde(default = "default_true")]
pub prefer_condition_order: bool,
- #[serde(default = "default_true")]
- pub prefer_native_declarations_in_compose: bool,
- #[serde(default = "default_true")]
- pub prefer_variant_blocks_in_compose: bool,
}
impl Default for CanonicalClassNameOptions {
@@ -163,8 +159,6 @@ impl Default for CanonicalClassNameOptions {
prefer_property_aliases: true,
prefer_composition_utilities: true,
prefer_condition_order: true,
- prefer_native_declarations_in_compose: true,
- prefer_variant_blocks_in_compose: true,
}
}
}
@@ -197,34 +191,6 @@ pub struct CanonicalClassGroupSuggestionsIr {
pub suggestions: Vec,
}
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
-#[serde(rename_all = "kebab-case")]
-pub enum CanonicalComposeSuggestionKind {
- Class,
- NativeDeclaration,
- VariantBlock,
-}
-
-#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
-#[serde(rename_all = "camelCase")]
-pub struct CanonicalComposeSuggestionIr {
- pub actual: String,
- pub recommended: String,
- pub class_names: Vec,
- pub kind: CanonicalComposeSuggestionKind,
-}
-
-#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
-#[serde(rename_all = "camelCase")]
-pub struct CanonicalComposeDirectiveIr {
- pub version: u32,
- pub suggestions: Vec,
- #[serde(skip_serializing_if = "Option::is_none")]
- pub structural_change: Option,
- #[serde(skip_serializing_if = "Option::is_none")]
- pub replacement: Option,
-}
-
#[derive(Debug, Clone, Default)]
pub struct RawValuePolicy {
pub allow_raw_values: bool,
@@ -259,7 +225,6 @@ pub struct LintClassListPolicy<'a> {
pub disallow_unknown_class: bool,
pub raw_value_policy: Option<&'a RawValuePolicy>,
pub canonical_options: Option<&'a CanonicalClassNameOptions>,
- pub compose_directive: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
@@ -358,20 +323,6 @@ const COMPOSITION_RECIPES: [CompositionRecipe; 7] = [
},
];
-#[derive(Debug, Clone)]
-struct ComposeNativeDeclaration {
- property: String,
- value: String,
- important: bool,
-}
-
-#[derive(Debug, Default)]
-struct ComposeBucket {
- classes: Vec,
- declarations: Vec,
- variants: Vec<(String, ComposeBucket)>,
-}
-
const fn default_true() -> bool {
true
}
@@ -390,20 +341,18 @@ struct ClassDescriptor {
type_order: u8,
}
-mod compose;
+mod composition;
mod conflicts;
mod order;
mod partial_conflicts;
mod recommendation;
mod session;
mod session_canonical;
-mod session_compose;
+mod session_native;
-pub(crate) use compose::{
- compose_variant_block_text, has_duplicate_compose_declaration_properties,
- is_safe_compose_variant_token, matching_composition_recipe, merge_group_declarations,
- normalize_composition_declarations, process_compose_leaf, push_index_value,
- replace_compose_class_group, replace_first_compose_class, serialize_compose_bucket,
+pub(crate) use composition::{
+ matching_composition_recipe, merge_group_declarations, normalize_composition_declarations,
+ push_index_value,
};
pub(crate) use conflicts::{
collect_rule_declarations, equal_variant_scope, find_conflicts, sort_descriptors,
diff --git a/crates/mastercss-lint/src/session.rs b/crates/mastercss-lint/src/session.rs
index a68470527..4010fa0c2 100644
--- a/crates/mastercss-lint/src/session.rs
+++ b/crates/mastercss-lint/src/session.rs
@@ -1,8 +1,8 @@
use super::{
CanonicalClassGroupSuggestionsIr, CanonicalClassNameOptions, CanonicalClassSuggestionIr,
- CanonicalClassSuggestionsIr, CanonicalComposeDirectiveIr, ClassDescriptor, EngineError,
- EngineSession, HashMap, HashSet, LINT_BATCH_VERSION, LintBatchIr, LintClassListIr,
- LintClassListPolicy, LintSession, NativeDeclarationCandidateIr, RawValueCandidatesIr, Value,
+ CanonicalClassSuggestionsIr, ClassDescriptor, EngineError, EngineSession, HashSet,
+ LINT_BATCH_VERSION, LintBatchIr, LintClassListIr, LintClassListPolicy, LintSession,
+ NativeDeclarationCandidateIr, RawValueCandidatesIr, Value,
build_canonical_recommendation_index, class_list, collect_manifest_variables, find_conflicts,
find_partial_conflicts, sort_descriptors,
};
@@ -162,39 +162,15 @@ impl LintSession {
}
}
if let Some(options) = policy.canonical_options {
- if policy.compose_directive {
- let compose =
- self.canonical_compose_directive(class_names, native_support, options)?;
- if compose.structural_change == Some(true) {
- class_list::add_canonical_compose_diagnostics(
- &mut result,
- class_list,
- class_names,
- &compose,
- );
- } else {
- let groups =
- self.canonical_class_groups(class_names, native_support, options)?;
- let names = self.canonical_class_names(class_names, native_support, options)?;
- class_list::add_canonical_class_diagnostics(
- &mut result,
- class_list,
- class_names,
- &groups.suggestions,
- &names.suggestions,
- );
- }
- } else {
- let groups = self.canonical_class_groups(class_names, native_support, options)?;
- let names = self.canonical_class_names(class_names, native_support, options)?;
- class_list::add_canonical_class_diagnostics(
- &mut result,
- class_list,
- class_names,
- &groups.suggestions,
- &names.suggestions,
- );
- }
+ let groups = self.canonical_class_groups(class_names, native_support, options)?;
+ let names = self.canonical_class_names(class_names, native_support, options)?;
+ class_list::add_canonical_class_diagnostics(
+ &mut result,
+ class_list,
+ class_names,
+ &groups.suggestions,
+ &names.suggestions,
+ );
}
Ok(result)
}
@@ -279,39 +255,4 @@ impl LintSession {
}
}
}
-
- pub fn canonical_compose_directive(
- &mut self,
- class_names: &[String],
- native_support: Option<&[bool]>,
- options: &CanonicalClassNameOptions,
- ) -> Result {
- let native_candidates = self.ensure_class_rules(class_names, native_support)?;
- let mut native_declarations = HashMap::new();
- for candidate in native_candidates {
- if self.is_compose_native_declaration(&candidate)? {
- native_declarations.insert(candidate.class_name.clone(), candidate);
- }
- }
- for class_name in class_names {
- if !native_declarations.contains_key(class_name)
- && let Some(candidate) = self.known_native_declaration(class_name)?
- {
- native_declarations.insert(class_name.clone(), candidate);
- }
- }
- let result =
- self.suggest_canonical_compose_directive(class_names, options, native_declarations);
- let cleanup = self.engine.delete_class_rules(class_names);
- match result {
- Ok(result) => {
- cleanup?;
- Ok(result)
- }
- Err(error) => {
- let _ = cleanup;
- Err(error)
- }
- }
- }
}
diff --git a/crates/mastercss-lint/src/session_compose.rs b/crates/mastercss-lint/src/session_compose.rs
deleted file mode 100644
index 8c59813ce..000000000
--- a/crates/mastercss-lint/src/session_compose.rs
+++ /dev/null
@@ -1,244 +0,0 @@
-use super::{
- CanonicalClassNameOptions, CanonicalComposeDirectiveIr, CanonicalComposeSuggestionIr,
- CanonicalComposeSuggestionKind, ComposeBucket, ComposeNativeDeclaration, EngineError, HashMap,
- HashSet, LINT_BATCH_VERSION, LintSession, NativeDeclarationCandidateIr, UtilityLayerName,
- canonical_class_parts, collect_rule_declarations, compose_variant_block_text,
- has_duplicate_compose_declaration_properties, is_safe_compose_variant_token,
- process_compose_leaf, replace_compose_class_group, replace_first_compose_class,
- serialize_compose_bucket,
-};
-
-impl LintSession {
- pub(crate) fn ensure_class_rules(
- &mut self,
- class_names: &[String],
- native_support: Option<&[bool]>,
- ) -> Result, EngineError> {
- let _ = native_support;
- let native_candidates = self.engine.native_declaration_candidates(class_names)?;
- self.engine.ensure_class_rules(class_names)?;
- Ok(native_candidates)
- }
-
- pub(crate) fn known_native_declaration(
- &self,
- class_name: &str,
- ) -> Result, EngineError> {
- self.compose_native_declaration(class_name)
- }
-
- pub(crate) fn is_compose_native_declaration(
- &self,
- candidate: &NativeDeclarationCandidateIr,
- ) -> Result {
- Ok(self
- .compose_native_declaration(&candidate.class_name)?
- .is_some_and(|declaration| {
- declaration.property == candidate.property && declaration.value == candidate.value
- }))
- }
-
- pub(crate) fn compose_native_declaration(
- &self,
- class_name: &str,
- ) -> Result, EngineError> {
- let semantics = self.engine.inspect_class_semantics(class_name)?;
- if semantics.kind != mastercss_engine::ClassSemanticKind::Declaration
- || semantics.state_token.is_some()
- || !self.engine.class_variable_keys(class_name)?.is_empty()
- {
- return Ok(None);
- }
- let parts = canonical_class_parts(class_name, &semantics);
- let Some(source_key) = parts.key else {
- return Ok(None);
- };
- let inspection = self.engine.inspect(class_name)?;
- if inspection.rules.len() != 1 {
- return Ok(None);
- }
- let rule = &inspection.rules[0];
- if rule.utility_type != 0
- || rule.layer != UtilityLayerName::Utilities
- || !rule.nodes.is_empty()
- || !rule.variable_names.is_empty()
- {
- return Ok(None);
- }
- let declarations = collect_rule_declarations(&rule.text);
- let [(property, value)] = declarations.as_slice() else {
- return Ok(None);
- };
- if source_key != *property {
- return Ok(None);
- }
- Ok(Some(NativeDeclarationCandidateIr {
- class_name: class_name.to_owned(),
- property: property.clone(),
- value: value.clone(),
- }))
- }
-
- pub(crate) fn suggest_canonical_compose_directive(
- &self,
- class_names: &[String],
- options: &CanonicalClassNameOptions,
- mut native_declarations: HashMap,
- ) -> Result {
- let group_suggestions = self.suggest_canonical_class_groups(class_names, options)?;
- let covered_class_names = group_suggestions
- .iter()
- .flat_map(|suggestion| suggestion.class_names.iter().cloned())
- .collect::>();
- let mut canonical_class_names = class_names.to_vec();
- let mut suggestions = Vec::new();
-
- for suggestion in group_suggestions {
- replace_compose_class_group(
- &mut canonical_class_names,
- &suggestion.class_names,
- &suggestion.recommended,
- );
- suggestions.push(CanonicalComposeSuggestionIr {
- actual: suggestion.class_names.join(" "),
- recommended: suggestion.recommended,
- class_names: suggestion.class_names,
- kind: CanonicalComposeSuggestionKind::Class,
- });
- }
-
- for class_name in class_names {
- if covered_class_names.contains(class_name) {
- continue;
- }
- let Some(recommended) = self.suggest_canonical_class_name(class_name, options)? else {
- continue;
- };
- replace_first_compose_class(&mut canonical_class_names, class_name, &recommended);
- if let Some(declaration) = native_declarations.get(class_name).cloned() {
- let source_semantics = self.engine.inspect_class_semantics(class_name)?;
- let recommended_semantics = self.engine.inspect_class_semantics(&recommended)?;
- let source_parts = canonical_class_parts(class_name, &source_semantics);
- let recommended_parts = canonical_class_parts(&recommended, &recommended_semantics);
- if source_parts.base == recommended_parts.base {
- native_declarations.insert(recommended.clone(), declaration);
- }
- }
- suggestions.push(CanonicalComposeSuggestionIr {
- actual: class_name.clone(),
- recommended,
- class_names: vec![class_name.clone()],
- kind: CanonicalComposeSuggestionKind::Class,
- });
- }
-
- let canonical_recommendations = suggestions
- .iter()
- .map(|suggestion| suggestion.recommended.clone())
- .collect::>();
- let mut bucket = ComposeBucket::default();
- let mut structural_change = false;
- for class_name in canonical_class_names {
- structural_change |= self.process_compose_class(
- &mut bucket,
- &class_name,
- options,
- &native_declarations,
- &canonical_recommendations,
- &mut suggestions,
- )?;
- }
-
- let replacement = serialize_compose_bucket(&bucket, "");
- Ok(CanonicalComposeDirectiveIr {
- version: LINT_BATCH_VERSION,
- suggestions,
- structural_change: structural_change.then_some(true),
- replacement: (structural_change
- && !replacement.is_empty()
- && !has_duplicate_compose_declaration_properties(&bucket))
- .then_some(replacement),
- })
- }
-
- pub(crate) fn process_compose_class(
- &self,
- bucket: &mut ComposeBucket,
- class_name: &str,
- options: &CanonicalClassNameOptions,
- native_declarations: &HashMap,
- canonical_recommendations: &HashSet,
- suggestions: &mut Vec,
- ) -> Result {
- let semantics = self.engine.inspect_class_semantics(class_name)?;
- if options.prefer_variant_blocks_in_compose
- && let Some(state_token) = semantics.state_token.as_deref()
- && is_safe_compose_variant_token(state_token)
- {
- let parts = canonical_class_parts(class_name, &semantics);
- let base_class_name = format!(
- "{}{}",
- parts.base,
- if semantics.important { "!" } else { "" }
- );
- let variant_index = bucket
- .variants
- .iter()
- .position(|(token, _)| token == state_token)
- .unwrap_or_else(|| {
- bucket
- .variants
- .push((state_token.to_owned(), ComposeBucket::default()));
- bucket.variants.len() - 1
- });
- let native_declaration =
- native_declarations
- .get(class_name)
- .map(|candidate| ComposeNativeDeclaration {
- property: candidate.property.clone(),
- value: candidate.value.clone(),
- important: semantics.important,
- });
- process_compose_leaf(
- &mut bucket.variants[variant_index].1,
- &base_class_name,
- native_declaration,
- false,
- suggestions,
- );
- if !canonical_recommendations.contains(class_name) {
- suggestions.push(CanonicalComposeSuggestionIr {
- actual: class_name.to_owned(),
- recommended: compose_variant_block_text(
- state_token,
- &bucket.variants[variant_index].1,
- "",
- ),
- class_names: vec![class_name.to_owned()],
- kind: CanonicalComposeSuggestionKind::VariantBlock,
- });
- }
- return Ok(true);
- }
-
- let native_declaration =
- if options.prefer_native_declarations_in_compose && semantics.state_token.is_none() {
- native_declarations
- .get(class_name)
- .map(|candidate| ComposeNativeDeclaration {
- property: candidate.property.clone(),
- value: candidate.value.clone(),
- important: semantics.important,
- })
- } else {
- None
- };
- Ok(process_compose_leaf(
- bucket,
- class_name,
- native_declaration,
- true,
- suggestions,
- ))
- }
-}
diff --git a/crates/mastercss-lint/src/session_native.rs b/crates/mastercss-lint/src/session_native.rs
new file mode 100644
index 000000000..1c795fd96
--- /dev/null
+++ b/crates/mastercss-lint/src/session_native.rs
@@ -0,0 +1,14 @@
+use super::{EngineError, LintSession, NativeDeclarationCandidateIr};
+
+impl LintSession {
+ pub(crate) fn ensure_class_rules(
+ &mut self,
+ class_names: &[String],
+ native_support: Option<&[bool]>,
+ ) -> Result, EngineError> {
+ let _ = native_support;
+ let native_candidates = self.engine.native_declaration_candidates(class_names)?;
+ self.engine.ensure_class_rules(class_names)?;
+ Ok(native_candidates)
+ }
+}
diff --git a/crates/mastercss-lint/src/tests.rs b/crates/mastercss-lint/src/tests.rs
index e9e4404dd..b247aaafd 100644
--- a/crates/mastercss-lint/src/tests.rs
+++ b/crates/mastercss-lint/src/tests.rs
@@ -2,9 +2,8 @@ use std::collections::HashSet;
use super::{
CanonicalClassGroupSuggestionIr, CanonicalClassNameOptions, CanonicalClassSuggestionIr,
- CanonicalComposeDirectiveIr, CanonicalComposeSuggestionIr, CanonicalComposeSuggestionKind,
- EngineSession, LINT_BATCH_VERSION, LintClassListPolicy, LintSession, RawValueCandidateIr,
- RawValuePolicy, SourceRange, ValidatorBatchIr, classify_host_rule_validation,
+ EngineSession, LintClassListPolicy, LintSession, RawValueCandidateIr, RawValuePolicy,
+ SourceRange, ValidatorBatchIr, classify_host_rule_validation,
};
const DEFAULT_MANIFEST: &str = include_str!("../../../packages/preset/src/default-manifest.json");
@@ -80,7 +79,7 @@ fn sorts_and_finds_full_conflicts_without_retaining_rules() {
&HashSet::new(),
)
.unwrap();
- assert_eq!(batch.version, 1);
+ assert_eq!(batch.version, 2);
assert_eq!(
batch.sorted_class_names,
["m:2px", "m:3px", "fg:white", "unknown"]
@@ -263,93 +262,6 @@ fn suggests_canonical_composition_groups_from_engine_facts() {
}
}
-#[test]
-fn creates_structural_compose_directives_from_engine_facts() {
- let mut session = LintSession::create(DEFAULT_MANIFEST).unwrap();
- let class_names = ["text-align:center", "contain:content"].map(str::to_owned);
- let native_support = vec![
- true;
- session
- .native_declaration_candidates(&class_names)
- .unwrap()
- .len()
- ];
- assert_eq!(
- session
- .canonical_compose_directive(
- &class_names,
- Some(&native_support),
- &CanonicalClassNameOptions::default(),
- )
- .unwrap(),
- CanonicalComposeDirectiveIr {
- version: LINT_BATCH_VERSION,
- suggestions: vec![
- CanonicalComposeSuggestionIr {
- actual: "text-align:center".into(),
- recommended: "text-align: center".into(),
- class_names: vec!["text-align:center".into()],
- kind: CanonicalComposeSuggestionKind::NativeDeclaration,
- },
- CanonicalComposeSuggestionIr {
- actual: "contain:content".into(),
- recommended: "contain: content".into(),
- class_names: vec!["contain:content".into()],
- kind: CanonicalComposeSuggestionKind::NativeDeclaration,
- },
- ],
- structural_change: Some(true),
- replacement: Some("text-align: center;\ncontain: content;".into()),
- }
- );
-
- let class_names = ["bg-blue-60:hover@sm", "block@dark"].map(str::to_owned);
- let native_support = vec![
- true;
- session
- .native_declaration_candidates(&class_names)
- .unwrap()
- .len()
- ];
- let result = session
- .canonical_compose_directive(
- &class_names,
- Some(&native_support),
- &CanonicalClassNameOptions::default(),
- )
- .unwrap();
- assert_eq!(
- result.replacement.as_deref(),
- Some("&:hover { @variant sm { @compose bg-blue-60; } }\n@dark { @compose block; }")
- );
- assert_eq!(
- result
- .suggestions
- .iter()
- .map(|suggestion| suggestion.kind)
- .collect::>(),
- [
- CanonicalComposeSuggestionKind::VariantBlock,
- CanonicalComposeSuggestionKind::VariantBlock,
- ]
- );
-
- let class_names = ["contain:content!"].map(str::to_owned);
- let native_support = vec![true];
- let result = session
- .canonical_compose_directive(
- &class_names,
- Some(&native_support),
- &CanonicalClassNameOptions::default(),
- )
- .unwrap();
- assert_eq!(
- result.replacement.as_deref(),
- Some("contain: content !important;")
- );
- assert_eq!(session.engine.css_text(), "");
-}
-
#[test]
fn named_aliases_preserve_identity_and_conflicts_follow_engine_order() {
let mut session = LintSession::create(DEFAULT_MANIFEST).unwrap();
diff --git a/crates/mastercss-project/src/lib.rs b/crates/mastercss-project/src/lib.rs
index c079cb4e8..0f09ec01f 100644
--- a/crates/mastercss-project/src/lib.rs
+++ b/crates/mastercss-project/src/lib.rs
@@ -163,7 +163,14 @@ fn normalize_lexical_path(path: &Path) -> PathBuf {
}
fn normalize_path(path: &Path) -> String {
- path.to_string_lossy().replace('\\', "/")
+ let path = path.to_string_lossy().replace('\\', "/");
+ // Windows canonicalization adds a verbatim prefix. Its question mark is
+ // filesystem syntax, not a wildcard in an extraction pattern.
+ if let Some(unc) = path.strip_prefix("//?/UNC/") {
+ format!("//{unc}")
+ } else {
+ path.strip_prefix("//?/").unwrap_or(&path).to_owned()
+ }
}
fn expand_braces(pattern: &str) -> Vec {
diff --git a/crates/mastercss-project/src/manifest_graph.rs b/crates/mastercss-project/src/manifest_graph.rs
index 1a078fec5..4422379fa 100644
--- a/crates/mastercss-project/src/manifest_graph.rs
+++ b/crates/mastercss-project/src/manifest_graph.rs
@@ -126,7 +126,6 @@ pub(super) fn compile_manifest_graph_with_output(
matches!(
definition,
CssDirectiveStyleDefinition::Native { name: None, .. }
- | CssDirectiveStyleDefinition::Compose { name: None, .. }
)
})
.cloned()
diff --git a/crates/mastercss-project/src/tests.rs b/crates/mastercss-project/src/tests.rs
index 3198ad493..6a5a2c35e 100644
--- a/crates/mastercss-project/src/tests.rs
+++ b/crates/mastercss-project/src/tests.rs
@@ -20,6 +20,33 @@ fn temp_project() -> PathBuf {
path
}
+#[test]
+fn source_paths_remove_windows_verbatim_prefixes_before_glob_matching() {
+ for (input, expected) in [
+ (r"C:\project\views\*.html", "C:/project/views/*.html"),
+ (r"\\?\C:\project\views\*.html", "C:/project/views/*.html"),
+ (
+ r"\\?\UNC\server\share\views\*.html",
+ "//server/share/views/*.html",
+ ),
+ (
+ r"\\server\share\views\*.html",
+ "//server/share/views/*.html",
+ ),
+ ] {
+ let pattern = normalize_path(Path::new(input));
+ assert_eq!(pattern, expected);
+ assert_eq!(
+ source_pattern_root(&pattern),
+ PathBuf::from(expected.strip_suffix("*.html").unwrap())
+ );
+ assert!(glob_matches(
+ &pattern,
+ &expected.replace("*.html", "index.html")
+ ));
+ }
+}
+
#[test]
fn discovers_entries_and_compiles_local_imports() {
let project = temp_project();
@@ -93,10 +120,14 @@ fn excludes_generated_stylesheets_from_implicit_entries_only() {
}
#[test]
-fn lowers_compose_definitions_against_the_base_manifest() {
+fn lowers_native_variants_against_the_base_manifest() {
let project = temp_project();
let entry = project.join("entry.css");
- fs::write(&entry, "@master entry; .hidden-card { @compose hidden; }").unwrap();
+ fs::write(
+ &entry,
+ r###"@master entry; .hidden-card { @variant media(all) { display:none; } }"###,
+ )
+ .unwrap();
let base_manifest = serde_json::from_str(include_str!(
"../../../packages/preset/src/default-manifest.json"
))
diff --git a/crates/mastercss-project/tests/bug_hunt_filesystem_boundaries.rs b/crates/mastercss-project/tests/bug_hunt_filesystem_boundaries.rs
index afcecf3e8..1b45f1aa4 100644
--- a/crates/mastercss-project/tests/bug_hunt_filesystem_boundaries.rs
+++ b/crates/mastercss-project/tests/bug_hunt_filesystem_boundaries.rs
@@ -47,7 +47,7 @@ fn css(manifest: &serde_json::Value, classes: &str) -> String {
}
#[test]
-fn qualified_files_reject_global_definitions_but_keep_native_compose() {
+fn qualified_files_reject_global_definitions_but_keep_native_variants() {
for qualifier in [
"",
" layer",
@@ -63,7 +63,7 @@ fn qualified_files_reject_global_definitions_but_keep_native_compose() {
);
project.file(
"child.css",
- "@utilities{paint{color:red}}.card{@compose paint;}.ordinary{color:blue}",
+ r###"@utilities{paint{color:red}}.card{@variant media(all){color:red;}}.ordinary{color:blue}"###,
);
if !qualifier.is_empty() {
let error = load_project_manifest(&project.0, json!({"version":1,"languageVersion":3}))
@@ -72,7 +72,10 @@ fn qualified_files_reject_global_definitions_but_keep_native_compose() {
assert!(error.contains("Qualified import"), "{error}");
assert!(error.contains("child.css"), "{error}");
project.file("entry.css", &format!("@import './child.css'{qualifier};@master entry;@utilities{{paint{{color:red}}}}"));
- project.file("child.css", ".card{@compose paint;}.ordinary{color:blue}");
+ project.file(
+ "child.css",
+ ".card{@variant media(all){color:red;}}.ordinary{color:blue}",
+ );
}
let result = project.load();
assert!(
@@ -113,13 +116,13 @@ fn imported_source_patterns_belong_to_the_child_file() {
}
#[test]
-fn external_native_imports_do_not_block_manifest_and_compose() {
+fn external_native_imports_do_not_block_manifest_and_variants() {
let project = Project::new();
project.file(
"entry.css",
"@import './child.css' layer(cards) screen;@master entry;@utilities{paint{color:red}}",
);
- project.file("child.css", "@import 'https://invalid.invalid/remote.css';.card{@compose paint;}body{background:url('./missing.png')}");
+ project.file("child.css", "@import 'https://invalid.invalid/remote.css';.card{@variant media(all){color:red;}}body{background:url('./missing.png')}");
let result = project.load();
assert!(css(&result.manifest, "paint").contains(".paint{color:red}"));
assert!(result.css.contains(".card{color:red}"), "{}", result.css);
@@ -128,17 +131,20 @@ fn external_native_imports_do_not_block_manifest_and_compose() {
}
#[test]
-fn references_resolve_compose_without_exporting_reference_definitions_or_sources() {
+fn references_resolve_variants_without_exporting_reference_definitions_or_sources() {
let project = Project::new();
- project.file("entry.css", "@master entry;@reference './tokens.css';@utilities{button{@compose paint;}}.card{@compose paint;}");
+ project.file("entry.css", "@master entry;@reference './tokens.css';@utilities{button{@variant paint{color:red;}}}.card{@variant paint{color:red;}}");
let tokens = project.file(
"tokens.css",
- "@source './ignored/*.html';@utilities{paint{color:red}}",
+ "@source './ignored/*.html';@custom-variant paint{@media print{@slot;}}@utilities{paint{color:blue}}",
);
project.file("ignored/view.html", "ignored");
let result = project.load();
let actual = css(&result.manifest, "button paint");
- assert!(actual.contains(".button{color:red}"), "{actual}");
+ assert!(
+ actual.contains("@media print{.button{color:red}}"),
+ "{actual}"
+ );
assert!(!actual.contains(".paint{"));
assert!(result.css.contains(".card{color:red}"), "{}", result.css);
assert!(result.dependencies.contains(&tokens));
diff --git a/crates/mastercss-project/tests/bug_hunt_manifest_graphs.rs b/crates/mastercss-project/tests/bug_hunt_manifest_graphs.rs
index b9167926f..c38a40e51 100644
--- a/crates/mastercss-project/tests/bug_hunt_manifest_graphs.rs
+++ b/crates/mastercss-project/tests/bug_hunt_manifest_graphs.rs
@@ -72,7 +72,7 @@ fn css(manifest: &serde_json::Value, classes: &str) -> String {
#[test]
fn qualified_external_imports_do_not_block_manifest_or_source_plan_compilation() {
let project = Project::new();
- let entry_source = "@import './styles/child.css' layer(outer) supports(display:grid) screen;@master entry;@utilities{paint{color:red}}@utilities{button{@compose paint;}}";
+ let entry_source = r###"@import './styles/child.css' layer(outer) supports(display:grid) screen;@master entry;@utilities{paint{color:red}}@utilities{button{color:red;}}"###;
let child_source = "@import 'https://invalid.invalid/external.css';@source './views/*.html';.native{background:url('./missing.png')}";
let entry = project.file("entry.css", entry_source);
let child = project.file("styles/child.css", child_source);
@@ -100,8 +100,8 @@ fn qualified_external_imports_do_not_block_manifest_or_source_plan_compilation()
fn references_resolve_managed_definitions_without_importing_their_sources_or_classes() {
let project = Project::new();
let entry_source =
- "@master entry;@reference './tokens.css';@utilities{button{@compose paint;}}";
- let reference_source = "@import 'https://invalid.invalid/external.css';@source './ignored/*.html';@utilities{paint{color:red}}.reference-native{color:blue}";
+ "@master entry;@reference './tokens.css';@utilities{button{@variant paint{color:red;}}}";
+ let reference_source = "@import 'https://invalid.invalid/external.css';@source './ignored/*.html';@custom-variant paint{@media print{@slot;}}@utilities{paint{color:blue}}.reference-native{color:blue}";
let entry = project.file("entry.css", entry_source);
let reference = project.file("tokens.css", reference_source);
project.file("ignored/view.html", "ignored");
@@ -116,7 +116,7 @@ fn references_resolve_managed_definitions_without_importing_their_sources_or_cla
)
.unwrap();
let generated = css(&result.manifest, "button paint");
- assert!(generated.contains(".button{color:red}"));
+ assert!(generated.contains("@media print{.button{color:red}}"));
assert!(!generated.contains(".paint{"));
assert!(result.source_plan.files.is_empty());
assert!(
diff --git a/crates/mastercss-project/tests/bug_hunt_ordered_output.rs b/crates/mastercss-project/tests/bug_hunt_ordered_output.rs
index 1b12350fe..6a9c09040 100644
--- a/crates/mastercss-project/tests/bug_hunt_ordered_output.rs
+++ b/crates/mastercss-project/tests/bug_hunt_ordered_output.rs
@@ -17,7 +17,7 @@ fn flat_project_css_uses_ordered_output_while_preserving_metadata_views() {
));
fs::create_dir_all(&root).unwrap();
let entry = root.join("entry.css");
- fs::write(&entry, "@master entry;@utilities{paint{padding:2rem!important}low{padding:1rem!important}}@layer{.a{@compose paint;}.b{@compose low;}}").unwrap();
+ fs::write(&entry, r###"@master entry;@utilities{paint{padding:2rem!important}low{padding:1rem!important}}@layer{.a{@variant media(all){padding:2rem!important;}}.b{@variant media(all){padding:1rem!important;}}}"###).unwrap();
let result = load_project_manifest_entries(
&[entry],
json!({"version":1,"languageVersion":3,"utilities":[]}),
diff --git a/crates/mastercss-schema/src/directives.rs b/crates/mastercss-schema/src/directives.rs
index 9c61179d4..3997503eb 100644
--- a/crates/mastercss-schema/src/directives.rs
+++ b/crates/mastercss-schema/src/directives.rs
@@ -92,25 +92,6 @@ pub enum CssDirectiveStyleDefinition {
#[serde(skip_serializing_if = "Option::is_none")]
name: Option,
},
- Compose {
- order: u32,
- class_name: String,
- selector: String,
- #[serde(skip_serializing_if = "Option::is_none")]
- source: Option,
- #[serde(skip_serializing_if = "Option::is_none")]
- directive_source: Option,
- #[serde(skip_serializing_if = "Option::is_none")]
- selector_source: Option,
- #[serde(skip_serializing_if = "Option::is_none")]
- conditions: Option>,
- #[serde(skip_serializing_if = "Option::is_none")]
- condition_path: Option>,
- #[serde(skip_serializing_if = "Option::is_none")]
- layer: Option,
- #[serde(skip_serializing_if = "Option::is_none")]
- name: Option,
- },
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
@@ -128,16 +109,10 @@ pub enum ErrorCode {
CssParseError,
CssPrintError,
CssDirectiveError,
- #[serde(rename = "invalid-compose-class")]
- InvalidComposeClass,
- #[serde(rename = "invalid-compose-layer")]
- InvalidComposeLayer,
#[serde(rename = "removed-managed-directive")]
RemovedManagedDirective,
- #[serde(rename = "compose-quoted-syntax")]
- ComposeQuotedSyntax,
- #[serde(rename = "compose-group-syntax")]
- ComposeGroupSyntax,
+ #[serde(rename = "removed-compose-directive")]
+ RemovedComposeDirective,
CssImportError,
SessionDisposed,
InvalidInput,
@@ -145,6 +120,7 @@ pub enum ErrorCode {
SourceParseError,
UnknownCondition,
MasterQueryRequiresCss,
+ RemovedPresetUtility,
UndefinedMode,
UtilityNameConflict,
AmbiguousToken,
@@ -153,7 +129,7 @@ pub enum ErrorCode {
}
impl ErrorCode {
- pub const ALL: [Self; 29] = [
+ pub const ALL: [Self; 27] = [
Self::InvalidManifest,
Self::UnsupportedManifestVersion,
Self::InvalidHydrationManifest,
@@ -166,11 +142,8 @@ impl ErrorCode {
Self::CssParseError,
Self::CssPrintError,
Self::CssDirectiveError,
- Self::InvalidComposeClass,
- Self::InvalidComposeLayer,
Self::RemovedManagedDirective,
- Self::ComposeQuotedSyntax,
- Self::ComposeGroupSyntax,
+ Self::RemovedComposeDirective,
Self::CssImportError,
Self::SessionDisposed,
Self::InvalidInput,
@@ -178,6 +151,7 @@ impl ErrorCode {
Self::SourceParseError,
Self::UnknownCondition,
Self::MasterQueryRequiresCss,
+ Self::RemovedPresetUtility,
Self::UndefinedMode,
Self::UtilityNameConflict,
Self::AmbiguousToken,
@@ -199,17 +173,15 @@ impl ErrorCode {
Self::CssParseError => "CSS_PARSE_ERROR",
Self::CssPrintError => "CSS_PRINT_ERROR",
Self::CssDirectiveError => "CSS_DIRECTIVE_ERROR",
- Self::InvalidComposeClass => "invalid-compose-class",
- Self::InvalidComposeLayer => "invalid-compose-layer",
Self::RemovedManagedDirective => "removed-managed-directive",
- Self::ComposeQuotedSyntax => "compose-quoted-syntax",
- Self::ComposeGroupSyntax => "compose-group-syntax",
+ Self::RemovedComposeDirective => "removed-compose-directive",
Self::CssImportError => "CSS_IMPORT_ERROR",
Self::SessionDisposed => "SESSION_DISPOSED",
Self::InvalidInput => "INVALID_INPUT",
Self::ClassSyntaxError => "CLASS_SYNTAX_ERROR",
Self::SourceParseError => "SOURCE_PARSE_ERROR",
Self::UnknownCondition => "UNKNOWN_CONDITION",
+ Self::RemovedPresetUtility => "REMOVED_PRESET_UTILITY",
Self::MasterQueryRequiresCss => "MASTER_QUERY_REQUIRES_CSS",
Self::UndefinedMode => "UNDEFINED_MODE",
Self::UtilityNameConflict => "UTILITY_NAME_CONFLICT",
@@ -440,23 +412,6 @@ fn css_blocklist_pattern_matches(source: &str, value: &str) -> bool {
}
}
-/// Build-time composition inspection; deliberately absent from Manifest v1.
-#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct CssCompositionTrace {
- pub order: u32,
- pub classes: Vec,
- /// Resolved definition identities used while attaching compiler sources.
- #[serde(skip)]
- pub resolved_utilities: Vec,
- #[serde(skip_serializing_if = "Option::is_none")]
- pub source: Option,
- pub definition_sources: Vec,
- pub css: String,
- pub variable_names: Vec,
- pub animation_names: Vec,
-}
-
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CssUtilitySource {
diff --git a/crates/mastercss-schema/src/lib.rs b/crates/mastercss-schema/src/lib.rs
index 5fa9becd2..a917b4a89 100644
--- a/crates/mastercss-schema/src/lib.rs
+++ b/crates/mastercss-schema/src/lib.rs
@@ -17,11 +17,11 @@ use thiserror::Error;
pub const MANIFEST_VERSION: u32 = 1;
pub const LANGUAGE_VERSION: u32 = 3;
pub const HYDRATION_MANIFEST_VERSION: u32 = 1;
-pub const BINDING_ABI_VERSION: u32 = 12;
+pub const BINDING_ABI_VERSION: u32 = 14;
pub const ENGINE_TRANSITION_VERSION: u32 = 1;
pub const VALIDATOR_BATCH_VERSION: u32 = 3;
-pub const DIAGNOSTICS_REPORT_VERSION: u32 = 3;
-pub const LINT_BATCH_VERSION: u32 = 1;
+pub const DIAGNOSTICS_REPORT_VERSION: u32 = 4;
+pub const LINT_BATCH_VERSION: u32 = 2;
pub const LANGUAGE_BATCH_VERSION: u32 = 4;
pub const LEXER_BATCH_VERSION: u32 = 1;
pub const SOURCE_BATCH_VERSION: u32 = 2;
diff --git a/crates/xtask/src/parity.rs b/crates/xtask/src/parity.rs
index 523ce1da1..a60bc6a62 100644
--- a/crates/xtask/src/parity.rs
+++ b/crates/xtask/src/parity.rs
@@ -65,16 +65,36 @@ pub(crate) fn validate_semantic_parity_corpus(
|| historical
.parser_cases
.iter()
- .map(|case| (&case.id, &case.input, &case.expected_canonical))
+ .map(|case| {
+ // The frozen oracle retains compose; the current lexer no longer
+ // recognizes that removed directive as a Master CSS node.
+ let canonical = if case.kind == "lexer" {
+ case.expected_canonical
+ .split('|')
+ .filter(|name| *name != "compose")
+ .collect::>()
+ .join("|")
+ } else {
+ case.expected_canonical.clone()
+ };
+ (&case.id, &case.kind, &case.input, canonical)
+ })
.collect::>()
!= corpus
.parser_cases
.iter()
- .map(|case| (&case.id, &case.input, &case.expected_canonical))
+ .map(|case| {
+ (
+ &case.id,
+ &case.kind,
+ &case.input,
+ case.expected_canonical.clone(),
+ )
+ })
.collect::>()
{
return Err(
- "V2 language corpus must retain every historical case and unchanged parser evidence."
+ "V2 language corpus must retain every historical case and parser evidence, except removed compose lexer nodes."
.into(),
);
}
diff --git a/crates/xtask/templates/rust-contract.ts b/crates/xtask/templates/rust-contract.ts
index d971d0e1d..f01d8f467 100644
--- a/crates/xtask/templates/rust-contract.ts
+++ b/crates/xtask/templates/rust-contract.ts
@@ -15,7 +15,7 @@ export const MASTER_CSS_SOURCE_BATCH_VERSION = {{MASTER_CSS_SOURCE_BATCH_VERSION
export type MasterCSSBindingSurface = 'native' | 'runtime' | 'compiler' | 'tooling' | 'cli'
export interface MasterCSSRCMigrationRequest {
- readonly from: 'rc-legacy' | 'rc-named' | 'rc-native' | 'rc-managed' | 'rc-utilities'
+ readonly from: 'rc-legacy' | 'rc-named' | 'rc-native' | 'rc-managed' | 'rc-utilities' | 'rc-sizing'
readonly sourceVersion: string
readonly manifest: Readonly>
readonly targetManifest: import('@master/css-schema/manifest').MasterCSSManifest
@@ -34,7 +34,7 @@ export interface MasterCSSRCClassMigration {
export interface MasterCSSRCMigrationResult {
readonly version: 2
- readonly from: 'rc-legacy' | 'rc-named' | 'rc-native' | 'rc-managed' | 'rc-utilities'
+ readonly from: 'rc-legacy' | 'rc-named' | 'rc-native' | 'rc-managed' | 'rc-utilities' | 'rc-sizing'
readonly sourceVersion: string
readonly behaviorChanges: readonly string[]
readonly configurationCSS: string
@@ -360,7 +360,6 @@ export interface MasterCSSSourceInspection {
}
export interface MasterCSSStylesheetInspection {
- compositions?: import('@master/css-schema/css-directives').CSSCompositionTrace[]
filePath: string
masterCSS: boolean
pruneNativeCSS: boolean
@@ -527,8 +526,6 @@ export interface MasterCSSLintCanonicalClassNameOptions {
preferPropertyAliases: boolean
preferCompositionUtilities: boolean
preferConditionOrder: boolean
- preferNativeDeclarationsInCompose: boolean
- preferVariantBlocksInCompose: boolean
}
export interface MasterCSSLintCanonicalClassSuggestion {
@@ -551,29 +548,10 @@ export interface MasterCSSLintCanonicalClassGroupSuggestions {
suggestions: MasterCSSLintCanonicalClassGroupSuggestion[]
}
-export type MasterCSSLintCanonicalComposeSuggestionKind =
- | 'class'
- | 'native-declaration'
- | 'variant-block'
-
-export interface MasterCSSLintCanonicalComposeSuggestion {
- actual: string
- recommended: string
- classNames: string[]
- kind: MasterCSSLintCanonicalComposeSuggestionKind
-}
-
-export interface MasterCSSLintCanonicalComposeDirective {
- version: typeof MASTER_CSS_LINT_BATCH_VERSION
- suggestions: MasterCSSLintCanonicalComposeSuggestion[]
- structuralChange?: boolean
- replacement?: string
-}
-
export interface MasterCSSLintEdit {
range: MasterCSSSourceRange
text: string
- scope: 'class-list' | 'directive'
+ scope: 'class-list'
}
export interface MasterCSSLintDiagnostic {
@@ -623,7 +601,6 @@ export interface MasterCSSLintClassListPolicyRequest {
validationErrors?: readonly (readonly string[])[]
disallowUnknownClass?: boolean
canonicalOptions?: Partial
- composeDirective?: boolean
rawValuePolicy?: MasterCSSLintRawValuePolicy
}
@@ -827,7 +804,6 @@ export interface MasterCSSDirectiveExtractionPolicy {
}
export interface MasterCSSDirectiveCompilation {
- compositions?: import('@master/css-schema/css-directives').CSSCompositionTrace[]
utilitySources?: import('@master/css-schema/css-directives').CSSUtilitySource[]
nativeOutput?: import('@master/css-schema/css-directives').CSSNativeOutput
manifestInput: MasterCSSDirectiveManifestInput
@@ -925,7 +901,6 @@ export interface MasterCSSLowerDirectivesOptions {
}
export interface MasterCSSLowerDirectivesResult {
- compositions: import('@master/css-schema/css-directives').CSSCompositionTrace[]
css?: string
outputMappings?: import('@master/css-schema/css-directives').CSSOutputMapping[]
generatedMappings?: import('@master/css-schema/css-directives').CSSOutputMapping[]
@@ -975,7 +950,7 @@ export interface MasterCSSCompileStylesheetGraphRequest {
relativeResourceURLs?: boolean
/** Per-file pruning override; null preserves native rules in that stylesheet. */
classesByStylesheet?: Record
- /** Select native rules/compose and external imports; local links retain reachability. */
+ /** Select native rules/variants and external imports; local links retain reachability. */
nativeStylesheets?: string[]
pruneNativeStylesheets?: string[]
options?: MasterCSSDirectiveCompileOptions
diff --git a/examples/astro/README.md b/examples/astro/README.md
index 6510b639f..f92a4b09b 100644
--- a/examples/astro/README.md
+++ b/examples/astro/README.md
@@ -1,6 +1,6 @@
# Master CSS Astro example
-This example uses `@master/css-astro` with its default `progressive` mode.
+This example explicitly selects `progressive` mode in `@master/css-astro`. The integration's default is `static`.
The integration:
@@ -25,7 +25,7 @@ The integration:
└── package.json
```
-`astro.config.js` registers `masterCSS()` with no options because progressive rendering is the default.
+`astro.config.js` registers `masterCSS({ mode: 'progressive' })` to enable server rendering and browser hydration for this example.
`src/layouts/Layout.astro` imports the Master CSS default stylesheet globally:
diff --git a/examples/astro/astro.config.js b/examples/astro/astro.config.js
index 7717c647a..020606b95 100644
--- a/examples/astro/astro.config.js
+++ b/examples/astro/astro.config.js
@@ -8,6 +8,6 @@ export default defineConfig({
trailingSlash: 'never',
integrations: [
sitemap(),
- masterCSS() // progressive rendering by default
+ masterCSS({ mode: 'progressive' })
]
})
diff --git a/examples/astro/src/pages/index.astro b/examples/astro/src/pages/index.astro
index 9b36064f8..3346e2cb8 100644
--- a/examples/astro/src/pages/index.astro
+++ b/examples/astro/src/pages/index.astro
@@ -10,7 +10,7 @@ import Card from '../components/Card.astro';
Astro integration
- Progressive rendering by default
+ Explicit progressive rendering
The Astro integration pre-renders the CSS needed for the initial HTML and hydrates the Master CSS runtime for classes that appear later in the browser.
@@ -44,8 +44,8 @@ import Card from '../components/Card.astro';
/>
diff --git a/examples/lit/src/my-element.ts b/examples/lit/src/my-element.ts
index d75479928..2db6b2362 100644
--- a/examples/lit/src/my-element.ts
+++ b/examples/lit/src/my-element.ts
@@ -38,7 +38,7 @@ export class MyElement extends LitElement {
-
+
diff --git a/examples/svelte/README.md b/examples/svelte/README.md
index 0cff1c5eb..b5f4597c3 100644
--- a/examples/svelte/README.md
+++ b/examples/svelte/README.md
@@ -16,4 +16,4 @@
## Documentation
Check out the official [documentation](https://rc.css.master.co/guide/installation/svelte).
-This example uses the default integration from `@master/css-svelte/vite` with the default `progressive` mode and re-exports the named SvelteKit server `handle` from `@master/css-svelte/hooks.server`.
+This example explicitly selects `masterCSS({ mode: 'progressive' })` from `@master/css-svelte/vite`, loads `virtual:master-css-runtime` in `src/hooks.client.ts`, and re-exports the named SvelteKit server `handle` from `@master/css-svelte/hooks.server`. The integration's default mode is `static`, which needs neither hook.
diff --git a/examples/svelte/package.json b/examples/svelte/package.json
index 21f453251..534960d84 100644
--- a/examples/svelte/package.json
+++ b/examples/svelte/package.json
@@ -26,7 +26,7 @@
"globals": "^17.12.0",
"svelte": "^5.57.0",
"svelte-check": "^4.7.6",
- "typescript": "^7.0.2",
+ "typescript": "^6.0.3",
"typescript-eslint": "^8.69.0",
"vite": "^8.2.2"
},
diff --git a/examples/svelte/src/hooks.client.ts b/examples/svelte/src/hooks.client.ts
new file mode 100644
index 000000000..a9a5cf794
--- /dev/null
+++ b/examples/svelte/src/hooks.client.ts
@@ -0,0 +1,3 @@
+///
+
+import 'virtual:master-css-runtime'
diff --git a/examples/svelte/vite.config.ts b/examples/svelte/vite.config.ts
index 4e8ee415c..fac626880 100644
--- a/examples/svelte/vite.config.ts
+++ b/examples/svelte/vite.config.ts
@@ -5,6 +5,6 @@ import masterCSS from '@master/css-svelte/vite'
export default defineConfig({
plugins: [
sveltekit(),
- masterCSS(),
+ masterCSS({ mode: 'progressive' }),
]
})
diff --git a/examples/vite/index.html b/examples/vite/index.html
index 96b4347d9..5ce1f2b3d 100644
--- a/examples/vite/index.html
+++ b/examples/vite/index.html
@@ -16,7 +16,7 @@
-
+
diff --git a/package.json b/package.json
index 20317b967..befab006a 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,7 @@
"build:rust:native": "cargo xtask build-native --release",
"build:rust:wasm": "cargo xtask build-wasm all",
"build:site": "pnpm build && pnpm --filter site build",
- "build:site:cloudflare-pages": "pnpm build && pnpm --filter site build:cloudflare-pages",
+ "build:site:cloudflare-pages": "bash scripts/build-site-hosted.sh",
"build:examples": "node scripts/with-typescript-tooling-compat.mjs turbo run build --filter=\"./examples/*\"",
"dev:site": "pnpm build && pnpm --filter site dev",
"dev:site:clean": "pnpm --filter site clean:next && pnpm dev:site",
diff --git a/packages/astro/README.md b/packages/astro/README.md
index 803d858ae..b50ea2c66 100644
--- a/packages/astro/README.md
+++ b/packages/astro/README.md
@@ -71,9 +71,9 @@ export default defineConfig({
})
```
-The integration uses `progressive` mode by default. It registers Astro middleware to pre-render initial CSS into ``,
- filename: 'test.vue',
- languageOptions: {
- parser: await import('vue-eslint-parser')
- }
- },
-{
- code: ``,
- filename: 'test.svelte',
- languageOptions: {
- parser: await import('svelte-eslint-parser')
- }
- },
-{
-code: `.btn { @compose w-md h-md mt-md mb-md; }`,
-filename: 'test.css',
-languageOptions: {
- parser: cssParser
- }
-},
-{
-code: ``,
-filename: 'test.svelte',
-languageOptions: {
- parser: await import('svelte-eslint-parser')
- }
-}
-],
- invalid: [
-{
- code: `.btn { @compose font-size:16px margin-md; }`,
- output: `.btn { @compose m-md; font-size: 16px; }`,
- filename: 'test.css',
- languageOptions: {
- parser: cssParser
- },
- errors: [
- { messageId: 'preferClass' },
- { messageId: 'preferClass' },
- ]
- },
-{
- code: `.btn { @compose block@dark@sm font-size:16px@dark@sm; }`,
- output: [".btn { @variant dark@sm { @compose block font-size:16px; } }",".btn { @variant dark@sm { @compose block; font-size: 16px; } }"],
- filename: 'test.css',
- languageOptions: {
- parser: cssParser
- },
- errors: [
- { messageId: 'preferClass' },
- { messageId: 'preferClass' },
- ]
- },
-{
- code: `.btn {
- @compose
- font-size:16px
- margin-md
- ;
-}`,
- output: ".btn {\n @compose m-md;\n font-size: 16px;\n}",
- filename: 'test.css',
- languageOptions: {
- parser: cssParser
- },
- errors: [
- { messageId: 'preferClass' },
- { messageId: 'preferClass' },
- ]
- },
-{
- code: ` `,
- output: ` `,
- filename: 'test.vue',
- languageOptions: {
- parser: await import('vue-eslint-parser')
- },
- errors: [
- { messageId: 'preferClass' },
- { messageId: 'preferClass' },
- ]
- }
-]
-})
diff --git a/packages/eslint-plugin/tests/schema.test.ts b/packages/eslint-plugin/tests/schema.test.ts
index 708ebed00..db20d20f6 100644
--- a/packages/eslint-plugin/tests/schema.test.ts
+++ b/packages/eslint-plugin/tests/schema.test.ts
@@ -71,18 +71,7 @@ test('rejects rule options for rules configured through settings only', async ()
.rejects.toThrow()
})
-test('provides an opt-in stylesheet config', async () => {
- const [diagnosticResult] = await new ESLint({
- overrideConfigFile: true,
- overrideConfig: [plugin.configs.stylesheet]
- }).lintText(`.btn { @compose contain:content; }`, { filePath: 'index.css' })
- const [fixResult] = await new ESLint({
- fix: true,
- overrideConfigFile: true,
- overrideConfig: [plugin.configs.stylesheet]
- }).lintText(`.btn { @compose contain:content; }`, { filePath: 'index.css' })
-
- expect(diagnosticResult.messages).toHaveLength(1)
- expect(diagnosticResult.messages[0].ruleId).toBe('@master/css/prefer-canonical-classes')
- expect(fixResult.output).toBe('.btn { contain: content; }')
+test('does not expose the removed compose stylesheet config', () => {
+ expect(plugin.configs).not.toHaveProperty('stylesheet')
+ expect(plugin.configs.recommended).toEqual([plugin.configs.source])
})
diff --git a/packages/language-server/README.md b/packages/language-server/README.md
index a550ab0ca..b6226173e 100644
--- a/packages/language-server/README.md
+++ b/packages/language-server/README.md
@@ -87,7 +87,7 @@ The language server supports full-document and active-position semantic tokens.
| `active` | Uses the VS Code extension request for active class-context highlighting. |
| `off` | Disables embedded utility highlighting. |
-CSS directive syntax is highlighted by the shared TextMate grammar. Server semantic tokens cover Master CSS class-list spans and directive class-list spans such as `@compose` and `@safelist`.
+CSS directive syntax is highlighted by the shared TextMate grammar. Server semantic tokens cover Master CSS class-list spans and directive class-list spans such as `@safelist`.
## Formatting
diff --git a/packages/language-server/src/core.ts b/packages/language-server/src/core.ts
index 13a53d224..a217c6035 100644
--- a/packages/language-server/src/core.ts
+++ b/packages/language-server/src/core.ts
@@ -453,7 +453,7 @@ export class MasterCSSLanguageServer implements Disposable {
async initWorkspaceLanguageService(workspace: MasterCSSWorkspace) {
workspace.baseManifest = await this.loadWorkspaceBaseManifest(workspace)
- let workspacePlan: MasterCSSManifest | undefined
+ let workspacePlan: Awaited>
workspace.manifestErrors = []
if (workspace !== this.globalWorkspace) {
try {
@@ -469,12 +469,12 @@ export class MasterCSSLanguageServer implements Disposable {
this.console.info(`Initialized workspace ${workspace.uri}`)
}
}
- const manifest = workspacePlan
+ const manifest = workspacePlan?.manifest
?? workspace.languageServiceSettings.manifest
?? workspace.baseManifest
workspace.languageService = new MasterCSSLanguageService(
{ ...workspace.languageServiceSettings, manifest },
- { session: await createToolingSession({ manifest }) }
+ { session: await createToolingSession({ manifest, nativeClassNames: workspacePlan?.nativeClassNames }) }
)
}
@@ -499,14 +499,14 @@ export class MasterCSSLanguageServer implements Disposable {
private async loadWorkspacePlan(workspace: MasterCSSWorkspace, baseManifest: MasterCSSManifest) {
const entries = workspace.planEntries ?? []
- if (!entries.length) return workspace.languageServiceSettings.manifest
+ if (!entries.length) return undefined
const cwd = workspace.uri ? URI.parse(workspace.uri).fsPath : process.cwd()
const result = await loadProjectManifest({
root: cwd,
entries,
baseManifest
})
- return result.manifest
+ return result
}
private async loadWorkspaceBaseManifest(workspace: MasterCSSWorkspace): Promise {
diff --git a/packages/language-server/tests/bug-hunt-manifest-diagnostic-contract.test.ts b/packages/language-server/tests/bug-hunt-manifest-diagnostic-contract.test.ts
index 3374c6746..66b3509e2 100644
--- a/packages/language-server/tests/bug-hunt-manifest-diagnostic-contract.test.ts
+++ b/packages/language-server/tests/bug-hunt-manifest-diagnostic-contract.test.ts
@@ -12,7 +12,7 @@ withFixture('invalid-manifest', context => {
const error = context.rootWorkspace?.manifestErrors?.[0]
expect(error).toMatchObject({ name: 'MasterCSSError' })
const original = getMasterCSSDiagnostics(error)?.[0]
- expect(original?.code).toBe('compose-quoted-syntax')
+ expect(original?.code).toBe('removed-compose-directive')
expect(original?.source).toMatch(/invalid-manifest[/\\]index\.css$/)
const diagnostics = sendDiagnostics.mock.calls.at(-1)?.[0].diagnostics
expect(diagnostics).toHaveLength(1)
diff --git a/packages/language-server/tests/diagnostics.test.ts b/packages/language-server/tests/diagnostics.test.ts
index 74b537389..c35ed00c0 100644
--- a/packages/language-server/tests/diagnostics.test.ts
+++ b/packages/language-server/tests/diagnostics.test.ts
@@ -16,9 +16,9 @@ withFixture('basic', async (context) => {
const diagnostics = sendDiagnostics.mock.calls.at(-1)?.[0].diagnostics || []
const diagnostic = diagnostics[0]
expect(diagnostics).toHaveLength(1)
- expect(diagnostic.code).toBe('invalid-compose-class')
- expect(document.offsetAt(diagnostic.range.start)).toBe(text.indexOf('not-a-real-class'))
- expect(document.offsetAt(diagnostic.range.end)).toBe(text.indexOf('not-a-real-class') + 'not-a-real-class'.length)
+ expect(diagnostic.code).toBe('removed-compose-directive')
+ expect(document.offsetAt(diagnostic.range.start)).toBe(text.indexOf('@compose'))
+ expect(document.offsetAt(diagnostic.range.end)).toBe(text.indexOf('@compose') + '@compose'.length)
await context.server.onDidClose({ document })
sendDiagnostics.mockRestore()
@@ -34,9 +34,9 @@ withFixture('basic', async (context) => {
const diagnostics = sendDiagnostics.mock.calls.at(-1)?.[0].diagnostics || []
const diagnostic = diagnostics[0]
expect(diagnostics).toHaveLength(1)
- expect(diagnostic.code).toBe('invalid-compose-class')
- expect(document.offsetAt(diagnostic.range.start)).toBe(text.indexOf('not-a-real-class'))
- expect(document.offsetAt(diagnostic.range.end)).toBe(text.indexOf('not-a-real-class') + 'not-a-real-class'.length)
+ expect(diagnostic.code).toBe('removed-compose-directive')
+ expect(document.offsetAt(diagnostic.range.start)).toBe(text.indexOf('@compose'))
+ expect(document.offsetAt(diagnostic.range.end)).toBe(text.indexOf('@compose') + '@compose'.length)
await context.server.onDidClose({ document })
sendDiagnostics.mockRestore()
@@ -53,8 +53,8 @@ withFixture('basic', async (context) => {
const diagnostic = sendDiagnostics.mock.calls.at(-1)?.[0].diagnostics[0]
expect(diagnostic).toBeDefined()
if (!diagnostic) throw new Error('Expected an SFC diagnostic.')
- expect(document.offsetAt(diagnostic.range.start)).toBe(text.lastIndexOf('not-a-real-class'))
- expect(document.offsetAt(diagnostic.range.end)).toBe(text.lastIndexOf('not-a-real-class') + 'not-a-real-class'.length)
+ expect(document.offsetAt(diagnostic.range.start)).toBe(text.lastIndexOf('@compose'))
+ expect(document.offsetAt(diagnostic.range.end)).toBe(text.lastIndexOf('@compose') + '@compose'.length)
await context.server.onDidClose({ document })
sendDiagnostics.mockRestore()
@@ -70,9 +70,9 @@ withFixture('basic', async (context) => {
const diagnostics = sendDiagnostics.mock.calls.at(-1)?.[0].diagnostics || []
const diagnostic = diagnostics[0]
expect(diagnostics).toHaveLength(1)
- expect(diagnostic.code).toBe('invalid-compose-class')
- expect(document.offsetAt(diagnostic.range.start)).toBe(text.indexOf('not-a-real-class'))
- expect(document.offsetAt(diagnostic.range.end)).toBe(text.indexOf('not-a-real-class') + 'not-a-real-class'.length)
+ expect(diagnostic.code).toBe('removed-compose-directive')
+ expect(document.offsetAt(diagnostic.range.start)).toBe(text.indexOf('@compose'))
+ expect(document.offsetAt(diagnostic.range.end)).toBe(text.indexOf('@compose') + '@compose'.length)
await context.server.onDidClose({ document })
sendDiagnostics.mockRestore()
@@ -88,9 +88,9 @@ withFixture('basic', async (context) => {
const diagnostics = sendDiagnostics.mock.calls.at(-1)?.[0].diagnostics || []
const diagnostic = diagnostics[0]
expect(diagnostics).toHaveLength(1)
- expect(diagnostic.code).toBe('compose-quoted-syntax')
- expect(document.offsetAt(diagnostic.range.start)).toBe(text.indexOf('"block"'))
- expect(document.offsetAt(diagnostic.range.end)).toBe(text.indexOf('"block"') + '"block"'.length)
+ expect(diagnostic.code).toBe('removed-compose-directive')
+ expect(document.offsetAt(diagnostic.range.start)).toBe(text.indexOf('@compose'))
+ expect(document.offsetAt(diagnostic.range.end)).toBe(text.indexOf('@compose') + '@compose'.length)
await context.server.onDidClose({ document })
sendDiagnostics.mockRestore()
@@ -106,9 +106,9 @@ withFixture('basic', async (context) => {
const diagnostics = sendDiagnostics.mock.calls.at(-1)?.[0].diagnostics || []
const diagnostic = diagnostics[0]
expect(diagnostics).toHaveLength(1)
- expect(diagnostic.code).toBe('compose-group-syntax')
- expect(document.offsetAt(diagnostic.range.start)).toBe(text.indexOf('{block}'))
- expect(document.offsetAt(diagnostic.range.end)).toBe(text.indexOf('{block}') + '{block}'.length)
+ expect(diagnostic.code).toBe('removed-compose-directive')
+ expect(document.offsetAt(diagnostic.range.start)).toBe(text.indexOf('@compose'))
+ expect(document.offsetAt(diagnostic.range.end)).toBe(text.indexOf('@compose') + '@compose'.length)
await context.server.onDidClose({ document })
sendDiagnostics.mockRestore()
@@ -127,7 +127,7 @@ withFixture('missing-workspace', async (context) => {
expect(context.rootWorkspace?.planEntries).toEqual([])
expect(context.rootWorkspace?.manifestErrors).toEqual([])
expect(diagnostics).toHaveLength(1)
- expect(diagnostics[0].code).toBe('invalid-compose-class')
+ expect(diagnostics[0].code).toBe('removed-compose-directive')
await context.server.onDidClose({ document })
sendDiagnostics.mockRestore()
@@ -143,7 +143,7 @@ withFixture('invalid-manifest', async (context) => {
const diagnostics = sendDiagnostics.mock.calls.at(-1)?.[0].diagnostics || []
expect(diagnostics).toHaveLength(1)
- expect(diagnostics[0].code).toBe('compose-quoted-syntax')
+ expect(diagnostics[0].code).toBe('removed-compose-directive')
expect(diagnostics[0].message).toContain('Failed to load Master CSS manifest')
await context.server.onDidClose({ document })
diff --git a/packages/language-server/tests/formatting.test.ts b/packages/language-server/tests/formatting.test.ts
index d88746fe9..ad327cbad 100644
--- a/packages/language-server/tests/formatting.test.ts
+++ b/packages/language-server/tests/formatting.test.ts
@@ -25,7 +25,7 @@ withFixture('basic', async (context) => {
})
test('returns document formatting edits for CSS directives', async ({ expect }) => {
- const textDocument = context.createDocument('.btn { @compose background-color:transparent ! fg-red !@sm; }', { lang: 'css' })
+ const textDocument = context.createDocument('@safelist "background-color:transparent ! fg-red !@sm";', { lang: 'css' })
await context.server.onDidOpen({ document: textDocument })
const edits = await context.clientConnection.sendRequest(DocumentFormattingRequest.method, {
textDocument: {
@@ -37,12 +37,12 @@ withFixture('basic', async (context) => {
}
})
- expect(applyTextEdits(textDocument, edits)).toBe('.btn { @compose background-color:transparent! fg-red!@sm; }')
+ expect(applyTextEdits(textDocument, edits)).toBe('@safelist "background-color:transparent! fg-red!@sm";')
await context.server.onDidClose({ document: textDocument })
})
test('returns range formatting edits for CSS directives', async ({ expect }) => {
- const source = '.a { @compose bg-red !; }\n.b { @compose bg-blue !; }'
+ const source = '@safelist "bg-red !";\n@safelist "bg-blue !";'
const textDocument = context.createDocument(source, { lang: 'css' })
await context.server.onDidOpen({ document: textDocument })
const edits = await context.clientConnection.sendRequest(DocumentRangeFormattingRequest.method, {
@@ -50,7 +50,7 @@ withFixture('basic', async (context) => {
uri: textDocument.uri
},
range: {
- start: textDocument.positionAt(source.indexOf('@compose bg-blue')),
+ start: textDocument.positionAt(source.indexOf('@safelist "bg-blue')),
end: textDocument.positionAt(source.length)
},
options: {
@@ -59,7 +59,7 @@ withFixture('basic', async (context) => {
}
})
- expect(applyTextEdits(textDocument, edits)).toBe('.a { @compose bg-red !; }\n.b { @compose bg-blue!; }')
+ expect(applyTextEdits(textDocument, edits)).toBe('@safelist "bg-red !";\n@safelist "bg-blue!";')
await context.server.onDidClose({ document: textDocument })
})
})
diff --git a/packages/language-server/tests/native-sizing.test.ts b/packages/language-server/tests/native-sizing.test.ts
new file mode 100644
index 000000000..a3e3d2101
--- /dev/null
+++ b/packages/language-server/tests/native-sizing.test.ts
@@ -0,0 +1,33 @@
+import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
+import { tmpdir } from 'node:os'
+import { join } from 'node:path'
+import { expect, test } from 'vitest'
+import { URI } from 'vscode-uri'
+import type { MasterCSSWorkspace } from '../src'
+import { connect } from './connection'
+
+test('workspace reload updates native class registrations used by inspection', async () => {
+ const root = mkdtempSync(join(tmpdir(), 'master-native-sizing-'))
+ const entry = join(root, 'index.css')
+ const workspace: MasterCSSWorkspace = {
+ uri: URI.file(root).toString(), openedTextDocuments: [],
+ languageServiceSettings: {}, planEntries: [entry]
+ }
+ const { server, clientConnection } = connect()
+ try {
+ writeFileSync(entry, String.raw`@master entry; .size\:20px { color:red; }`)
+ await server.initWorkspaceLanguageService(workspace)
+ const inspect = (name: string) => workspace.languageService!.session.inspectClassName(name)
+ expect(inspect('size:20px').diagnostics?.some(d => d.code === 'REMOVED_PRESET_UTILITY')).toBe(false)
+ expect(inspect('size:30px').diagnostics?.some(d => d.code === 'REMOVED_PRESET_UTILITY')).toBe(true)
+ workspace.languageService?.dispose()
+ writeFileSync(entry, '@master entry;')
+ await server.initWorkspaceLanguageService(workspace)
+ expect(inspect('size:20px').diagnostics?.some(d => d.code === 'REMOVED_PRESET_UTILITY')).toBe(true)
+ } finally {
+ workspace.languageService?.dispose()
+ server.dispose()
+ clientConnection.dispose()
+ rmSync(root, { recursive: true, force: true })
+ }
+})
diff --git a/packages/language-server/tests/semantic-tokens.test.ts b/packages/language-server/tests/semantic-tokens.test.ts
index cf63b30ad..e098207f7 100644
--- a/packages/language-server/tests/semantic-tokens.test.ts
+++ b/packages/language-server/tests/semantic-tokens.test.ts
@@ -46,7 +46,7 @@ withFixture('basic', async (context) => {
})
test('returns CSS directive class-list semantic tokens in active mode', async ({ expect }) => {
- const textDocument = context.createDocument('@theme dark { --color-primary: --alpha(var(--color-blue-60) / 80%); }\n@utilities { btn { @compose fg-red block; } }', { lang: 'css' })
+ const textDocument = context.createDocument("@theme dark { --color-primary: --alpha(var(--color-blue-60) / 80%); }\n@safelist \"block fg-red\";", { lang: 'css' })
await context.server.onDidOpen({ document: textDocument })
const semanticTokens = await context.clientConnection.sendRequest<{ data: number[] }>(DOCUMENT_SEMANTIC_TOKENS_REQUEST, {
textDocument: {
@@ -119,7 +119,7 @@ withFixture('basic', async (context) => {
'}',
'@supports (container-type: inline-size) {',
' @container card (width > 30rem) {',
- ' @layer utilities {',
+ ' @layer components {',
' .btn:is(.active, #featured) { animation: fade 1s ease-in-out; }',
' }',
' }',
@@ -184,7 +184,7 @@ withFixture('basic', async (context) => {
})
test('returns CSS directive class-list semantic tokens when highlighting is off', async ({ expect }) => {
- const textDocument = context.createDocument('@theme dark { --color-primary: --alpha(var(--color-blue-60) / 80%); }\n@utilities { btn { @compose block; } }', { lang: 'css' })
+ const textDocument = context.createDocument("@theme dark { --color-primary: --alpha(var(--color-blue-60) / 80%); }\n@safelist \"block\";", { lang: 'css' })
await context.server.onDidOpen({ document: textDocument })
const semanticTokens = await context.clientConnection.sendRequest<{ data: number[] }>(DOCUMENT_SEMANTIC_TOKENS_REQUEST, {
textDocument: {
diff --git a/packages/language-service/README.md b/packages/language-service/README.md
index 16f2ee13a..3db2a0177 100644
--- a/packages/language-service/README.md
+++ b/packages/language-service/README.md
@@ -91,7 +91,7 @@ Use `renderSemanticTokensAtPosition()` when a client wants active-only highlight
const semanticTokens = languageService.renderSemanticTokensAtPosition(textDocument, position)
```
-CSS directive syntax in CSS-family documents is highlighted by the shared TextMate grammar. Semantic tokens are only added for directive class-list spans such as bare `@compose` preludes and quoted `@safelist` strings.
+CSS directive syntax in CSS-family documents is highlighted by the shared TextMate grammar. Semantic tokens are only added for directive class-list spans such as quoted `@safelist` strings.
### Directive formatting
diff --git a/packages/language-service/playground/has-check.html b/packages/language-service/playground/has-check.html
index 98f833ccc..7ba5de6ac 100644
--- a/packages/language-service/playground/has-check.html
+++ b/packages/language-service/playground/has-check.html
@@ -1,5 +1,5 @@
-
+
diff --git a/packages/language-service/src/shiki.ts b/packages/language-service/src/shiki.ts
index c5e34755f..e301d6553 100644
--- a/packages/language-service/src/shiki.ts
+++ b/packages/language-service/src/shiki.ts
@@ -379,7 +379,7 @@ const SEMANTIC_SCOPE_STYLE_PROBE = [
' --token: var(--value);',
'}',
'@utilities {',
- ' btn { @compose block fg-red:hover@md; }',
+ ' btn { display: block; &:hover { color: red; } }',
'}',
'.x, div > li:hover::before {',
' color: red !important;',
diff --git a/packages/language-service/syntaxes/master-css.tmLanguage.json b/packages/language-service/syntaxes/master-css.tmLanguage.json
index bf4e1010c..e90b42b95 100644
--- a/packages/language-service/syntaxes/master-css.tmLanguage.json
+++ b/packages/language-service/syntaxes/master-css.tmLanguage.json
@@ -193,25 +193,6 @@
}
]
},
- {
- "begin": "(@)(compose)\\b",
- "beginCaptures": {
- "0": {
- "name": "keyword.control.at-rule.master-css"
- }
- },
- "end": "(;)|$",
- "endCaptures": {
- "1": {
- "name": "punctuation.section.master-css"
- }
- },
- "patterns": [
- {
- "include": "#master-compose-prelude"
- }
- ]
- },
{
"begin": "(@)(variant|dark|light)\\b",
"beginCaptures": {
@@ -283,26 +264,6 @@
}
]
},
- "master-compose-prelude": {
- "patterns": [
- {
- "include": "#master-string"
- },
- {
- "include": "#master-query"
- },
- {
- "include": "#master-selector"
- },
- {
- "include": "#master-class-fragment"
- },
- {
- "match": "[;{}]",
- "name": "punctuation.section.master-css"
- }
- ]
- },
"master-custom-variant-prelude": {
"patterns": [
{
diff --git a/packages/language-service/tests/format-directives.test.ts b/packages/language-service/tests/format-directives.test.ts
index 117d8be07..bc075349b 100644
--- a/packages/language-service/tests/format-directives.test.ts
+++ b/packages/language-service/tests/format-directives.test.ts
@@ -19,48 +19,48 @@ function format(ext: Parameters[0], source: string, settings?:
return applyTextEdits(source, languageService.formatDirectives(doc) ?? [], doc)
}
-test.concurrent('formats CSS @compose important markers', () => {
- expect(format('css', '.btn { @compose background-color:transparent ! fg-red !@sm; }'))
- .toBe('.btn { @compose background-color:transparent! fg-red!@sm; }')
+test.concurrent('formats CSS @safelist important markers', () => {
+ expect(format('css', ".btn { @safelist \"background-color:transparent ! fg-red !@sm\"; }"))
+ .toBe(".btn { @safelist \"background-color:transparent! fg-red!@sm\"; }")
})
test.concurrent('formats SCSS and LESS directive class lists', () => {
- expect(format('scss', '.btn { @compose background-color:transparent !; }')).toBe('.btn { @compose background-color:transparent!; }')
- expect(format('less', '.btn { @compose background-color:transparent !; }')).toBe('.btn { @compose background-color:transparent!; }')
+ expect(format('scss', ".btn { @safelist \"background-color:transparent !\"; }")).toBe(".btn { @safelist \"background-color:transparent!\"; }")
+ expect(format('less', ".btn { @safelist \"background-color:transparent !\"; }")).toBe(".btn { @safelist \"background-color:transparent!\"; }")
})
test.concurrent('formats CSS-family SFC style blocks only', () => {
const source = [
'
',
'',
'',
''
].join('\n')
expect(format('vue', source)).toBe([
'
',
'',
'',
''
].join('\n'))
})
test.concurrent('locates SFC style content after matching attribute text', () => {
- const directive = '.btn { @compose background-color:transparent !; }'
- const source = ``
+ const directive = ".btn { @safelist \"background-color:transparent !\"; }"
+ const source = ``
expect(format('vue', source))
- .toBe(``)
+ .toBe(``)
})
test.concurrent('formats safelist quoted class lists', () => {
@@ -69,18 +69,18 @@ test.concurrent('formats safelist quoted class lists', () => {
})
test.concurrent('returns no edits when directive formatting is disabled', () => {
- expect(format('css', '.btn { @compose background-color:transparent !; }', { formatDirectives: false }))
- .toBe('.btn { @compose background-color:transparent !; }')
+ expect(format('css', ".btn { @safelist \"background-color:transparent !\"; }", { formatDirectives: false }))
+ .toBe(".btn { @safelist \"background-color:transparent !\"; }")
})
test.concurrent('respects range formatting', () => {
- const source = '.a { @compose bg-red !; }\n.b { @compose bg-blue !; }'
+ const source = ".a { @safelist \"bg-red !\"; }\n.b { @safelist \"bg-blue !\"; }"
const doc = createDoc('css', source)
const languageService = new CSSLanguageService()
- const start = doc.positionAt(source.indexOf('@compose bg-blue'))
+ const start = doc.positionAt(source.indexOf('@safelist "bg-blue'))
const edits = languageService.formatDirectives(doc, {
start,
end: doc.positionAt(source.length)
}) ?? []
- expect(applyTextEdits(source, edits, doc)).toBe('.a { @compose bg-red !; }\n.b { @compose bg-blue!; }')
+ expect(applyTextEdits(source, edits, doc)).toBe(".a { @safelist \"bg-red !\"; }\n.b { @safelist \"bg-blue!\"; }")
})
diff --git a/packages/language-service/tests/get-class-position/test.ts b/packages/language-service/tests/get-class-position/test.ts
index 87a0566ad..7da60e0a7 100644
--- a/packages/language-service/tests/get-class-position/test.ts
+++ b/packages/language-service/tests/get-class-position/test.ts
@@ -61,13 +61,13 @@ test.concurrent('valid classes', () => {
test.concurrent('class in CSS @compose', () => {
const target = 'bg-primary'
- const contents = ['.btn { @compose inline-flex ', target, '; }']
+ const contents = ['.btn { @safelist "inline-flex ', target, '"; }']
expectClassPosition(target, contents, 'css')
})
test.concurrent('class in Vue style @compose', () => {
const target = 'bg-primary'
- const contents = [' ']
+ const contents = [' ']
expectClassPosition(target, contents, 'vue')
})
diff --git a/packages/language-service/tests/rc87-browser.test.ts b/packages/language-service/tests/rc87-browser.test.ts
index 730769ff8..d344fdb6a 100644
--- a/packages/language-service/tests/rc87-browser.test.ts
+++ b/packages/language-service/tests/rc87-browser.test.ts
@@ -81,28 +81,7 @@ test.concurrent('encodes browser role-derived semantic token modifiers', () => {
})
test.concurrent('collects browser semantic tokens only for CSS directive class-list spans', () => {
- const source = `
- @safelist "hidden fg-red";
-
- @theme {
- --color-brand: var(--brand, #123);
-
- @keyframes fade {
- to {
- opacity: 1;
- }
- }
- }
-
- @utilities {
- btn {
- @compose block fg-brand;
- &:hover {
- color: var(--brand, red);
- }
- }
- }
- `
+ const source = "\n @safelist \"hidden fg-red\";\n\n @theme {\n --color-brand: var(--brand, #123);\n\n @keyframes fade {\n to {\n opacity: 1;\n }\n }\n }\n\n @utilities {\n btn {\n @safelist \"block fg-brand\";\n &:hover {\n color: var(--brand, red);\n }\n }\n }\n "
const tokens = collectBrowserSemanticTokenItems(source, 'css', { manifest })
const mapped = tokens.map((token) => ({
text: tokenText(source, token),
diff --git a/packages/language-service/tests/rc87-shiki.test.ts b/packages/language-service/tests/rc87-shiki.test.ts
index 6b6e4dd47..8ce709e77 100644
--- a/packages/language-service/tests/rc87-shiki.test.ts
+++ b/packages/language-service/tests/rc87-shiki.test.ts
@@ -125,14 +125,14 @@ test.concurrent('defines deterministic TextMate grammar scopes for CSS directive
const directive = grammarEntry('master-directive')
const themeDirective = findGrammarPattern(directive, (pattern) => pattern.begin === '(@)(theme)\\b')
const managedDirective = findGrammarPattern(directive, (pattern) => pattern.begin === '(@)(utilities)\\b')
- const composeDirective = findGrammarPattern(directive, (pattern) => pattern.begin === '(@)(compose)\\b')
+ const safelistDirective = findGrammarPattern(directive, (pattern) => pattern.begin === '(@)(safelist)\\b')
expect(themeDirective.beginCaptures?.['0']?.name).toBe('keyword.control.at-rule.master-css')
expect(managedDirective.beginCaptures?.['0']?.name).toBe('keyword.control.at-rule.master-css')
- expect(composeDirective.beginCaptures?.['0']?.name).toBe('keyword.control.at-rule.master-css')
+ expect(safelistDirective.beginCaptures?.['0']?.name).toBe('keyword.control.at-rule.master-css')
expectGrammarIncludes({ patterns: themeDirective.patterns ?? [] }, ['#master-theme-block', '#master-theme-prelude'])
expectGrammarIncludes({ patterns: managedDirective.patterns ?? [] }, ['#master-managed-block'])
- expectGrammarIncludes({ patterns: composeDirective.patterns ?? [] }, ['#master-compose-prelude'])
+ expectGrammarIncludes({ patterns: safelistDirective.patterns ?? [] }, ['#master-string'])
const themeBlock = grammarEntry('master-theme-block')
expectGrammarIncludes({ patterns: themeBlock.patterns[0]?.patterns ?? [] }, [
@@ -148,8 +148,7 @@ test.concurrent('defines deterministic TextMate grammar scopes for CSS directive
}))
expect(JSON.stringify(themeValue)).not.toContain('--alpha')
- const composePrelude = grammarEntry('master-compose-prelude')
- expectGrammarIncludes(composePrelude, ['#master-string', '#master-query', '#master-selector', '#master-class-fragment'])
+ expect(MASTER_CSS_TEXTMATE_GRAMMAR.repository).not.toHaveProperty('master-compose-prelude')
const classFragment = grammarEntry('master-class-fragment')
findGrammarPattern(classFragment, (pattern) => pattern.name === 'support.constant.property-value.master-css')
@@ -198,7 +197,7 @@ test('registers a real Shiki TextMate injection grammar for CSS directives', asy
'}',
'@utilities {',
' btn {',
- ' @compose inline-flex fg-primary:hover@md;',
+ " @safelist \"inline-flex fg-primary:hover@md\";",
' }',
'}',
'@keyframes fade {',
@@ -375,7 +374,7 @@ test.concurrent('creates Shiki decorations for CSS directive class-list spans',
'}',
'@utilities {',
' btn {',
- ' @compose inline-flex fg-brand:hover@sm;',
+ " @safelist \"inline-flex fg-brand:hover@sm\";",
' }',
'}'
].join('\n')
@@ -604,7 +603,7 @@ test.concurrent('uses semantic token scope styles for documentation Master CSS t
' --spacing-card: 24;',
'}',
'@utilities {',
- ' card { @compose bg-blue fg-brand:hover; }',
+ " card { @safelist \"bg-blue fg-brand:hover\"; }",
'}'
].join('\n')
const cssOptions = {
@@ -690,9 +689,9 @@ test.concurrent('uses semantic token scope styles for CSS directive class-list t
'@custom-variant motion-safe { @media (prefers-reduced-motion: no-preference) { @slot; } }',
'@utilities {',
' card {',
- ' @compose p-md r-xl;',
+ " @safelist \"p-md r-xl\";",
' @variant {',
- ' @compose block fg-red;',
+ " @safelist \"block fg-red\";",
' text-align: --value();',
' }',
'}'
@@ -253,17 +253,7 @@ test.concurrent('renders CSS document semantic tokens only inside directive clas
})
test.concurrent('renders CSS directives in SCSS-like sources', () => {
- const { tokens } = renderTokens(`
- $color: red;
-
- @theme {
- --color-primary: #123;
- }
-
- .btn {
- @compose block;
- }
- `, 'scss')
+ const { tokens } = renderTokens("\n $color: red;\n\n @theme {\n --color-primary: #123;\n }\n\n .btn {\n @safelist \"block\";\n }\n ", 'scss')
expectToken(tokens, 'block', 'enumMember')
expect(tokens).not.toContainEqual({ text: '@theme', type: 'keyword', modifiers: ['directive'] })
@@ -272,41 +262,7 @@ test.concurrent('renders CSS directives in SCSS-like sources', () => {
})
test.concurrent('renders detailed CSS directive semantic tokens only for class-list syntax', () => {
- const { tokens } = renderTokens(`
- @source not "src/**/*.{ts,tsx}";
- @reference "./tokens.css";
- @blocklist "debug-*";
- @safelist "block fg-red:hover@md";
-
- @theme static brand {
- --color-primary: --alpha(var(--color-blue-60) / 80%);
- --radius-card: 1rem;
- }
-
- @custom-variant headings { @media all { @slot; } }
-
- @utilities {
- btn {
- @compose inline-flex align-items:center fg-primary:hover@md;
-
- @variant h>=sm&h {
- text-decoration: --value();
- }
- }
- `, 'css', { manifest: createPresetManifest({ variables: [{ namespace: 'color', key: 'primary', value: '#4f46e5' }] }) })
+ const { tokens } = renderTokens("\n @source not \"src/**/*.{ts,tsx}\";\n @reference \"./tokens.css\";\n @blocklist \"debug-*\";\n @safelist \"block fg-red:hover@md\";\n\n @theme static brand {\n --color-primary: --alpha(var(--color-blue-60) / 80%);\n --radius-card: 1rem;\n }\n\n @custom-variant headings { @media all { @slot; } }\n\n @utilities {\n btn {\n @safelist \"inline-flex align-items:center fg-primary:hover@md\";\n\n @variant h>=sm&h {\n text-decoration: --value();\n }\n }\n ", 'css', { manifest: createPresetManifest({ variables: [{ namespace: 'color', key: 'primary', value: '#4f46e5' }] }) })
expectToken(tokens, 'block', 'enumMember')
expectToken(tokens, 'fg-red', 'enumMember')
@@ -441,7 +397,7 @@ test.concurrent('does not render active semantic tokens for CSS directive syntax
})
test.concurrent('renders active semantic tokens for CSS directive class-list spans', () => {
- const content = '@utilities { btn { @compose fg-red block:hover; } }'
+ const content = "@utilities { btn { @safelist \"fg-red block:hover\"; } }"
const doc = createDoc('css', content)
const languageService = new CSSLanguageService()
const semanticTokens = languageService.renderSemanticTokensAtPosition(doc, doc.positionAt(content.indexOf('block') + 1))
@@ -486,7 +442,7 @@ test.concurrent('skips embedded semantic tokens when syntax highlighting is off'
})
test.concurrent('renders CSS directive class-list semantic tokens when embedded highlighting is off', () => {
- const content = '@theme dark { --color-primary: --alpha(var(--color-blue-60) / 80%); }\n@utilities { btn { @compose block; } }'
+ const content = "@theme dark { --color-primary: --alpha(var(--color-blue-60) / 80%); }\n@utilities { btn { @safelist \"block\"; } }"
const doc = createDoc('css', content)
const languageService = new CSSLanguageService({ embeddedSyntaxHighlighting: 'off' })
const semanticTokens = languageService.renderSemanticTokens(doc)
diff --git a/packages/language-service/tests/render-semantic-tokens.test.ts b/packages/language-service/tests/render-semantic-tokens.test.ts
index 0b47fa636..2c35c8b7a 100644
--- a/packages/language-service/tests/render-semantic-tokens.test.ts
+++ b/packages/language-service/tests/render-semantic-tokens.test.ts
@@ -192,7 +192,7 @@ test.concurrent('renders semantic tokens for internal styles dogfood directives'
const { tokens } = renderTokens([
'@utilities {',
' monaco-editor {',
- ' @compose --vscode-editor-background:transparent! bg-blue filter:drop-shadow(0|2px|2px|rgba(0,0,0,.2px));',
+ " @safelist \"--vscode-editor-background:transparent! bg-blue filter:drop-shadow(0|2px|2px|rgba(0,0,0,.2px))\";",
' }',
'}'
].join('\n'), 'css')
@@ -259,90 +259,7 @@ test.concurrent('renders native-aligned semantic tokens for grouped classes with
})
test.concurrent('renders semantic tokens only for CSS directive class-list spans', () => {
- const { tokens } = renderTokens(`
- @master entry;
- @reference "./tokens.css";
- @safelist "block fg-red:hover@md";
-
- @settings {
- root-size: 16;
- }
-
- @theme dark {
- --color-primary: --alpha(var(--color-blue-60) / 80%);
- }
-
- @theme {
- @keyframes fade {
- to {
- opacity: 1;
- }
- }
- }
-
- @custom-variant motion-safe { @media (prefers-reduced-motion: no-preference) { @slot; } }
-
- @utilities {
- reset {
- @compose block;
- }
- }
-
- @utilities {
- btn {
- @compose inline-flex fg-primary:hover@md;
- @dark {
- @compose bg-blue;
- }
- @variant {
- text-align: --value();
- }
-
- font-<~font-size> {
- font-size: --value();
- }
-
- bg-<~color> {
- background-color: --value();
- }
-
- text-decoration-<~color> {
- text-decoration: --value();
- }
-
- user-select: {
- user-select: --value();
- }
-
- grid-cols:<*> {
- grid-template-columns: repeat(--value(), minmax(0, 1fr));
-
- @variant {\n text-align: --value();\n }\n\n font-<~font-size> {\n font-size: --value();\n }\n\n bg-<~color> {\n background-color: --value();\n }\n\n text-decoration-<~color> {\n text-decoration: --value();\n }\n\n user-select: {\n user-select: --value();\n }\n\n grid-cols:<*> {\n grid-template-columns: repeat(--value(), minmax(0, 1fr));\n\n @variant {
- const { tokens } = renderTokens(`
- @utilities {
- reset {
- @light {
- color: var(--text, black);
- }
- }
- }
-
- @utilities {
- btn {
- @compose inline-flex;
- @dark {
- background-color: oklch(20% 0.03 250);
- }
- @media (width >= 42rem) {
- .label:hover {
- transform: scale(1);
- }
- }
- }
-
- btn:hover {
- @compose block;
- }
- }
-
- @utilities {
- font:<~font-size|number> {
- font-size: --value();
- &:hover {
- text-align: var(--align, center);
- }
- }
-
- text- {
- text-align: --value();
- }
- }
- `, 'css')
+ const { tokens } = renderTokens("\n @utilities {\n reset {\n @light {\n color: var(--text, black);\n }\n }\n }\n\n @utilities {\n btn {\n @safelist \"inline-flex\";\n @dark {\n background-color: oklch(20% 0.03 250);\n }\n @media (width >= 42rem) {\n .label:hover {\n transform: scale(1);\n }\n }\n }\n\n btn:hover {\n @safelist \"block\";\n }\n }\n\n @utilities {\n font:<~font-size|number> {\n font-size: --value();\n &:hover {\n text-align: var(--align, center);\n }\n }\n\n text- {\n text-align: --value();\n }\n }\n ", 'css')
expectToken(tokens, 'inline-flex', 'enumMember')
expectToken(tokens, 'block', 'enumMember')
@@ -473,20 +351,7 @@ test.concurrent('renders semantic tokens only for compose class lists inside man
})
test.concurrent('renders CSS directive ranges with quoted semicolons', () => {
- const { tokens } = renderTokens(`
- @source not "a;b.css";
- @source "critical.tsx";
- @reference "./a;b.css";
- @safelist "block fg-red";
- @blocklist "debug-*";
- @preserve native;
-
- .btn {
- @compose fg-red;
- }
-
- @custom-variant quoted { @media (x: "a;b") { @slot; } }
- `, 'css')
+ const { tokens } = renderTokens("\n @source not \"a;b.css\";\n @source \"critical.tsx\";\n @reference \"./a;b.css\";\n @safelist \"block fg-red\";\n @blocklist \"debug-*\";\n @preserve native;\n\n .btn {\n @safelist \"fg-red\";\n }\n\n @custom-variant quoted { @media (x: \"a;b\") { @slot; } }\n ", 'css')
expectToken(tokens, 'block', 'enumMember')
expectToken(tokens, 'fg-red', 'enumMember')
diff --git a/packages/language-service/tests/shiki-grammar.test.ts b/packages/language-service/tests/shiki-grammar.test.ts
index 20c7d875b..525796dfe 100644
--- a/packages/language-service/tests/shiki-grammar.test.ts
+++ b/packages/language-service/tests/shiki-grammar.test.ts
@@ -54,15 +54,15 @@ test.concurrent('defines deterministic TextMate grammar scopes for CSS directive
const directive = grammarEntry('master-directive')
const themeDirective = findGrammarPattern(directive, (pattern) => pattern.begin === '(@)(theme)\\b')
const managedDirective = findGrammarPattern(directive, (pattern) => pattern.begin === '(@)(utilities)\\b')
- const composeDirective = findGrammarPattern(directive, (pattern) => pattern.begin === '(@)(compose)\\b')
+ const safelistDirective = findGrammarPattern(directive, (pattern) => pattern.begin === '(@)(safelist)\\b')
expect(themeDirective.beginCaptures?.['0']?.name).toBe('keyword.control.at-rule.master-css')
expect(managedDirective.beginCaptures?.['0']?.name).toBe('keyword.control.at-rule.master-css')
- expect(composeDirective.beginCaptures?.['0']?.name).toBe('keyword.control.at-rule.master-css')
+ expect(safelistDirective.beginCaptures?.['0']?.name).toBe('keyword.control.at-rule.master-css')
expect(directive.patterns.every((pattern) => pattern.beginCaptures?.['0']?.name === 'keyword.control.at-rule.master-css')).toBe(true)
expectGrammarIncludes({ patterns: themeDirective.patterns ?? [] }, ['#master-theme-block', '#master-theme-prelude'])
expectGrammarIncludes({ patterns: managedDirective.patterns ?? [] }, ['#master-managed-block'])
- expectGrammarIncludes({ patterns: composeDirective.patterns ?? [] }, ['#master-compose-prelude'])
+ expectGrammarIncludes({ patterns: safelistDirective.patterns ?? [] }, ['#master-string'])
const themeBlock = grammarEntry('master-theme-block')
expectGrammarIncludes({ patterns: themeBlock.patterns[0]?.patterns ?? [] }, [
@@ -78,8 +78,7 @@ test.concurrent('defines deterministic TextMate grammar scopes for CSS directive
}))
expect(JSON.stringify(themeValue)).not.toContain('--alpha')
- const composePrelude = grammarEntry('master-compose-prelude')
- expectGrammarIncludes(composePrelude, ['#master-string', '#master-query', '#master-selector', '#master-class-fragment'])
+ expect(MASTER_CSS_TEXTMATE_GRAMMAR.repository).not.toHaveProperty('master-compose-prelude')
const variantPrelude = grammarEntry('master-variant-prelude')
findGrammarPattern(variantPrelude, (pattern) => pattern.name === 'support.constant.property-value.master-css.query')
@@ -98,7 +97,7 @@ test.concurrent('defines deterministic TextMate grammar scopes for CSS directive
expect(propertyFragment.captures?.['2']?.name).toBe('keyword.operator.master-css')
})
-test('supports Shiki dynamic language imports', async () => {
+test('loads the grammar through a dynamic Shiki language import', async () => {
const masterCSSShikiLanguageImport = import('../src/shiki').then((module) => ({
default: [module.masterCSSShikiLanguage]
}))
@@ -137,7 +136,7 @@ test('registers a real Shiki TextMate injection grammar for CSS directives', asy
'}',
'@utilities {',
' btn {',
- ' @compose inline-flex fg-primary:hover@md;',
+ " @safelist \"inline-flex fg-primary:hover@md\";",
' }',
'}',
'@keyframes fade {',
@@ -156,7 +155,7 @@ test('registers a real Shiki TextMate injection grammar for CSS directives', asy
}
})
-test('keeps guide theme snippets correct with TextMate only', async () => {
+test('preserves guide theme source through TextMate tokenization', async () => {
const highlighter = await createHighlighter({
themes: [shikiSmokeTheme],
langs: ['css', masterCSSShikiLanguage]
diff --git a/packages/language-service/tests/shiki-readability.test.ts b/packages/language-service/tests/shiki-readability.test.ts
index bae0c156c..f717df9d4 100644
--- a/packages/language-service/tests/shiki-readability.test.ts
+++ b/packages/language-service/tests/shiki-readability.test.ts
@@ -51,7 +51,6 @@ test('colors every complete Master directive like a native CSS at-rule', async (
['theme', '@theme {}'],
['utilities', '@utilities {}'],
['custom-variant', '@custom-variant motion-safe {}'],
- ['compose', '@compose btn;'],
['variant', '@variant sm {}'],
['slot', '@slot;'],
['dark', '@dark {}'],
@@ -81,7 +80,7 @@ test('colors query names and keeps nested native at-rules in the CSS grammar', a
expect(nativeKeyword).toBeDefined()
expect(themeMode).toBeDefined()
- const compose = highlighter.codeToTokens('@utilities { btn { @compose fg-red:hover@md; } }', options).tokens[0]
+ const compose = highlighter.codeToTokens("@utilities { btn { @safelist \"fg-red:hover@md\"; } }", options).tokens[0]
const query = compose.find((token) => token.content === '@md')
expect(query).toBeDefined()
expect(hasScope(query, 'keyword.control.at-rule.master-css.query')).toBe(true)
@@ -115,9 +114,9 @@ test('colors query names and keeps nested native at-rules in the CSS grammar', a
expect(tokens.some((token) => token.content.includes('no-preference') && hasScope(token, 'entity.name.tag.master-css')), atRule).toBe(false)
}
- const managed = highlighter.codeToTokens('@utilities { btn { @media (width > 30rem) { @compose block; } } }', options).tokens[0]
+ const managed = highlighter.codeToTokens("@utilities { btn { @media (width > 30rem) { @safelist \"block\"; } } }", options).tokens[0]
expect(colors(managed.find((token) => token.content === '@media'))).toEqual(colors(nativeKeyword))
- expect(managed.some((token) => token.content === '@compose' && hasScope(token, 'keyword.control.at-rule.master-css'))).toBe(true)
+ expect(managed.some((token) => token.content === '@safelist' && hasScope(token, 'keyword.control.at-rule.master-css'))).toBe(true)
} finally {
await highlighter.dispose?.()
}
@@ -130,7 +129,7 @@ test('keeps semantic query colors aligned in CSS, HTML, and TSX', async () => {
try {
for (const [lang, source] of [
- ['css', '@utilities { btn { @compose fg-red@md; } }'],
+ ['css', "@utilities { btn { @safelist \"fg-red@md\"; } }"],
['html', '
'],
['tsx', '
']
] as const) {
diff --git a/packages/language-service/tests/shiki-session.test.ts b/packages/language-service/tests/shiki-session.test.ts
index 82bee26f9..e8c607e7e 100644
--- a/packages/language-service/tests/shiki-session.test.ts
+++ b/packages/language-service/tests/shiki-session.test.ts
@@ -54,7 +54,7 @@ it('preserves complete HAST across host languages compared with full inspection
['html', '
'],
['tsx', '
'],
['mdx', '# Example\n\n
'],
- ['css', '.x { @compose brand block fg-red:hover; }'],
+ ['css', ".x { @safelist \"brand block fg-red:hover\"; }"],
['plaintext', 'brand block fg-red:hover invalid']
]
try {
diff --git a/packages/language-service/tests/shiki.test.ts b/packages/language-service/tests/shiki.test.ts
index b27acc280..6e1deff7a 100644
--- a/packages/language-service/tests/shiki.test.ts
+++ b/packages/language-service/tests/shiki.test.ts
@@ -274,7 +274,7 @@ test.concurrent('separates named opacity and native values without coloring unre
const samples = [
{ lang: 'html', code: '\n
' },
{ lang: 'tsx', code: 'const label = "fg-blue";\n
' },
- { lang: 'css', code: '@utilities { card { @compose fg-red/0.5 b:1px|solid|var(--color-line-base) unknown-widget; } }' },
+ { lang: 'css', code: "@utilities { card { @safelist \"fg-red/0.5 b:1px|solid|var(--color-line-base) unknown-widget\"; } }" },
{ lang: 'mcss', code: 'fg-red/0.5 block:hover@sm color:red unknown-widget' }
]
for (const { lang, code } of samples) {
@@ -352,7 +352,7 @@ test.concurrent('creates Shiki decorations for CSS directive class-list spans',
'}',
'@utilities {',
' btn {',
- ' @compose inline-flex fg-brand:hover@sm;',
+ " @safelist \"inline-flex fg-brand:hover@sm\";",
' }',
'}'
].join('\n')
@@ -811,7 +811,7 @@ test.concurrent('uses semantic token scope styles for documentation Master CSS t
' --spacing-card: 24;',
'}',
'@utilities {',
- ' card { @compose bg-blue fg-brand:hover; }',
+ " card { @safelist \"bg-blue fg-brand:hover\"; }",
'}'
].join('\n')
const cssOptions = {
@@ -897,9 +897,9 @@ test.concurrent('uses semantic token scope styles for CSS directive class-list t
'@custom-variant motion-safe { @media (prefers-reduced-motion: no-preference) { @slot; } }',
'@utilities {',
' card {',
- ' @compose p-md r-xl;',
+ " @safelist \"p-md r-xl\";",
' @variant {
test('types _ should hint', () => {
expect(hint('block_')?.map(({ label }) => label)).toContain(':active')
})
+
+it('reserves native colon entries and suggests display states through an explicit declaration', () => {
+ expect(hint('flex:')?.map(item => item.label)).not.toContain(':hover')
+ expect(hint('grid:')?.map(item => item.label)).not.toContain(':hover')
+ expect(hint('display:flex:')?.map(item => item.label)).toContain(':hover')
+})
diff --git a/packages/language-service/tests/suggest-syntax/values.test.ts b/packages/language-service/tests/suggest-syntax/values.test.ts
index 8d2963e39..2aafb01d2 100644
--- a/packages/language-service/tests/suggest-syntax/values.test.ts
+++ b/packages/language-service/tests/suggest-syntax/values.test.ts
@@ -46,10 +46,10 @@ describe('named token completion', () => {
expect(labels('bg:', settings)).not.toContain('accent')
expect(labels('bg:', settings)).toContain('cover')
})
- test('offers named colors inside compose', () => {
+ test('offers named colors inside safelist', () => {
const settings = { manifest: createPresetManifest({ variables: [{ namespace: 'color', key: 'accent', value: '#123456' }] }) }
- const prefix = '.btn { @compose bg-'
- const doc = createDoc('css', prefix + '; }')
+ const prefix = '@safelist "bg-'
+ const doc = createDoc('css', prefix + '";')
const service = new CSSLanguageService(settings)
const items = service.suggestSyntax(doc, doc.positionAt(prefix.length), { triggerKind: 1 })
expect(items?.map(({ label }) => label)).toContain('bg-accent')
diff --git a/packages/mcp/src/classes.ts b/packages/mcp/src/classes.ts
index c742cfcb9..5fb11d0ad 100644
--- a/packages/mcp/src/classes.ts
+++ b/packages/mcp/src/classes.ts
@@ -30,7 +30,7 @@ async function createClassInspectionState(context: MasterCSSMCPContext, options:
const activeManifest = requireWorkspaceManifest(manifest)
return {
manifest,
- session: await createMCPToolingSession(activeManifest)
+ session: await createMCPToolingSession(activeManifest, manifest.nativeClassNames)
}
}
diff --git a/packages/mcp/src/compare.ts b/packages/mcp/src/compare.ts
index bad4b42fa..1608ae593 100644
--- a/packages/mcp/src/compare.ts
+++ b/packages/mcp/src/compare.ts
@@ -100,7 +100,7 @@ export async function compareCSS(context: MasterCSSMCPContext, options: CompareC
const manifest = await loadWorkspaceManifest(context, options.context)
const filePath = context.resolveVirtualPath(options.filePath || 'index.html')
const activeManifest = requireWorkspaceManifest(manifest)
- const session = createMCPToolingSession(activeManifest)
+ const session = createMCPToolingSession(activeManifest, manifest.nativeClassNames)
try {
const beforeClasses = resolveClasses(options, 'before', filePath, session)
const afterClasses = resolveClasses(options, 'after', filePath, session)
diff --git a/packages/mcp/src/context.ts b/packages/mcp/src/context.ts
index 232e21246..17f9fce23 100644
--- a/packages/mcp/src/context.ts
+++ b/packages/mcp/src/context.ts
@@ -1,7 +1,7 @@
import { createHash, randomBytes } from 'node:crypto'
import { existsSync, realpathSync, statSync } from 'node:fs'
import { mkdir, readFile, realpath as realpathAsync, stat, writeFile } from 'node:fs/promises'
-import { dirname, isAbsolute, relative, resolve } from 'node:path'
+import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:path'
import { withPreviewWriteLock } from './preview-write-lock'
export interface MasterCSSMCPContextOptions {
@@ -164,7 +164,7 @@ export default class MasterCSSMCPContext {
this.assertContained(resolved)
const parent = await realpath(dirname(resolved))
this.assertContained(parent)
- return resolved
+ return join(parent, basename(resolved))
}
validateGlobPatterns(patterns: readonly string[]) {
diff --git a/packages/mcp/src/directives.ts b/packages/mcp/src/directives.ts
index 4f288b7f4..8f5c3998b 100644
--- a/packages/mcp/src/directives.ts
+++ b/packages/mcp/src/directives.ts
@@ -11,7 +11,7 @@ import { createMCPTextDocument } from './document'
import { summarizeManifest } from './manifest-summary'
import { loadWorkspaceManifest, requireWorkspaceManifest, manifestMetadata, manifestFingerprint, type SemanticContext } from './project'
-const DIRECTIVE_INSPECTION_VERSION = 1
+const DIRECTIVE_INSPECTION_VERSION = 2
export interface InspectDirectivesOptions {
context?: SemanticContext
@@ -42,7 +42,6 @@ function summarizeCompileResult(result: MasterCSSCompileManifestResult) {
.map((diagnostic) => diagnostic.message)
return {
manifest: summarizeManifest(result.manifest),
- compositions: result.compositions ?? [],
directives: {
manifestInput: result.directiveSummary.manifestInput,
classNames: result.classNames,
diff --git a/packages/mcp/src/format.ts b/packages/mcp/src/format.ts
index 6cd681854..e83d24edb 100644
--- a/packages/mcp/src/format.ts
+++ b/packages/mcp/src/format.ts
@@ -36,7 +36,7 @@ function formatContent(service: MasterCSSLanguageService, filePath: string, cont
export async function previewDirectiveFormat(context: MasterCSSMCPContext, options: PreviewDirectiveFormatOptions = {}) {
const manifest = await loadWorkspaceManifest(context, options.context)
const service = new MasterCSSLanguageService(undefined, {
- session: createToolingSessionSync({ manifest: requireWorkspaceManifest(manifest) })
+ session: createToolingSessionSync({ manifest: requireWorkspaceManifest(manifest), nativeClassNames: manifest.nativeClassNames })
})
try {
if (options.content !== undefined) {
diff --git a/packages/mcp/src/language.ts b/packages/mcp/src/language.ts
index abe1615b0..26f46f0ca 100644
--- a/packages/mcp/src/language.ts
+++ b/packages/mcp/src/language.ts
@@ -22,7 +22,8 @@ export async function suggestSyntax(context: MasterCSSMCPContext, options: Sugge
const filePath = context.resolveVirtualPath(options.filePath)
const manifest = await loadWorkspaceManifest(context, options.context)
const session = createToolingSessionSync({
- manifest: requireWorkspaceManifest(manifest)
+ manifest: requireWorkspaceManifest(manifest),
+ nativeClassNames: manifest.nativeClassNames
})
const service = new MasterCSSLanguageService(
{ manifest: requireWorkspaceManifest(manifest) },
diff --git a/packages/mcp/src/lint.ts b/packages/mcp/src/lint.ts
index 79e97fe42..e2f2e9274 100644
--- a/packages/mcp/src/lint.ts
+++ b/packages/mcp/src/lint.ts
@@ -14,7 +14,7 @@ import { loadWorkspaceManifest, requireWorkspaceManifest, manifestMetadata, type
const DEFAULT_LINT_SOURCE_PATTERNS = ['**/*.{html,htm,js,jsx,cjs,ts,tsx,mts,cts,svelte,astro,vue,md,mdx,pug,php,css,scss,less}']
const DEFAULT_IGNORE_PATTERNS = ['**/node_modules/**', 'node_modules']
-const LINT_REPORT_VERSION = 3
+const LINT_REPORT_VERSION = 4
export interface LintProjectOptions {
context?: SemanticContext
@@ -30,14 +30,13 @@ export interface LintContentOptions {
}
export interface PreviewFixesOptions extends LintProjectOptions {
- includeDirectiveFixes?: boolean
ttlMs?: number
}
async function loadLintState(context: MasterCSSMCPContext, options: LintProjectOptions = {}) {
const rules = resolveMasterCSSLintRules(options.rules)
const manifest = await loadWorkspaceManifest(context, options.context)
- const lintSession = createToolingSessionSync({ manifest: requireWorkspaceManifest(manifest) })
+ const lintSession = createToolingSessionSync({ manifest: requireWorkspaceManifest(manifest), nativeClassNames: manifest.nativeClassNames })
const files = await resolveSourceFiles(
context,
options.patterns ?? DEFAULT_LINT_SOURCE_PATTERNS,
@@ -85,7 +84,7 @@ export async function lintContent(context: MasterCSSMCPContext, options: LintCon
const rules = resolveMasterCSSLintRules(options.rules)
const filePath = context.resolveVirtualPath(options.filePath)
const manifest = await loadWorkspaceManifest(context, options.context)
- const lintSession = createToolingSessionSync({ manifest: requireWorkspaceManifest(manifest) })
+ const lintSession = createToolingSessionSync({ manifest: requireWorkspaceManifest(manifest), nativeClassNames: manifest.nativeClassNames })
try {
const files = [lintMasterCSSContent({ content: options.content, filePath, rules, lintSession })]
@@ -112,7 +111,6 @@ export async function previewLintFixes(context: MasterCSSMCPContext, options: Pr
filePath: input.filePath,
rules: state.rules,
lintSession: state.lintSession,
- includeDirectiveFixes: Boolean(options.includeDirectiveFixes)
})
if (fixed !== input.content) {
changes.push({
diff --git a/packages/mcp/src/output-schema.ts b/packages/mcp/src/output-schema.ts
index d1dd31cf7..5f19ac23d 100644
--- a/packages/mcp/src/output-schema.ts
+++ b/packages/mcp/src/output-schema.ts
@@ -1,5 +1,5 @@
import * as z from 'zod/v4'
-import { compositionTrace, lintFile, lintSummary, formatFile, formatSummary, extractedFile, extractSummary, scannedFile, scanner, stylesheets, scanSummary, previewSummary } from './source-schema'
+import { lintFile, lintSummary, formatFile, formatSummary, extractedFile, extractSummary, scannedFile, scanner, stylesheets, scanSummary, previewSummary } from './source-schema'
import { strings, diagnostic, metadata, inspection, envelopeMetadata, manifestResults, change, completion, classDiff, ruleDiff, range } from './semantic-schema'
@@ -26,7 +26,7 @@ const fields: Record = {
mastercss_trace_class: { manifest: metadata, inspection, occurrences: z.array(z.object({ filePath: z.string(), source: z.string(), statuses: strings })), status: z.string(), css },
mastercss_extract_classes: { manifest: metadata, files: z.array(extractedFile), summary: extractSummary },
mastercss_scan_project: { manifest: metadata, files: z.array(scannedFile), scanner, stylesheets, css, summary: scanSummary },
- mastercss_inspect_directives: { compositions: z.array(compositionTrace), context: metadata, manifest: object, directiveEntries: z.array(z.object({ name: z.string(), range, prelude: z.string(), hasBlock: z.boolean(), quotedStrings: z.number() }).passthrough()), dependencies: strings, css, summary: object },
+ mastercss_inspect_directives: { context: metadata, manifest: object, directiveEntries: z.array(z.object({ name: z.string(), range, prelude: z.string(), hasBlock: z.boolean(), quotedStrings: z.number() }).passthrough()), dependencies: strings, css, summary: object },
mastercss_manifest_query: { manifest: metadata, results: manifestResults, summary: object },
mastercss_css_compare: { manifest: metadata, classes: classDiff, css: z.object({ changed: z.boolean(), before: css, after: css, bytesDelta: z.number(), diff: z.string() }), rules: ruleDiff, summary: object },
mastercss_suggest_syntax: { manifest: metadata, completions: z.array(completion), total: z.number() }
diff --git a/packages/mcp/src/project.ts b/packages/mcp/src/project.ts
index 62ed5890a..90d3bd35a 100644
--- a/packages/mcp/src/project.ts
+++ b/packages/mcp/src/project.ts
@@ -20,6 +20,7 @@ export type SemanticContext = 'project' | 'preset'
export async function loadWorkspaceManifest(context: MasterCSSMCPContext, requested: SemanticContext = 'project', explicitEntries?: readonly string[]) {
let entries: readonly string[] = []
+ const nativeClassNames: readonly string[] = []
let versions: ReturnType | undefined
try {
versions = getToolingBindingInfo()
@@ -27,19 +28,20 @@ export async function loadWorkspaceManifest(context: MasterCSSMCPContext, reques
entries = explicitEntries ?? await discoverManifestEntries({ root: context.root })
if (!entries.length) return {
status: 'error' as const, reason: 'entry-not-found' as const,
- entries, dependencies: [], warnings: [], diagnostics: [],
+ entries, nativeClassNames, dependencies: [], warnings: [], diagnostics: [],
context: requested, versions, fingerprint: null,
error: 'No project CSS entry was found. Add a project entry or explicitly select context: "preset".'
}
}
const result = requested === 'preset'
- ? { manifest: defaultManifest, entries: [], dependencies: [], diagnostics: [] }
+ ? { manifest: defaultManifest, nativeClassNames, entries: [], dependencies: [], diagnostics: [] }
: await loadProjectManifest({ root: context.root, entries, baseManifest: { version: 1, languageVersion: 3 } })
return {
status: 'loaded' as const,
context: requested, versions,
fingerprint: manifestFingerprint(result.manifest),
manifest: result.manifest,
+ nativeClassNames: result.nativeClassNames,
entries: result.entries,
dependencies: result.dependencies ?? [],
diagnostics: result.diagnostics,
@@ -49,7 +51,7 @@ export async function loadWorkspaceManifest(context: MasterCSSMCPContext, reques
return {
status: 'error' as const, reason: 'entry-load-failed' as const,
context: requested, versions, fingerprint: null,
- entries, dependencies: [] as string[], warnings: [] as string[],
+ entries, nativeClassNames, dependencies: [] as string[], warnings: [] as string[],
diagnostics: error && typeof error === 'object' && 'diagnostics' in error && Array.isArray(error.diagnostics)
? error.diagnostics : error && typeof error === 'object' && 'diagnostic' in error ? [error.diagnostic] : [],
error: getErrorMessage(error)
@@ -68,7 +70,7 @@ export function requireWorkspaceManifest(result: Awaited>) {
- const { manifest: _manifest, ...metadata } = { manifest: undefined, ...result }
+ const { manifest: _manifest, nativeClassNames: _nativeClassNames, ...metadata } = { manifest: undefined, ...result }
return metadata
}
diff --git a/packages/mcp/src/scan.ts b/packages/mcp/src/scan.ts
index 616a7035b..6efc72bba 100644
--- a/packages/mcp/src/scan.ts
+++ b/packages/mcp/src/scan.ts
@@ -60,7 +60,8 @@ export async function renderCSS(context: MasterCSSMCPContext, options: RenderCSS
let classes: string[]
if (options.html) {
const tooling = createToolingSessionSync({
- manifest: requireWorkspaceManifest(manifest)
+ manifest: requireWorkspaceManifest(manifest),
+ nativeClassNames: manifest.nativeClassNames
})
try {
classes = [...tooling.extractSource({
@@ -82,7 +83,7 @@ export async function renderCSS(context: MasterCSSMCPContext, options: RenderCSS
const rendered = renderClassNamesSync(classes, {
manifest: requireWorkspaceManifest(manifest)
})
- const tooling = createMCPToolingSession(requireWorkspaceManifest(manifest))
+ const tooling = createMCPToolingSession(requireWorkspaceManifest(manifest), manifest.nativeClassNames)
let inspections: ReturnType[]
try { inspections = classes.map(className => compactClassInspection(tooling, className, undefined, true)) }
finally { tooling.dispose() }
@@ -102,7 +103,7 @@ export async function renderCSS(context: MasterCSSMCPContext, options: RenderCSS
export async function inspectClass(context: MasterCSSMCPContext, options: InspectClassOptions) {
const manifest = await loadWorkspaceManifest(context, options.context)
const session = createMCPToolingSession(
- requireWorkspaceManifest(manifest)
+ requireWorkspaceManifest(manifest), manifest.nativeClassNames
)
try {
const inspection = session.inspectClassName(options.className, options.mode)
diff --git a/packages/mcp/src/server.ts b/packages/mcp/src/server.ts
index a4efec3d5..20178d64f 100644
--- a/packages/mcp/src/server.ts
+++ b/packages/mcp/src/server.ts
@@ -550,7 +550,6 @@ function registerTools(server: McpServer, context: MasterCSSMCPContext) {
mode: z.enum(['lint-fixes', 'generated-css']).optional(),
patterns: z.array(z.string()).optional(),
rules: z.string().optional(),
- includeDirectiveFixes: z.boolean().optional(),
outputPath: z.string().optional(),
ttlMs: z.number().int().min(1000).max(60 * 60 * 1000).optional()
},
diff --git a/packages/mcp/src/source-schema.ts b/packages/mcp/src/source-schema.ts
index 1f7192d30..6637f118a 100644
--- a/packages/mcp/src/source-schema.ts
+++ b/packages/mcp/src/source-schema.ts
@@ -18,7 +18,7 @@ export const extractedFile = z.object({
}))
})
const sourceFix = z.object({
- kind: z.enum(['class-list', 'directive']), safety: z.enum(['safe', 'structural']),
+ kind: z.literal('class-list'), safety: z.literal('safe'),
range, text: z.string(), description: z.string(), requiresFormatting: z.boolean()
})
export const lintFile = z.object({
@@ -29,15 +29,13 @@ export const lintFile = z.object({
source: z.literal('Master CSS'), sourceKind: z.string(), fixes: z.array(sourceFix).optional()
}))
})
-export const lintSummary = counts('files', 'diagnostics', 'errors', 'warnings', 'fixable', 'safeFixes', 'structuralFixes')
+export const lintSummary = counts('files', 'diagnostics', 'errors', 'warnings', 'fixable', 'safeFixes')
export const formatFile = z.object({ filePath: z.string(), languageId: z.string(), edits: z.array(z.object({ range: location, newText: z.string() })), changed: z.boolean(), beforeBytes: count, afterBytes: count })
-const sourceReference = z.object({ file: z.string().optional(), range, loc: z.object({ start: z.object({ line: count, column: count }), end: z.object({ line: count, column: count }) }).optional() })
-export const compositionTrace = z.object({ order: count, classes: strings, source: sourceReference.optional(), definitionSources: z.array(sourceReference), css: z.string(), variableNames: strings, animationNames: strings })
const discovered = z.object({ latent: strings, valid: strings, invalid: strings, usedNative: strings })
export const scannedFile = z.object({ filePath: z.string(), source: z.string(), scanned: z.boolean(), changed: z.boolean(), discovered })
export const scanner = z.object({ counts: counts('latent', 'valid', 'invalid', 'native', 'usedNative', 'safelist', 'blocklist'), classes: discovered.extend({ native: strings, safelist: strings, blocklist: strings }), resetDependencies: strings })
export const stylesheets = z.object({
- entries: z.array(z.object({ compositions: z.array(compositionTrace).optional(), filePath: z.string(), masterCSS: z.boolean(), pruneNativeCSS: z.boolean(), dependencies: strings, sourceDependencies: strings, warnings: strings, errors: strings })),
+ entries: z.array(z.object({ filePath: z.string(), masterCSS: z.boolean(), pruneNativeCSS: z.boolean(), dependencies: strings, sourceDependencies: strings, warnings: strings, errors: strings })),
dependencies: strings, warnings: strings, errors: z.array(z.object({ filePath: z.string(), message: z.string() }))
})
export const scanSummary = counts('files', 'stylesheets', 'diagnostics', 'errors', 'warnings', 'missingCSS', 'invalidClasses')
diff --git a/packages/mcp/src/tooling-session.ts b/packages/mcp/src/tooling-session.ts
index 4252558d7..bf338b2fc 100644
--- a/packages/mcp/src/tooling-session.ts
+++ b/packages/mcp/src/tooling-session.ts
@@ -7,8 +7,8 @@ import type {
} from '@master/css-tooling/language'
import type { MasterCSSManifest } from '@master/css-schema/manifest'
-export function createMCPToolingSession(manifest: MasterCSSManifest) {
- return createToolingSessionSync({ manifest })
+export function createMCPToolingSession(manifest: MasterCSSManifest, nativeClassNames: readonly string[] = []) {
+ return createToolingSessionSync({ manifest, nativeClassNames })
}
export function compactClassInspection(
diff --git a/packages/mcp/tests/bug-hunt-byte-surfaces.test.ts b/packages/mcp/tests/bug-hunt-byte-surfaces.test.ts
index c3a78679e..8b783fe67 100644
--- a/packages/mcp/tests/bug-hunt-byte-surfaces.test.ts
+++ b/packages/mcp/tests/bug-hunt-byte-surfaces.test.ts
@@ -9,7 +9,7 @@ import { renderCSS } from '../src/scan'
test('BH-0020 directive formatting reports UTF-8 sizes in content and file previews', async () => {
const root = mkdtempSync(join(tmpdir(), 'master-css-format-bytes-'))
const context = new MasterCSSMCPContext({ root })
- const content = '/* 中文😀 */\n@compose block inline ;'
+ const content = '/* 中文😀 */\n@safelist "block inline";'
try {
const result = await previewDirectiveFormat(context, { context: 'preset', content })
expect(result.mode).toBe('content')
diff --git a/packages/mcp/tests/bug-hunt-preview-concurrency.test.ts b/packages/mcp/tests/bug-hunt-preview-concurrency.test.ts
index ac13004af..07ac98df6 100644
--- a/packages/mcp/tests/bug-hunt-preview-concurrency.test.ts
+++ b/packages/mcp/tests/bug-hunt-preview-concurrency.test.ts
@@ -1,4 +1,4 @@
-import { linkSync, mkdtempSync, readFileSync, realpathSync, rmSync, symlinkSync, writeFileSync } from 'node:fs'
+import { linkSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, symlinkSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { afterEach, expect, it } from 'vitest'
@@ -19,6 +19,19 @@ afterEach(() => {
for (const root of roots.splice(0)) rmSync(root, { recursive: true, force: true })
})
+it('keeps a new writable file identity stable through a directory alias', async () => {
+ const { root, context } = setup()
+ const directory = join(root, 'real'), alias = join(root, 'alias')
+ mkdirSync(directory)
+ symlinkSync(directory, alias, 'junction')
+ const requested = join(alias, 'new.txt')
+ const before = await context.resolveWritableFile(requested)
+ const preview = await context.createPreview([{ filePath: requested, afterText: 'created' }])
+ await context.applyPreview(preview.confirmToken!)
+ expect(await context.resolveWritableFile(requested)).toBe(before)
+ expect(readFileSync(join(directory, 'new.txt'), 'utf8')).toBe('created')
+})
+
it('accepts exactly one simultaneous use of a preview token', async () => {
const { root, context } = setup()
const filePath = join(root, 'a.txt')
diff --git a/packages/mcp/tests/core.test.ts b/packages/mcp/tests/core.test.ts
index 921c246ae..29886152c 100644
--- a/packages/mcp/tests/core.test.ts
+++ b/packages/mcp/tests/core.test.ts
@@ -205,13 +205,16 @@ describe('@master/css-mcp', () => {
name: 'mastercss_render_css',
arguments: {
context: 'preset',
- classList: 'block field-sizing:content display:16px'
+ classList: 'block field-sizing:content display:16px display:banana'
}
}))
expect(renderedNative.invalid).toEqual([])
expect(renderedNative.inspections.find((item: { className: string }) => item.className === 'display:16px')).toMatchObject({ matchStatus: 'matched', cssValueStatus: 'invalid' })
+ expect(renderedNative.inspections.find((item: { className: string }) => item.className === 'display:banana')).toMatchObject({ matchStatus: 'matched', cssValueStatus: 'unknown' })
expect(renderedNative.css.text).toContain('.block{display:block}')
expect(renderedNative.css.text).toContain('.field-sizing\\:content{field-sizing:content}')
+ expect(renderedNative.css.text).toContain('.display\\:16px{display:16px}')
+ expect(renderedNative.css.text).toContain('.display\\:banana{display:banana}')
expect(renderedNative.css.bytes).toBe(renderedNative.css.text.length)
const suggestions = parseToolJSON(await connection.client.callTool({
@@ -298,7 +301,7 @@ describe('@master/css-mcp', () => {
entryPath: 'master.css'
}
}))
- expect(directives.version).toBe(1)
+ expect(directives.version).toBe(2)
expect(directives.status).toBe('ok')
expect(directives.directiveEntries).toEqual(expect.arrayContaining([
expect.objectContaining({ name: 'theme' }),
@@ -396,7 +399,7 @@ describe('@master/css-mcp', () => {
name: 'mastercss_css_compare',
arguments: {
context: 'preset',
- beforeClassList: 'block display:16px',
+ beforeClassList: 'block display:16px display:banana',
afterClassList: 'block field-sizing:content'
}
}))
@@ -407,6 +410,8 @@ describe('@master/css-mcp', () => {
removed: []
})
expect(nativeCompare.css.after.text).toContain('field-sizing:content')
+ expect(nativeCompare.css.before.text).toContain('.display\\:16px{display:16px}')
+ expect(nativeCompare.css.before.text).toContain('.display\\:banana{display:banana}')
} finally {
await connection.close()
}
@@ -415,7 +420,7 @@ describe('@master/css-mcp', () => {
it('previews directive formatting without writing until the preview is applied', async () => {
const root = createTempDir('master-css-mcp-format-')
const file = join(root, 'style.css')
- writeFileSync(file, '@compose block inline;')
+ writeFileSync(file, '@safelist "block inline";')
const connection = await connect(root)
try {
@@ -423,12 +428,12 @@ describe('@master/css-mcp', () => {
name: 'mastercss_preview_directive_format',
arguments: {
context: 'preset',
- content: '@compose block inline;',
+ content: '@safelist "block inline";',
filePath: 'style.css'
}
}))
expect(contentFormat.mode).toBe('content')
- expect(contentFormat.formatted).toBe('@compose block inline;')
+ expect(contentFormat.formatted).toBe('@safelist "block inline";')
const preview = parseToolJSON(await connection.client.callTool({
name: 'mastercss_preview_directive_format',
@@ -440,7 +445,7 @@ describe('@master/css-mcp', () => {
expect(preview.mode).toBe('files')
expect(preview.preview.confirmToken).toEqual(expect.any(String))
expect(preview.preview.changes).toHaveLength(1)
- expect(readFileSync(file, 'utf8')).toBe('@compose block inline;')
+ expect(readFileSync(file, 'utf8')).toBe('@safelist "block inline";')
const applied = parseToolJSON(await connection.client.callTool({
name: 'mastercss_apply_preview',
@@ -449,7 +454,7 @@ describe('@master/css-mcp', () => {
}
}))
expect(applied.applied).toBe(true)
- expect(readFileSync(file, 'utf8')).toBe('@compose block inline;')
+ expect(readFileSync(file, 'utf8')).toBe('@safelist "block inline";')
} finally {
await connection.close()
}
@@ -854,7 +859,7 @@ describe('@master/css-mcp', () => {
}
}))
- expect(report.version).toBe(3)
+ expect(report.version).toBe(4)
expect(report.root).toBe(root)
expect(report.files[0].discovered.valid).toContain('block')
expect(report.files[0].discovered.invalid).toContain('p-missing')
@@ -885,7 +890,7 @@ describe('@master/css-mcp', () => {
}
}))
- expect(report.version).toBe(3)
+ expect(report.version).toBe(4)
expect(report.root).toBe(root)
expect(report.files).toHaveLength(1)
expect(report.files[0].filePath).toBe(resolve(root, 'src/Component.tsx'))
diff --git a/packages/mcp/tests/semantic-context.test.ts b/packages/mcp/tests/semantic-context.test.ts
index 85b2bb020..1502baea9 100644
--- a/packages/mcp/tests/semantic-context.test.ts
+++ b/packages/mcp/tests/semantic-context.test.ts
@@ -36,13 +36,17 @@ it('explicit preset context reports matching separately from validity and browse
try {
const result = await inspectClass(context, { className: 'font:16px', context: 'preset' })
expect(result).toMatchObject({ matchStatus: 'matched', cssValueStatus: 'invalid', browserSupport: 'not-checked' })
- expect(result.manifest).toMatchObject({ context: 'preset', fingerprint: expect.stringMatching(/^[a-f0-9]{64}$/), versions: { languageVersion: 3, bindingAbiVersion: 12 } })
+ expect(result.manifest).toMatchObject({ context: 'preset', fingerprint: expect.stringMatching(/^[a-f0-9]{64}$/), versions: { languageVersion: 3, bindingAbiVersion: 14 } })
const response = jsonToolResult(result)
expect(JSON.parse((response.content[0] as { text: string }).text)).toEqual(response.structuredContent)
const rendered = await renderCSS(context, { context: 'preset', classList: 'font:16px width:--space(2)' })
expect(rendered.css.text).toContain('font:16px')
expect(rendered.inspections.map(inspection => inspection.cssValueStatus)).toEqual(['invalid', 'unknown'])
expect(rendered.diagnostics.map(diagnostic => diagnostic.code)).toEqual(['CSS_VALUE_INVALID', 'CSS_VALUE_UNKNOWN'])
+ const math = await inspectClass(context, { className: 'width:calc(1px|+|1s)', context: 'preset' })
+ expect(math.cssValueStatus).toBe('invalid')
+ const removed = await inspectClass(context, { className: 'size:20px', context: 'preset' })
+ expect(removed.diagnostics?.some(diagnostic => diagnostic.code === 'REMOVED_PRESET_UTILITY')).toBe(true)
} finally { context.dispose() }
})
@@ -58,20 +62,16 @@ it('keeps complete ambiguity alternatives in both structured and JSON output', a
} finally { context.dispose() }
})
-it('reports compose statements, definition locations and resource dependencies', async () => {
- const context = project()
- const content = '@theme{--color-accent:red;@keyframes spin{to{opacity:1}}}@utilities{paint{color:var(--color-accent);animation:spin 1s}}@layer components{.native{@compose paint;@compose color:blue;}}'
+it('does not warn about retired builtins for registered project CSS classes', async () => {
+ const context = project(String.raw`@master entry; .size\:20px { color:red; }`)
try {
- const result = await inspectDirectives(context, { context: 'preset', content, filePath: 'button.css' })
- expect(result.directives.nativeClassNames).toContain('native')
- expect(result.directives.classNames).not.toContain('native')
- expect(result.compositions).toHaveLength(2)
- expect(result.compositions[0]).toMatchObject({ classes: ['paint'], variableNames: ['color-accent'], animationNames: ['spin'] })
- expect(result.compositions[0].css).toContain('color:var(--color-accent)')
- const definition = result.compositions[0].definitionSources[0]
- expect(content.slice(definition.range.start, definition.range.end)).toBe('paint')
- const call = result.compositions[0].source!
- expect(content.slice(call.range.start, call.range.end)).toBe('@compose paint;')
- expect(result.compositions[1].classes).toEqual(['color:blue'])
+ const inspected = await inspectClass(context, { className: 'size:20px' })
+ const rendered = await renderCSS(context, { classList: 'size:20px' })
+ for (const diagnostics of [inspected.diagnostics, rendered.diagnostics]) {
+ expect(diagnostics?.some(diagnostic => diagnostic.code === 'REMOVED_PRESET_UTILITY')).toBe(false)
+ }
+ expect(inspected.manifest).not.toHaveProperty('nativeClassNames')
+ const other = await inspectClass(context, { className: 'size:30px' })
+ expect(other.diagnostics?.some(diagnostic => diagnostic.code === 'REMOVED_PRESET_UTILITY')).toBe(true)
} finally { context.dispose() }
})
diff --git a/packages/next/AI.md b/packages/next/AI.md
index a98003850..599e5b1c5 100644
--- a/packages/next/AI.md
+++ b/packages/next/AI.md
@@ -9,7 +9,7 @@
- `pre-render` mode through the Next.js Adapter API.
- `runtime` mode through the Next client instrumentation hook.
- `progressive` mode as runtime plus pre-render behavior.
-- Default `static` mode through generated CSS and scanner loaders for Turbopack and Webpack.
+- Default `static` mode through generated CSS; Turbopack CSS loaders own source watches, while Webpack keeps an early source loader.
- Next-specific manifest import/loaders and static CSS loaders.
- Build output rendering helpers.
@@ -47,7 +47,7 @@
- Next Adapter API type changes across Next major versions.
- Accidentally processing non-HTML assets.
- Duplicate writes for fallback HTML listed through multiple output groups.
-- Turbopack loader behavior as an incremental scanner.
+- Turbopack CSS loader watch ownership and direct generated CSS imports.
- Over-broad Turbopack JS loader rules breaking Next client component classification for linked workspace packages.
- Runtime injection must preserve user `instrumentation-client` via the secondary alias before overriding Next's `private-next-instrumentation-client`.
- Runtime, preload, mode default, and cascade-layer changes must be audited against Vite, Webpack, Nuxt, and Astro so integration behavior does not drift.
@@ -62,8 +62,10 @@
- Stylesheet collections may be retained only while entries, order, processed inputs
and dependencies are unchanged. Explicit `@source` includes and `@reference` context conservatively rebuild
because their discovery/lowering is not fully represented by the import inventory.
-- Module notifications share work only before snapshot capture; explicit stylesheet
- inputs remain ordered. Publish assets before the entry and the receipt after it.
+- Webpack module notifications share work only before snapshot capture; explicit
+ stylesheet inputs remain ordered. Turbopack does not publish from JS module
+ loaders: source and directory watches belong to CSS entries and imported
+ `.master/next.css`. Publish assets before the entry and the receipt after it.
- Webpack root-context watching excludes publication locks, receipts, processed-input
storage, scan logs and atomic temporary files. Generated CSS/assets and configuration
state remain observable; do not ignore the entire `.master` directory.
diff --git a/packages/next/README.md b/packages/next/README.md
index 9c556cb1c..cdb31b933 100644
--- a/packages/next/README.md
+++ b/packages/next/README.md
@@ -23,7 +23,7 @@ export default nextConfig
## Modes
-`@master/css-next` defaults to progressive rendering and supports these mode values:
+`@master/css-next` defaults to static rendering and supports these mode values:
| Mode | Description |
| --- | --- |
@@ -49,7 +49,7 @@ In static mode, import the generated stylesheet from your app stylesheet:
}
```
-Then enable static mode:
+Static mode is the default. To select it explicitly:
```js
import withMasterCSS from '@master/css-next'
@@ -64,7 +64,7 @@ const nextConfig = await withMasterCSS({
export default nextConfig
```
-Static mode uses source-glob scanning as the correctness baseline. A Turbopack CSS loader replaces `@import '@master/css'` with generated CSS. CSS files that import `@master/css` are treated as native CSS pruning roots by default; add `@preserve native;` when native CSS must be preserved.
+Static mode uses source-glob scanning as the correctness baseline. A Turbopack CSS loader replaces `@import '@master/css'` with generated CSS. Native CSS is preserved by default. Enable `pruneNativeCSS: true` for intentional project pruning, or use `@prune native;` for one source file. With integration-level pruning enabled, `@preserve native;` excludes one source file.
The generated entry can import companion stylesheets. Static mode publishes these stylesheets and referenced resources together for Turbopack, preserving source-relative resource URLs. Resource updates receive new filenames; earlier immutable assets remain available to builds already reading them. Static preparation rejects output failures so callers can retry after the cause is removed.
@@ -94,8 +94,9 @@ The `options` object is passed to `withMasterCSS(nextConfig, options)`.
| Option | Type | Default | Description |
| --- | --- | --- | --- |
| `enabled` | `boolean` | `true` | Enables the integration. Use `false` to disable it. |
-| `mode` | `'runtime' \| 'pre-render' \| 'static' \| 'progressive'` | `'progressive'` | Next.js integration mode. |
-| `runtime` | `boolean \| { enabled?: boolean; avoidFOUC?: boolean }` | `{ enabled: true }` | Runtime behavior in `runtime` and `progressive` modes. |
+| `mode` | `'runtime' \| 'pre-render' \| 'static' \| 'progressive'` | `'static'` | Next.js integration mode. |
+| `runtime` | `boolean \| { enabled?: boolean; avoidFOUC?: boolean }` | `{ enabled: false }` | Enabled by runtime/progressive modes. Explicit enabled values must agree with the mode. |
+| `pruneNativeCSS` | `boolean` | `false` | Opts project-owned native CSS into pruning. |
| `scanner` | `MasterCSSScannerConfiguration` | `{}` | Scanner configuration for static mode. |
| `buildReport` | `boolean \| string` | `false` | Write a build report with rendered files. `true` writes `.next/master-css-build-report.json`; a string is resolved from `distDir`. |
| `debug` | `boolean` | `false` | Log rendered output details during `next build`. |
diff --git a/packages/next/e2e/css-manifest-query/app/page.jsx b/packages/next/e2e/css-manifest-query/app/page.jsx
index 07c1148ff..9b0a29e13 100644
--- a/packages/next/e2e/css-manifest-query/app/page.jsx
+++ b/packages/next/e2e/css-manifest-query/app/page.jsx
@@ -10,9 +10,10 @@ function getVariable(namespace, key) {
export default function Page() {
const color = getVariable('color', 'e2e')
const breakpoint = getVariable('breakpoint', 'fixture')
+ const fontWeight = getVariable('font-weight', 'bold')
return (
-
+
{color}:{breakpoint}
)
diff --git a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-1cbfd5bd3a500142b187e9f63864a12dc4265824d450279964bc105531352996.css b/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-1cbfd5bd3a500142b187e9f63864a12dc4265824d450279964bc105531352996.css
deleted file mode 100644
index 66e3a16c3..000000000
--- a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-1cbfd5bd3a500142b187e9f63864a12dc4265824d450279964bc105531352996.css
+++ /dev/null
@@ -1,2 +0,0 @@
-
-/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQSJ9 */
diff --git a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-2d919a59fdadb862826379fe7ffbed77f96c3aab7be7b554e46fececdbdfe433.css b/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-2d919a59fdadb862826379fe7ffbed77f96c3aab7be7b554e46fececdbdfe433.css
deleted file mode 100644
index 7d244a11e..000000000
--- a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-2d919a59fdadb862826379fe7ffbed77f96c3aab7be7b554e46fececdbdfe433.css
+++ /dev/null
@@ -1,5 +0,0 @@
-@import "./c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-a10572ea9e8348dfe3d0e157929da4e482ea02aef80da2bf2dcc3f899d42d53b.css";
-@import "./c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-1cbfd5bd3a500142b187e9f63864a12dc4265824d450279964bc105531352996.css";
-@import "./c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-bd80d3758c4a06dee159a702b2719e26415602942fea159f20890002b90649d5.css";
-@import "./c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-7d6b4362977e5a0b5a99ca281514bfc3bb0f6e14a483438b4e1bc8076d2fcb33.css";
-/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vVXNlcnMvYXJvbi9tYXN0ZXIvY3NzL3BhY2thZ2VzL3ByZXNldC9zcmMvaW5kZXguY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCIuL2Jhc2UuY3NzXCI7XG5AaW1wb3J0IFwiLi90aGVtZS5jc3NcIjtcbkBpbXBvcnQgXCIuL3ZhcmlhbnRzLmNzc1wiO1xuQGltcG9ydCBcIi4vdXRpbGl0aWVzLmNzc1wiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLGtKIn0= */
diff --git a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-7d6b4362977e5a0b5a99ca281514bfc3bb0f6e14a483438b4e1bc8076d2fcb33.css b/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-7d6b4362977e5a0b5a99ca281514bfc3bb0f6e14a483438b4e1bc8076d2fcb33.css
deleted file mode 100644
index 66e3a16c3..000000000
--- a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-7d6b4362977e5a0b5a99ca281514bfc3bb0f6e14a483438b4e1bc8076d2fcb33.css
+++ /dev/null
@@ -1,2 +0,0 @@
-
-/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQSJ9 */
diff --git a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-8b3697fd0abf5cc7538681f772e93ec43e85dccd41b440ca080527acbeb03a06.css b/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-8b3697fd0abf5cc7538681f772e93ec43e85dccd41b440ca080527acbeb03a06.css
deleted file mode 100644
index fca8ec7c4..000000000
--- a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-8b3697fd0abf5cc7538681f772e93ec43e85dccd41b440ca080527acbeb03a06.css
+++ /dev/null
@@ -1,2 +0,0 @@
-@import "./c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-2d919a59fdadb862826379fe7ffbed77f96c3aab7be7b554e46fececdbdfe433.css";
-/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vVXNlcnMvYXJvbi9tYXN0ZXIvY3NzL3BhY2thZ2VzL2Nzcy9zcmMvaW5kZXguY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJAbWFzdGVyL2Nzcy1wcmVzZXRcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrSiJ9 */
diff --git a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-a10572ea9e8348dfe3d0e157929da4e482ea02aef80da2bf2dcc3f899d42d53b.css b/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-a10572ea9e8348dfe3d0e157929da4e482ea02aef80da2bf2dcc3f899d42d53b.css
deleted file mode 100644
index b04d9b375..000000000
--- a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-a10572ea9e8348dfe3d0e157929da4e482ea02aef80da2bf2dcc3f899d42d53b.css
+++ /dev/null
@@ -1,180 +0,0 @@
-@layer theme;
-
-@layer base {
- * {
- text-rendering: geometricprecision;
- }
-
- body {
- -webkit-text-size-adjust: 100%;
- -moz-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
- text-size-adjust: 100%;
- -moz-osx-font-smoothing: grayscale;
- -webkit-font-smoothing: antialiased;
- line-height: 1.2;
- }
-
- a, button {
- touch-action: manipulation;
- }
-
- [role="button"], summary, button, [type="button"] {
- -webkit-user-select: none;
- user-select: none;
- }
-
- *, :before, :after {
- box-sizing: border-box;
- }
-
- body {
- -moz-tab-size: 2;
- tab-size: 2;
- }
-
- img, svg, video, canvas, audio, iframe, embed, object {
- max-width: 100%;
- display: block;
- }
-
- html, body {
- height: -moz-available;
- }
-
- abbr[title] {
- text-decoration: underline dotted;
- }
-
- b, strong {
- font-weight: bolder;
- }
-
- pre, code, kbd, samp {
- font-size: 1em;
- }
-
- ::-moz-focus-inner {
- border-style: none;
- padding: 0;
- }
-
- :-moz-ui-invalid {
- box-shadow: none;
- }
-
- progress {
- vertical-align: baseline;
- }
-
- [type="search"] {
- appearance: textfield;
- outline-offset: -2px;
- }
-
- ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
- height: auto;
- }
-
- ::-webkit-search-decoration {
- -webkit-appearance: none;
- }
-
- ::-webkit-file-upload-button {
- -webkit-appearance: button;
- font: inherit;
- }
-
- hr {
- height: 0;
- color: inherit;
- }
-
- small {
- font-size: 80%;
- }
-
- sub, sup {
- vertical-align: baseline;
- font-size: 75%;
- line-height: 0;
- position: relative;
- }
-
- sub {
- bottom: -.25em;
- }
-
- sup {
- top: -.5em;
- }
-
- table {
- text-indent: 0;
- border-color: inherit;
- }
-
- body, :host {
- font-family: var(--font-family-sans);
- font-feature-settings: var(--font-feature-sans, normal);
- }
-
- code, kbd, samp, pre {
- font-family: var(--font-family-mono);
- font-feature-settings: var(--font-feature-mono, normal);
- }
-
- a {
- color: inherit;
- text-decoration: none;
- }
-
- button, input, optgroup, select, textarea {
- font: inherit;
- font-feature-settings: inherit;
- font-variation-settings: inherit;
- color: inherit;
- background-color: #0000;
- margin: 0;
- padding: 0;
- font-size: 100%;
- }
-
- *, :before, :after {
- border-style: solid;
- border-width: 0;
- }
-
- body, blockquote, dl, dd, hr, figure, p, pre, h1, h2, h3, h4, h5, h6 {
- margin: 0;
- }
-
- td, legend, fieldset {
- padding: 0;
- }
-
- ul, ol {
- margin: 0;
- padding: 0;
- }
-
- body {
- -webkit-tap-highlight-color: transparent;
- }
-
- ul {
- list-style: none;
- }
-
- h1, h2, h3, h4, h5, h6 {
- font-size: inherit;
- font-weight: inherit;
- }
-
- [hidden] {
- display: none;
- }
-}
-
-@layer defaults, components, utilities;
-/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vVXNlcnMvYXJvbi9tYXN0ZXIvY3NzL3BhY2thZ2VzL3ByZXNldC9zcmMvYmFzZS5jc3MiXSwic291cmNlc0NvbnRlbnQiOlsiQGxheWVyIHRoZW1lLCBiYXNlLCBkZWZhdWx0cywgY29tcG9uZW50cywgdXRpbGl0aWVzO1xuXG5AbGF5ZXIgYmFzZSB7XG4gIC8qIEltcHJvdmUgdGV4dCByZW5kZXJpbmcgcHJlY2lzaW9uIGFjcm9zcyBicm93c2Vycy4gKi9cbiAgKiB7XG4gICAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjtcbiAgfVxuXG4gIC8qIE5vcm1hbGl6ZSBib2R5IHRleHQgbWV0cmljcyBhbmQgZm9udCBzbW9vdGhpbmcuICovXG4gIGJvZHkge1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gICAgLW1vei10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAgIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIH1cblxuICAvKiBSZW1vdmUgdG91Y2ggZGVsYXkgZnJvbSBjb21tb24gaW50ZXJhY3RpdmUgZWxlbWVudHMuICovXG4gIGEsIGJ1dHRvbiB7XG4gICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG4gIH1cblxuICAvKiBQcmV2ZW50IGFjY2lkZW50YWwgdGV4dCBzZWxlY3Rpb24gb24gYnV0dG9uLWxpa2UgY29udHJvbHMuICovXG4gIFtyb2xlPWJ1dHRvbl0sIHN1bW1hcnksXG4gIGJ1dHRvbiwgW3R5cGU9YnV0dG9uXSB7XG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgfVxuXG4gIC8qIFVzZSBib3JkZXItYm94IHNpemluZyBmb3IgYWxsIGVsZW1lbnRzIGFuZCBwc2V1ZG8tZWxlbWVudHMuICovXG4gICosIDo6YmVmb3JlLCA6OmFmdGVyIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG5cbiAgLyogTm9ybWFsaXplIHRhYiB3aWR0aCBmb3IgcmVhZGFibGUgcHJlZm9ybWF0dGVkIHRleHQuICovXG4gIGJvZHkge1xuICAgIC1tb3otdGFiLXNpemU6IDI7XG4gICAgdGFiLXNpemU6IDI7XG4gIH1cblxuICAvKiBNYWtlIGVtYmVkZGVkIG1lZGlhIHJlc3BvbnNpdmUgYW5kIGJsb2NrLWxldmVsIGJ5IGRlZmF1bHQuICovXG4gIGltZywgc3ZnLCB2aWRlbywgY2FudmFzLCBhdWRpbywgaWZyYW1lLCBlbWJlZCwgb2JqZWN0IHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAvKiBjb25zaXN0ZW50ICovXG5cbiAgLyogS2VlcCB0aGUgcm9vdCB2aWV3cG9ydCBoZWlnaHQgY29uc2lzdGVudCBvbiBtb2Rlcm4gYW5kIFdlYktpdCBicm93c2Vycy4gKi9cbiAgaHRtbCwgYm9keSB7XG4gICAgaGVpZ2h0OiAxMDBkdmg7XG4gICAgaGVpZ2h0OiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlO1xuICAgIGhlaWdodDogLW1vei1hdmFpbGFibGU7XG4gIH1cblxuICAvKiBFbnN1cmUgYWJicmV2aWF0ZWQgdGV4dCB3aXRoIHRpdGxlcyBoYXMgYSBjb25zaXN0ZW50IHVuZGVybGluZSBzdHlsZS4gKi9cbiAgYWJiclt0aXRsZV0ge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcbiAgfVxuXG4gIC8qIEtlZXAgYm9sZCB0ZXh0IHNlbWFudGljYWxseSBzdHJvbmdlciB0aGFuIHN1cnJvdW5kaW5nIHRleHQuICovXG4gIGIsIHN0cm9uZyB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbiAgfVxuXG4gIC8qIE5vcm1hbGl6ZSBtb25vc3BhY2UtcmVsYXRlZCBlbGVtZW50IHNpemluZy4gKi9cbiAgcHJlLFxuICBjb2RlLFxuICBrYmQsXG4gIHNhbXAge1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICB9XG5cbiAgLyogUmVtb3ZlIEZpcmVmb3ggaW5uZXIgZm9jdXMgcGFkZGluZyBhbmQgYm9yZGVyIGZyb20gY29udHJvbHMuICovXG4gIDo6LW1vei1mb2N1cy1pbm5lciB7XG4gICAgYm9yZGVyLXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAvKiBSZW1vdmUgRmlyZWZveCBpbnZhbGlkIGZpZWxkIHNoYWRvd3MuICovXG4gIDotbW96LXVpLWludmFsaWQge1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAvKiBBbGlnbiBwcm9ncmVzcyBlbGVtZW50cyBjb25zaXN0ZW50bHkgd2l0aCBzdXJyb3VuZGluZyB0ZXh0LiAqL1xuICBwcm9ncmVzcyB7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICB9XG5cbiAgLyogTm9ybWFsaXplIHNlYXJjaCBpbnB1dCBhcHBlYXJhbmNlIGFuZCBvdXRsaW5lIG9mZnNldC4gKi9cbiAgW3R5cGU9XCJzZWFyY2hcIl0ge1xuICAgIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgfVxuXG4gIC8qIEtlZXAgV2ViS2l0IG51bWJlciBpbnB1dCBzcGluIGJ1dHRvbnMgYXQgdGhlaXIgbmF0aXZlIGhlaWdodC4gKi9cbiAgOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLCA6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICAgIGhlaWdodDogYXV0bztcbiAgfVxuXG4gIC8qIFJlbW92ZSBXZWJLaXQgc2VhcmNoIGlucHV0IGRlY29yYXRpb24uICovXG4gIDo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICB9XG5cbiAgLyogTm9ybWFsaXplIFdlYktpdCBmaWxlIHVwbG9hZCBidXR0b24gYXBwZWFyYW5jZSBhbmQgZm9udC4gKi9cbiAgOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XG4gICAgZm9udDogaW5oZXJpdDtcbiAgfVxuXG4gIC8qIE5vcm1hbGl6ZSBob3Jpem9udGFsIHJ1bGUgc2l6ZSBhbmQgY29sb3IgaW5oZXJpdGFuY2UuICovXG4gIGhyIHtcbiAgICBoZWlnaHQ6IDA7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cblxuICAvKiBOb3JtYWxpemUgc21hbGwgdGV4dCBzaXppbmcuICovXG4gIHNtYWxsIHtcbiAgICBmb250LXNpemU6IDgwJTtcbiAgfVxuXG4gIC8qIE5vcm1hbGl6ZSBzdXBlcnNjcmlwdCBhbmQgc3Vic2NyaXB0IHNpemluZyBhbmQgcG9zaXRpb25pbmcgY29udGV4dC4gKi9cbiAgc3ViLCBzdXAge1xuICAgIGZvbnQtc2l6ZTogNzUlO1xuICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIH1cblxuICAvKiBQb3NpdGlvbiBzdWJzY3JpcHRzIGNvbnNpc3RlbnRseSBiZWxvdyB0aGUgYmFzZWxpbmUuICovXG4gIHN1YiB7XG4gICAgYm90dG9tOiAtMC4yNWVtO1xuICB9XG5cbiAgLyogUG9zaXRpb24gc3VwZXJzY3JpcHRzIGNvbnNpc3RlbnRseSBhYm92ZSB0aGUgYmFzZWxpbmUuICovXG4gIHN1cCB7XG4gICAgdG9wOiAtMC41ZW07XG4gIH1cblxuICAvKiBOb3JtYWxpemUgdGFibGUgaW5kZW50YXRpb24gYW5kIGJvcmRlciBjb2xvciBpbmhlcml0YW5jZS4gKi9cbiAgdGFibGUge1xuICAgIHRleHQtaW5kZW50OiAwO1xuICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcbiAgfVxuXG4gIC8qIEFwcGx5IHRoZSBkZWZhdWx0IHNhbnMgZm9udCBzdGFjayB0byBkb2N1bWVudHMgYW5kIHNoYWRvdyBob3N0cy4gKi9cbiAgYm9keSwgOmhvc3Qge1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1zYW5zKTtcbiAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IHZhcigtLWZvbnQtZmVhdHVyZS1zYW5zLCBub3JtYWwpO1xuICB9XG5cbiAgLyogQXBwbHkgdGhlIGRlZmF1bHQgbW9ub3NwYWNlIGZvbnQgc3RhY2sgdG8gY29kZS1yZWxhdGVkIGVsZW1lbnRzLiAqL1xuICBjb2RlLCBrYmQsIHNhbXAsIHByZSB7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5LW1vbm8pO1xuICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogdmFyKC0tZm9udC1mZWF0dXJlLW1vbm8sIG5vcm1hbCk7XG4gIH1cblxuICAvKiByZW1vdmUgKi9cblxuICAvKiBSZW1vdmUgZGVmYXVsdCBsaW5rIGNvbG9yIGFuZCB1bmRlcmxpbmUgc3R5bGVzLiAqL1xuICBhIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICAvKiBSZXNldCBmb3JtIGNvbnRyb2wgdHlwb2dyYXBoeSwgc3BhY2luZywgY29sb3IsIGFuZCBiYWNrZ3JvdW5kLiAqL1xuICBidXR0b24sIGlucHV0LCBvcHRncm91cCwgc2VsZWN0LCB0ZXh0YXJlYSB7XG4gICAgZm9udDogaW5oZXJpdDtcbiAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IGluaGVyaXQ7XG4gICAgZm9udC12YXJpYXRpb24tc2V0dGluZ3M6IGluaGVyaXQ7XG4gICAgZm9udC1zaXplOiAxMDAlO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLyogUmVtb3ZlIGRlZmF1bHQgYm9yZGVycyB3aGlsZSBrZWVwaW5nIHNvbGlkIGJvcmRlciBzdHlsZSBhcyB0aGUgYmFzZWxpbmUuICovXG4gICosIDo6YmVmb3JlLCA6OmFmdGVyIHtcbiAgICBib3JkZXItd2lkdGg6IDA7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgfVxuXG4gIC8qIFJlbW92ZSBkZWZhdWx0IG1hcmdpbnMgZnJvbSBjb21tb24gYmxvY2sgYW5kIHRleHQgZWxlbWVudHMuICovXG4gIGJvZHksIGJsb2NrcXVvdGUsIGRsLCBkZCwgaHIsIGZpZ3VyZSwgcCwgcHJlLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAvKiBSZW1vdmUgZGVmYXVsdCBwYWRkaW5nIGZyb20gdGFibGUgY2VsbHMgYW5kIGZvcm0gZ3JvdXBpbmcgZWxlbWVudHMuICovXG4gIHRkLCBsZWdlbmQsIGZpZWxkc2V0IHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLyogUmVtb3ZlIGRlZmF1bHQgbGlzdCBzcGFjaW5nLiAqL1xuICB1bCwgb2wge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLyogUmVtb3ZlIG1vYmlsZSB0YXAgaGlnaGxpZ2h0IGNvbG9yLiAqL1xuICBib2R5IHtcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgLyogUmVtb3ZlIHVub3JkZXJlZCBsaXN0IG1hcmtlcnMuICovXG4gIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICB9XG5cbiAgLyogUmVzZXQgaGVhZGluZyB0eXBvZ3JhcGh5IHRvIGluaGVyaXQgZnJvbSBzdXJyb3VuZGluZyB0ZXh0LiAqL1xuICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XG4gIH1cblxuICAvKiBIaWRlIGVsZW1lbnRzIG1hcmtlZCB3aXRoIHRoZSBoaWRkZW4gYXR0cmlidXRlLiAqL1xuICBbaGlkZGVuXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUFBO0VBSUU7Ozs7RUFLQTs7Ozs7Ozs7OztFQVdBOzs7O0VBS0E7Ozs7O0VBT0E7Ozs7RUFLQTs7Ozs7RUFNQTs7Ozs7RUFRQTs7OztFQU9BOzs7O0VBS0E7Ozs7RUFLQTs7OztFQVFBOzs7OztFQU1BOzs7O0VBS0E7Ozs7RUFLQTs7Ozs7RUFNQTs7OztFQUtBOzs7O0VBS0E7Ozs7O0VBTUE7Ozs7O0VBTUE7Ozs7RUFLQTs7Ozs7OztFQVFBOzs7O0VBS0E7Ozs7RUFLQTs7Ozs7RUFNQTs7Ozs7RUFNQTs7Ozs7RUFRQTs7Ozs7RUFNQTs7Ozs7Ozs7Ozs7RUFZQTs7Ozs7RUFNQTs7OztFQUtBOzs7O0VBS0E7Ozs7O0VBTUE7Ozs7RUFLQTs7OztFQUtBOzs7OztFQU1BOzs7OztBQTNORix1QyJ9 */
diff --git a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-bd80d3758c4a06dee159a702b2719e26415602942fea159f20890002b90649d5.css b/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-bd80d3758c4a06dee159a702b2719e26415602942fea159f20890002b90649d5.css
deleted file mode 100644
index 66e3a16c3..000000000
--- a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-bd80d3758c4a06dee159a702b2719e26415602942fea159f20890002b90649d5.css
+++ /dev/null
@@ -1,2 +0,0 @@
-
-/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQSJ9 */
diff --git a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-entry.css b/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-entry.css
deleted file mode 100644
index 300f0925a..000000000
--- a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-entry.css
+++ /dev/null
@@ -1,4 +0,0 @@
-@import "./c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-8b3697fd0abf5cc7538681f772e93ec43e85dccd41b440ca080527acbeb03a06.css";
-
-@layer theme{:root{--font-family-sans:var(--font-sans, ui-sans-serif), system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-family-mono:var(--font-mono, ui-monospace), SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}}
-/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vVXNlcnMvYXJvbi9tYXN0ZXIvY3NzL3BhY2thZ2VzL25leHQvZTJlL3N0YXRpYy1leHBvcnQvYXBwL2dsb2JhbHMuY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgJ0BtYXN0ZXIvY3NzJztcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrSiJ9 */
diff --git a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-entry.css.assets.json b/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-entry.css.assets.json
deleted file mode 100644
index 506bdf7c8..000000000
--- a/packages/next/e2e/static-export/.master/stylesheets/06ed241712323a5695b1aa0965c42fce6072d8debb0232e53925bb628ebee0cb/c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-entry.css.assets.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":2,"files":[{"name":"c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-entry.css","sha256":"7c536b533339a2f0713ddb0219b3c79546fa22c800e612cd5cccc6701e81c40f","cssBytes":549,"sourceMap":"{\"version\":3,\"sources\":[\"file:///Users/aron/master/css/packages/next/e2e/static-export/app/globals.css\"],\"sourcesContent\":[\"@import '@master/css';\\n\"],\"names\":[],\"mappings\":\"AAAA,kJ\"}"},{"name":"c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-8b3697fd0abf5cc7538681f772e93ec43e85dccd41b440ca080527acbeb03a06.css","sha256":"da886cce320953af0727ee99cdc6f13c6169cd88cabfa962f812295c00269f47","cssBytes":146,"sourceMap":"{\"version\":3,\"sources\":[\"file:///Users/aron/master/css/packages/css/src/index.css\"],\"sourcesContent\":[\"@import \\\"@master/css-preset\\\";\\n\"],\"names\":[],\"mappings\":\"AAAA,kJ\"}"},{"name":"c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-2d919a59fdadb862826379fe7ffbed77f96c3aab7be7b554e46fececdbdfe433.css","sha256":"3c45775268485b273c3c9273b992f29995c097b39a24d5e41b740d5da8e50cf0","cssBytes":587,"sourceMap":"{\"version\":3,\"sources\":[\"file:///Users/aron/master/css/packages/preset/src/index.css\"],\"sourcesContent\":[\"@import \\\"./base.css\\\";\\n@import \\\"./theme.css\\\";\\n@import \\\"./variants.css\\\";\\n@import \\\"./utilities.css\\\";\\n\"],\"names\":[],\"mappings\":\"AAAA;AACA;AACA;AACA,kJ\"}"},{"name":"c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-a10572ea9e8348dfe3d0e157929da4e482ea02aef80da2bf2dcc3f899d42d53b.css","sha256":"5aa5d9321149baa59cbc830ff573ed8b989df22479632238c58f0a0e0c6c9de4","cssBytes":2779,"sourceMap":"{\"version\":3,\"sources\":[\"file:///Users/aron/master/css/packages/preset/src/base.css\"],\"sourcesContent\":[\"@layer theme, base, defaults, components, utilities;\\n\\n@layer base {\\n /* Improve text rendering precision across browsers. */\\n * {\\n text-rendering: geometricPrecision;\\n }\\n\\n /* Normalize body text metrics and font smoothing. */\\n body {\\n line-height: 1.2;\\n text-size-adjust: 100%;\\n -webkit-text-size-adjust: 100%;\\n -moz-text-size-adjust: 100%;\\n -ms-text-size-adjust: 100%;\\n -moz-osx-font-smoothing: grayscale;\\n -webkit-font-smoothing: antialiased;\\n }\\n\\n /* Remove touch delay from common interactive elements. */\\n a, button {\\n touch-action: manipulation;\\n }\\n\\n /* Prevent accidental text selection on button-like controls. */\\n [role=button], summary,\\n button, [type=button] {\\n -webkit-user-select: none;\\n user-select: none;\\n }\\n\\n /* Use border-box sizing for all elements and pseudo-elements. */\\n *, ::before, ::after {\\n box-sizing: border-box;\\n }\\n\\n /* Normalize tab width for readable preformatted text. */\\n body {\\n -moz-tab-size: 2;\\n tab-size: 2;\\n }\\n\\n /* Make embedded media responsive and block-level by default. */\\n img, svg, video, canvas, audio, iframe, embed, object {\\n max-width: 100%;\\n display: block;\\n }\\n\\n /* consistent */\\n\\n /* Keep the root viewport height consistent on modern and WebKit browsers. */\\n html, body {\\n height: 100dvh;\\n height: -webkit-fill-available;\\n height: -moz-available;\\n }\\n\\n /* Ensure abbreviated text with titles has a consistent underline style. */\\n abbr[title] {\\n text-decoration: underline dotted;\\n }\\n\\n /* Keep bold text semantically stronger than surrounding text. */\\n b, strong {\\n font-weight: bolder;\\n }\\n\\n /* Normalize monospace-related element sizing. */\\n pre,\\n code,\\n kbd,\\n samp {\\n font-size: 1em;\\n }\\n\\n /* Remove Firefox inner focus padding and border from controls. */\\n ::-moz-focus-inner {\\n border-style: none;\\n padding: 0;\\n }\\n\\n /* Remove Firefox invalid field shadows. */\\n :-moz-ui-invalid {\\n box-shadow: none;\\n }\\n\\n /* Align progress elements consistently with surrounding text. */\\n progress {\\n vertical-align: baseline;\\n }\\n\\n /* Normalize search input appearance and outline offset. */\\n [type=\\\"search\\\"] {\\n appearance: textfield;\\n outline-offset: -2px;\\n }\\n\\n /* Keep WebKit number input spin buttons at their native height. */\\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\\n height: auto;\\n }\\n\\n /* Remove WebKit search input decoration. */\\n ::-webkit-search-decoration {\\n -webkit-appearance: none;\\n }\\n\\n /* Normalize WebKit file upload button appearance and font. */\\n ::-webkit-file-upload-button {\\n -webkit-appearance: button;\\n font: inherit;\\n }\\n\\n /* Normalize horizontal rule size and color inheritance. */\\n hr {\\n height: 0;\\n color: inherit;\\n }\\n\\n /* Normalize small text sizing. */\\n small {\\n font-size: 80%;\\n }\\n\\n /* Normalize superscript and subscript sizing and positioning context. */\\n sub, sup {\\n font-size: 75%;\\n line-height: 0;\\n position: relative;\\n vertical-align: baseline;\\n }\\n\\n /* Position subscripts consistently below the baseline. */\\n sub {\\n bottom: -0.25em;\\n }\\n\\n /* Position superscripts consistently above the baseline. */\\n sup {\\n top: -0.5em;\\n }\\n\\n /* Normalize table indentation and border color inheritance. */\\n table {\\n text-indent: 0;\\n border-color: inherit;\\n }\\n\\n /* Apply the default sans font stack to documents and shadow hosts. */\\n body, :host {\\n font-family: var(--font-family-sans);\\n font-feature-settings: var(--font-feature-sans, normal);\\n }\\n\\n /* Apply the default monospace font stack to code-related elements. */\\n code, kbd, samp, pre {\\n font-family: var(--font-family-mono);\\n font-feature-settings: var(--font-feature-mono, normal);\\n }\\n\\n /* remove */\\n\\n /* Remove default link color and underline styles. */\\n a {\\n color: inherit;\\n text-decoration: none;\\n }\\n\\n /* Reset form control typography, spacing, color, and background. */\\n button, input, optgroup, select, textarea {\\n font: inherit;\\n font-feature-settings: inherit;\\n font-variation-settings: inherit;\\n font-size: 100%;\\n margin: 0;\\n padding: 0;\\n color: inherit;\\n background-color: transparent;\\n }\\n\\n /* Remove default borders while keeping solid border style as the baseline. */\\n *, ::before, ::after {\\n border-width: 0;\\n border-style: solid;\\n }\\n\\n /* Remove default margins from common block and text elements. */\\n body, blockquote, dl, dd, hr, figure, p, pre, h1, h2, h3, h4, h5, h6 {\\n margin: 0;\\n }\\n\\n /* Remove default padding from table cells and form grouping elements. */\\n td, legend, fieldset {\\n padding: 0;\\n }\\n\\n /* Remove default list spacing. */\\n ul, ol {\\n margin: 0;\\n padding: 0;\\n }\\n\\n /* Remove mobile tap highlight color. */\\n body {\\n -webkit-tap-highlight-color: transparent;\\n }\\n\\n /* Remove unordered list markers. */\\n ul {\\n list-style: none;\\n }\\n\\n /* Reset heading typography to inherit from surrounding text. */\\n h1, h2, h3, h4, h5, h6 {\\n font-size: inherit;\\n font-weight: inherit;\\n }\\n\\n /* Hide elements marked with the hidden attribute. */\\n [hidden] {\\n display: none;\\n }\\n}\\n\"],\"names\":[],\"mappings\":\"AAAA;;AAAA;EAIE;;;;EAKA;;;;;;;;;;EAWA;;;;EAKA;;;;;EAOA;;;;EAKA;;;;;EAMA;;;;;EAQA;;;;EAOA;;;;EAKA;;;;EAKA;;;;EAQA;;;;;EAMA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;;EAMA;;;;EAKA;;;;;;;EAQA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;;EAMA;;;;;EAQA;;;;;EAMA;;;;;;;;;;;EAYA;;;;;EAMA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;;AA3NF,uC\"}"},{"name":"c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-1cbfd5bd3a500142b187e9f63864a12dc4265824d450279964bc105531352996.css","sha256":"42ea521fb11376c6f02018849ea882f7af366ae41a228f5aa9572df0dc12c36a","cssBytes":0,"sourceMap":"{\"version\":3,\"sources\":[],\"sourcesContent\":[],\"names\":[],\"mappings\":\"A\"}"},{"name":"c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-bd80d3758c4a06dee159a702b2719e26415602942fea159f20890002b90649d5.css","sha256":"42ea521fb11376c6f02018849ea882f7af366ae41a228f5aa9572df0dc12c36a","cssBytes":0,"sourceMap":"{\"version\":3,\"sources\":[],\"sourcesContent\":[],\"names\":[],\"mappings\":\"A\"}"},{"name":"c3b1d0e926bc8d97dfb5e18f58d06391eb737de1e55a585847a5fecd53436e4b-7d6b4362977e5a0b5a99ca281514bfc3bb0f6e14a483438b4e1bc8076d2fcb33.css","sha256":"42ea521fb11376c6f02018849ea882f7af366ae41a228f5aa9572df0dc12c36a","cssBytes":0,"sourceMap":"{\"version\":3,\"sources\":[],\"sourcesContent\":[],\"names\":[],\"mappings\":\"A\"}"}]}
\ No newline at end of file
diff --git a/packages/next/e2e/static-local-css/app/probe.css b/packages/next/e2e/static-local-css/app/probe.css
index 4b65eb379..19dfad387 100644
--- a/packages/next/e2e/static-local-css/app/probe.css
+++ b/packages/next/e2e/static-local-css/app/probe.css
@@ -1,2 +1 @@
-@reference './globals.css';
.probe { color: var(--color-probe); }
diff --git a/packages/next/e2e/static-module-reference/app/globals.css b/packages/next/e2e/static-module-reference/app/globals.css
index 52c3a410f..5688a517e 100644
--- a/packages/next/e2e/static-module-reference/app/globals.css
+++ b/packages/next/e2e/static-module-reference/app/globals.css
@@ -1,3 +1,8 @@
@import '@master/css';
@theme light { --color-probe: #123456; }
@theme dark { --color-probe: #abcdef; }
+
+@mode ocean { [data-theme="ocean"] { @slot; } }
+@theme ocean { --color-probe: #082f49; }
+
+@theme { @keyframes project-pulse { from { opacity: .5; } to { opacity: .5; } } }
diff --git a/packages/next/e2e/static-module-reference/app/other/other.module.css b/packages/next/e2e/static-module-reference/app/other/other.module.css
new file mode 100644
index 000000000..be365d62e
--- /dev/null
+++ b/packages/next/e2e/static-module-reference/app/other/other.module.css
@@ -0,0 +1 @@
+.other { color: var(--color-probe); animation: project-pulse 1s linear infinite; }
diff --git a/packages/next/e2e/static-module-reference/app/other/page.jsx b/packages/next/e2e/static-module-reference/app/other/page.jsx
new file mode 100644
index 000000000..a9f701f69
--- /dev/null
+++ b/packages/next/e2e/static-module-reference/app/other/page.jsx
@@ -0,0 +1,6 @@
+import Link from 'next/link'
+import styles from './other.module.css'
+
+export default function OtherPage() {
+ return Second Module probe Home route
+}
diff --git a/packages/next/e2e/static-module-reference/app/page.jsx b/packages/next/e2e/static-module-reference/app/page.jsx
index f51ff5666..25d00554d 100644
--- a/packages/next/e2e/static-module-reference/app/page.jsx
+++ b/packages/next/e2e/static-module-reference/app/page.jsx
@@ -1,5 +1,6 @@
import styles from './probe.module.css'
+import Link from 'next/link'
export default function Page() {
- return Module stylesheet probe
+ return Module stylesheet probe Other route
}
diff --git a/packages/next/e2e/static-module-reference/app/probe.module.css b/packages/next/e2e/static-module-reference/app/probe.module.css
index 4b65eb379..7f37d61af 100644
--- a/packages/next/e2e/static-module-reference/app/probe.module.css
+++ b/packages/next/e2e/static-module-reference/app/probe.module.css
@@ -1,2 +1 @@
-@reference './globals.css';
-.probe { color: var(--color-probe); }
+.probe { color: var(--color-probe); animation: project-pulse 1s linear infinite; }
diff --git a/packages/next/src/index.ts b/packages/next/src/index.ts
index d4e6e8434..390b6ee4a 100644
--- a/packages/next/src/index.ts
+++ b/packages/next/src/index.ts
@@ -37,7 +37,8 @@ const MASTER_CSS_MANIFEST_RESOURCE_QUERY = new RegExp(MASTER_CSS_MANIFEST_QUERY.
const MASTER_CSS_MANIFEST_IMPORT_CONTENT_PATTERN = new RegExp(`\\${MASTER_CSS_MANIFEST_QUERY}`)
const MASTER_CSS_VIRTUAL_MANIFEST_PATH_PATTERN = createVirtualDefaultManifestModulePathPattern()
const MASTER_CSS_VIRTUAL_EMITTED_GLOBALS_PATH_PATTERN = createVirtualEmittedGlobalsModulePathPattern()
-const MASTER_CSS_STYLE_CONTENT_PATTERN = new RegExp(`${createManifestEntryPattern().source}|@(compose|at|reference|variant|light|dark)\\b`)
+const MASTER_CSS_STATIC_OUTPUT_PATTERN = /[/\\]\.master[/\\]next\.css$/
+const MASTER_CSS_STATIC_STYLESHEET_PATTERN = /[/\\]\.master[/\\]next-style-[^/\\]+\.css$/
const NEXT_INSTRUMENTATION_CLIENT_ID = 'private-next-instrumentation-client'
const MASTER_CSS_USER_INSTRUMENTATION_CLIENT_ID = 'private-next-master-css-user-instrumentation-client'
const NEXT_REQUIRE_INSTRUMENTATION_CLIENT_IDS = [
@@ -258,6 +259,8 @@ function applyMasterCSSWebpackConfig(
config.module.rules = composeWebpackStylesheets(config.module.rules ?? [], stylesheetLoaderPath, MASTER_CSS_MANIFEST_RESOURCE_QUERY, staticStatePath ? { staticStatePath } : {})
if (staticStatePath) {
config.watchOptions = { ...config.watchOptions, ignored: staticWatchIgnores(config.watchOptions?.ignored) }
+ // Webpack can publish during the first changed module's rebuild, avoiding
+ // a second compilation after the CSS entry notices the changed output.
config.module.rules.push({
test: /\.[mc]?[jt]sx?$/,
exclude: /[/\\]node_modules[/\\]/,
@@ -406,29 +409,21 @@ function applyMasterCSSTurbopackConfig(
all: [
{ path: /\.(css|scss|sass)$/ },
{ not: { path: /\.module\.(css|scss|sass)$/ } },
- { content: MASTER_CSS_STYLE_CONTENT_PATTERN },
+ { not: { path: NEXT_STYLESHEET_ASSET_PATTERN } },
{ not: { query: MASTER_CSS_MANIFEST_RESOURCE_QUERY } }
]
},
loaders: [{ loader: stylesheetLoaderPath, options: { sassOptions: nextConfig.sassOptions ?? {} } }],
type: 'css' as const
}
- // Directives can be introduced by @use/@forward in another Sass file.
- const importedSassRule = {
- ...masterCSSStyleRule,
- condition: { all: [
- { path: /\.(scss|sass)$/ },
- { not: { path: /\.module\.(scss|sass)$/ } },
- { not: { content: MASTER_CSS_STYLE_CONTENT_PATTERN } },
- { not: { query: MASTER_CSS_MANIFEST_RESOURCE_QUERY } }
- ] }
- }
const cssModuleRule = {
...masterCSSStyleRule,
- type: 'css-module' as const,
+ // Preserve Next's inferred Module type. An explicit css-module type also
+ // retypes its internal CSS asset and Turbopack cannot process that wrapper.
+ type: undefined,
condition: { all: [
{ path: /\.module\.(css|scss|sass)$/ },
- { any: [{ content: MASTER_CSS_STYLE_CONTENT_PATTERN }, { path: /\.(scss|sass)$/ }] },
+ { not: { path: NEXT_STYLESHEET_ASSET_PATTERN } },
{ not: { query: MASTER_CSS_MANIFEST_RESOURCE_QUERY } }
] }
}
@@ -460,27 +455,14 @@ function applyMasterCSSTurbopackConfig(
masterCSSVirtualManifestRule,
masterCSSEmittedGlobalsRule,
masterCSSManifestRule,
- ...(includeStyleRule ? [publishedStylesheetMapRule, masterCSSStyleRule, importedSassRule, cssModuleRule] : []),
+ publishedStylesheetMapRule,
+ ...(includeStyleRule ? [masterCSSStyleRule, cssModuleRule] : []),
...toRuleArray(configRules)
]
} satisfies TurbopackRules
}
}
-// Keep Next's original module type and RSC transforms, including 'use client'.
-// Setting type: 'ecmascript' bypasses those transforms; `as` on the '*' rule
-// also appends an extension and changes the source's module identity.
-function createStaticSourceRule(path: RegExp) {
- return {
- condition: {
- all: [
- { not: 'foreign' as const },
- { path }
- ]
- }
- }
-}
-
function createCSSManifestImportSourceRules(cssManifestImportLoaderPath: string, projectDir: string) {
const loader = {
loader: cssManifestImportLoaderPath,
@@ -510,7 +492,6 @@ function applyMasterCSSStaticTurbopackConfig(
cssManifestLoaderPath: string,
cssManifestImportLoaderPath: string,
stylesheetLoaderPath: string,
- staticLoaderPath: string,
staticCSSLoaderPath: string,
virtualCSSPath: string,
virtualManifestPath: string,
@@ -521,24 +502,6 @@ function applyMasterCSSStaticTurbopackConfig(
const turbopackConfig = applyMasterCSSTurbopackConfig(nextConfig, cssManifestLoaderPath, cssManifestImportLoaderPath, stylesheetLoaderPath, virtualCSSPath, virtualManifestPath, virtualEmittedGlobalsPath, projectDir, undefined, false)
const rules = turbopackConfig.rules || {}
const starRules = toRuleArray(rules['*'])
- const staticLoader = {
- loader: staticLoaderPath,
- options: {
- statePath
- }
- }
- const sourceRules = [
- createStaticSourceRule(/\.tsx$/),
- createStaticSourceRule(/\.ts$/),
- createStaticSourceRule(/\.mts$/),
- createStaticSourceRule(/\.cts$/),
- createStaticSourceRule(/\.jsx$/),
- createStaticSourceRule(/\.js$/),
- createStaticSourceRule(/\.cjs$/)
- ].map((rule) => ({
- ...rule,
- loaders: [staticLoader]
- }))
const cssImportRule = {
condition: {
all: [
@@ -558,31 +521,48 @@ function applyMasterCSSStaticTurbopackConfig(
],
type: 'css' as const
}
+ // A direct generated CSS import has no source stylesheet loader to own the
+ // inventory. Let that CSS module watch and refresh it.
+ const generatedCSSRule = {
+ condition: { all: [{ not: 'foreign' as const }, { path: MASTER_CSS_STATIC_OUTPUT_PATTERN }] },
+ loaders: [{ loader: staticCSSLoaderPath, options: { statePath } }],
+ type: 'css' as const
+ }
// Static publication owns entry stylesheets, but local styles still need
- // directive lowering and referenced theme resources before Next emits CSS.
- // Keep CSS Modules on Next's built-in path: Turbopack cannot process the
- // transformed inner CSS asset produced by a custom module stylesheet loader.
+ // directive lowering and project theme resources before Next emits CSS.
const localStyleRule = {
condition: {
all: [
{ path: /\.(css|scss|sass)$/ },
{ not: { path: /\.module\.(css|scss|sass)$/ } },
{ not: { content: createManifestEntryPattern() } },
- { any: [{ content: MASTER_CSS_STYLE_CONTENT_PATTERN }, { path: /\.(scss|sass)$/ }] },
+ { not: { path: MASTER_CSS_STATIC_OUTPUT_PATTERN } },
+ { not: { path: MASTER_CSS_STATIC_STYLESHEET_PATTERN } },
+ { not: { path: NEXT_STYLESHEET_ASSET_PATTERN } },
{ not: { query: MASTER_CSS_MANIFEST_RESOURCE_QUERY } }
]
},
loaders: [{ loader: stylesheetLoaderPath, options: { sassOptions: nextConfig.sassOptions ?? {} } }],
type: 'css' as const
}
+ const localModuleRule = {
+ ...localStyleRule,
+ type: undefined,
+ condition: { all: [
+ { path: /\.module\.(css|scss|sass)$/ },
+ { not: { content: createManifestEntryPattern() } },
+ { not: { query: MASTER_CSS_MANIFEST_RESOURCE_QUERY } }
+ ] }
+ }
return {
...turbopackConfig,
rules: {
...rules,
'*': [
- ...sourceRules,
+ generatedCSSRule,
cssImportRule,
localStyleRule,
+ localModuleRule,
...starRules
]
} satisfies TurbopackRules
@@ -661,7 +641,6 @@ export function withMasterCSS(nextConfig: T = {} as T, opt
cssManifestLoaderPath,
cssManifestImportLoaderPath,
stylesheetLoaderPath,
- resolveStaticLoaderPath(),
resolveStaticCSSLoaderPath(),
turbopackVirtualCSSPath,
turbopackVirtualManifestPath,
diff --git a/packages/next/src/prepare-entry-graph.ts b/packages/next/src/prepare-entry-graph.ts
index 98330ca2d..d3aa23caf 100644
--- a/packages/next/src/prepare-entry-graph.ts
+++ b/packages/next/src/prepare-entry-graph.ts
@@ -1,7 +1,7 @@
import { createHash } from 'node:crypto'
import { pathToFileURL } from 'node:url'
import { inspectCSS } from '@master/css-compiler'
-import { compileRenderedStylesheet, compileStylesheet } from '@master/css-compiler/stylesheet'
+import { compileRenderedStylesheet, compileStylesheet, type MasterCSSStylesheetCompileOptions } from '@master/css-compiler/stylesheet'
import { defaultBuildManifest } from '@master/css-internal/project'
import { createNextModuleGraph } from './prepare-module-graph'
import { createNextPostCSS } from './prepare-postcss'
@@ -11,7 +11,13 @@ import type { ModuleContext } from './prepare-module'
import type { NextStylesheetLoaderOptions } from './prepare-stylesheet'
export async function prepareNextEntryGraph(context: ModuleContext, projectDir: string, options: NextStylesheetLoaderOptions,
- onDependency: (file: string) => void, source: string, sourceMap?: string) {
+ onDependency: (file: string) => void, source: string, sourceMap?: string,
+ definitions: Pick = { baseManifest: defaultBuildManifest }): Promise<{
+ graph: ReturnType
+ entry: Awaited['prepareEntry']>>
+ manifest: MasterCSSStylesheetCompileOptions['baseManifest']
+ postcss: boolean
+ }> {
const postcss = options.preprocessed ? createNextPostCSS(context, projectDir, onDependency) : undefined
const raw = createNextModuleGraph(context, projectDir, options, onDependency, { raw: true })
const rawEntry = await raw.prepareEntry(source, sourceMap)
@@ -19,7 +25,7 @@ export async function prepareNextEntryGraph(context: ModuleContext, projectDir:
const loadSass = () => ({ async compileStringAsync(css: string) { return { css } } })
const resourceFiles = new Map()
const manifest = await compileRenderedStylesheet(context.resourcePath, rawEntry.source, {
- baseManifest: defaultBuildManifest, projectDir, preserveNativeCSS: true, loadSass,
+ ...definitions, projectDir, preserveNativeCSS: true, loadSass,
sourceMap: rawEntry.sourceMap, baseFile: context.resourcePath, onDependency: track,
delivery: {
entryURL: './entry.css',
@@ -39,7 +45,7 @@ export async function prepareNextEntryGraph(context: ModuleContext, projectDir:
inputs: raw.inputs, retainedImports: raw.retainedImports,
async transform(_file, input, inputMap) { return { source: input, sourceMap: inputMap, globalAnimations } }
})
- return { graph, entry: await graph.prepareEntry(rawEntry.source, rawEntry.sourceMap), manifest: defaultBuildManifest, postcss: false }
+ return { graph, entry: await graph.prepareEntry(rawEntry.source, rawEntry.sourceMap), manifest: definitions.baseManifest, postcss: false }
}
const generatedCSS = rebasePostCSSResources(manifest.generatedCSS, context.resourcePath, [...resourceFiles])
let processedGlobals = manifest.emittedGlobals
diff --git a/packages/next/src/sass-source-context.ts b/packages/next/src/sass-source-context.ts
index ff9194246..822d38ef6 100644
--- a/packages/next/src/sass-source-context.ts
+++ b/packages/next/src/sass-source-context.ts
@@ -1,6 +1,12 @@
import { fileURLToPath } from 'node:url'
type SassMap = { version: number; sources: string[]; sourcesContent?: (string | null)[]; sourceRoot?: string; mappings: string }
+function sameSourceURL(candidate: URL | undefined, url: URL) {
+ if (candidate?.href === url.href) return true
+ return candidate?.protocol === 'file:' && url.protocol === 'file:'
+ && candidate.search === url.search && candidate.hash === url.hash
+ && fileURLToPath(candidate) === fileURLToPath(url)
+}
const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
function decode(segment: string) {
const values: number[] = []
@@ -31,7 +37,7 @@ export function removeSassPrefixMap(map: object | undefined, url: URL, source: s
if (!map || !prefix) return map
const raw = map as SassMap
const base = new URL(raw.sourceRoot ? raw.sourceRoot.replace(/\/?$/, '/') : './', url)
- const index = raw.sources.findIndex(value => new URL(value, base).href === url.href)
+ const index = raw.sources.findIndex(value => sameSourceURL(new URL(value, base), url))
if (index < 0) return map
const lines = prefix.split(/\r\n?|\n/).length - 1
const sources = [...raw.sources], sourcesContent = [...raw.sourcesContent ?? []]
@@ -57,7 +63,7 @@ type Position = { line: number; column: number; offset: number }
type SassError = Error & { sassMessage?: string; span?: { url?: URL; start: Position; end: Position; text: string; context?: string } }
export function removeSassPrefixError(error: unknown, url: URL, source: string, prefix: string): unknown {
const original = error as SassError
- if (!prefix || !original?.span || original.span.url?.href !== url.href) return error
+ if (!prefix || !original?.span || !sameSourceURL(original.span.url, url)) return error
const lines = prefix.split(/\r\n?|\n/).length - 1, inserted = original.span.start.line < lines
const mappedURL = inserted ? new URL(url.href + '?master-css-additional-data') : url
const position = (value: Position) => ({ ...value, line: value.line - (inserted ? 0 : lines), offset: value.offset - (inserted ? 0 : prefix.length) })
diff --git a/packages/next/src/static-css-loader.ts b/packages/next/src/static-css-loader.ts
index aad84e371..460cf479a 100644
--- a/packages/next/src/static-css-loader.ts
+++ b/packages/next/src/static-css-loader.ts
@@ -1,4 +1,6 @@
-import { addStaticCSSDependencies, transformStaticStyleSource } from './static'
+import { addStaticCSSDependencies, readStaticState, refreshStaticOutput, transformStaticStyleSource } from './static'
+
+const generatedCSSPath = /[/\\]\.master[/\\]next\.css$/
interface LoaderContext {
resourcePath: string
@@ -28,13 +30,24 @@ export default function masterCSSNextStaticCSSLoader(this: LoaderContext, source
}
const preprocessorDependencies = this.getDependencies?.() ?? []
- const run = addStaticCSSDependencies(statePath, this.addDependency?.bind(this), this.addContextDependency?.bind(this), this.addMissingDependency?.bind(this))
- .then(() => transformStaticStyleSource(statePath, this.resourcePath, source, preprocessorDependencies))
- .then(async (content) => {
- // Transformation can discover resources and publish new companion files.
- await addStaticCSSDependencies(statePath, this.addDependency?.bind(this), this.addContextDependency?.bind(this), this.addMissingDependency?.bind(this))
- callback(null, content)
- })
+ const watch = () => addStaticCSSDependencies(statePath, this.addDependency?.bind(this), this.addContextDependency?.bind(this), this.addMissingDependency?.bind(this))
+ const run = Promise.resolve().then(async () => {
+ const state = readStaticState(statePath)
+ if (generatedCSSPath.test(this.resourcePath)) {
+ // A broad Turbopack root can also contain another project's output.
+ if (this.resourcePath !== state.outputPath) return source
+ const content = await refreshStaticOutput(statePath)
+ await watch()
+ return content
+ }
+ await watch()
+ const content = await transformStaticStyleSource(statePath, this.resourcePath, source, preprocessorDependencies)
+ // Transformation can discover resources and publish new companion files.
+ await watch()
+ return content
+ }).then(content => {
+ callback(null, content)
+ })
.catch((error: Error) => callback(error))
void run
diff --git a/packages/next/src/static.ts b/packages/next/src/static.ts
index 7703d68c7..1212237bd 100644
--- a/packages/next/src/static.ts
+++ b/packages/next/src/static.ts
@@ -356,6 +356,20 @@ export async function getOrCreateStaticSession(
return session
}
+/** Keep a directly imported generated CSS entry current when no source CSS entry is loaded. */
+export async function refreshStaticOutput(statePath: string) {
+ const state = readStaticState(statePath)
+ const options = resolveOptions({
+ mode: 'static',
+ scanner: state.options.scanner,
+ pruneNativeCSS: state.options.pruneNativeCSS,
+ debug: state.options.debug
+ })
+ const session = await getOrCreateStaticSession(state.projectDir, state.outputPath, options)
+ await session.write()
+ return readFileSync(state.outputPath, 'utf8')
+}
+
export async function prepareNextStatic(rawOptions: MasterCSSNextOptions = {}, setupOptions: PrepareNextStaticOptions = {}) {
const options = resolveOptions(rawOptions)
if (options.mode !== 'static') return
diff --git a/packages/next/src/stylesheet-delivery.ts b/packages/next/src/stylesheet-delivery.ts
index f08181c13..a7e261dc7 100644
--- a/packages/next/src/stylesheet-delivery.ts
+++ b/packages/next/src/stylesheet-delivery.ts
@@ -8,9 +8,8 @@ import { publishFile } from './static-publication'
const hash = (value: string | Buffer) => createHash('sha256').update(value).digest('hex')
/** The host loads entry CSS in place; publish every retained child before returning it. */
-export async function deliverNextStylesheet(file: string, projectDir: string, onDependency: (file: string) => void,
- compile: (delivery: MasterCSSStylesheetDeliveryOptions) => Promise) {
- const directory = join(projectDir, '.master/stylesheets', hash(file))
+export async function deliverNextStylesheet>(file: string, projectDir: string, onDependency: (file: string) => void,
+ compile: (delivery: MasterCSSStylesheetDeliveryOptions) => Promise, sharedGlobals = false) {
const href = (output: string) => './' + output
const resources = new Map()
const read = (file: string) => {
@@ -27,7 +26,14 @@ export async function deliverNextStylesheet(file: string, projectDir: string, on
onDependency
}
let result = await compile(delivery)
- revision = hash(JSON.stringify({ version: 2, stylesheets: result.stylesheets })) + '-'
+ // Generated globals have no local Module identity. Their resolved CSS already
+ // contains content-addressed resource URLs, so identical resource sets from
+ // separate modules can share one delivery entry without changing selectors.
+ const identity = sharedGlobals
+ ? hash(JSON.stringify({ version: 2, kind: 'generated-globals', stylesheets: result.stylesheets?.map(({ css, sourceMap }) => ({ css, sourceMap })) }))
+ : hash(file)
+ const directory = join(projectDir, '.master/stylesheets', identity)
+ revision = (sharedGlobals ? identity : hash(JSON.stringify({ version: 2, stylesheets: result.stylesheets }))) + '-'
result = await compile(delivery)
const assets = new Map()
const cssBytes = new Map()
diff --git a/packages/next/src/stylesheet-loader.ts b/packages/next/src/stylesheet-loader.ts
index fa226f299..706180bc0 100644
--- a/packages/next/src/stylesheet-loader.ts
+++ b/packages/next/src/stylesheet-loader.ts
@@ -1,14 +1,14 @@
-import { addStaticCSSDependencies, transformStaticStyleSource } from './static'
+import { addStaticCSSDependencies, resolveStaticOutputPath, transformStaticStyleSource } from './static'
import { prepareNextEntryGraph } from './prepare-entry-graph'
+import { nextGeneratedGlobalAnimations } from './prepare-global-module'
import type { ModuleContext } from './prepare-module'
import { deliverNextStylesheet } from './stylesheet-delivery'
-import { dirname, extname, resolve } from 'node:path'
+import { dirname, extname, relative, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
import { prepareNextStylesheet, type NextStylesheetLoaderOptions } from './prepare-stylesheet'
import {
compileRenderedStylesheet,
compileStylesheet,
- collectStylesheetEmittedGlobals,
transformStylesheet
} from '@master/css-compiler/stylesheet'
import {
@@ -34,19 +34,16 @@ function hasMasterStyleDirective(source: string) {
return source.includes('@settings') || source.includes('@theme') || source.includes('@master')
}
-function scopeModuleThemeVariables(code: string, generatedCSS: string | undefined, classNames: readonly string[] | undefined) {
- if (!generatedCSS || !classNames?.length || !code.includes(generatedCSS)) return code
- // Next's CSS Module pipeline requires a local class in every selector.
- // Variables referenced by a module can live on its own classes: descendants
- // inherit them, and mode queries retain the same conditions.
- const localSelector = [...new Set(classNames)].map(name => `.${name.replace(/(^[0-9]|[^a-zA-Z0-9_-])/gu, char => `\\${char.codePointAt(0)!.toString(16)} `)}`).join(',')
- const scoped = generatedCSS
- .replace(/:root\s*,\s*:host(?=\s*\{)|:host\s*,\s*:root(?=\s*\{)/gu, localSelector)
- .replace(/:root(?=\s*\{)|:host(?=\s*\{)/gu, localSelector)
- return code.replace(generatedCSS, scoped)
+function isGeneratedStylesheet(resourcePath: string, projectDir?: string) {
+ if (!projectDir) return false
+ const file = relative(projectDir, resourcePath).replace(/\\/g, '/')
+ return resourcePath === resolveStaticOutputPath(projectDir)
+ || /^\.master\/next-style-[^/]+\.css$/.test(file)
+ || file.startsWith('.master/stylesheets/')
}
function shouldAddStyleDependencies(resourcePath: string, source: string, projectDir?: string) {
+ if (isGeneratedStylesheet(resourcePath, projectDir)) return false
try {
const resolution = resolveStylesheetSync(resourcePath, source, { projectDir })
return Boolean(resolution && resolution.kind !== 'plain')
@@ -55,22 +52,10 @@ function shouldAddStyleDependencies(resourcePath: string, source: string, projec
}
}
-async function createGlobalStyleEntryEmittedGlobals(
- entries: readonly string[],
- baseManifest: Awaited>['manifest'],
- projectDir: string | undefined,
- dependencies: string[]
-) {
- if (!entries.length) return
- const result = await collectStylesheetEmittedGlobals(entries, {
- baseManifest,
- projectDir
- })
- dependencies.push(...result.dependencies)
- return result.emittedGlobals
-}
-
async function transformStyleSource(resourcePath: string, source: string, projectDir: string | undefined, options: NextStylesheetLoaderOptions, onDependency: (file: string) => void, inputMap?: object | string, loaderContext?: LoaderContext) {
+ if (isGeneratedStylesheet(resourcePath, projectDir)) {
+ return { code: source, dependencies: [], sourceMap: typeof inputMap === 'string' ? inputMap : inputMap ? JSON.stringify(inputMap) : undefined }
+ }
const rawSass = !options.preprocessed && ['.scss', '.sass'].includes(extname(resourcePath))
const prepared = rawSass ? await prepareNextStylesheet(resourcePath, source, projectDir, options, onDependency) : undefined
source = prepared?.source ?? source
@@ -135,38 +120,81 @@ async function transformStyleSource(resourcePath: string, source: string, projec
}
}
- if (resolution.kind === 'local') {
+ if (resolution.kind === 'local' || resolution.kind === 'plain') {
+ const moduleStyle = /\.module\.(?:css|scss|sass)$/u.test(resourcePath)
const entries = await discoverManifestEntries({ root: projectDir })
+ loaderContext?.addContextDependency?.(projectDir ?? dirname(resourcePath))
+ if (!entries.length && resolution.kind === 'plain') return { code: source, dependencies, sourceMap }
const projectManifest = await loadProjectManifest({
root: projectDir,
entries,
- baseManifest: defaultBuildManifest
+ baseManifest: defaultBuildManifest,
+ onDependency
})
- const emittedGlobals = await createGlobalStyleEntryEmittedGlobals(
- entries,
- projectManifest.manifest,
- projectDir,
- dependencies
- )
const result = await transformStylesheet(resourcePath, source, {
baseManifest: projectManifest.manifest,
loadSass,
...context,
projectDir,
- emittedGlobals
+ referenceFiles: entries,
+ transformNativeStylesheets: true,
+ generatedGlobals: moduleStyle ? 'separate' : 'inline'
})
dependencies.push(...projectManifest.dependencies, ...(result.dependencies || []))
+ if (!result.transformed) return { code: source, dependencies, sourceMap }
+ if (moduleStyle && result.globalStylesheet && nextGeneratedGlobalAnimations(result.globalStylesheet.css).length) {
+ // Managed animation names would be renamed by Next’s final Module pass.
+ // Scope and publish that graph once, retaining the public Module exports.
+ const preparedGraph = await prepareNextEntryGraph(loaderContext ?? { resourcePath }, projectDir ?? dirname(resourcePath), options, onDependency, source, sourceMap, {
+ baseManifest: projectManifest.manifest, referenceFiles: entries
+ })
+ const { graph, entry } = preparedGraph
+ const trackDependency = (file: string) => onDependency(graph.dependencyFile(file))
+ const delivered = await deliverNextStylesheet(resourcePath, projectDir ?? dirname(resourcePath), onDependency, delivery => compileRenderedStylesheet(resourcePath, entry.source, {
+ baseManifest: preparedGraph.manifest,
+ referenceFiles: preparedGraph.postcss ? undefined : entries,
+ projectDir, preserveNativeCSS: true, loadSass,
+ sourceMap: entry.sourceMap, baseFile: resourcePath, onDependency: trackDependency,
+ delivery: { ...delivery, resolveImport: graph.resolveImport, onDependency: trackDependency }
+ }))
+ dependencies.push(...delivered.dependencies.map(file => graph.dependencyFile(file)))
+ return { code: delivered.css + '\n' + entry.exportsCSS, sourceMap: delivered.sourceMap, dependencies, postcss: preparedGraph.postcss }
+ }
+ let code = result.code
+ let outputMap = result.sourceMap
+ if (moduleStyle && result.globalStylesheet) {
+ // Recompile the resource graph with publication URLs before relocating
+ // globals. Local CSS stays on Next's native Module path; the generated
+ // entry is already handled as global CSS by webpack-css-loader's pitch.
+ let preparedGlobals: Awaited> | undefined
+ const globals = await deliverNextStylesheet(resourcePath, projectDir ?? dirname(resourcePath), onDependency, async delivery => {
+ // This compiler boundary contains generated resources, never child
+ // stylesheet imports. Resource URLs are content-addressed and do not
+ // depend on the entry revision, so the publication pass can reuse it.
+ const delivered = preparedGlobals ??= await transformStylesheet(resourcePath, source, {
+ baseManifest: projectManifest.manifest, loadSass, ...context, projectDir,
+ referenceFiles: entries, transformNativeStylesheets: true, generatedGlobals: 'separate', delivery
+ })
+ dependencies.push(...delivered.dependencies)
+ const css = delivered.globalStylesheet?.css ?? ''
+ const sourceMap = delivered.globalStylesheet?.sourceMap ?? JSON.stringify({ version: 3, sources: [], names: [], mappings: '' })
+ return { css, sourceMap, entry: resourcePath,
+ stylesheets: [{ id: resourcePath, href: delivery.entryURL, css, sourceMap }],
+ resources: delivered.resources }
+ }, true)
+ code = globals.css + '\n' + code
+ if (outputMap) {
+ const map = JSON.parse(outputMap)
+ map.mappings = ';' + map.mappings
+ outputMap = JSON.stringify(map)
+ }
+ }
return {
- code: /\.module\.(?:css|scss|sass)$/u.test(resourcePath)
- ? scopeModuleThemeVariables(result.code, result.compilation?.generatedCSS, result.compilation?.nativeClassNames)
- : result.code,
- sourceMap: result.sourceMap,
+ code,
+ sourceMap: outputMap,
dependencies
}
}
- if (resolution.kind === 'plain') {
- return { code: source, dependencies, sourceMap }
- }
return { code: source, dependencies, sourceMap }
}
diff --git a/packages/next/tests/bug-hunt-entry-reference-build-state.test.ts b/packages/next/tests/bug-hunt-entry-reference-build-state.test.ts
index f42bba179..13a89fe75 100644
--- a/packages/next/tests/bug-hunt-entry-reference-build-state.test.ts
+++ b/packages/next/tests/bug-hunt-entry-reference-build-state.test.ts
@@ -9,7 +9,7 @@ for (const child of [false, true]) test(`Next build completion preserves entry r
mkdirSync(join(root, 'app'))
const entry = join(root, 'app/globals.css'), rules = join(root, 'app/rules.css'), token = join(root, 'app/tokens.css')
writeFileSync(token, '@utilities{audit-margin{margin:3rem}}')
- const source = '@reference "./tokens.css";.card{@compose audit-margin;}'
+ const source = "@reference \"./tokens.css\";.card{@variant media(all){margin:3rem;}}"
writeFileSync(entry, '@master entry;' + (child ? '@import "./rules.css";' : source))
if (child) writeFileSync(rules, source)
const result = await resolveMasterCSSBuildState(root, ['card'])
diff --git a/packages/next/tests/bug-hunt-loader-graph-delivery.test.ts b/packages/next/tests/bug-hunt-loader-graph-delivery.test.ts
index 2dd75df0d..90e52a1bc 100644
--- a/packages/next/tests/bug-hunt-loader-graph-delivery.test.ts
+++ b/packages/next/tests/bug-hunt-loader-graph-delivery.test.ts
@@ -1,4 +1,4 @@
-import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
+import { mkdirSync, mkdtempSync, realpathSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { dirname, join } from 'node:path'
import { fileURLToPath, pathToFileURL } from 'node:url'
@@ -22,7 +22,7 @@ function graph(file: string, code: string, output = new Map()) {
return output
}
for (const kind of ['nested-resource', 'external-import'] as const) test(`general Next loader publishes retained ${kind} graph`, async () => {
- const root = mkdtempSync(join(tmpdir(), 'next-loader-graph-'))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'next-loader-graph-')))
try {
const file = join(root, 'app/globals.css'), child = join(root, 'app/nested/child.css'), image = join(root, 'app/nested/pixel space.svg')
mkdirSync(dirname(child), { recursive: true })
@@ -64,9 +64,9 @@ for (const kind of ['nested-resource', 'external-import'] as const) test(`genera
})
test('general Next delivered entry retains original native declaration source maps', async () => {
- const root = mkdtempSync(join(tmpdir(), 'next-loader-entry-map-'))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'next-loader-entry-map-')))
try {
- const file = join(root, 'entry.css'), source = '@master entry;@utilities{paint{padding:2rem}}\n.card{@compose paint;}'
+ const file = join(root, 'entry.css'), source = "@master entry;@theme{--paint-padding:2rem}\n.card{@variant media(all){padding:var(--paint-padding);}}"
writeFileSync(file, source)
const result = await transform(root, file, source, []), sheets = graph(file, result.code)
const owner = [...sheets].find(([, css]) => css.includes('.card'))!
@@ -81,15 +81,15 @@ test('general Next delivered entry retains original native declaration source ma
})
for (const syntax of ['scss', 'sass']) test(`general Next ${syntax} delivered entry retains imported partial ownership and map`, async () => {
- const root = mkdtempSync(join(tmpdir(), 'next-loader-sass-entry-map-'))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'next-loader-sass-entry-map-')))
try {
const requireVite = createRequire(new URL('../../vite/package.json', import.meta.url))
const sass = createRequire(requireVite.resolve('vite')).resolve('sass')
const file = join(root, 'entry.' + syntax), partial = join(root, 'parts/_entry.scss')
mkdirSync(dirname(partial))
- writeFileSync(partial, '@reference "./tokens.css";.card{@compose paint;}')
- writeFileSync(join(root, 'parts/tokens.css'), '@utilities{paint{padding:2rem}}')
- writeFileSync(join(root, 'tokens.css'), '@utilities{paint{padding:99rem}}')
+ writeFileSync(partial, "@reference \"./tokens.css\";.card{@variant media(all){padding:var(--paint-padding);}}")
+ writeFileSync(join(root, 'parts/tokens.css'), '@theme{--paint-padding:2rem}')
+ writeFileSync(join(root, 'tokens.css'), '@theme{--paint-padding:99rem}')
const source = syntax === 'sass' ? '@use "parts/entry"\n@master entry\n' : '@use "parts/entry";@master entry;'
writeFileSync(file, source)
const dependencies: string[] = [], result = await transform(root, file, source, dependencies, { sassOptions: { implementation: sass } })
diff --git a/packages/next/tests/bug-hunt-output-source-maps.test.ts b/packages/next/tests/bug-hunt-output-source-maps.test.ts
index d3911a262..aeaf5ffbd 100644
--- a/packages/next/tests/bug-hunt-output-source-maps.test.ts
+++ b/packages/next/tests/bug-hunt-output-source-maps.test.ts
@@ -1,5 +1,5 @@
import { readStylesheetEntry } from './helpers/stylesheet-output'
-import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'
+import { mkdtempSync, realpathSync, rmSync, writeFileSync } from 'node:fs'
import { createRequire, SourceMap } from 'node:module'
import { join } from 'node:path'
import { tmpdir } from 'node:os'
@@ -10,8 +10,8 @@ import loader from '../src/stylesheet-loader'
const require = createRequire(new URL('../../vite/package.json', import.meta.url))
const sassFile = createRequire(require.resolve('vite')).resolve('sass')
async function fixture(run: (root: string) => Promise) {
- const root = mkdtempSync(join(tmpdir(), 'next-output-map-'))
- try { writeFileSync(join(root, 'master.css'), '@master entry;@utilities{paint{padding:2rem}}'); await run(root) }
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'next-output-map-')))
+ try { writeFileSync(join(root, 'master.css'), '@master entry;@theme{--paint-padding:2rem}'); await run(root) }
finally { rmSync(root, { recursive: true, force: true }) }
}
function compile(root: string, file: string, source: string, options = {}, inputMap?: object) {
@@ -29,7 +29,7 @@ function origin(result: Awaited>, token: string) {
test('Next injected package entry retains pure CSS authoring lines in its callback map', async () => {
await fixture(async root => {
- const file = join(root, 'entry.css'), source = '@master entry;@utilities{paint{padding:2rem}}\n.card{@compose paint;}'
+ const file = join(root, 'entry.css'), source = "@master entry;@theme{--paint-padding:2rem}\n.card{@variant media(all){padding:var(--paint-padding);}}"
const result = await compile(root, file, source)
expect(origin(result, '.card')).toMatchObject({ originalSource: pathToFileURL(file).href, originalLine: 1, originalColumn: 0 })
expect(result.sourceMap.sourcesContent).toContain(source)
@@ -38,29 +38,29 @@ test('Next injected package entry retains pure CSS authoring lines in its callba
for (const syntax of ['scss', 'sass']) test(`Next ${syntax} output map retains original root after additionalData`, async () => {
await fixture(async root => {
const file = join(root, 'card.module.' + syntax)
- const source = syntax === 'sass' ? '.card\n @compose paint\n' : '.card {\n @compose paint;\n}'
+ const source = syntax === 'sass' ? '.card\n @variant media(all)\n padding: var(--paint-padding)\n' : '.card {\n @variant media(all){padding:var(--paint-padding);}\n}'
const result = await compile(root, file, source, { sassOptions: { implementation: sassFile, additionalData: syntax === 'sass' ? '$a: 1\n$b: 2' : '$a:1;\n$b:2;' } })
expect(origin(result, '.card')).toMatchObject({ originalSource: pathToFileURL(file).href, originalLine: 0 })
- expect(origin(result, 'padding:2rem')).toMatchObject({ originalSource: pathToFileURL(file).href, originalLine: 1 })
+ expect(origin(result, 'padding:var(--paint-padding)')).toMatchObject({ originalSource: pathToFileURL(file).href, originalLine: syntax === 'sass' ? 2 : 1 })
expect(result.sourceMap.sourcesContent).toContain(source)
})
})
test('Next output map distinguishes imported Sass and injected CSS origins', async () => {
await fixture(async root => {
const file = join(root, 'card.module.scss'), child = join(root, '_card.scss')
- writeFileSync(child, '.card{@compose paint;}')
+ writeFileSync(child, '.card{@variant media(all){padding:var(--paint-padding);}}')
const result = await compile(root, file, '@use "card";', { sassOptions: { implementation: sassFile, additionalData: '$gap:1;' } })
expect(origin(result, '.card')).toMatchObject({ originalSource: pathToFileURL(child).href, originalLine: 0 })
- const injected = await compile(root, file, '.card{@compose paint;}', { sassOptions: { implementation: sassFile, additionalData: '.injected{margin:1rem}' } })
+ const injected = await compile(root, file, '.card{@variant media(all){padding:var(--paint-padding);}}', { sassOptions: { implementation: sassFile, additionalData: '.injected{margin:1rem}' } })
expect(origin(injected, '.injected')).toMatchObject({ originalSource: pathToFileURL(file).href + '?master-css-additional-data', originalLine: 0 })
})
})
test('Next preprocessed Webpack input chains the supplied Sass map through lowering', async () => {
await fixture(async root => {
- const file = join(root, 'card.module.scss'), source = '/* original */\n.card {\n @compose paint;\n}'
+ const file = join(root, 'card.module.scss'), source = '/* original */\n.card {\n @variant media(all){padding:var(--paint-padding);}\n}'
const prepared = await require(sassFile).compileStringAsync(source, { url: pathToFileURL(file), sourceMap: true, sourceMapIncludeSources: true })
const result = await compile(root, file, prepared.css, { preprocessed: true }, prepared.sourceMap)
- expect(origin(result, 'padding:2rem')).toMatchObject({ originalSource: pathToFileURL(file).href, originalLine: 2 })
+ expect(origin(result, 'padding:var(--paint-padding)')).toMatchObject({ originalSource: pathToFileURL(file).href, originalLine: 2 })
expect(result.sourceMap.sourcesContent).toContain(source)
})
})
diff --git a/packages/next/tests/bug-hunt-postcss-resource-host.test.ts b/packages/next/tests/bug-hunt-postcss-resource-host.test.ts
index 6facd30ac..9ca9ff948 100644
--- a/packages/next/tests/bug-hunt-postcss-resource-host.test.ts
+++ b/packages/next/tests/bug-hunt-postcss-resource-host.test.ts
@@ -76,7 +76,7 @@ test('installed Next PostCSS loader chain emits late resources once, keeps user
root.walkDecls(declaration => { if (declaration.prop === '--color-late') declaration.value = '#fedcba' })
} }]
const { dependencies, pitched, output } = await runHostChain(projectDir, entry, { source: lowered.css, sourceMap: lowered.sourceMap, generatedCSS, resources: policy }, plugins, true)
- expect(dependencies).toEqual([expect.stringContaining('.master/postcss'), entry])
+ expect(dependencies).toEqual([expect.stringContaining(join('.master', 'postcss')), entry])
expect(pitched[2]?.masterPostCSSResources).toBeTypeOf('function')
expect(counts).toEqual([1, 2])
expect(output).toBeDefined()
diff --git a/packages/next/tests/bug-hunt-preprocessed-stylesheet.test.ts b/packages/next/tests/bug-hunt-preprocessed-stylesheet.test.ts
index 112ff2f94..7f36aa642 100644
--- a/packages/next/tests/bug-hunt-preprocessed-stylesheet.test.ts
+++ b/packages/next/tests/bug-hunt-preprocessed-stylesheet.test.ts
@@ -15,10 +15,10 @@ for (const preprocessed of [false, true]) test(`Next preserves the host Sass pre
writeFileSync(join(root, 'master.css'), '@master entry;')
const resourcePath = join(root, preprocessed ? 'card.module.sass' : 'card.module.scss')
const raw = preprocessed
- ? '@reference "./master.css"\n.card\n @compose p:2rem\n'
- : '@reference "./master.css"; $padding:2rem; .card { @compose p:#{$padding}; }'
+ ? '@reference "./master.css"\n.card\n @variant media(all)\n padding: 2rem\n'
+ : '@reference "./master.css"; $padding:2rem; .card { @variant media(all){padding:#{$padding};} }'
writeFileSync(resourcePath, raw)
- const source = preprocessed ? '@reference "./master.css";\n.card { @compose p:2rem; }' : raw
+ const source = preprocessed ? "@reference \"./master.css\";\n.card { @variant media(all){padding:2rem;} }" : raw
const css = await new Promise((resolve, reject) => loader.call({
resourcePath, rootContext: root,
getOptions: () => ({ preprocessed }),
diff --git a/packages/next/tests/bug-hunt-raw-sass-context.test.ts b/packages/next/tests/bug-hunt-raw-sass-context.test.ts
index 1dedf93ab..6e0ee0d27 100644
--- a/packages/next/tests/bug-hunt-raw-sass-context.test.ts
+++ b/packages/next/tests/bug-hunt-raw-sass-context.test.ts
@@ -1,14 +1,15 @@
-import { mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from 'node:fs'
+import { mkdirSync, mkdtempSync, realpathSync, rmSync, symlinkSync, writeFileSync } from 'node:fs'
import { createRequire } from 'node:module'
import { dirname, join } from 'node:path'
import { tmpdir } from 'node:os'
import { expect, test } from 'vitest'
import loader from '../src/stylesheet-loader'
+import { readStylesheetText } from './helpers/stylesheet-output'
const require = createRequire(new URL('../../vite/package.json', import.meta.url))
const sassFile = createRequire(require.resolve('vite')).resolve('sass')
async function fixture(run: (root: string) => Promise) {
- const root = mkdtempSync(join(tmpdir(), 'next-raw-sass-'))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'next-raw-sass-')))
try {
mkdirSync(join(root, 'parts'));mkdirSync(join(root, 'node_modules'))
symlinkSync(dirname(sassFile), join(root, 'node_modules/sass'), 'dir')
@@ -19,26 +20,26 @@ async function fixture(run: (root: string) => Promise) {
function compile(root: string, file: string, source: string, dependencies: string[], sassOptions?: Record) {
return new Promise((resolve, reject) => loader.call({
resourcePath: file, rootContext: root, getOptions: () => ({ sassOptions }), addDependency: file => dependencies.push(file),
- async: () => (error: Error | null, output?: string) => error ? reject(error) : resolve(output!)
+ async: () => (error: Error | null, output?: string) => error ? reject(error) : resolve(readStylesheetText(file, output!))
}, source))
}
for (const syntax of ['scss', 'sass']) test(`Next raw ${syntax} retains partial reference and edit dependencies`, async () => {
await fixture(async root => {
const file = join(root, 'card.module.' + syntax), partial = join(root, 'parts/_rules.scss'), token = join(root, 'parts/tokens.css')
- writeFileSync(partial, '@reference "./tokens.css";.card{@compose paint;}')
- writeFileSync(token, '@utilities{paint{padding:2rem}}')
- writeFileSync(join(root, 'tokens.css'), '@utilities{paint{padding:99rem}}')
+ writeFileSync(partial, "@reference \"./tokens.css\";.card{@variant media(all){padding:var(--paint-padding);}}")
+ writeFileSync(token, '@theme{--paint-padding:2rem}')
+ writeFileSync(join(root, 'tokens.css'), '@theme{--paint-padding:99rem}')
const source = syntax === 'sass' ? '@use "parts/rules"\n' : '@use "parts/rules";', dependencies: string[] = []
- expect(await compile(root, file, source, dependencies)).toContain('padding:2rem')
+ expect(await compile(root, file, source, dependencies)).toContain('--paint-padding:2rem')
expect(dependencies).toEqual(expect.arrayContaining([file, partial, token]))
- writeFileSync(token, '@utilities{paint{padding:4rem}}')
- expect(await compile(root, file, source, [])).toContain('padding:4rem')
+ writeFileSync(token, '@theme{--paint-padding:4rem}')
+ expect(await compile(root, file, source, [])).toContain('--paint-padding:4rem')
})
})
test('Next raw Sass uses configured implementation, load paths and additional data', async () => {
await fixture(async root => {
writeFileSync(join(root, 'parts/_tokens.scss'), '$space:3rem;')
- const css = await compile(root, join(root, 'card.module.scss'), '@use "tokens";@reference "./master.css";.card{@compose p:#{tokens.$space};margin:$extra}', [], {
+ const css = await compile(root, join(root, 'card.module.scss'), '@use "tokens";@reference "./master.css";.card{@variant media(all){padding:#{tokens.$space};}margin:$extra}', [], {
implementation: sassFile, loadPaths: [join(root, 'parts')], additionalData: '$extra:4rem;', style: 'compressed'
})
expect(css).toContain('padding:3rem')
@@ -48,11 +49,11 @@ test('Next raw Sass uses configured implementation, load paths and additional da
test('Next registers missing mapped CSS reference before error and recovers on creation', async () => {
await fixture(async root => {
const file = join(root, 'card.module.scss'), missing = join(root, 'parts/missing.css'), dependencies: string[] = []
- writeFileSync(join(root, 'parts/_rules.scss'), '@reference "./missing.css";.card{@compose paint;}')
+ writeFileSync(join(root, 'parts/_rules.scss'), "@reference \"./missing.css\";.card{@variant media(all){padding:var(--paint-padding);}}")
await expect(compile(root, file, '@use "parts/rules";', dependencies)).rejects.toThrow()
expect(dependencies).toContain(missing)
- writeFileSync(missing, '@utilities{paint{padding:5rem}}')
- expect(await compile(root, file, '@use "parts/rules";', [])).toContain('padding:5rem')
+ writeFileSync(missing, '@theme{--paint-padding:5rem}')
+ expect(await compile(root, file, '@use "parts/rules";', [])).toContain('--paint-padding:5rem')
})
})
test('Next reports invalid compose in the original Sass partial', async () => {
diff --git a/packages/next/tests/bug-hunt-sass-directive-terminators.test.ts b/packages/next/tests/bug-hunt-sass-directive-terminators.test.ts
index fdd10a729..de7b44de7 100644
--- a/packages/next/tests/bug-hunt-sass-directive-terminators.test.ts
+++ b/packages/next/tests/bug-hunt-sass-directive-terminators.test.ts
@@ -15,7 +15,7 @@ for (const syntax of ['scss', 'indented']) for (const explicitCompressed of [fal
const root = mkdtempSync(join(tmpdir(), 'next-sass-terminators-'))
try {
const file = join(root, syntax === 'scss' ? 'card.module.scss' : 'card.module.sass')
- const source = syntax === 'scss' ? '@reference "./master.css";.card{@compose p:2rem;}' : '@reference "./master.css"\n.card\n @compose p:2rem\n'
+ const source = syntax === 'scss' ? "@reference \"./master.css\";.card{@variant media(all){padding:2rem;}}" : '@reference "./master.css"\n.card\n @variant media(all)\n padding: 2rem\n'
writeFileSync(file, source);writeFileSync(join(root, 'master.css'), '@master entry;')
const sassOptions = { loadPaths: [root], quietDeps: true, ...(explicitCompressed ? { style: 'compressed' } : {}) }
const original = { loader: '/node_modules/next/dist/compiled/sass-loader/cjs.js', options: { sourceMap: true, implementation: sassRequire.resolve('sass'), sassOptions } }
diff --git a/packages/next/tests/bug-hunt-sass-source-offsets.test.ts b/packages/next/tests/bug-hunt-sass-source-offsets.test.ts
index 5b4ff25c7..3a12547b6 100644
--- a/packages/next/tests/bug-hunt-sass-source-offsets.test.ts
+++ b/packages/next/tests/bug-hunt-sass-source-offsets.test.ts
@@ -1,5 +1,5 @@
import { readStylesheetText } from './helpers/stylesheet-output'
-import { mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from 'node:fs'
+import { mkdirSync, mkdtempSync, realpathSync, rmSync, symlinkSync, writeFileSync } from 'node:fs'
import { createRequire } from 'node:module'
import { dirname, join } from 'node:path'
import { tmpdir } from 'node:os'
@@ -9,7 +9,7 @@ import loader from '../src/stylesheet-loader'
const require = createRequire(new URL('../../vite/package.json', import.meta.url))
const sassFile = createRequire(require.resolve('vite')).resolve('sass')
async function fixture(run: (root: string) => Promise) {
- const root = mkdtempSync(join(tmpdir(), 'next-raw-sass-'))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'next-raw-sass-')))
try {
mkdirSync(join(root, 'parts'));mkdirSync(join(root, 'node_modules'))
symlinkSync(dirname(sassFile), join(root, 'node_modules/sass'), 'dir')
@@ -45,7 +45,7 @@ test('Next additionalData does not shift imported partial diagnostics', async ()
for (const syntax of ['scss', 'sass']) test(`Next ${syntax} reports Sass errors against authored root after injection`, async () => {
await fixture(async root => {
const file = join(root, 'card.module.' + syntax)
- const source = syntax === 'sass' ? '/* authored */\n.card\n padding: $missing\n' : '/* authored */\n.card { padding: $missing; }'
+ const source = syntax === 'sass' ? '/* authored */\n.card\n padding: $missing\n' : "/* authored */\n.card { @variant media(all){padding: $missing;} }"
const additionalData = syntax === 'sass' ? '$a: 1\r\n$b: 2' : '$a:1;\r\n$b:2;'
await expect(compile(root, file, source, [], { implementation: sassFile, additionalData })).rejects.toMatchObject({
span: { start: { line: syntax === 'sass' ? 2 : 1 }, text: '$missing' }, message: expect.stringContaining(`${file}:${syntax === 'sass' ? 3 : 2}:`)
@@ -62,7 +62,7 @@ test('Next labels compiler errors in injected Sass as injected content', async (
})
test('Next labels Sass errors in injected content without negative locations', async () => {
await fixture(async root => {
- await expect(compile(root, join(root, 'card.module.scss'), '.card{padding:1rem}', [], { implementation: sassFile, additionalData: '.injected{padding:$missing}' })).rejects.toMatchObject({
+ await expect(compile(root, join(root, 'card.module.scss'), '.card{padding:1rem}', [], { implementation: sassFile, additionalData: ".injected{@variant media(all){padding:$missing}}" })).rejects.toMatchObject({
span: { start: { line: 0 }, text: '$missing' }, message: expect.stringContaining('?master-css-additional-data:1:')
})
})
@@ -70,9 +70,9 @@ test('Next labels Sass errors in injected content without negative locations', a
for (const syntax of ['scss', 'sass']) test(`Next ${syntax} entry preserves imported partial reference ownership`, async () => {
await fixture(async root => {
const file = join(root, 'entry.' + syntax), partial = join(root, 'parts/_entry.scss')
- writeFileSync(partial, '@reference "./tokens.css";.card{@compose paint;}')
- writeFileSync(join(root, 'parts/tokens.css'), '@utilities{paint{padding:2rem}}')
- writeFileSync(join(root, 'tokens.css'), '@utilities{paint{padding:99rem}}')
+ writeFileSync(partial, "@reference \"./tokens.css\";.card{@variant media(all){padding:var(--paint-padding);}}")
+ writeFileSync(join(root, 'parts/tokens.css'), '@theme{--paint-padding:2rem}')
+ writeFileSync(join(root, 'tokens.css'), '@theme{--paint-padding:99rem}')
const source = syntax === 'sass' ? '@use "parts/entry"\n@master entry\n' : '@use "parts/entry";@master entry;'
const result = await compile(root, file, source, [], { implementation: sassFile })
expect(result).toContain('padding:2rem')
diff --git a/packages/next/tests/bug-hunt-turbopack-css-module.test.ts b/packages/next/tests/bug-hunt-turbopack-css-module.test.ts
index fa4d06483..e34416879 100644
--- a/packages/next/tests/bug-hunt-turbopack-css-module.test.ts
+++ b/packages/next/tests/bug-hunt-turbopack-css-module.test.ts
@@ -20,16 +20,16 @@ function stylesheetRules(file: string, source: string) {
return rules.filter(rule => rule.loaders?.some(loader => String(typeof loader === 'string' ? loader : (loader as { loader: string }).loader).endsWith('stylesheet-loader.js')) && matches(rule.condition, file, source))
}
for (const extension of ['css', 'scss', 'sass']) test(`Turbopack preserves CSS Module type for .module.${extension}`, () => {
- const rules = stylesheetRules(`card.module.${extension}`, '.card{@compose p:2rem;}')
+ const rules = stylesheetRules(`card.module.${extension}`, ".card{@variant media(all){padding:2rem;}}")
expect(rules).toHaveLength(1)
- expect(rules[0].type).toBe('css-module')
- expect(rules[0].as).toBeUndefined() // Preserve the source identity; type handles Sass output.
+ expect(rules[0].type).toBeUndefined()
+ expect(rules[0].as).toBeUndefined() // Preserve Next’s inferred module type and original filename.
})
for (const extension of ['scss', 'sass']) test(`Turbopack handles imported directives in .module.${extension} once`, () => {
const rules = stylesheetRules(`card.module.${extension}`, '@use "parts/card";')
expect(rules).toHaveLength(1)
- expect(rules[0].type).toBe('css-module')
- expect(rules[0].as).toBeUndefined() // Preserve the source identity; type handles Sass output.
+ expect(rules[0].type).toBeUndefined()
+ expect(rules[0].as).toBeUndefined() // Preserve Next’s inferred module type and original filename.
})
test('Turbopack keeps global Sass global and forwards configured options', () => {
const rules = stylesheetRules('globals.scss', '@use "parts/global";')
@@ -37,6 +37,8 @@ test('Turbopack keeps global Sass global and forwards configured options', () =>
expect(rules[0].type).toBe('css')
expect(rules[0].loaders).toEqual([expect.objectContaining({ options: { sassOptions: { loadPaths: ['/project/styles'] } } })])
})
-test('Turbopack leaves native CSS Modules without Master directives to Next', () => {
- expect(stylesheetRules('card.module.css', '.card{padding:2rem;}')).toEqual([])
+test('Turbopack supplies project context to native CSS Modules without a directive gate', () => {
+ const rules = stylesheetRules('card.module.css', '.card{padding:2rem;}')
+ expect(rules).toHaveLength(1)
+ expect(rules[0].type).toBeUndefined()
})
diff --git a/packages/next/tests/bug-hunt-webpack-css-pipeline.test.ts b/packages/next/tests/bug-hunt-webpack-css-pipeline.test.ts
index d3dd267f9..ab58aae3a 100644
--- a/packages/next/tests/bug-hunt-webpack-css-pipeline.test.ts
+++ b/packages/next/tests/bug-hunt-webpack-css-pipeline.test.ts
@@ -27,7 +27,7 @@ for (const sass of [false, true]) for (const lightning of [false, true]) test(`B
const dispatcher = chain[1]
expect(dispatcher.loader).toMatch(/[/\\]webpack-css-loader\.js$/)
expect(dispatcher.options.loader).toBe(cssLoader.loader)
- const postcss = chain.find((item: { loader: string }) => item.loader.endsWith('/webpack-postcss-loader.js'))
+ const postcss = chain.find((item: { loader: string }) => /[/\\]webpack-postcss-loader\.js$/.test(item.loader))
if (!lightning) {
expect(postcss.options.loader).toBe(nextLoader('postcss-loader'))
expect(postcss.options.options).toBe(postcssOptions)
diff --git a/packages/next/tests/build-state.test.ts b/packages/next/tests/build-state.test.ts
index d478b1a14..73a98406e 100644
--- a/packages/next/tests/build-state.test.ts
+++ b/packages/next/tests/build-state.test.ts
@@ -33,7 +33,7 @@ describe('resolveMasterCSSBuildState', () => {
'.host { color: var(--color-host); }',
'',
'.hidden-card {',
- ' @compose hidden;',
+ ' @variant media(all){display:none;}',
'}'
].join('\n'))
diff --git a/packages/next/tests/css-manifest-loader.test.ts b/packages/next/tests/css-manifest-loader.test.ts
index 562329c24..fc679da60 100644
--- a/packages/next/tests/css-manifest-loader.test.ts
+++ b/packages/next/tests/css-manifest-loader.test.ts
@@ -231,14 +231,14 @@ describe('css manifest loader', () => {
rootContext: projectDir,
getOptions: () => ({ virtual: true, module: true }),
addDependency: (dependency: string) => dependencies.push(dependency)
- })).rejects.toThrow('Invalid @compose utility')
+ })).rejects.toThrow('@compose has been removed')
expect(dependencies).toContain(entryPath)
writeFileSync(entryPath, [
'@import "@master/css";',
'@utilities {',
' card {',
- ' @compose block;',
+ ' @variant media(all){display:block;}',
' }',
'}'
].join('\n'))
diff --git a/packages/next/tests/css-manifest-query-e2e.test.ts b/packages/next/tests/css-manifest-query-e2e.test.ts
index 306b33940..392298e25 100644
--- a/packages/next/tests/css-manifest-query-e2e.test.ts
+++ b/packages/next/tests/css-manifest-query-e2e.test.ts
@@ -59,6 +59,7 @@ describe('css manifest query e2e', () => {
.join('\n')
expect(html).toContain('data-color="#4b6fff"')
expect(html).toContain('data-breakpoint="1234"')
+ expect(html).toContain('data-font-weight="700"')
expect(manifestJSONFiles).toEqual([])
expect(html).toContain('/assets/_next/')
expect(jsBundleContents).toContain('#4b6fff')
diff --git a/packages/next/tests/dev-hmr-e2e.test.ts b/packages/next/tests/dev-hmr-e2e.test.ts
index 99b1d50c4..323084bdd 100644
--- a/packages/next/tests/dev-hmr-e2e.test.ts
+++ b/packages/next/tests/dev-hmr-e2e.test.ts
@@ -1,9 +1,9 @@
import { spawn, type ChildProcess } from 'node:child_process'
import { once } from 'node:events'
-import { appendFileSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
+import { appendFileSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
import { createServer } from 'node:net'
import { tmpdir } from 'node:os'
-import { dirname, join } from 'node:path'
+import { dirname, isAbsolute, join, relative, sep } from 'node:path'
import { fileURLToPath, pathToFileURL } from 'node:url'
import { chromium, type Browser } from '@playwright/test'
import { describe, expect, it, onTestFinished } from 'vitest'
@@ -11,6 +11,7 @@ import execPnpmSync from './helpers/pnpm-command'
const packageDir = dirname(fileURLToPath(new URL('../package.json', import.meta.url)))
const nextBin = fileURLToPath(new URL('../node_modules/next/dist/bin/next', import.meta.url))
+const traceLoaderPath = fileURLToPath(new URL('./helpers/static-hmr-trace-loader.mjs', import.meta.url))
function delay(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms))
@@ -33,13 +34,13 @@ function getFreePort() {
})
}
-function createGlobalsCSS(compose: string) {
+function createGlobalsCSS(display: string) {
return [
'@import "@master/css";',
'',
'@layer components {',
' .probe {',
- ` @compose ${compose};`,
+ ` display: ${display === 'hidden' ? 'none' : display};`,
' width: 40px;',
' height: 40px;',
' }',
@@ -57,11 +58,31 @@ function writeFixture(fixtureDir: string, compose = 'inline-flex') {
private: true,
type: 'module'
}, null, 2))
- const nextIntegrationURL = pathToFileURL(process.env.MASTER_NEXT_HMR_INTEGRATION ?? join(packageDir, 'dist/index.js')).href
+ const nextIntegrationPath = process.env.MASTER_NEXT_HMR_INTEGRATION ?? join(packageDir, 'dist/index.js')
+ // Webpack tracks config imports as files and cannot cache a file:// specifier.
+ const relativeIntegrationPath = relative(fixtureDir, nextIntegrationPath).split(sep).join('/')
+ const nextIntegrationSpecifier = isAbsolute(relativeIntegrationPath)
+ ? pathToFileURL(nextIntegrationPath).href
+ : relativeIntegrationPath.startsWith('.') ? relativeIntegrationPath : `./${relativeIntegrationPath}`
writeFileSync(join(fixtureDir, 'next.config.js'), [
- `import { withMasterCSS } from ${JSON.stringify(nextIntegrationURL)}`,
+ `import { withMasterCSS } from ${JSON.stringify(nextIntegrationSpecifier)}`,
'',
- `export default withMasterCSS({ reactStrictMode: true })`,
+ `const configured = withMasterCSS(${JSON.stringify({ reactStrictMode: true, ...(process.env.MASTER_NEXT_HMR_TURBOPACK_ROOT ? { turbopack: { root: process.env.MASTER_NEXT_HMR_TURBOPACK_ROOT } } : {}) })})`,
+ `let result = configured`,
+ `if (process.env.MASTER_NEXT_HMR_TRACE_REPORT) {`,
+ ` result = Promise.resolve(configured).then(config => {`,
+ ` for (const rule of config.turbopack?.rules?.['*'] ?? []) {`,
+ ` for (const entry of rule.loaders ?? []) {`,
+ ` const kind = /(?:static-css-loader|static-loader|stylesheet-loader)\\.js$/.exec(entry.loader)?.[0]`,
+ ` if (!kind) continue`,
+ ` entry.options = { ...entry.options, __masterOriginalLoader: entry.loader, __masterTraceKind: kind }`,
+ ` entry.loader = ${JSON.stringify(traceLoaderPath)}`,
+ ` }`,
+ ` }`,
+ ` return config`,
+ ` })`,
+ `}`,
+ `export default result`,
''
].join('\n'))
writeFileSync(join(fixtureDir, 'app/layout.jsx'), [
@@ -126,6 +147,7 @@ function startNextDev(fixtureDir: string, port: number, bundler: 'turbo' | 'webp
NODE_ENV: 'development',
...(pipelineReport ? {
MASTER_NEXT_HMR_PIPELINE_REPORT: pipelineReport,
+ ...(bundler === 'turbo' ? { MASTER_NEXT_HMR_TRACE_REPORT: join(dirname(pipelineReport), 'loaders.jsonl') } : {}),
NODE_OPTIONS: `${process.env.NODE_OPTIONS ?? ''} --import=${new URL('./helpers/static-hmr-metrics.mjs', import.meta.url).href}`
} : {})
},
@@ -155,19 +177,23 @@ async function stopNextDev(child: ChildProcess) {
async function waitForServer(url: string, child: ChildProcess, output: { text: string }) {
const deadline = Date.now() + 60000
+ const recentProbes: string[] = []
while (Date.now() < deadline) {
if (child.exitCode !== null) {
throw new Error(`Next dev exited early.\n${output.text}`)
}
try {
const response = await fetch(url, { signal: AbortSignal.timeout(5000) })
+ recentProbes.push(`HTTP ${response.status}`)
if (response.status < 500) return
- } catch {
+ } catch (error) {
+ recentProbes.push(error instanceof Error ? `${error.name}: ${error.message}` : String(error))
// Server is still starting.
}
+ if (recentProbes.length > 8) recentProbes.shift()
await delay(500)
}
- throw new Error(`Timed out waiting for Next dev server.\n${output.text}`)
+ throw new Error(`Timed out waiting for Next dev server. Recent probes: ${recentProbes.join('; ')}\n${output.text}`)
}
async function expectDisplay(browser: Browser, url: string, display: string) {
@@ -183,6 +209,78 @@ async function expectDisplay(browser: Browser, url: string, display: string) {
}
describe('Next dev HMR', () => {
+ it('updates a direct generated CSS import when sources change or appear (turbo)', async () => {
+ buildPackage()
+ const workspace = join(packageDir, 'e2e/dev-hmr-workspaces')
+ mkdirSync(workspace, { recursive: true })
+ const fixture = mkdtempSync(join(workspace, 'direct-css-'))
+ writeFixture(fixture)
+ writeFileSync(join(fixture, 'app/globals.css'), '')
+ writeFileSync(join(fixture, 'app/layout.jsx'), `import '../.master/next.css'; export default function RootLayout({ children }) { return {children} }`)
+ const port = await getFreePort(), url = `http://127.0.0.1:${port}`
+ const { child, output } = startNextDev(fixture, port, 'turbo')
+ let browser: Browser | undefined
+ try {
+ await waitForServer(url, child, output)
+ browser = await chromium.launch()
+ const page = await browser.newPage()
+ await page.goto(url)
+ await page.waitForFunction(() => getComputedStyle(document.getElementById('incremental')!).padding === '11px')
+ await page.evaluate(() => { (window as Window & { __MASTER_CSS_HMR_MARKER?: string }).__MASTER_CSS_HMR_MARKER = 'preserve' })
+ writePage(fixture, 77)
+ await page.waitForFunction(() => getComputedStyle(document.getElementById('incremental')!).padding === '77px')
+ const added = join(fixture, 'app/unimported.jsx')
+ writeFileSync(added, `export const hidden = 'm:37px'`)
+ await page.evaluate(() => {
+ const probe = document.createElement('div')
+ probe.id = 'new-source-probe'
+ probe.className = 'm:37px'
+ document.body.append(probe)
+ })
+ await page.waitForFunction(() => getComputedStyle(document.getElementById('new-source-probe')!).marginTop === '37px')
+ rmSync(added)
+ await page.waitForFunction(() => getComputedStyle(document.getElementById('new-source-probe')!).marginTop === '0px')
+ expect(await page.evaluate(() => (window as Window & { __MASTER_CSS_HMR_MARKER?: string }).__MASTER_CSS_HMR_MARKER)).toBe('preserve')
+ } finally {
+ await browser?.close()
+ await stopNextDev(child)
+ rmSync(fixture, { recursive: true, force: true })
+ }
+ }, 180000)
+
+ it('updates separated Module theme resources while preserving ancestor inheritance (webpack)', async () => {
+ buildPackage()
+ const workspace = join(packageDir, 'e2e/dev-hmr-workspaces')
+ mkdirSync(workspace, { recursive: true })
+ const fixture = mkdtempSync(join(workspace, 'module-globals-'))
+ writeFixture(fixture)
+ const tokens = join(fixture, 'app/tokens.css')
+ writeFileSync(tokens, '@theme { --color-module: red; }')
+ writeFileSync(join(fixture, 'app/Card.module.css'), '@reference "./tokens.css"; .card { color:var(--color-module); }')
+ writeFileSync(join(fixture, 'app/page.jsx'), `import styles from './Card.module.css'; export default function Page(){ return Theme }`)
+ const port = await getFreePort(), url = `http://127.0.0.1:${port}`
+ const { child, output } = startNextDev(fixture, port, 'webpack')
+ let browser: Browser | undefined
+ try {
+ await waitForServer(url, child, output)
+ browser = await chromium.launch()
+ const page = await browser.newPage()
+ await page.goto(url)
+ await page.waitForFunction(() => getComputedStyle(document.querySelector('main')!).color === 'rgb(255, 0, 0)')
+ await page.evaluate(() => document.body.style.setProperty('--color-module', 'rgb(1, 2, 3)'))
+ expect(await page.locator('main').evaluate(element => getComputedStyle(element).color)).toBe('rgb(1, 2, 3)')
+ writeFileSync(tokens, '@theme { --color-module: blue; }')
+ await page.waitForFunction(() => getComputedStyle(document.documentElement).getPropertyValue('--color-module').trim() === 'blue')
+ expect(await page.locator('main').evaluate(element => getComputedStyle(element).color)).toBe('rgb(1, 2, 3)')
+ await page.evaluate(() => document.body.style.removeProperty('--color-module'))
+ expect(await page.locator('main').evaluate(element => getComputedStyle(element).color)).toBe('rgb(0, 0, 255)')
+ } finally {
+ await browser?.close()
+ await stopNextDev(child)
+ rmSync(fixture, { recursive: true, force: true })
+ }
+ }, 180000)
+
it.each(['turbo', 'webpack'] as const)('updates Master CSS without a full reload (%s)', async bundler => {
buildPackage()
const workspaceDir = join(packageDir, 'e2e/dev-hmr-workspaces')
@@ -232,13 +330,26 @@ describe('Next dev HMR', () => {
const singleStarted = Date.now()
let started = performance.now()
writePage(fixtureDir, padding)
- await page.waitForFunction(value => getComputedStyle(document.getElementById('incremental')!).padding === `${value}px`, padding)
+ try {
+ await page.waitForFunction(value => getComputedStyle(document.getElementById('incremental')!).padding === `${value}px`, padding)
+ } catch (error) {
+ const actual = await page.locator('#incremental').evaluate(element => getComputedStyle(element).padding)
+ console.error(`Next ${bundler} page round ${round}: expected ${padding}px, got ${actual}`)
+ throw error
+ }
const singleMs = performance.now() - started
const burstStarted = Date.now()
started = performance.now()
writeModules(fixtureDir, padding + 1)
- await page.waitForFunction(value => Array.from({ length: 10 }, (_, index) =>
- getComputedStyle(document.getElementById(`module-${index}`)!).padding === `${value + index}px`).every(Boolean), padding + 1)
+ try {
+ await page.waitForFunction(value => Array.from({ length: 10 }, (_, index) =>
+ getComputedStyle(document.getElementById(`module-${index}`)!).padding === `${value + index}px`).every(Boolean), padding + 1)
+ } catch (error) {
+ const actual = await page.evaluate(() => Array.from({ length: 10 }, (_, index) =>
+ getComputedStyle(document.getElementById(`module-${index}`)!).padding))
+ console.error(`Next ${bundler} module round ${round}: expected ${padding + 1}..${padding + 10}px, got ${actual.join(', ')}`)
+ throw error
+ }
if (round > 0) samples.push({ singleMs, burstMs: performance.now() - started, singleStarted, burstStarted, finished: Date.now() })
}
if (process.env.MASTER_NEXT_HMR_REPORT && pipelineReport) {
@@ -247,15 +358,23 @@ describe('Next dev HMR', () => {
const idleStarted = Date.now()
await delay(2000)
const publications = readFileSync(pipelineReport, 'utf8').trim().split('\n').map(line => JSON.parse(line) as { started: number, finished: number, composeCalls: number })
+ const loaderReport = join(metricsDir!, 'loaders.jsonl')
+ const loaderEvents = existsSync(loaderReport) ? readFileSync(loaderReport, 'utf8').trim().split('\n').map(line => JSON.parse(line)) : []
const idle = publications.filter(row => row.started >= idleStarted)
appendFileSync(process.env.MASTER_NEXT_HMR_REPORT,
- JSON.stringify({ bundler, node: process.version, samples, publications, idle,
- note: 'File write to observed browser computed style; one warmup, three samples. Pipeline hold/wait are separate child-process observations. Idle observes two seconds after a one-second drain.' }) + '\n')
+ JSON.stringify({ bundler, node: process.version, samples, publications, loaderEvents, idle,
+ note: 'File write to observed browser computed style; one warmup, three samples. Pipeline hold/wait and loader calls are separate child-process observations. Idle observes two seconds after a one-second drain.' }) + '\n')
expect(idle.reduce((sum, row) => sum + row.composeCalls, 0)).toBe(0)
}
await expect(page.evaluate(() => {
return (window as unknown as { __MASTER_CSS_HMR_MARKER?: string }).__MASTER_CSS_HMR_MARKER
})).resolves.toBe('preserve')
+ } catch (error) {
+ console.error(`Next ${bundler} output:\n${output.text}`)
+ if (pipelineReport && existsSync(pipelineReport)) {
+ console.error(`Next ${bundler} pipeline:\n${readFileSync(pipelineReport, 'utf8')}`)
+ }
+ throw error
} finally {
await cleanup()
}
diff --git a/packages/next/tests/helpers/static-hmr-metrics.mjs b/packages/next/tests/helpers/static-hmr-metrics.mjs
index 18e094a69..cb5541496 100644
--- a/packages/next/tests/helpers/static-hmr-metrics.mjs
+++ b/packages/next/tests/helpers/static-hmr-metrics.mjs
@@ -2,19 +2,25 @@
// the fixture's source inventory; it is never imported by published packages.
import fs from 'node:fs/promises'
import { appendFileSync } from 'node:fs'
+import { AsyncLocalStorage } from 'node:async_hooks'
import { syncBuiltinESMExports } from 'node:module'
import { MasterCSSStylesheetCollection } from '@master/css-compiler/stylesheet'
const report = process.env.MASTER_NEXT_HMR_PIPELINE_REPORT
if (report) {
- const original = { open: fs.open, unlink: fs.unlink, readFile: fs.readFile }
+ const original = { open: fs.open, unlink: fs.unlink, readFile: fs.readFile, glob: fs.glob, rename: fs.rename, link: fs.link }
+ const traceContext = globalThis.__MASTER_CSS_HMR_TRACE_CONTEXT__ = new AsyncLocalStorage()
let operation, waiting
fs.open = async function (file, flags, ...args) {
const publishing = String(file).endsWith('/.master/publish.lock') && flags === 'wx'
if (publishing) waiting ??= performance.now()
const handle = await original.open.call(this, file, flags, ...args)
if (publishing) {
- operation = { started: Date.now(), waitMs: performance.now() - waiting, holdStart: performance.now(), composeCalls: 0, composeMs: 0, sourceReads: 0 }
+ operation = {
+ started: Date.now(), waitMs: performance.now() - waiting, holdStart: performance.now(),
+ composeCalls: 0, composeMs: 0, sourceReads: 0, snapshots: 0, changedOutputs: [],
+ origin: traceContext.getStore()
+ }
waiting = undefined
}
return handle
@@ -23,6 +29,20 @@ if (report) {
if (operation && /\.[jt]sx?$/.test(String(file))) operation.sourceReads++
return original.readFile.call(this, file, ...args)
}
+ fs.glob = function (pattern, ...args) {
+ if (operation && pattern === '**/*') operation.snapshots++
+ return original.glob.call(this, pattern, ...args)
+ }
+ fs.rename = async function (from, to, ...args) {
+ const result = await original.rename.call(this, from, to, ...args)
+ if (operation && String(to).includes('/.master/')) operation.changedOutputs.push(String(to))
+ return result
+ }
+ fs.link = async function (from, to, ...args) {
+ const result = await original.link.call(this, from, to, ...args)
+ if (operation && String(to).includes('/.master/')) operation.changedOutputs.push(String(to))
+ return result
+ }
fs.unlink = async function (file, ...args) {
const result = await original.unlink.call(this, file, ...args)
if (String(file).endsWith('/.master/publish.lock') && operation) {
diff --git a/packages/next/tests/helpers/static-hmr-trace-loader.mjs b/packages/next/tests/helpers/static-hmr-trace-loader.mjs
new file mode 100644
index 000000000..8114c4d20
--- /dev/null
+++ b/packages/next/tests/helpers/static-hmr-trace-loader.mjs
@@ -0,0 +1,35 @@
+// Test-only wrapper. It leaves the original loader result and options intact
+// while recording which watched paths each invocation registers.
+import { appendFileSync } from 'node:fs'
+import { randomUUID } from 'node:crypto'
+import { pathToFileURL } from 'node:url'
+
+export default function traceNextLoader(source, ...args) {
+ const options = this.getOptions()
+ const { __masterOriginalLoader: originalPath, __masterTraceKind: kind, ...originalOptions } = options
+ const report = process.env.MASTER_NEXT_HMR_TRACE_REPORT
+ const callback = this.async()
+ const trace = {
+ id: `${process.pid}:${randomUUID()}`,
+ kind,
+ resource: this.resourcePath,
+ pid: process.pid,
+ started: Date.now(),
+ files: [], contexts: [], missing: []
+ }
+ const finish = (error) => {
+ if (report) appendFileSync(report, JSON.stringify({ ...trace, finished: Date.now(), error: error?.message }) + '\n')
+ }
+ const context = Object.create(this)
+ context.getOptions = () => originalOptions
+ context.addDependency = file => { trace.files.push(file); this.addDependency?.(file) }
+ context.addContextDependency = directory => { trace.contexts.push(directory); this.addContextDependency?.(directory) }
+ context.addMissingDependency = file => { trace.missing.push(file); this.addMissingDependency?.(file) }
+ context.async = () => (error, ...results) => { finish(error); callback(error, ...results) }
+ const active = globalThis.__MASTER_CSS_HMR_TRACE_CONTEXT__
+ import(pathToFileURL(originalPath).href)
+ .then(({ default: loader }) => active
+ ? active.run({ id: trace.id, kind, resource: trace.resource }, () => loader.call(context, source, ...args))
+ : loader.call(context, source, ...args))
+ .catch(error => { finish(error); callback(error) })
+}
diff --git a/packages/next/tests/next-config.test.ts b/packages/next/tests/next-config.test.ts
index e37978247..0ee18c46d 100644
--- a/packages/next/tests/next-config.test.ts
+++ b/packages/next/tests/next-config.test.ts
@@ -105,17 +105,15 @@ function createMasterCSSRuntimeTestModule() {
}
describe('withMasterCSS', () => {
- it('routes local CSS directives through the Turbopack stylesheet loader', () => {
+ it('routes native CSS and CSS Modules through the project context without a directive gate', () => {
const config = withMasterCSS({}, { mode: 'progressive' }) as any
- const rules = config.turbopack.rules['*'] as { condition?: { all?: { content?: RegExp }[] }; loaders?: { loader: string }[] }[]
- const styleRule = rules.find(rule => rule.loaders?.some(loader => typeof loader.loader === 'string' && loader.loader.endsWith('/stylesheet-loader.js')))
- const pattern = styleRule?.condition?.all?.find(condition => condition.content)?.content
-
- expect(pattern).toBeInstanceOf(RegExp)
- for (const directive of ['@reference "./globals.css";', '@variant sm {}', '@light {}', '@dark {}']) {
- expect(pattern!.test(directive)).toBe(true)
+ const rules = config.turbopack.rules['*'] as any[]
+ const styleRules = rules.filter(rule => rule.loaders?.some((loader: any) => typeof loader.loader === 'string' && toPosixPath(loader.loader).endsWith('/stylesheet-loader.js')))
+ expect(styleRules.map(rule => rule.type)).toEqual(['css', undefined])
+ for (const rule of styleRules) {
+ expect(rule.condition.all.some((condition: any) => condition.content)).toBe(false)
+ expect(rule.condition.all.some((condition: any) => condition.not?.path?.test('/project/.master/stylesheets/' + 'a'.repeat(64) + '/' + 'b'.repeat(64) + '-entry.css'))).toBe(true)
}
- expect(pattern!.test('.card { color: red; }')).toBe(false)
})
it('sets the Next adapter path and registers options', () => {
@@ -234,7 +232,7 @@ describe('withMasterCSS', () => {
all: [
{ path: /\.(css|scss|sass)$/ },
{ not: { path: /\.module\.(css|scss|sass)$/ } },
- { content: expect.any(RegExp) },
+ { not: { path: expect.any(RegExp) } },
{ not: { query: /master-css-manifest/ } }
]
},
@@ -490,6 +488,10 @@ describe('withMasterCSS', () => {
expect(nextConfig.turbopack.resolveAlias[VIRTUAL_CSS_ID]).toBe('./.master/next.css')
expect(nextConfig.turbopack.resolveAlias[VIRTUAL_MANIFEST_ID]).toContain(virtualManifestProjectPath)
expect(nextConfig.turbopack.resolveAlias[VIRTUAL_EMITTED_GLOBALS_ID]).toContain(virtualEmittedGlobalsProjectPath)
+ const staticRules = nextConfig.turbopack.rules['*'] as { condition?: { all?: { path?: RegExp, not?: string }[] }, loaders?: { loader: string }[] }[]
+ expect(staticRules.flatMap(rule => rule.loaders ?? []).some(loader => /static-loader\.js$/.test(loader.loader))).toBe(false)
+ expect(staticRules.some(rule => rule.condition?.all?.some(condition => condition.path?.test(join(root, '.master/next.css')))
+ && rule.loaders?.some(loader => /static-css-loader\.js$/.test(loader.loader)))).toBe(true)
expect(nextConfig.turbopack.rules['*']).toEqual(expect.arrayContaining([
expect.objectContaining({
condition: {
@@ -518,7 +520,7 @@ describe('withMasterCSS', () => {
condition: expect.objectContaining({
all: expect.arrayContaining([
{ path: expect.any(RegExp) },
- { content: expect.any(RegExp) },
+ { not: { path: expect.any(RegExp) } },
{ not: { query: /master-css-manifest/ } }
])
}),
diff --git a/packages/next/tests/playground.test.ts b/packages/next/tests/playground.test.ts
index 27231f1d0..dea5d6be5 100644
--- a/packages/next/tests/playground.test.ts
+++ b/packages/next/tests/playground.test.ts
@@ -68,6 +68,8 @@ describe('playground', () => {
expect(clientSource).not.toContain(removedRuntimeRegistryName)
expect(clientSource).not.toContain('mastercss_binding_wasm')
expect(clientSource).not.toContain('"nativeTokenNamespaces"')
+ expect(clientSource).not.toContain('var(--font-sans')
+ expect(clientSource).not.toContain('#0070f3')
expect(readOutputFileContents(join(nextDir, 'static'), path => path.endsWith('.wasm'))).toEqual([])
expect(existsSync(join(nextDir, 'static/master-css/hydration'))).toBe(false)
})
diff --git a/packages/next/tests/sass-source-context.test.ts b/packages/next/tests/sass-source-context.test.ts
new file mode 100644
index 000000000..7b41778a6
--- /dev/null
+++ b/packages/next/tests/sass-source-context.test.ts
@@ -0,0 +1,41 @@
+import { createRequire, SourceMap } from 'node:module'
+import { resolve } from 'node:path'
+import { fileURLToPath, pathToFileURL } from 'node:url'
+import { expect, test } from 'vitest'
+import { removeSassPrefixError, removeSassPrefixMap } from '../src/sass-source-context'
+
+const require = createRequire(new URL('../../vite/package.json', import.meta.url))
+const sass = createRequire(require.resolve('vite'))('sass')
+const prefix = '$first: 1;\n$second: 2;\n'
+
+for (const filename of ['card~name.scss', 'card #name.scss', 'card%20name.scss']) {
+ test(`Sass maps subtract additional data for equivalent file URL encodings: ${filename}`, async () => {
+ const url = pathToFileURL(resolve(filename)), source = '.card { color: red; }'
+ const result = await sass.compileStringAsync(prefix + source, { url, sourceMap: true, sourceMapIncludeSources: true })
+ const map = removeSassPrefixMap(result.sourceMap, url, source, prefix) as ConstructorParameters[0]
+ const origin = new SourceMap(map).findEntry(0, 0)
+ expect(origin).toMatchObject({ originalLine: 0, originalColumn: 0 })
+ expect('originalSource' in origin && fileURLToPath(origin.originalSource)).toBe(fileURLToPath(url))
+ expect(map.sourcesContent).toContain(source)
+ })
+
+ test(`Sass errors subtract additional data for equivalent file URL encodings: ${filename}`, async () => {
+ const url = pathToFileURL(resolve(filename)), source = '.card { color: $missing; }'
+ let failure: unknown
+ try { await sass.compileStringAsync(prefix + source, { url }) }
+ catch (error) { failure = error }
+ expect(failure).toBeDefined()
+ expect(removeSassPrefixError(failure, url, source, prefix)).toMatchObject({
+ span: { url, start: { line: 0 }, text: '$missing' },
+ message: expect.stringContaining(`${fileURLToPath(url)}:1:`)
+ })
+ })
+}
+
+test('Sass errors from a distinct virtual source keep their original location', () => {
+ const url = pathToFileURL(resolve('card.scss'))
+ const failure = Object.assign(new Error('virtual failure'), {
+ span: { url: new URL(url.href + '?importer'), start: { line: 4 } }
+ })
+ expect(removeSassPrefixError(failure, url, '.card {}', prefix)).toBe(failure)
+})
diff --git a/packages/next/tests/static-local-css-e2e.test.ts b/packages/next/tests/static-local-css-e2e.test.ts
index 498cecb02..802030b7d 100644
--- a/packages/next/tests/static-local-css-e2e.test.ts
+++ b/packages/next/tests/static-local-css-e2e.test.ts
@@ -14,8 +14,9 @@ beforeAll(() => {
it.each([
['static-local-css', '--turbo', false],
['static-local-css', '--webpack', false],
- ['static-module-reference', '--webpack', true]
-] as const)('delivers referenced native theme variables in Next %s %s mode', async (fixture, builder, moduleStyle) => {
+ ['static-module-reference', '--webpack', true],
+ ['static-module-reference', '--turbo', true]
+] as const)('delivers project theme variables without @reference in Next %s %s mode', async (fixture, builder, moduleStyle) => {
const fixtureDir = join(packageDir, 'e2e', fixture)
const outDir = join(fixtureDir, 'out')
execFileSync(join(packageDir, 'node_modules/.bin/next'), ['build', builder], {
@@ -37,19 +38,24 @@ it.each([
expect(css).toContain('--color-probe:#123456')
expect(css).toContain('--color-probe:#abcdef')
} else {
- expect(css).toContain('#123456')
- expect(css).toContain('#abcdef')
+ // Webpack retains a publication import; Turbopack may bundle the global CSS.
+ if (builder === '--webpack') expect(css).toContain('@import')
+ expect(css).not.toMatch(/\.[\w-]+\{--color-probe:/)
}
expect(css).not.toContain('@reference')
const server = createServer((request, response) => {
- const pathname = new URL(request.url || '/', 'http://localhost').pathname
- const file = join(outDir, pathname === '/' ? 'index.html' : pathname)
+ const url = new URL(request.url || '/', 'http://localhost')
+ const pathname = url.pathname
+ const route = pathname === '/' ? '/index' : pathname
+ const file = join(outDir, !extname(pathname)
+ ? route + (request.headers.rsc === '1' || url.searchParams.has('_rsc') ? '.txt' : '.html')
+ : pathname)
if (relative(outDir, file).startsWith('..') || !existsSync(file)) {
response.writeHead(404).end()
return
}
- const type = ({ '.html': 'text/html', '.css': 'text/css', '.js': 'application/javascript' } as Record)[extname(file)] || 'application/octet-stream'
+ const type = ({ '.html': 'text/html', '.css': 'text/css', '.js': 'application/javascript', '.txt': 'text/x-component' } as Record)[extname(file)] || 'application/octet-stream'
response.writeHead(200, { 'content-type': type }).end(readFileSync(file))
})
await new Promise(resolve => server.listen(0, '127.0.0.1', resolve))
@@ -59,9 +65,36 @@ it.each([
if (!address || typeof address === 'string') throw new Error('Missing test server port')
for (const [colorScheme, expected] of [['light', 'rgb(18, 52, 86)'], ['dark', 'rgb(171, 205, 239)']] as const) {
const page = await browser.newPage({ colorScheme })
+ const errors: string[] = []
+ page.on('pageerror', error => errors.push(error.message))
+ page.on('response', response => { if (response.status() >= 400) errors.push(`${response.status()} ${response.url()}`) })
try {
await page.goto(`http://127.0.0.1:${address.port}/`)
expect(await page.locator('main').evaluate(element => getComputedStyle(element).color)).toBe(expected)
+ if (moduleStyle) {
+ await expect.poll(() => page.locator('main').evaluate(element => getComputedStyle(element).opacity)).toBe('0.5')
+ await page.evaluate(() => document.body.setAttribute('data-theme', 'ocean'))
+ for (const [link, pathname] of [['Other route', '/other'], ['Home route', '/']] as const) {
+ await page.getByRole('link', { name: link }).click()
+ await page.waitForURL(`http://127.0.0.1:${address.port}${pathname}`)
+ // The attribute survives client navigation; each route's different
+ // CSS Module must preserve the same generated theme cascade.
+ expect(await page.locator('body').getAttribute('data-theme')).toBe('ocean')
+ expect(await page.locator('main').evaluate(element => getComputedStyle(element).color)).toBe('rgb(8, 47, 73)')
+ }
+ await page.evaluate(() => document.body.removeAttribute('data-theme'))
+ expect(await page.locator('main').evaluate(element => getComputedStyle(element).color)).toBe(expected)
+ await page.evaluate(() => document.body.style.setProperty('--color-probe', 'rgb(1, 2, 3)'))
+ expect(await page.locator('main').evaluate(element => getComputedStyle(element).color)).toBe('rgb(1, 2, 3)')
+ await page.evaluate(() => {
+ document.body.style.removeProperty('--color-probe')
+ document.body.setAttribute('data-theme', 'ocean')
+ const copy = document.querySelector('main')!.cloneNode(true)
+ document.body.append(copy)
+ })
+ expect(await page.locator('main').evaluateAll(elements => elements.map(element => getComputedStyle(element).color))).toEqual(['rgb(8, 47, 73)', 'rgb(8, 47, 73)'])
+ }
+ expect(errors).toEqual([])
} finally {
await page.close()
}
diff --git a/packages/next/tests/static.test.ts b/packages/next/tests/static.test.ts
index b5472127a..dfe33f02a 100644
--- a/packages/next/tests/static.test.ts
+++ b/packages/next/tests/static.test.ts
@@ -1,4 +1,4 @@
-import { mkdirSync, mkdtempSync, readFileSync, writeFileSync } from 'node:fs'
+import { mkdirSync, mkdtempSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { fileURLToPath, pathToFileURL } from 'node:url'
@@ -58,10 +58,14 @@ function runStaticCSSLoader(statePath: string, resourcePath: string, source: str
function runStaticCSSLoaderWithDependencies(statePath: string, resourcePath: string, source: string) {
const dependencies: string[] = []
+ const contexts: string[] = []
+ const missing: string[] = []
return new Promise((resolve, reject) => {
const context: ThisParameterType = {
resourcePath,
addDependency: (dependency) => dependencies.push(dependency),
+ addContextDependency: (directory) => contexts.push(directory),
+ addMissingDependency: (file) => missing.push(file),
cacheable: () => undefined,
getOptions: () => ({ statePath }),
async: () => (error, content) => {
@@ -74,7 +78,7 @@ function runStaticCSSLoaderWithDependencies(statePath: string, resourcePath: str
}
masterCSSNextStaticCSSLoader.call(context, source)
- }).then((content) => ({ content, dependencies }))
+ }).then((content) => ({ content, dependencies, contexts, missing }))
}
describe('Next static mode', () => {
@@ -111,6 +115,72 @@ describe('Next static mode', () => {
expect(css).toContain('margin:0')
})
+ it('keeps Webpack module watches and lets generated CSS discover new sources', async () => {
+ const root = createFixture()
+ const first = join(root, 'app/page.tsx'), second = join(root, 'app/other.tsx')
+ writeFileSync(first, '
')
+ writeFileSync(second, '
')
+ const state = (await prepareNextStatic({}, { projectDir: root }))!
+ const dependencies: string[] = [], contexts: string[] = [], missing: string[] = []
+ await new Promise((resolve, reject) => {
+ const jsContext = {
+ resourcePath: first,
+ getOptions: () => ({ statePath: state.statePath }),
+ addDependency: file => dependencies.push(file),
+ addContextDependency: directory => contexts.push(directory),
+ addMissingDependency: file => missing.push(file),
+ async: () => error => error ? reject(error) : resolve()
+ } satisfies ThisParameterType & {
+ addContextDependency: (directory: string) => void
+ addMissingDependency: (file: string) => void
+ }
+ masterCSSNextStaticLoader.call(jsContext, readFileSync(first, 'utf8'))
+ })
+ expect(dependencies).toEqual(expect.arrayContaining([state.statePath, first, second]))
+ expect(contexts).toContain(root)
+ expect(missing).toEqual(expect.arrayContaining([join(root, '.gitignore'), join(root, 'app/.gitignore')]))
+
+ const stylesheet = join(root, 'app/globals.css')
+ const entry = await runStaticCSSLoaderWithDependencies(state.statePath, stylesheet, readFileSync(stylesheet, 'utf8'))
+ expect(entry.dependencies).toEqual(expect.arrayContaining([state.statePath, first, second]))
+ expect(entry.contexts).toContain(root)
+ expect(entry.missing).toEqual(expect.arrayContaining([join(root, '.gitignore'), join(root, 'app/.gitignore')]))
+
+ writeFileSync(first, '
')
+ await runStaticLoader(state.statePath, first, readFileSync(first, 'utf8'))
+ expect(readStaticCSS(state.outputPath)).toContain('padding:44px')
+ const refreshed = await runStaticCSSLoaderWithDependencies(state.statePath, stylesheet, readFileSync(stylesheet, 'utf8'))
+ expect(refreshed.dependencies).toContain(first)
+ expect(readStaticCSS(state.outputPath)).toContain('padding:44px')
+
+ const added = join(root, 'app/added.tsx')
+ writeFileSync(added, '
')
+ const generated = await runStaticCSSLoaderWithDependencies(state.statePath, state.outputPath, readFileSync(state.outputPath, 'utf8'))
+ expect(generated.content).toContain('gap:33px')
+ expect(generated.dependencies).toContain(added)
+ expect(generated.contexts).toContain(root)
+
+ const renamed = join(root, 'app/renamed.tsx')
+ renameSync(added, renamed)
+ const afterRename = await runStaticCSSLoaderWithDependencies(state.statePath, state.outputPath, generated.content)
+ expect(afterRename.content).toContain('gap:33px')
+ expect(afterRename.dependencies).toContain(renamed)
+ expect(afterRename.dependencies).not.toContain(added)
+
+ rmSync(renamed)
+ writeFileSync(join(root, '.gitignore'), 'ignored.tsx\n')
+ writeFileSync(join(root, 'ignored.tsx'), '
')
+ const afterRemoval = await runStaticCSSLoaderWithDependencies(state.statePath, state.outputPath, afterRename.content)
+ expect(afterRemoval.content).not.toContain('gap:33px')
+ expect(afterRemoval.content).not.toContain('margin:55px')
+ expect(afterRemoval.dependencies).toContain(join(root, '.gitignore'))
+
+ const foreign = await runStaticCSSLoaderWithDependencies(state.statePath, join(root, 'other/.master/next.css'), '.foreign{}')
+ expect(foreign.content).toBe('.foreign{}')
+ expect(foreign.dependencies).toEqual([])
+ expect(foreign.contexts).toEqual([])
+ })
+
it('publishes complete CSS in independent workers before source loaders run, including MDX', async () => {
const root = createFixture()
const page = join(root, 'app/page.tsx')
@@ -260,7 +330,7 @@ describe('Next static mode', () => {
expect(readStaticCSS(outputPath)).not.toContain('--color-primary')
})
- it('lets the scanner loader feed an imported module into the scanner incrementally', async () => {
+ it('lets the source loader publish an imported module while the CSS loader owns complete watches', async () => {
const root = createFixture()
const outputPath = resolveStaticOutputPath(root)
const statePath = resolveStaticStatePath(outputPath)
@@ -276,6 +346,7 @@ describe('Next static mode', () => {
`
writeFileSync(modulePath, source)
await expect(runStaticLoader(statePath, modulePath, source)).resolves.toBe(source)
+ await runStaticCSSLoader(statePath, join(root, 'app/globals.css'), readFileSync(join(root, 'app/globals.css'), 'utf8'))
const css = readStaticCSS(outputPath)
expect(css).toContain('display:block')
@@ -309,7 +380,7 @@ describe('Next static mode', () => {
expect(css).not.toContain('123456px')
})
- it('updates static CSS when Turbopack reruns the source loader', async () => {
+ it('updates static CSS when Webpack reruns the source loader', async () => {
const root = createFixture()
const pagePath = join(root, 'app/page.tsx')
writeFileSync(pagePath, `
@@ -334,7 +405,7 @@ describe('Next static mode', () => {
`)
await runStaticLoader(statePath, pagePath, readFileSync(pagePath, 'utf-8'))
-
+ await runStaticCSSLoader(statePath, join(root, 'app/globals.css'), readFileSync(join(root, 'app/globals.css'), 'utf8'))
expect(readStaticCSS(outputPath)).toContain('margin:0')
})
diff --git a/packages/next/tests/stylesheet-loader.test.ts b/packages/next/tests/stylesheet-loader.test.ts
index 2f79c46b8..b2c0b246c 100644
--- a/packages/next/tests/stylesheet-loader.test.ts
+++ b/packages/next/tests/stylesheet-loader.test.ts
@@ -1,7 +1,8 @@
import { readStylesheetText } from './helpers/stylesheet-output'
-import { mkdirSync, mkdtempSync, writeFileSync } from 'node:fs'
+import { existsSync, mkdirSync, mkdtempSync, readFileSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
+import { fileURLToPath, pathToFileURL } from 'node:url'
import { describe, expect, it } from 'vitest'
import masterCSSStylesheetLoader from '../src/stylesheet-loader'
@@ -30,10 +31,59 @@ function runStylesheetLoader(root: string, resourcePath: string, source: string)
}
masterCSSStylesheetLoader.call(context, source)
- }).then((content) => ({ content: readStylesheetText(resourcePath, content), dependencies }))
+ }).then((content) => ({ content: readStylesheetText(resourcePath, content), code: content, dependencies }))
}
describe('Next style CSS loader', () => {
+ it('passes published static sidecars through without rebuilding the project manifest', async () => {
+ const root = createFixture()
+ // An immutable output must remain loadable even while the author is editing
+ // an invalid entry. The source entry loader owns that error and its watches.
+ writeFileSync(join(root, 'app/globals.css'), '@master entry; @utilities { broken: { width:--value(); } }')
+ const file = join(root, '.master', `next-style-${'a'.repeat(64)}-${'b'.repeat(64)}.css`)
+ const source = '@layer utilities{.p\\:11px{padding:11px}}'
+ const result = await runStylesheetLoader(root, file, source)
+ expect(result.code).toBe(source)
+ expect(result.dependencies).toEqual([])
+ await expect(runStylesheetLoader(root, join(root, 'app/authored.css'), '.card{color:red}')).rejects.toThrow()
+ })
+
+ it('relocates global token URLs through the resource delivery graph', async () => {
+ const root = createFixture()
+ const image = join(root, 'app/pattern.svg')
+ const tokens = join(root, 'app/tokens.css')
+ writeFileSync(image, ' ')
+ writeFileSync(tokens, '@theme { --image-probe: url("./pattern.svg"); }')
+ const file = join(root, 'app/Pattern.module.css')
+ const result = await runStylesheetLoader(root, file, '@reference "./tokens.css"; .card { background-image: var(--image-probe); }')
+ const entry = fileURLToPath(new URL(result.code.match(/@import "([^"]+)"/)![1], pathToFileURL(file)))
+ const globalCSS = readFileSync(entry, 'utf8')
+ const href = globalCSS.match(/url\(["']?([^"')]+)["']?\)/)![1]
+ expect(existsSync(fileURLToPath(new URL(href, pathToFileURL(entry))))).toBe(true)
+ expect(result.dependencies).toContain(image)
+ expect(result.dependencies).toContain(tokens)
+ expect(result.code).toContain('var(--image-probe)')
+ expect(globalCSS).toContain('sourceMappingURL=')
+ })
+ it('shares global resources across Modules and republishes referenced changes', async () => {
+ const root = createFixture()
+ const tokens = join(root, 'app/tokens.css')
+ const source = '@reference "./tokens.css"; .card { color: var(--color-shared); }'
+ writeFileSync(tokens, '@theme { --color-shared: red; }')
+ const a = join(root, 'app/A.module.css')
+ const b = join(root, 'app/B.module.css')
+ const first = await runStylesheetLoader(root, a, source)
+ const second = await runStylesheetLoader(root, b, source)
+ const asset = (file: string, code: string) => fileURLToPath(new URL(code.match(/@import "([^"]+)"/)![1], pathToFileURL(file)))
+ expect(asset(a, first.code)).toBe(asset(b, second.code))
+ expect(second.dependencies).toContain(tokens)
+ expect(second.dependencies).toContain(asset(b, second.code))
+ writeFileSync(tokens, '@theme { --color-shared: blue; }')
+ const changed = await runStylesheetLoader(root, a, source)
+ expect(asset(a, changed.code)).not.toBe(asset(a, first.code))
+ expect(changed.content).toContain('--color-shared:blue')
+ expect(changed.code).not.toContain('--color-shared:')
+ })
it('derives native CSS from @master/css instead of hardcoding a package subpath', async () => {
const root = createFixture()
const entryPath = join(root, 'app/globals.css')
@@ -106,7 +156,7 @@ describe('Next style CSS loader', () => {
const result = await runStylesheetLoader(
root,
join(root, 'app/Button.module.css'),
- '.button { @compose inline-flex brand; color: white; }'
+ ".button { @variant media(all){background-color:#123456;display:inline-flex; color: white;} }"
)
expect(result.content).toContain('.button{')
@@ -127,7 +177,7 @@ describe('Next style CSS loader', () => {
const result = await runStylesheetLoader(
root,
modulePath,
- '@reference "./tokens.css"; .button { @compose brand; }'
+ "@reference \"./tokens.css\"; .button { @variant media(all){color:#123456;} }"
)
expect(result.content).toContain('.button{color:#123456}')
@@ -167,7 +217,7 @@ describe('Next style CSS loader', () => {
const result = await runStylesheetLoader(
root,
join(root, 'app', name),
- '@reference "./globals.css"; .button { color: var(--color-brand); }'
+ '.button { color: var(--color-brand); }'
)
expect(result.content).toMatch(/color:\s*var\(--color-brand\)/)
@@ -175,9 +225,10 @@ describe('Next style CSS loader', () => {
expect(result.content).toContain('--color-brand:#abcdef')
expect(result.content).not.toContain('@reference')
if (name.endsWith('.module.css')) {
- expect(result.content).not.toMatch(/:root\s*\{--color-brand/)
- expect(result.content).not.toMatch(/:host\s*\{--color-brand/)
- expect(result.content).toMatch(/\.button\s*\{--color-brand:#123456\}/)
+ expect(result.code).toMatch(/^@import /)
+ expect(result.content).toMatch(/:root\s*\{--color-brand/)
+ expect(result.code).not.toContain('--color-brand:#')
+ expect(result.content).not.toMatch(/\.button\s*\{--color-brand:/)
}
})
@@ -190,7 +241,7 @@ describe('Next style CSS loader', () => {
const result = await runStylesheetLoader(
root,
pagePath,
- '@reference "./globals.css"; .home-section { @compose py-5xl; }'
+ "@reference \"./globals.css\"; .home-section { @variant media(all){padding-block:var(--spacing-5xl);} }"
)
expect(result.content).toContain('.home-section{padding-block:var(--spacing-5xl)}')
@@ -201,7 +252,7 @@ describe('Next style CSS loader', () => {
expect(result.dependencies).toContain(globalsPath)
})
- it('dedupes referenced default theme variables already emitted by global CSS for page-level CSS', async () => {
+ it('retains local resources when a discovered global entry is not guaranteed loaded', async () => {
const root = createFixture()
const globalsPath = join(root, 'app/globals.css')
const pagePath = join(root, 'app/page.css')
@@ -213,11 +264,11 @@ describe('Next style CSS loader', () => {
const result = await runStylesheetLoader(
root,
pagePath,
- '@reference "./globals.css"; .home-section { @compose py-5xl; }'
+ "@reference \"./globals.css\"; .home-section { @variant media(all){padding-block:var(--spacing-5xl);} }"
)
expect(result.content).toContain('.home-section{padding-block:var(--spacing-5xl)}')
- expect(result.content).not.toContain('--spacing-5xl:')
+ expect(result.content).toContain('--spacing-5xl:')
expect(result.content).not.toContain('@reference')
expect(result.content).not.toContain('@master/css')
expect(result.dependencies).toContain(pagePath)
@@ -235,10 +286,10 @@ describe('Next style CSS loader', () => {
error = caught as Error & { dependencies?: string[] }
}
expect(error).toBeInstanceOf(Error)
- expect(error?.message).toContain('Invalid @compose utility')
+ expect(error?.message).toContain('@compose has been removed')
expect(error?.dependencies).toContain(modulePath)
- const result = await runStylesheetLoader(root, modulePath, '.button { @compose block; }')
+ const result = await runStylesheetLoader(root, modulePath, ".button { @variant media(all){display:block;} }")
expect(result.content).toContain('.button{display:block}')
expect(result.dependencies).toContain(modulePath)
diff --git a/packages/nuxt/README.md b/packages/nuxt/README.md
index 205ec9fdc..2ebd96ee7 100644
--- a/packages/nuxt/README.md
+++ b/packages/nuxt/README.md
@@ -76,9 +76,9 @@ Import the default stylesheet from a global Vue style block:
```
-The default `progressive` mode integrates Nuxt SSR, SSG, ISR, and Hybrid rendering strategies through Nitro, automatically loading custom configuration.
+The default `static` mode generates CSS from source files without injecting the browser runtime. Choose `progressive` to combine Nitro server rendering with browser runtime hydration across Nuxt SSR, SSG, ISR, and Hybrid rendering strategies.
-In `mode: 'runtime'`, the module publishes a stable manifest JSON asset and modulepreloads it from the Nuxt document head when it also injects the client runtime plugin. `runtime: false` disables both automatic runtime injection and the manifest JSON modulepreload.
+In `mode: 'runtime'`, the module publishes a stable manifest JSON asset and modulepreloads it from the Nuxt document head when it also injects the client runtime plugin. To omit the browser runtime, choose `static` or `pre-render`; `runtime: false` conflicts with `runtime` and `progressive` modes and is rejected.
## Options
@@ -99,8 +99,8 @@ Default options:
| Option | Default | Description |
| --- | --- | --- |
| `enabled` | `true` | Enables the module. |
-| `mode` | `'progressive'` | Nuxt defaults to progressive rendering. |
+| `mode` | `'static'` | Selects static, pre-render, runtime, or progressive rendering. |
| `scanner` | `{}` | Scanner configuration passed through to the shared Vite pipeline. |
-| `runtime` | `{ enabled: true, avoidFOUC: true }` | Controls runtime injection and FOUC protection. |
+| `runtime` | `{ enabled: false }` | Enabled by runtime/progressive modes; optional FOUC protection. Explicit enabled values must agree with the mode. |
See the [Nuxt installation guide](https://rc.css.master.co/guide/installation/nuxtjs) for a full project setup.
diff --git a/packages/preset/src/default-manifest.json b/packages/preset/src/default-manifest.json
index 771aaee03..28bd1326a 100644
--- a/packages/preset/src/default-manifest.json
+++ b/packages/preset/src/default-manifest.json
@@ -1 +1 @@
-{"version":1,"languageVersion":3,"modes":[{"name":"light","branches":[{"selector":":root","conditions":["@media (prefers-color-scheme:light)"]},{"selector":":host","conditions":["@media (prefers-color-scheme:light)"]}]},{"name":"dark","branches":[{"selector":":root","conditions":["@media (prefers-color-scheme:dark)"]},{"selector":":host","conditions":["@media (prefers-color-scheme:dark)"]}]}],"variables":{"color":[{"key":"stone-0","value":"oklch(99% .002 72)"},{"key":"stone-5","value":"oklch(94.9% .0053 72)"},{"key":"stone-10","value":"oklch(90.8% .0158 72)"},{"key":"stone-20","value":"oklch(82.6% .0287 72)"},{"key":"stone-30","value":"oklch(74.4% .04 72)"},{"key":"stone-40","value":"oklch(66.2% .044 72)"},{"key":"stone-50","value":"oklch(58% .045 72)"},{"key":"stone-60","value":"oklch(49.8% .033 72)"},{"key":"stone-70","value":"oklch(41.6% .0275 72)"},{"key":"stone-80","value":"oklch(33.4% .022 72)"},{"key":"stone-90","value":"oklch(25.2% .0105 72)"},{"key":"stone-95","value":"oklch(21.1% .0079 72)"},{"key":"stone-100","value":"oklch(17% .0053 72)"},{"key":"gray-0","value":"oklch(98.48% 0 none)"},{"key":"gray-5","value":"oklch(96.5% 0 none)"},{"key":"gray-10","value":"oklch(90% 0 none)"},{"key":"gray-20","value":"oklch(82% 0 none)"},{"key":"gray-30","value":"oklch(73.5% 0 none)"},{"key":"gray-40","value":"oklch(65% 0 none)"},{"key":"gray-50","value":"oklch(55.2% 0 none)"},{"key":"gray-60","value":"oklch(48% 0 none)"},{"key":"gray-70","value":"oklch(39.5% 0 none)"},{"key":"gray-80","value":"oklch(31% 0 none)"},{"key":"gray-90","value":"oklch(23.5% 0 none)"},{"key":"gray-95","value":"oklch(18.5% 0 none)"},{"key":"gray-100","value":"oklch(14.5% 0 none)"},{"key":"neutral-0","value":"oklch(98.38% .0033 250)"},{"key":"neutral-5","value":"oklch(96.8% .0048 253)"},{"key":"neutral-10","value":"oklch(94.8% .0074 262)"},{"key":"neutral-20","value":"oklch(88.5% .014 268)"},{"key":"neutral-30","value":"oklch(79.5% .02 270)"},{"key":"neutral-40","value":"oklch(68.5% .026 272)"},{"key":"neutral-50","value":"oklch(57% .03 273)"},{"key":"neutral-60","value":"oklch(48% .028 273)"},{"key":"neutral-70","value":"oklch(39% .024 273)"},{"key":"neutral-80","value":"oklch(30.5% .019 273)"},{"key":"neutral-90","value":"oklch(23% .014 273)"},{"key":"neutral-95","value":"oklch(18% .01 273)"},{"key":"neutral-100","value":"oklch(14% .007 273)"},{"key":"slate-0","value":"oklch(98.07% .0055 257.1)"},{"key":"slate-5","value":"oklch(96.15% .0145 267.3)"},{"key":"slate-10","value":"oklch(90.16% .0324 268.2)"},{"key":"slate-20","value":"oklch(82.16% .045 268.2)"},{"key":"slate-30","value":"oklch(74.16% .069 268.2)"},{"key":"slate-40","value":"oklch(63.99% .0804 266.1)"},{"key":"slate-50","value":"oklch(55.43% .0949 263.4)"},{"key":"slate-60","value":"oklch(45.03% .0817 265.9)"},{"key":"slate-70","value":"oklch(39% .0702 263.9)"},{"key":"slate-80","value":"oklch(32.14% .0604 264.8)"},{"key":"slate-90","value":"oklch(27.33% .0536 264.8)"},{"key":"slate-95","value":"oklch(21.5% .0573 267.4)"},{"key":"slate-100","value":"oklch(17.5% .0688 267.4)"},{"key":"brown-0","value":"oklch(97% .0097 47.1)"},{"key":"brown-5","value":"oklch(95.48% .0183 34.8)"},{"key":"brown-10","value":"oklch(88.65% .0558 33.4)"},{"key":"brown-20","value":"oklch(81.37% .1065 33.6)"},{"key":"brown-30","value":"oklch(74.39% .12 32.5)"},{"key":"brown-40","value":"oklch(67.62% .12 32.5)"},{"key":"brown-50","value":"oklch(61.9% .12 32.5)"},{"key":"brown-60","value":"oklch(55.58% .12 32.5)"},{"key":"brown-70","value":"oklch(49.11% .12 32.5)"},{"key":"brown-80","value":"oklch(42.07% .12 32.5)"},{"key":"brown-90","value":"oklch(35.11% .12 32.5)"},{"key":"brown-95","value":"oklch(24.7% .0958 31.2)"},{"key":"brown-100","value":"oklch(21.21% .0822 31.2)"},{"key":"orange-0","value":"oklch(96.76% .0202 84.6)"},{"key":"orange-5","value":"oklch(94.78% .0417 83)"},{"key":"orange-10","value":"oklch(89.94% .0784 75.7)"},{"key":"orange-20","value":"oklch(82.86% .1343 69.2)"},{"key":"orange-30","value":"oklch(75.09% .179 58.4)"},{"key":"orange-40","value":"oklch(71.4% .1941 48.1)"},{"key":"orange-50","value":"oklch(66.61% .2247 36.7)"},{"key":"orange-60","value":"oklch(61.68% .2388 31.2)"},{"key":"orange-70","value":"oklch(53.53% .2196 29.2)"},{"key":"orange-80","value":"oklch(46.33% .1901 29.2)"},{"key":"orange-90","value":"oklch(36.63% .1503 29.2)"},{"key":"orange-95","value":"oklch(25.4% .1042 29.2)"},{"key":"orange-100","value":"oklch(21.44% .088 29.2)"},{"key":"amber-0","value":"oklch(97.5% .0306 99)"},{"key":"amber-5","value":"oklch(96.24% .0573 98.1)"},{"key":"amber-10","value":"oklch(93.46% .0995 95.8)"},{"key":"amber-20","value":"oklch(88.25% .1592 91.3)"},{"key":"amber-30","value":"oklch(86% .1633 86.9)"},{"key":"amber-40","value":"oklch(83.04% .1701 81.1)"},{"key":"amber-50","value":"oklch(79.4% .1709 71.1)"},{"key":"amber-60","value":"oklch(73.31% .1784 56.5)"},{"key":"amber-70","value":"oklch(63.23% .1757 46.7)"},{"key":"amber-80","value":"oklch(53.09% .1677 39.7)"},{"key":"amber-90","value":"oklch(42.68% .138 38.6)"},{"key":"amber-95","value":"oklch(29.27% .0971 37.4)"},{"key":"amber-100","value":"oklch(23.94% .0818 36.1)"},{"key":"yellow-0","value":"oklch(98.86% .0355 107.4)"},{"key":"yellow-5","value":"oklch(98.27% .0758 108)"},{"key":"yellow-10","value":"oklch(97.31% .1513 109.1)"},{"key":"yellow-20","value":"oklch(95.82% .207 108.4)"},{"key":"yellow-30","value":"oklch(93.51% .1981 104.7)"},{"key":"yellow-40","value":"oklch(91.5% .1909 101.1)"},{"key":"yellow-50","value":"oklch(87.52% .1796 94.6)"},{"key":"yellow-60","value":"oklch(82.02% .169 82.1)"},{"key":"yellow-70","value":"oklch(72.04% .1592 67)"},{"key":"yellow-80","value":"oklch(64.84% .1477 63.1)"},{"key":"yellow-90","value":"oklch(52.17% .1199 62.2)"},{"key":"yellow-95","value":"oklch(33.35% .083 54.6)"},{"key":"yellow-100","value":"oklch(26.22% .0646 55.4)"},{"key":"lime-0","value":"oklch(98.05% .0399 116)"},{"key":"lime-5","value":"oklch(96.62% .08 121.2)"},{"key":"lime-10","value":"oklch(95.06% .1441 121.5)"},{"key":"lime-20","value":"oklch(92.45% .2251 126)"},{"key":"lime-30","value":"oklch(87.79% .2261 126.9)"},{"key":"lime-40","value":"oklch(82.22% .225 131.1)"},{"key":"lime-50","value":"oklch(74.39% .2131 133.9)"},{"key":"lime-60","value":"oklch(66.45% .195 135.3)"},{"key":"lime-70","value":"oklch(58.7% .1769 136.7)"},{"key":"lime-80","value":"oklch(51.46% .1612 138.7)"},{"key":"lime-90","value":"oklch(44.54% .1437 140.1)"},{"key":"lime-95","value":"oklch(29.84% .097 140.4)"},{"key":"lime-100","value":"oklch(25.83% .0851 141.1)"},{"key":"green-0","value":"oklch(97% .0305 145.7)"},{"key":"green-5","value":"oklch(94.95% .071 145.5)"},{"key":"green-10","value":"oklch(92.05% .1355 145.7)"},{"key":"green-20","value":"oklch(89.18% .2191 143.8)"},{"key":"green-30","value":"oklch(84.3% .24 143.9)"},{"key":"green-40","value":"oklch(77.68% .25 144.1)"},{"key":"green-50","value":"oklch(72.41% .2464 142.5)"},{"key":"green-60","value":"oklch(67.52% .2298 142.5)"},{"key":"green-70","value":"oklch(58.66% .1996 142.5)"},{"key":"green-80","value":"oklch(51.96% .1768 142.5)"},{"key":"green-90","value":"oklch(44.03% .1498 142.5)"},{"key":"green-95","value":"oklch(30.17% .1027 142.5)"},{"key":"green-100","value":"oklch(26.35% .0897 142.5)"},{"key":"beryl-0","value":"oklch(96.57% .03 163.7)"},{"key":"beryl-5","value":"oklch(94.71% .0634 163.5)"},{"key":"beryl-10","value":"oklch(91.87% .1178 162.2)"},{"key":"beryl-20","value":"oklch(90.33% .1569 161.2)"},{"key":"beryl-30","value":"oklch(86.43% .2104 155.8)"},{"key":"beryl-40","value":"oklch(82.49% .1978 156.6)"},{"key":"beryl-50","value":"oklch(76.89% .1885 155.4)"},{"key":"beryl-60","value":"oklch(69.77% .1794 153.1)"},{"key":"beryl-70","value":"oklch(60.74% .1602 151.9)"},{"key":"beryl-80","value":"oklch(54.36% .1421 152.3)"},{"key":"beryl-90","value":"oklch(46.09% .1213 152)"},{"key":"beryl-95","value":"oklch(30.39% .0888 147.6)"},{"key":"beryl-100","value":"oklch(26.71% .0855 144.4)"},{"key":"teal-0","value":"oklch(97.24% .023 179.8)"},{"key":"teal-5","value":"oklch(94.3% .0661 180.5)"},{"key":"teal-10","value":"oklch(92.33% .1056 181.5)"},{"key":"teal-20","value":"oklch(91.3% .1327 183.1)"},{"key":"teal-30","value":"oklch(90.52% .1472 184.8)"},{"key":"teal-40","value":"oklch(89.99% .1577 186.3)"},{"key":"teal-50","value":"oklch(86.13% .1485 190.5)"},{"key":"teal-60","value":"oklch(79.38% .1355 194.8)"},{"key":"teal-70","value":"oklch(67.86% .1154 199.2)"},{"key":"teal-80","value":"oklch(60.62% .1033 203.7)"},{"key":"teal-90","value":"oklch(52.19% .0898 208.3)"},{"key":"teal-95","value":"oklch(31.94% .0584 220.7)"},{"key":"teal-100","value":"oklch(28.34% .0534 224.3)"},{"key":"cyan-0","value":"oklch(97.47% .022 196.6)"},{"key":"cyan-5","value":"oklch(95.05% .0598 196)"},{"key":"cyan-10","value":"oklch(92.28% .1032 196.9)"},{"key":"cyan-20","value":"oklch(89.98% .1264 200.1)"},{"key":"cyan-30","value":"oklch(87.28% .1376 204.3)"},{"key":"cyan-40","value":"oklch(84.82% .1408 209.5)"},{"key":"cyan-50","value":"oklch(81.54% .1453 216.7)"},{"key":"cyan-60","value":"oklch(77.57% .1494 226.7)"},{"key":"cyan-70","value":"oklch(70.27% .1509 235.9)"},{"key":"cyan-80","value":"oklch(63.25% .1493 241.7)"},{"key":"cyan-90","value":"oklch(52.16% .1354 246.4)"},{"key":"cyan-95","value":"oklch(35.21% .0976 249.2)"},{"key":"cyan-100","value":"oklch(30.27% .0847 249.6)"},{"key":"sky-0","value":"oklch(97.39% .0139 209.4)"},{"key":"sky-5","value":"oklch(94.65% .0358 212.1)"},{"key":"sky-10","value":"oklch(90.51% .0667 216.5)"},{"key":"sky-20","value":"oklch(86.58% .0902 224)"},{"key":"sky-30","value":"oklch(77.94% .1431 228.4)"},{"key":"sky-40","value":"oklch(72.24% .1626 239)"},{"key":"sky-50","value":"oklch(67.09% .1828 248.5)"},{"key":"sky-60","value":"oklch(62.09% .2077 255.4)"},{"key":"sky-70","value":"oklch(55.12% .2483 261.6)"},{"key":"sky-80","value":"oklch(49.98% .2769 263.8)"},{"key":"sky-90","value":"oklch(40.76% .2499 264.2)"},{"key":"sky-95","value":"oklch(28.37% .1946 265.1)"},{"key":"sky-100","value":"oklch(25.85% .1768 265.4)"},{"key":"blue-0","value":"oklch(97.5% .0105 219.7)"},{"key":"blue-5","value":"oklch(93.53% .0305 231.3)"},{"key":"blue-10","value":"oklch(90.01% .0519 236.1)"},{"key":"blue-20","value":"oklch(81.69% .0975 246.5)"},{"key":"blue-30","value":"oklch(72.87% .1468 249.3)"},{"key":"blue-40","value":"oklch(64.31% .1921 258.5)"},{"key":"blue-50","value":"oklch(58.22% .2279 263.9)"},{"key":"blue-60","value":"oklch(51.83% .2687 266.1)"},{"key":"blue-70","value":"oklch(46.26% .3057 266.7)"},{"key":"blue-80","value":"oklch(42.89% .2907 266.3)"},{"key":"blue-90","value":"oklch(39.4% .2629 268)"},{"key":"blue-95","value":"oklch(28.64% .1893 269)"},{"key":"blue-100","value":"oklch(25.46% .168 269.2)"},{"key":"indigo-0","value":"oklch(97.1% .0083 257.2)"},{"key":"indigo-5","value":"oklch(94.11% .0228 279.6)"},{"key":"indigo-10","value":"oklch(87.83% .0547 274.4)"},{"key":"indigo-20","value":"oklch(77.74% .1153 280.2)"},{"key":"indigo-30","value":"oklch(70.2% .1611 282.9)"},{"key":"indigo-40","value":"oklch(61.3% .218 284)"},{"key":"indigo-50","value":"oklch(56.78% .2478 284.1)"},{"key":"indigo-60","value":"oklch(50.06% .2906 282)"},{"key":"indigo-70","value":"oklch(48.74% .2963 279.3)"},{"key":"indigo-80","value":"oklch(48.25% .2976 277.4)"},{"key":"indigo-90","value":"oklch(41.46% .2571 276.7)"},{"key":"indigo-95","value":"oklch(29.36% .1799 278.3)"},{"key":"indigo-100","value":"oklch(25.28% .1551 278.1)"},{"key":"violet-0","value":"oklch(97.96% .01 322.8)"},{"key":"violet-5","value":"oklch(94.02% .0266 299.5)"},{"key":"violet-10","value":"oklch(88.69% .0596 300.1)"},{"key":"violet-20","value":"oklch(80.47% .113 297.7)"},{"key":"violet-30","value":"oklch(71.63% .1722 298.7)"},{"key":"violet-40","value":"oklch(62.1% .237 297.8)"},{"key":"violet-50","value":"oklch(56.23% .2803 297.8)"},{"key":"violet-60","value":"oklch(52.55% .293 292.4)"},{"key":"violet-70","value":"oklch(51.12% .2931 287.9)"},{"key":"violet-80","value":"oklch(48.43% .2798 286.7)"},{"key":"violet-90","value":"oklch(40.64% .2331 287.9)"},{"key":"violet-95","value":"oklch(28.51% .1631 288.3)"},{"key":"violet-100","value":"oklch(24.44% .1403 287.8)"},{"key":"purple-0","value":"oklch(97.07% .0155 325.8)"},{"key":"purple-5","value":"oklch(94.28% .0315 314.4)"},{"key":"purple-10","value":"oklch(89.13% .0709 314.7)"},{"key":"purple-20","value":"oklch(81.4% .1318 312.8)"},{"key":"purple-30","value":"oklch(72.72% .2007 312.8)"},{"key":"purple-40","value":"oklch(63.36% .2677 310)"},{"key":"purple-50","value":"oklch(58.21% .2988 307.2)"},{"key":"purple-60","value":"oklch(55.59% .2952 301)"},{"key":"purple-70","value":"oklch(54.45% .294 297.9)"},{"key":"purple-80","value":"oklch(48.76% .264 297.5)"},{"key":"purple-90","value":"oklch(39.15% .2105 298.7)"},{"key":"purple-95","value":"oklch(27.95% .1488 300.5)"},{"key":"purple-100","value":"oklch(24.3% .128 302.4)"},{"key":"fuchsia-0","value":"oklch(97.07% .0155 325.8)"},{"key":"fuchsia-5","value":"oklch(94.57% .0378 324.9)"},{"key":"fuchsia-10","value":"oklch(89.9% .086 326.3)"},{"key":"fuchsia-20","value":"oklch(81.84% .1554 322)"},{"key":"fuchsia-30","value":"oklch(74.78% .2085 319.1)"},{"key":"fuchsia-40","value":"oklch(67.61% .25 316.5)"},{"key":"fuchsia-50","value":"oklch(62.91% .25 316.7)"},{"key":"fuchsia-60","value":"oklch(58.72% .25 311.8)"},{"key":"fuchsia-70","value":"oklch(53.61% .25 312.8)"},{"key":"fuchsia-80","value":"oklch(47.9% .2382 313.2)"},{"key":"fuchsia-90","value":"oklch(38.62% .1895 315.8)"},{"key":"fuchsia-95","value":"oklch(27.75% .1357 316.4)"},{"key":"fuchsia-100","value":"oklch(23.7% .1162 315.9)"},{"key":"pink-0","value":"oklch(97.07% .0155 325.8)"},{"key":"pink-5","value":"oklch(94.74% .0372 326.5)"},{"key":"pink-10","value":"oklch(88.85% .083 332.8)"},{"key":"pink-20","value":"oklch(81.57% .1379 341.6)"},{"key":"pink-30","value":"oklch(74.68% .2018 342.5)"},{"key":"pink-40","value":"oklch(69.18% .2455 347.6)"},{"key":"pink-50","value":"oklch(65.84% .25 350.7)"},{"key":"pink-60","value":"oklch(63.54% .25 359.2)"},{"key":"pink-70","value":"oklch(58.95% .2377 2.6)"},{"key":"pink-80","value":"oklch(53% .2126 6.4)"},{"key":"pink-90","value":"oklch(43.66% .1748 8.1)"},{"key":"pink-95","value":"oklch(31.48% .1261 7.8)"},{"key":"pink-100","value":"oklch(27.42% .1098 8.5)"},{"key":"crimson-0","value":"oklch(97.07% .0155 325.8)"},{"key":"crimson-5","value":"oklch(94.2% .0266 353.2)"},{"key":"crimson-10","value":"oklch(88.09% .0623 1)"},{"key":"crimson-20","value":"oklch(80.33% .1184 4.5)"},{"key":"crimson-30","value":"oklch(72.9% .1774 4.4)"},{"key":"crimson-40","value":"oklch(66.41% .2325 8.3)"},{"key":"crimson-50","value":"oklch(63.55% .25 15.3)"},{"key":"crimson-60","value":"oklch(62.66% .25 21.2)"},{"key":"crimson-70","value":"oklch(58.59% .2383 26.2)"},{"key":"crimson-80","value":"oklch(53.32% .2169 26.3)"},{"key":"crimson-90","value":"oklch(44.03% .1783 24.4)"},{"key":"crimson-95","value":"oklch(31.73% .1287 25.1)"},{"key":"crimson-100","value":"oklch(27.68% .1126 26.2)"},{"key":"red-0","value":"oklch(96.63% .01 17.2)"},{"key":"red-5","value":"oklch(94.05% .0239 17)"},{"key":"red-10","value":"oklch(87.16% .0632 17.8)"},{"key":"red-20","value":"oklch(79.39% .119 18.8)"},{"key":"red-30","value":"oklch(72.94% .1679 17.5)"},{"key":"red-40","value":"oklch(64.7% .2399 19.9)"},{"key":"red-50","value":"oklch(62.82% .25 28.6)"},{"key":"red-60","value":"oklch(60.94% .2501 29.2)"},{"key":"red-70","value":"oklch(57.58% .2363 29.2)"},{"key":"red-80","value":"oklch(53.09% .2178 29.2)"},{"key":"red-90","value":"oklch(44.45% .1824 29.2)"},{"key":"red-95","value":"oklch(32.59% .1337 29.2)"},{"key":"red-100","value":"oklch(28.54% .1171 29.2)"},{"key":"sand-0","value":"oklch(98.6% .007 88)"},{"key":"sand-5","value":"oklch(96.4% .014 86)"},{"key":"sand-10","value":"oklch(93.2% .025 84)"},{"key":"sand-20","value":"oklch(86.6% .045 82)"},{"key":"sand-30","value":"oklch(79.7% .064 80)"},{"key":"sand-40","value":"oklch(71.8% .079 78)"},{"key":"sand-50","value":"oklch(63.4% .082 76)"},{"key":"sand-60","value":"oklch(53.8% .074 73)"},{"key":"sand-70","value":"oklch(44.6% .064 70)"},{"key":"sand-80","value":"oklch(35.8% .05 67)"},{"key":"sand-90","value":"oklch(26.8% .034 64)"},{"key":"sand-95","value":"oklch(22.2% .026 62)"},{"key":"sand-100","value":"oklch(17.8% .018 60)"},{"key":"taupe-0","value":"oklch(98.5% .003 55)"},{"key":"taupe-5","value":"oklch(96.1% .006 53)"},{"key":"taupe-10","value":"oklch(92.4% .01 51)"},{"key":"taupe-20","value":"oklch(85% .018 49)"},{"key":"taupe-30","value":"oklch(77.3% .025 47)"},{"key":"taupe-40","value":"oklch(68.5% .03 45)"},{"key":"taupe-50","value":"oklch(59.2% .032 43)"},{"key":"taupe-60","value":"oklch(49.6% .03 41)"},{"key":"taupe-70","value":"oklch(40.6% .027 39)"},{"key":"taupe-80","value":"oklch(32.1% .023 37)"},{"key":"taupe-90","value":"oklch(23.8% .017 35)"},{"key":"taupe-95","value":"oklch(19.7% .013 34)"},{"key":"taupe-100","value":"oklch(15.8% .009 33)"},{"key":"olive-0","value":"oklch(98.5% .009 110)"},{"key":"olive-5","value":"oklch(96.2% .02 111)"},{"key":"olive-10","value":"oklch(92.8% .036 112)"},{"key":"olive-20","value":"oklch(86.4% .063 113)"},{"key":"olive-30","value":"oklch(79.4% .087 114)"},{"key":"olive-40","value":"oklch(71.5% .105 114)"},{"key":"olive-50","value":"oklch(62.8% .108 113)"},{"key":"olive-60","value":"oklch(53.4% .096 112)"},{"key":"olive-70","value":"oklch(44.5% .081 111)"},{"key":"olive-80","value":"oklch(35.8% .063 110)"},{"key":"olive-90","value":"oklch(27.1% .044 109)"},{"key":"olive-95","value":"oklch(22.6% .034 108)"},{"key":"olive-100","value":"oklch(18.2% .025 107)"},{"key":"sage-0","value":"oklch(98.4% .004 151)"},{"key":"sage-5","value":"oklch(96% .009 152)"},{"key":"sage-10","value":"oklch(92.5% .017 153)"},{"key":"sage-20","value":"oklch(85.6% .03 154)"},{"key":"sage-30","value":"oklch(78.1% .042 155)"},{"key":"sage-40","value":"oklch(69.8% .049 156)"},{"key":"sage-50","value":"oklch(60.9% .051 157)"},{"key":"sage-60","value":"oklch(51.5% .047 158)"},{"key":"sage-70","value":"oklch(42.8% .041 159)"},{"key":"sage-80","value":"oklch(34.3% .033 160)"},{"key":"sage-90","value":"oklch(25.9% .024 161)"},{"key":"sage-95","value":"oklch(21.5% .018 162)"},{"key":"sage-100","value":"oklch(17.3% .012 163)"},{"key":"moss-0","value":"oklch(98.3% .007 132)"},{"key":"moss-5","value":"oklch(95.8% .017 133)"},{"key":"moss-10","value":"oklch(92.1% .032 134)"},{"key":"moss-20","value":"oklch(85.2% .058 135)"},{"key":"moss-30","value":"oklch(77.8% .08 136)"},{"key":"moss-40","value":"oklch(69.9% .097 137)"},{"key":"moss-50","value":"oklch(61.3% .103 138)"},{"key":"moss-60","value":"oklch(52.2% .093 139)"},{"key":"moss-70","value":"oklch(43.6% .08 140)"},{"key":"moss-80","value":"oklch(35.3% .064 141)"},{"key":"moss-90","value":"oklch(26.8% .045 142)"},{"key":"moss-95","value":"oklch(22.3% .034 143)"},{"key":"moss-100","value":"oklch(17.9% .023 144)"},{"key":"petrol-0","value":"oklch(98.3% .005 205)"},{"key":"petrol-5","value":"oklch(95.8% .013 207)"},{"key":"petrol-10","value":"oklch(92% .026 209)"},{"key":"petrol-20","value":"oklch(84.8% .046 211)"},{"key":"petrol-30","value":"oklch(76.8% .066 213)"},{"key":"petrol-40","value":"oklch(68% .085 215)"},{"key":"petrol-50","value":"oklch(58.6% .099 217)"},{"key":"petrol-60","value":"oklch(49.3% .091 219)"},{"key":"petrol-70","value":"oklch(40.8% .075 221)"},{"key":"petrol-80","value":"oklch(32.8% .059 223)"},{"key":"petrol-90","value":"oklch(24.8% .041 225)"},{"key":"petrol-95","value":"oklch(20.6% .031 226)"},{"key":"petrol-100","value":"oklch(16.5% .022 227)"},{"key":"copper-0","value":"oklch(98.4% .007 76)"},{"key":"copper-5","value":"oklch(96% .017 75)"},{"key":"copper-10","value":"oklch(92.5% .031 74)"},{"key":"copper-20","value":"oklch(86% .059 72)"},{"key":"copper-30","value":"oklch(79% .087 70)"},{"key":"copper-40","value":"oklch(71.4% .115 68)"},{"key":"copper-50","value":"oklch(63.3% .13 66)"},{"key":"copper-60","value":"oklch(54.7% .116 64)"},{"key":"copper-70","value":"oklch(46% .098 62)"},{"key":"copper-80","value":"oklch(37.2% .078 60)"},{"key":"copper-90","value":"oklch(28.2% .055 58)"},{"key":"copper-95","value":"oklch(23.5% .042 57)"},{"key":"copper-100","value":"oklch(18.9% .03 56)"},{"key":"terracotta-0","value":"oklch(98.3% .006 47)"},{"key":"terracotta-5","value":"oklch(95.8% .015 46)"},{"key":"terracotta-10","value":"oklch(92% .03 44)"},{"key":"terracotta-20","value":"oklch(85.4% .05 42)"},{"key":"terracotta-30","value":"oklch(78.7% .073 40)"},{"key":"terracotta-40","value":"oklch(72% .09 38)"},{"key":"terracotta-50","value":"oklch(64.4% .096 36)"},{"key":"terracotta-60","value":"oklch(55.8% .087 34)"},{"key":"terracotta-70","value":"oklch(47% .076 32)"},{"key":"terracotta-80","value":"oklch(38% .062 30)"},{"key":"terracotta-90","value":"oklch(28.8% .044 28)"},{"key":"terracotta-95","value":"oklch(24% .034 27)"},{"key":"terracotta-100","value":"oklch(19.3% .025 26)"},{"key":"stone","value":"var(--color-stone-30)","dependencies":["color-stone-30","color-stone-40"],"modes":{"light":{"type":"string","value":"var(--color-stone-30)"},"dark":{"type":"string","value":"var(--color-stone-40)"}}},{"key":"gray","value":"var(--color-gray-30)","dependencies":["color-gray-30","color-gray-40"],"modes":{"light":{"type":"string","value":"var(--color-gray-30)"},"dark":{"type":"string","value":"var(--color-gray-40)"}}},{"key":"neutral","value":"var(--color-neutral-30)","dependencies":["color-neutral-30","color-neutral-40"],"modes":{"light":{"type":"string","value":"var(--color-neutral-30)"},"dark":{"type":"string","value":"var(--color-neutral-40)"}}},{"key":"slate","value":"var(--color-slate-30)","dependencies":["color-slate-30","color-slate-40"],"modes":{"light":{"type":"string","value":"var(--color-slate-30)"},"dark":{"type":"string","value":"var(--color-slate-40)"}}},{"key":"brown","value":"var(--color-brown-40)","dependencies":["color-brown-40","color-brown-50"],"modes":{"light":{"type":"string","value":"var(--color-brown-40)"},"dark":{"type":"string","value":"var(--color-brown-50)"}}},{"key":"orange","value":"var(--color-orange-40)","dependencies":["color-orange-40","color-orange-50"],"modes":{"light":{"type":"string","value":"var(--color-orange-40)"},"dark":{"type":"string","value":"var(--color-orange-50)"}}},{"key":"amber","value":"var(--color-amber-40)","dependencies":["color-amber-40","color-amber-50"],"modes":{"light":{"type":"string","value":"var(--color-amber-40)"},"dark":{"type":"string","value":"var(--color-amber-50)"}}},{"key":"yellow","value":"var(--color-yellow-40)","dependencies":["color-yellow-40","color-yellow-50"],"modes":{"light":{"type":"string","value":"var(--color-yellow-40)"},"dark":{"type":"string","value":"var(--color-yellow-50)"}}},{"key":"lime","value":"var(--color-lime-40)","dependencies":["color-lime-40","color-lime-50"],"modes":{"light":{"type":"string","value":"var(--color-lime-40)"},"dark":{"type":"string","value":"var(--color-lime-50)"}}},{"key":"green","value":"var(--color-green-40)","dependencies":["color-green-40","color-green-50"],"modes":{"light":{"type":"string","value":"var(--color-green-40)"},"dark":{"type":"string","value":"var(--color-green-50)"}}},{"key":"beryl","value":"var(--color-beryl-40)","dependencies":["color-beryl-40","color-beryl-50"],"modes":{"light":{"type":"string","value":"var(--color-beryl-40)"},"dark":{"type":"string","value":"var(--color-beryl-50)"}}},{"key":"teal","value":"var(--color-teal-40)","dependencies":["color-teal-40","color-teal-50"],"modes":{"light":{"type":"string","value":"var(--color-teal-40)"},"dark":{"type":"string","value":"var(--color-teal-50)"}}},{"key":"cyan","value":"var(--color-cyan-40)","dependencies":["color-cyan-40","color-cyan-50"],"modes":{"light":{"type":"string","value":"var(--color-cyan-40)"},"dark":{"type":"string","value":"var(--color-cyan-50)"}}},{"key":"sky","value":"var(--color-sky-60)","dependencies":["color-sky-60","color-sky-50"],"modes":{"light":{"type":"string","value":"var(--color-sky-60)"},"dark":{"type":"string","value":"var(--color-sky-50)"}}},{"key":"blue","value":"var(--color-blue-60)","dependencies":["color-blue-60","color-blue-50"],"modes":{"light":{"type":"string","value":"var(--color-blue-60)"},"dark":{"type":"string","value":"var(--color-blue-50)"}}},{"key":"indigo","value":"var(--color-indigo-60)","dependencies":["color-indigo-60","color-indigo-50"],"modes":{"light":{"type":"string","value":"var(--color-indigo-60)"},"dark":{"type":"string","value":"var(--color-indigo-50)"}}},{"key":"violet","value":"var(--color-violet-60)","dependencies":["color-violet-60","color-violet-50"],"modes":{"light":{"type":"string","value":"var(--color-violet-60)"},"dark":{"type":"string","value":"var(--color-violet-50)"}}},{"key":"purple","value":"var(--color-purple-60)","dependencies":["color-purple-60","color-purple-50"],"modes":{"light":{"type":"string","value":"var(--color-purple-60)"},"dark":{"type":"string","value":"var(--color-purple-50)"}}},{"key":"fuchsia","value":"var(--color-fuchsia-60)","dependencies":["color-fuchsia-60","color-fuchsia-50"],"modes":{"light":{"type":"string","value":"var(--color-fuchsia-60)"},"dark":{"type":"string","value":"var(--color-fuchsia-50)"}}},{"key":"pink","value":"var(--color-pink-60)","dependencies":["color-pink-60","color-pink-50"],"modes":{"light":{"type":"string","value":"var(--color-pink-60)"},"dark":{"type":"string","value":"var(--color-pink-50)"}}},{"key":"crimson","value":"var(--color-crimson-60)","dependencies":["color-crimson-60","color-crimson-50"],"modes":{"light":{"type":"string","value":"var(--color-crimson-60)"},"dark":{"type":"string","value":"var(--color-crimson-50)"}}},{"key":"red","value":"var(--color-red-60)","dependencies":["color-red-60","color-red-50"],"modes":{"light":{"type":"string","value":"var(--color-red-60)"},"dark":{"type":"string","value":"var(--color-red-50)"}}},{"key":"sand","value":"var(--color-sand-30)","dependencies":["color-sand-30","color-sand-40"],"modes":{"light":{"type":"string","value":"var(--color-sand-30)"},"dark":{"type":"string","value":"var(--color-sand-40)"}}},{"key":"taupe","value":"var(--color-taupe-30)","dependencies":["color-taupe-30","color-taupe-40"],"modes":{"light":{"type":"string","value":"var(--color-taupe-30)"},"dark":{"type":"string","value":"var(--color-taupe-40)"}}},{"key":"olive","value":"var(--color-olive-50)","dependencies":["color-olive-50","color-olive-40"],"modes":{"light":{"type":"string","value":"var(--color-olive-50)"},"dark":{"type":"string","value":"var(--color-olive-40)"}}},{"key":"sage","value":"var(--color-sage-30)","dependencies":["color-sage-30","color-sage-40"],"modes":{"light":{"type":"string","value":"var(--color-sage-30)"},"dark":{"type":"string","value":"var(--color-sage-40)"}}},{"key":"moss","value":"var(--color-moss-50)","dependencies":["color-moss-50","color-moss-40"],"modes":{"light":{"type":"string","value":"var(--color-moss-50)"},"dark":{"type":"string","value":"var(--color-moss-40)"}}},{"key":"petrol","value":"var(--color-petrol-60)","dependencies":["color-petrol-60","color-petrol-50"],"modes":{"light":{"type":"string","value":"var(--color-petrol-60)"},"dark":{"type":"string","value":"var(--color-petrol-50)"}}},{"key":"copper","value":"var(--color-copper-50)","dependencies":["color-copper-50","color-copper-40"],"modes":{"light":{"type":"string","value":"var(--color-copper-50)"},"dark":{"type":"string","value":"var(--color-copper-40)"}}},{"key":"terracotta","value":"var(--color-terracotta-50)","dependencies":["color-terracotta-50","color-terracotta-40"],"modes":{"light":{"type":"string","value":"var(--color-terracotta-50)"},"dark":{"type":"string","value":"var(--color-terracotta-40)"}}},{"key":"white","value":"oklch(100% 0 none)","inline":true},{"key":"black","value":"oklch(0% 0 none)","inline":true},{"key":"current","value":"currentColor","inline":true}],"color-surface":[{"key":"base","value":"var(--color-neutral-0)","dependencies":["color-neutral-0","color-gray-95"],"modes":{"light":{"type":"string","value":"var(--color-neutral-0)"},"dark":{"type":"string","value":"var(--color-gray-95)"}}},{"key":"muted","value":"var(--color-neutral-5)","dependencies":["color-neutral-5","color-gray-100"],"modes":{"light":{"type":"string","value":"var(--color-neutral-5)"},"dark":{"type":"string","value":"var(--color-gray-100)"}}},{"key":"raised","value":"var(--color-white)","dependencies":["color-white","color-gray-90"],"modes":{"light":{"type":"string","value":"var(--color-white)"},"dark":{"type":"string","value":"var(--color-gray-90)"}}},{"key":"overlay","value":"var(--color-white)","dependencies":["color-white","color-gray-80"],"modes":{"light":{"type":"string","value":"var(--color-white)"},"dark":{"type":"string","value":"var(--color-gray-80)"}}},{"key":"inverse","value":"var(--color-black)","dependencies":["color-black","color-white"],"modes":{"light":{"type":"string","value":"var(--color-black)"},"dark":{"type":"string","value":"var(--color-white)"}}}],"color-line":[{"key":"base","value":"oklch(0% 0 none / .12)","modes":{"light":{"type":"string","value":"oklch(0% 0 none / .12)"},"dark":{"type":"string","value":"oklch(100% 0 none / .12)"}}},{"key":"strong","value":"oklch(0% 0 none / .18)","modes":{"light":{"type":"string","value":"oklch(0% 0 none / .18)"},"dark":{"type":"string","value":"oklch(100% 0 none / .18)"}}},{"key":"muted","value":"oklch(0% 0 none / .09)","modes":{"light":{"type":"string","value":"oklch(0% 0 none / .09)"},"dark":{"type":"string","value":"oklch(100% 0 none / .09)"}}},{"key":"subtle","value":"oklch(0% 0 none / .06)","modes":{"light":{"type":"string","value":"oklch(0% 0 none / .06)"},"dark":{"type":"string","value":"oklch(100% 0 none / .06)"}}}],"color-text":[{"key":"body","value":"var(--color-neutral-70)","dependencies":["color-neutral-70","color-gray-30"],"modes":{"light":{"type":"string","value":"var(--color-neutral-70)"},"dark":{"type":"string","value":"var(--color-gray-30)"}}},{"key":"strong","value":"var(--color-neutral-100)","dependencies":["color-neutral-100","color-white"],"modes":{"light":{"type":"string","value":"var(--color-neutral-100)"},"dark":{"type":"string","value":"var(--color-white)"}}},{"key":"muted","value":"var(--color-neutral-60)","dependencies":["color-neutral-60","color-gray-40"],"modes":{"light":{"type":"string","value":"var(--color-neutral-60)"},"dark":{"type":"string","value":"var(--color-gray-40)"}}},{"key":"subtle","value":"var(--color-neutral-50)","dependencies":["color-neutral-50","color-gray-50"],"modes":{"light":{"type":"string","value":"var(--color-neutral-50)"},"dark":{"type":"string","value":"var(--color-gray-50)"}}},{"key":"disabled","value":"var(--color-neutral-40)","dependencies":["color-neutral-40","color-gray-60"],"modes":{"light":{"type":"string","value":"var(--color-neutral-40)"},"dark":{"type":"string","value":"var(--color-gray-60)"}}},{"key":"placeholder","value":"var(--color-neutral-40)","dependencies":["color-neutral-40","color-gray-60"],"modes":{"light":{"type":"string","value":"var(--color-neutral-40)"},"dark":{"type":"string","value":"var(--color-gray-60)"}}},{"key":"inverse","value":"var(--color-white)","dependencies":["color-white","color-black"],"modes":{"light":{"type":"string","value":"var(--color-white)"},"dark":{"type":"string","value":"var(--color-black)"}}},{"key":"link","value":"var(--color-blue-60)","dependencies":["color-blue-60","color-blue-30"],"modes":{"light":{"type":"string","value":"var(--color-blue-60)"},"dark":{"type":"string","value":"var(--color-blue-30)"}}},{"key":"link-hover","value":"var(--color-blue-70)","dependencies":["color-blue-70","color-blue-20"],"modes":{"light":{"type":"string","value":"var(--color-blue-70)"},"dark":{"type":"string","value":"var(--color-blue-20)"}}},{"key":"stone","value":"var(--color-stone-60)","dependencies":["color-stone-60","color-stone-30"],"modes":{"light":{"type":"string","value":"var(--color-stone-60)"},"dark":{"type":"string","value":"var(--color-stone-30)"}}},{"key":"gray","value":"var(--color-gray-60)","dependencies":["color-gray-60","color-gray-30"],"modes":{"light":{"type":"string","value":"var(--color-gray-60)"},"dark":{"type":"string","value":"var(--color-gray-30)"}}},{"key":"neutral","value":"var(--color-neutral-60)","dependencies":["color-neutral-60","color-neutral-30"],"modes":{"light":{"type":"string","value":"var(--color-neutral-60)"},"dark":{"type":"string","value":"var(--color-neutral-30)"}}},{"key":"slate","value":"var(--color-slate-60)","dependencies":["color-slate-60","color-slate-30"],"modes":{"light":{"type":"string","value":"var(--color-slate-60)"},"dark":{"type":"string","value":"var(--color-slate-30)"}}},{"key":"brown","value":"var(--color-brown-60)","dependencies":["color-brown-60","color-brown-30"],"modes":{"light":{"type":"string","value":"var(--color-brown-60)"},"dark":{"type":"string","value":"var(--color-brown-30)"}}},{"key":"orange","value":"var(--color-orange-60)","dependencies":["color-orange-60","color-orange-30"],"modes":{"light":{"type":"string","value":"var(--color-orange-60)"},"dark":{"type":"string","value":"var(--color-orange-30)"}}},{"key":"amber","value":"var(--color-amber-60)","dependencies":["color-amber-60","color-amber-40"],"modes":{"light":{"type":"string","value":"var(--color-amber-60)"},"dark":{"type":"string","value":"var(--color-amber-40)"}}},{"key":"yellow","value":"var(--color-yellow-70)","dependencies":["color-yellow-70","color-yellow-40"],"modes":{"light":{"type":"string","value":"var(--color-yellow-70)"},"dark":{"type":"string","value":"var(--color-yellow-40)"}}},{"key":"lime","value":"var(--color-lime-70)","dependencies":["color-lime-70","color-lime-40"],"modes":{"light":{"type":"string","value":"var(--color-lime-70)"},"dark":{"type":"string","value":"var(--color-lime-40)"}}},{"key":"green","value":"var(--color-green-70)","dependencies":["color-green-70","color-green-40"],"modes":{"light":{"type":"string","value":"var(--color-green-70)"},"dark":{"type":"string","value":"var(--color-green-40)"}}},{"key":"beryl","value":"var(--color-beryl-70)","dependencies":["color-beryl-70","color-beryl-40"],"modes":{"light":{"type":"string","value":"var(--color-beryl-70)"},"dark":{"type":"string","value":"var(--color-beryl-40)"}}},{"key":"teal","value":"var(--color-teal-70)","dependencies":["color-teal-70","color-teal-40"],"modes":{"light":{"type":"string","value":"var(--color-teal-70)"},"dark":{"type":"string","value":"var(--color-teal-40)"}}},{"key":"cyan","value":"var(--color-cyan-70)","dependencies":["color-cyan-70","color-cyan-40"],"modes":{"light":{"type":"string","value":"var(--color-cyan-70)"},"dark":{"type":"string","value":"var(--color-cyan-40)"}}},{"key":"sky","value":"var(--color-sky-70)","dependencies":["color-sky-70","color-sky-30"],"modes":{"light":{"type":"string","value":"var(--color-sky-70)"},"dark":{"type":"string","value":"var(--color-sky-30)"}}},{"key":"blue","value":"var(--color-blue-60)","dependencies":["color-blue-60","color-blue-30"],"modes":{"light":{"type":"string","value":"var(--color-blue-60)"},"dark":{"type":"string","value":"var(--color-blue-30)"}}},{"key":"indigo","value":"var(--color-indigo-60)","dependencies":["color-indigo-60","color-indigo-30"],"modes":{"light":{"type":"string","value":"var(--color-indigo-60)"},"dark":{"type":"string","value":"var(--color-indigo-30)"}}},{"key":"violet","value":"var(--color-violet-60)","dependencies":["color-violet-60","color-violet-30"],"modes":{"light":{"type":"string","value":"var(--color-violet-60)"},"dark":{"type":"string","value":"var(--color-violet-30)"}}},{"key":"purple","value":"var(--color-purple-60)","dependencies":["color-purple-60","color-purple-30"],"modes":{"light":{"type":"string","value":"var(--color-purple-60)"},"dark":{"type":"string","value":"var(--color-purple-30)"}}},{"key":"fuchsia","value":"var(--color-fuchsia-60)","dependencies":["color-fuchsia-60","color-fuchsia-30"],"modes":{"light":{"type":"string","value":"var(--color-fuchsia-60)"},"dark":{"type":"string","value":"var(--color-fuchsia-30)"}}},{"key":"pink","value":"var(--color-pink-60)","dependencies":["color-pink-60","color-pink-30"],"modes":{"light":{"type":"string","value":"var(--color-pink-60)"},"dark":{"type":"string","value":"var(--color-pink-30)"}}},{"key":"crimson","value":"var(--color-crimson-60)","dependencies":["color-crimson-60","color-crimson-30"],"modes":{"light":{"type":"string","value":"var(--color-crimson-60)"},"dark":{"type":"string","value":"var(--color-crimson-30)"}}},{"key":"red","value":"var(--color-red-60)","dependencies":["color-red-60","color-red-30"],"modes":{"light":{"type":"string","value":"var(--color-red-60)"},"dark":{"type":"string","value":"var(--color-red-30)"}}},{"key":"sand","value":"var(--color-sand-60)","dependencies":["color-sand-60","color-sand-30"],"modes":{"light":{"type":"string","value":"var(--color-sand-60)"},"dark":{"type":"string","value":"var(--color-sand-30)"}}},{"key":"taupe","value":"var(--color-taupe-60)","dependencies":["color-taupe-60","color-taupe-30"],"modes":{"light":{"type":"string","value":"var(--color-taupe-60)"},"dark":{"type":"string","value":"var(--color-taupe-30)"}}},{"key":"olive","value":"var(--color-olive-60)","dependencies":["color-olive-60","color-olive-30"],"modes":{"light":{"type":"string","value":"var(--color-olive-60)"},"dark":{"type":"string","value":"var(--color-olive-30)"}}},{"key":"sage","value":"var(--color-sage-60)","dependencies":["color-sage-60","color-sage-30"],"modes":{"light":{"type":"string","value":"var(--color-sage-60)"},"dark":{"type":"string","value":"var(--color-sage-30)"}}},{"key":"moss","value":"var(--color-moss-60)","dependencies":["color-moss-60","color-moss-30"],"modes":{"light":{"type":"string","value":"var(--color-moss-60)"},"dark":{"type":"string","value":"var(--color-moss-30)"}}},{"key":"petrol","value":"var(--color-petrol-60)","dependencies":["color-petrol-60","color-petrol-30"],"modes":{"light":{"type":"string","value":"var(--color-petrol-60)"},"dark":{"type":"string","value":"var(--color-petrol-30)"}}},{"key":"copper","value":"var(--color-copper-60)","dependencies":["color-copper-60","color-copper-30"],"modes":{"light":{"type":"string","value":"var(--color-copper-60)"},"dark":{"type":"string","value":"var(--color-copper-30)"}}},{"key":"terracotta","value":"var(--color-terracotta-70)","dependencies":["color-terracotta-70","color-terracotta-30"],"modes":{"light":{"type":"string","value":"var(--color-terracotta-70)"},"dark":{"type":"string","value":"var(--color-terracotta-30)"}}}],"font-family":[{"key":"sans","value":"var(--font-sans, ui-sans-serif), system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"","dependencies":["font-sans"]},{"key":"mono","value":"var(--font-mono, ui-monospace), SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace","dependencies":["font-mono"]},{"key":"serif","value":"var(--font-serif, ui-serif), Georgia, Cambria, \"Times New Roman\", Times, serif","dependencies":["font-serif"]}],"tracking":[{"key":"tightest","value":"-.072em"},{"key":"tighter","value":"-.04em"},{"key":"tight","value":"-.02em"},{"key":"normal","type":"number","value":0},{"key":"wide","value":".02em"},{"key":"wider","value":".04em"},{"key":"widest","value":".12em"}],"leading":[{"key":"xs","type":"number","value":1.2},{"key":"sm","type":"number","value":1.4},{"key":"md","type":"number","value":1.6},{"key":"lg","type":"number","value":1.8},{"key":"xl","type":"number","value":2}],"font-weight":[{"key":"thin","type":"number","value":100},{"key":"extralight","type":"number","value":200},{"key":"light","type":"number","value":300},{"key":"regular","type":"number","value":400},{"key":"medium","type":"number","value":500},{"key":"semibold","type":"number","value":600},{"key":"bold","type":"number","value":700},{"key":"extrabold","type":"number","value":800},{"key":"heavy","type":"number","value":900}],"font-size":[{"key":"3xs","type":"number","value":".5rem","numeric":{"value":0.5,"unit":"rem"}},{"key":"2xs","type":"number","value":".625rem","numeric":{"value":0.625,"unit":"rem"}},{"key":"xs","type":"number","value":".75rem","numeric":{"value":0.75,"unit":"rem"}},{"key":"sm","type":"number","value":".875rem","numeric":{"value":0.875,"unit":"rem"}},{"key":"md","type":"number","value":"1rem","numeric":{"value":1,"unit":"rem"}},{"key":"lg","type":"number","value":"1.125rem","numeric":{"value":1.125,"unit":"rem"}},{"key":"xl","type":"number","value":"1.25rem","numeric":{"value":1.25,"unit":"rem"}},{"key":"2xl","type":"number","value":"1.5rem","numeric":{"value":1.5,"unit":"rem"}},{"key":"3xl","type":"number","value":"2rem","numeric":{"value":2,"unit":"rem"}},{"key":"4xl","type":"number","value":"2.25rem","numeric":{"value":2.25,"unit":"rem"}},{"key":"5xl","type":"number","value":"2.5rem","numeric":{"value":2.5,"unit":"rem"}},{"key":"6xl","type":"number","value":"3rem","numeric":{"value":3,"unit":"rem"}},{"key":"7xl","type":"number","value":"3.75rem","numeric":{"value":3.75,"unit":"rem"}},{"key":"8xl","type":"number","value":"4.5rem","numeric":{"value":4.5,"unit":"rem"}},{"key":"9xl","type":"number","value":"6rem","numeric":{"value":6,"unit":"rem"}},{"key":"10xl","type":"number","value":"8rem","numeric":{"value":8,"unit":"rem"}}],"font-feature":[{"key":"tabular","value":"\"tnum\""}],"content":[{"key":"empty","value":"\"\""}],"radius":[{"key":"xs","type":"number","value":".125rem","numeric":{"value":0.125,"unit":"rem"}},{"key":"sm","type":"number","value":".25rem","numeric":{"value":0.25,"unit":"rem"}},{"key":"md","type":"number","value":".375rem","numeric":{"value":0.375,"unit":"rem"}},{"key":"lg","type":"number","value":".5rem","numeric":{"value":0.5,"unit":"rem"}},{"key":"xl","type":"number","value":".75rem","numeric":{"value":0.75,"unit":"rem"}},{"key":"2xl","type":"number","value":"1rem","numeric":{"value":1,"unit":"rem"}},{"key":"3xl","type":"number","value":"1.5rem","numeric":{"value":1.5,"unit":"rem"}},{"key":"4xl","type":"number","value":"2rem","numeric":{"value":2,"unit":"rem"}}],"spacing":[{"key":"4xs","type":"number","value":".125rem","numeric":{"value":0.125,"unit":"rem"}},{"key":"3xs","type":"number","value":".25rem","numeric":{"value":0.25,"unit":"rem"}},{"key":"2xs","type":"number","value":".375rem","numeric":{"value":0.375,"unit":"rem"}},{"key":"xs","type":"number","value":".5rem","numeric":{"value":0.5,"unit":"rem"}},{"key":"sm","type":"number","value":".75rem","numeric":{"value":0.75,"unit":"rem"}},{"key":"md","type":"number","value":"1rem","numeric":{"value":1,"unit":"rem"}},{"key":"lg","type":"number","value":"1.5rem","numeric":{"value":1.5,"unit":"rem"}},{"key":"xl","type":"number","value":"2rem","numeric":{"value":2,"unit":"rem"}},{"key":"2xl","type":"number","value":"3rem","numeric":{"value":3,"unit":"rem"}},{"key":"3xl","type":"number","value":"4rem","numeric":{"value":4,"unit":"rem"}},{"key":"4xl","type":"number","value":"6rem","numeric":{"value":6,"unit":"rem"}},{"key":"5xl","type":"number","value":"8rem","numeric":{"value":8,"unit":"rem"}}],"breakpoint":[{"key":"4xs","type":"number","value":"22.5rem","numeric":{"value":22.5,"unit":"rem"}},{"key":"3xs","type":"number","value":"30rem","numeric":{"value":30,"unit":"rem"}},{"key":"2xs","type":"number","value":"37.5rem","numeric":{"value":37.5,"unit":"rem"}},{"key":"xs","type":"number","value":"48rem","numeric":{"value":48,"unit":"rem"}},{"key":"sm","type":"number","value":"52.125rem","numeric":{"value":52.125,"unit":"rem"}},{"key":"md","type":"number","value":"64rem","numeric":{"value":64,"unit":"rem"}},{"key":"lg","type":"number","value":"80rem","numeric":{"value":80,"unit":"rem"}},{"key":"xl","type":"number","value":"90rem","numeric":{"value":90,"unit":"rem"}},{"key":"2xl","type":"number","value":"100rem","numeric":{"value":100,"unit":"rem"}},{"key":"3xl","type":"number","value":"120rem","numeric":{"value":120,"unit":"rem"}},{"key":"4xl","type":"number","value":"160rem","numeric":{"value":160,"unit":"rem"}}],"container":[{"key":"3xs","type":"number","value":"16rem","numeric":{"value":16,"unit":"rem"}},{"key":"2xs","type":"number","value":"18rem","numeric":{"value":18,"unit":"rem"}},{"key":"xs","type":"number","value":"20rem","numeric":{"value":20,"unit":"rem"}},{"key":"sm","type":"number","value":"24rem","numeric":{"value":24,"unit":"rem"}},{"key":"md","type":"number","value":"28rem","numeric":{"value":28,"unit":"rem"}},{"key":"lg","type":"number","value":"32rem","numeric":{"value":32,"unit":"rem"}},{"key":"xl","type":"number","value":"36rem","numeric":{"value":36,"unit":"rem"}},{"key":"2xl","type":"number","value":"42rem","numeric":{"value":42,"unit":"rem"}},{"key":"3xl","type":"number","value":"48rem","numeric":{"value":48,"unit":"rem"}},{"key":"4xl","type":"number","value":"56rem","numeric":{"value":56,"unit":"rem"}},{"key":"5xl","type":"number","value":"64rem","numeric":{"value":64,"unit":"rem"}},{"key":"6xl","type":"number","value":"72rem","numeric":{"value":72,"unit":"rem"}},{"key":"7xl","type":"number","value":"80rem","numeric":{"value":80,"unit":"rem"}},{"key":"8xl","type":"number","value":"90rem","numeric":{"value":90,"unit":"rem"}}],"duration":[{"key":"fastest","value":"75ms"},{"key":"faster","value":".1s"},{"key":"fast","value":".15s"},{"key":"normal","value":".2s"},{"key":"slow","value":".3s"},{"key":"slower","value":".5s"},{"key":"slowest","value":".8s"}],"easing":[{"key":"smooth","value":"cubic-bezier(.4, 0, .2, 1)"},{"key":"soft","value":"cubic-bezier(.33, 1, .68, 1)"},{"key":"crisp","value":"cubic-bezier(.16, 1, .3, 1)"},{"key":"snap","value":"cubic-bezier(.2, 0, 0, 1)"},{"key":"accelerate","value":"cubic-bezier(.4, 0, 1, 1)"},{"key":"decelerate","value":"cubic-bezier(0, 0, .2, 1)"},{"key":"overshoot","value":"cubic-bezier(.34, 1.56, .64, 1)"},{"key":"rewind","value":"cubic-bezier(.36, 0, .66, -.56)"},{"key":"spring","value":"cubic-bezier(.68, -.6, .32, 1.6)"}],"animate":[{"key":"fade","value":"fade 1s infinite"},{"key":"flash","value":"flash 1s infinite"},{"key":"float","value":"float 3s ease-in-out infinite"},{"key":"heart","value":"heart 1s infinite"},{"key":"jump","value":"jump 1s infinite"},{"key":"ping","value":"ping 1s infinite"},{"key":"pulse","value":"pulse 1s infinite"},{"key":"rotate","value":"rotate 1s linear infinite"},{"key":"shake","value":"shake 1s infinite"},{"key":"zoom","value":"zoom 1s infinite"}],"shadow":[{"key":"xs","value":"0 0 0 1px oklch(0% 0 none / .04), 0 1px 2px -1px oklch(0% 0 none / .08)","modes":{"light":{"type":"string","value":"0 0 0 1px oklch(0% 0 none / .04), 0 1px 2px -1px oklch(0% 0 none / .08)"},"dark":{"type":"string","value":"0 0 0 1px oklch(100% 0 none / .04), 0 1px 2px -1px oklch(0% 0 none / .3)"}}},{"key":"sm","value":"0 0 0 1px oklch(0% 0 none / .04), 0 1px 2px -1px oklch(0% 0 none / .06), 0 3px 6px -2px oklch(0% 0 none / .08)","modes":{"light":{"type":"string","value":"0 0 0 1px oklch(0% 0 none / .04), 0 1px 2px -1px oklch(0% 0 none / .06), 0 3px 6px -2px oklch(0% 0 none / .08)"},"dark":{"type":"string","value":"0 0 0 1px oklch(100% 0 none / .05), 0 1px 2px -1px oklch(0% 0 none / .34), 0 3px 6px -2px oklch(0% 0 none / .26)"}}},{"key":"md","value":"0 0 0 1px oklch(0% 0 none / .05), 0 2px 4px -2px oklch(0% 0 none / .06), 0 8px 16px -4px oklch(0% 0 none / .1)","modes":{"light":{"type":"string","value":"0 0 0 1px oklch(0% 0 none / .05), 0 2px 4px -2px oklch(0% 0 none / .06), 0 8px 16px -4px oklch(0% 0 none / .1)"},"dark":{"type":"string","value":"0 0 0 1px oklch(100% 0 none / .06), 0 2px 4px -2px oklch(0% 0 none / .38), 0 8px 16px -4px oklch(0% 0 none / .3)"}}},{"key":"lg","value":"0 0 0 1px oklch(0% 0 none / .05), 0 4px 8px -4px oklch(0% 0 none / .08), 0 16px 32px -8px oklch(0% 0 none / .12)","modes":{"light":{"type":"string","value":"0 0 0 1px oklch(0% 0 none / .05), 0 4px 8px -4px oklch(0% 0 none / .08), 0 16px 32px -8px oklch(0% 0 none / .12)"},"dark":{"type":"string","value":"0 0 0 1px oklch(100% 0 none / .06), 0 4px 8px -4px oklch(0% 0 none / .42), 0 16px 32px -8px oklch(0% 0 none / .34)"}}},{"key":"xl","value":"0 0 0 1px oklch(0% 0 none / .06), 0 8px 16px -6px oklch(0% 0 none / .1), 0 24px 48px -12px oklch(0% 0 none / .14)","modes":{"light":{"type":"string","value":"0 0 0 1px oklch(0% 0 none / .06), 0 8px 16px -6px oklch(0% 0 none / .1), 0 24px 48px -12px oklch(0% 0 none / .14)"},"dark":{"type":"string","value":"0 0 0 1px oklch(100% 0 none / .07), 0 8px 16px -6px oklch(0% 0 none / .46), 0 24px 48px -12px oklch(0% 0 none / .38)"}}},{"key":"2xl","value":"0 0 0 1px oklch(0% 0 none / .06), 0 12px 24px -8px oklch(0% 0 none / .12), 0 32px 64px -16px oklch(0% 0 none / .18)","modes":{"light":{"type":"string","value":"0 0 0 1px oklch(0% 0 none / .06), 0 12px 24px -8px oklch(0% 0 none / .12), 0 32px 64px -16px oklch(0% 0 none / .18)"},"dark":{"type":"string","value":"0 0 0 1px oklch(100% 0 none / .07), 0 12px 24px -8px oklch(0% 0 none / .5), 0 32px 64px -16px oklch(0% 0 none / .44)"}}}],"":[{"key":"full","value":"100%","inline":true},{"key":"fit","value":"fit-content","inline":true},{"key":"max","value":"max-content","inline":true},{"key":"min","value":"min-content","inline":true}],"order":[{"key":"first","type":"number","value":-999999,"inline":true},{"key":"last","type":"number","value":999999,"inline":true}]},"animations":{"fade":{"0%":{"opacity":"0"},"to":{"opacity":"1"}},"flash":{"0%":{"opacity":"1"},"50%":{"opacity":"1"},"to":{"opacity":"1"},"25%":{"opacity":"0"},"75%":{"opacity":"0"}},"float":{"0%":{"transform":"none"},"50%":{"transform":"translateY(-1.25rem)"},"to":{"transform":"none"}},"heart":{"0%":{"transform":"scale(1)"},"14%":{"transform":"scale(1.3)"},"28%":{"transform":"scale(1)"},"42%":{"transform":"scale(1.3)"},"70%":{"transform":"scale(1)"}},"jump":{"0%":{"transform":"translateY(-25%)","animation-timing-function":"cubic-bezier(.8, 0, 1, 1)"},"to":{"transform":"translateY(-25%)","animation-timing-function":"cubic-bezier(.8, 0, 1, 1)"},"50%":{"transform":"translateY(0)","animation-timing-function":"cubic-bezier(0, 0, .2, 1)"}},"ping":{"75%":{"transform":"scale(2)","opacity":"0"},"to":{"transform":"scale(2)","opacity":"0"}},"pulse":{"0%":{"transform":"none"},"50%":{"transform":"scale(1.05)"},"to":{"transform":"none"}},"rotate":{"0%":{"transform":"rotate(-360deg)"},"to":{"transform":"none"}},"shake":{"0%":{"transform":"none"},"6.5%":{"transform":"translateX(-6px) rotateY(-9deg)"},"18.5%":{"transform":"translateX(5px) rotateY(7deg)"},"31.5%":{"transform":"translateX(-3px) rotateY(-5deg)"},"43.5%":{"transform":"translateX(2px) rotateY(3deg)"},"50%":{"transform":"none"}},"zoom":{"0%":{"transform":"scale(0)"},"to":{"transform":"none"}}},"variants":[{"token":"@all","branches":[{"conditions":["@media all"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","value":"all"}]}]}]},{"token":"@print","branches":[{"conditions":["@media print"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","value":"print"}]}]}]},{"token":"@screen","branches":[{"conditions":["@media screen"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","value":"screen"}]}]}]},{"token":"@speech","branches":[{"conditions":["@media speech"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","value":"speech"}]}]}]},{"token":"@landscape","branches":[{"conditions":["@media (orientation:landscape)"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","name":"orientation","value":"landscape"}]}]}]},{"token":"@portrait","branches":[{"conditions":["@media (orientation:portrait)"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","name":"orientation","value":"portrait"}]}]}]},{"token":"@motion","branches":[{"conditions":["@media (prefers-reduced-motion:no-preference)"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","name":"prefers-reduced-motion","value":"no-preference"}]}]}]},{"token":"@reduce-motion","branches":[{"conditions":["@media (prefers-reduced-motion:reduce)"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","name":"prefers-reduced-motion","value":"reduce"}]}]}]},{"token":"@base","branches":[{"layer":"base"}]},{"token":"@default","branches":[{"layer":"defaults"}]},{"token":"@component","branches":[{"layer":"components"}]},{"token":"@utility","branches":[{"layer":"utilities"}]},{"token":"@starting-style","branches":[{"conditions":["@starting-style"],"conditionNodes":[{"id":"starting-style","nodes":[]}]}]}],"conditions":{"4xs":{"id":"media","nodes":[{"type":"number","value":22.5,"unit":"rem"}]},"3xs":{"id":"media","nodes":[{"type":"number","value":30,"unit":"rem"}]},"2xs":{"id":"media","nodes":[{"type":"number","value":37.5,"unit":"rem"}]},"xs":{"id":"media","nodes":[{"type":"number","value":48,"unit":"rem"}]},"sm":{"id":"media","nodes":[{"type":"number","value":52.125,"unit":"rem"}]},"md":{"id":"media","nodes":[{"type":"number","value":64,"unit":"rem"}]},"lg":{"id":"media","nodes":[{"type":"number","value":80,"unit":"rem"}]},"xl":{"id":"media","nodes":[{"type":"number","value":90,"unit":"rem"}]},"2xl":{"id":"media","nodes":[{"type":"number","value":100,"unit":"rem"}]},"3xl":{"id":"media","nodes":[{"type":"number","value":120,"unit":"rem"}]},"4xl":{"id":"media","nodes":[{"type":"number","value":160,"unit":"rem"}]},"all":{"id":"media","nodes":[{"type":"string","value":"all"}]},"print":{"id":"media","nodes":[{"type":"string","value":"print"}]},"screen":{"id":"media","nodes":[{"type":"string","value":"screen"}]},"speech":{"id":"media","nodes":[{"type":"string","value":"speech"}]},"landscape":{"id":"media","nodes":[{"type":"string","name":"orientation","value":"landscape"}]},"portrait":{"id":"media","nodes":[{"type":"string","name":"orientation","value":"portrait"}]},"motion":{"id":"media","nodes":[{"type":"string","name":"prefers-reduced-motion","value":"no-preference"}]},"reduce-motion":{"id":"media","nodes":[{"type":"string","name":"prefers-reduced-motion","value":"reduce"}]},"base":{"id":"layer","nodes":[{"type":"string","value":"base"}]},"default":{"id":"layer","nodes":[{"type":"string","value":"defaults"}]},"component":{"id":"layer","nodes":[{"type":"string","value":"components"}]},"utility":{"id":"layer","nodes":[{"type":"string","value":"utilities"}]},"starting-style":{"id":"starting-style","nodes":[]}},"breakpointConditions":{"4xs":{"id":"media","nodes":[{"type":"number","value":22.5,"unit":"rem"}]},"3xs":{"id":"media","nodes":[{"type":"number","value":30,"unit":"rem"}]},"2xs":{"id":"media","nodes":[{"type":"number","value":37.5,"unit":"rem"}]},"xs":{"id":"media","nodes":[{"type":"number","value":48,"unit":"rem"}]},"sm":{"id":"media","nodes":[{"type":"number","value":52.125,"unit":"rem"}]},"md":{"id":"media","nodes":[{"type":"number","value":64,"unit":"rem"}]},"lg":{"id":"media","nodes":[{"type":"number","value":80,"unit":"rem"}]},"xl":{"id":"media","nodes":[{"type":"number","value":90,"unit":"rem"}]},"2xl":{"id":"media","nodes":[{"type":"number","value":100,"unit":"rem"}]},"3xl":{"id":"media","nodes":[{"type":"number","value":120,"unit":"rem"}]},"4xl":{"id":"media","nodes":[{"type":"number","value":160,"unit":"rem"}]}},"containerConditions":{"3xs":{"id":"container","nodes":[{"type":"number","value":16,"unit":"rem"}]},"2xs":{"id":"container","nodes":[{"type":"number","value":18,"unit":"rem"}]},"xs":{"id":"container","nodes":[{"type":"number","value":20,"unit":"rem"}]},"sm":{"id":"container","nodes":[{"type":"number","value":24,"unit":"rem"}]},"md":{"id":"container","nodes":[{"type":"number","value":28,"unit":"rem"}]},"lg":{"id":"container","nodes":[{"type":"number","value":32,"unit":"rem"}]},"xl":{"id":"container","nodes":[{"type":"number","value":36,"unit":"rem"}]},"2xl":{"id":"container","nodes":[{"type":"number","value":42,"unit":"rem"}]},"3xl":{"id":"container","nodes":[{"type":"number","value":48,"unit":"rem"}]},"4xl":{"id":"container","nodes":[{"type":"number","value":56,"unit":"rem"}]},"5xl":{"id":"container","nodes":[{"type":"number","value":64,"unit":"rem"}]},"6xl":{"id":"container","nodes":[{"type":"number","value":72,"unit":"rem"}]},"7xl":{"id":"container","nodes":[{"type":"number","value":80,"unit":"rem"}]},"8xl":{"id":"container","nodes":[{"type":"number","value":90,"unit":"rem"}]}},"utilities":[{"id":".abs","name":"abs","type":-2,"emit":{"type":"static","rules":[{"declarations":{"position":"absolute"}}]},"matchers":[{"type":"static","name":"abs"}]},{"id":".bg-clip-border","name":"bg-clip-border","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-clip":"border-box"}}]},"matchers":[{"type":"static","name":"bg-clip-border"}]},{"id":".bg-clip-content","name":"bg-clip-content","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-clip":"content-box"}}]},"matchers":[{"type":"static","name":"bg-clip-content"}]},{"id":".bg-clip-padding","name":"bg-clip-padding","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-clip":"padding-box"}}]},"matchers":[{"type":"static","name":"bg-clip-padding"}]},{"id":".bg-clip-text","name":"bg-clip-text","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-clip":"text"}}]},"matchers":[{"type":"static","name":"bg-clip-text"}]},{"id":"bg-origin-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-origin":null}}]},"matchers":[{"type":"pattern","prefix":"bg-origin-","values":["border","content","padding"],"valueMap":{"border":"border-box","content":"content-box","padding":"padding-box"}}]},{"id":".block","name":"block","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"block"}}]},"matchers":[{"type":"static","name":"block"}]},{"id":".bottom","name":"bottom","type":-2,"emit":{"type":"static","rules":[{"declarations":{"bottom":"0"}}]},"matchers":[{"type":"static","name":"bottom"}]},{"id":"box-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"box-sizing":null}}]},"matchers":[{"type":"pattern","prefix":"box-","values":["border","content"],"valueMap":{"border":"border-box","content":"content-box"}}]},{"id":".break-spaces","name":"break-spaces","type":-2,"emit":{"type":"static","rules":[{"declarations":{"white-space":"break-spaces"}}]},"matchers":[{"type":"static","name":"break-spaces"}]},{"id":".break-word","name":"break-word","type":-2,"emit":{"type":"static","rules":[{"declarations":{"word-break":"break-word"}}]},"matchers":[{"type":"static","name":"break-word"}]},{"id":".capitalize","name":"capitalize","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-transform":"capitalize"}}]},"matchers":[{"type":"static","name":"capitalize"}]},{"id":".center","name":"center","type":-2,"emit":{"type":"static","rules":[{"declarations":{"left":"0","right":"0","margin-left":"auto","margin-right":"auto"}}]},"matchers":[{"type":"static","name":"center"}]},{"id":".clip-border","name":"clip-border","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"border-box"}}]},"matchers":[{"type":"static","name":"clip-border"}]},{"id":".clip-content","name":"clip-content","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"content-box"}}]},"matchers":[{"type":"static","name":"clip-content"}]},{"id":".clip-fill","name":"clip-fill","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"fill-box"}}]},"matchers":[{"type":"static","name":"clip-fill"}]},{"id":".clip-margin","name":"clip-margin","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"margin-box"}}]},"matchers":[{"type":"static","name":"clip-margin"}]},{"id":".clip-none","name":"clip-none","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"none"}}]},"matchers":[{"type":"static","name":"clip-none"}]},{"id":".clip-padding","name":"clip-padding","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"padding-box"}}]},"matchers":[{"type":"static","name":"clip-padding"}]},{"id":".clip-stroke","name":"clip-stroke","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"stroke-box"}}]},"matchers":[{"type":"static","name":"clip-stroke"}]},{"id":".clip-view","name":"clip-view","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"view-box"}}]},"matchers":[{"type":"static","name":"clip-view"}]},{"id":".container","name":"container","type":-2,"emit":{"type":"static","rules":[{"declarations":{"container-type":"inline-size"}}]},"matchers":[{"type":"static","name":"container"}]},{"id":"content-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"align-content":null}}]},"matchers":[{"type":"pattern","prefix":"content-","values":["around","between","evenly"],"valueMap":{"around":"space-around","between":"space-between","evenly":"space-evenly"}}]},{"id":"content-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"align-content":null}}]},"matchers":[{"type":"pattern","prefix":"content-","values":["baseline","center","end","flex-end","flex-start","normal","start","stretch"]}]},{"id":".contents","name":"contents","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"contents"}}]},"matchers":[{"type":"static","name":"contents"}]},{"id":".decoration-from-font","name":"decoration-from-font","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-decoration-thickness":"from-font"}}]},"matchers":[{"type":"static","name":"decoration-from-font"}]},{"id":".diagonal-fractions","name":"diagonal-fractions","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"diagonal-fractions"}}]},"matchers":[{"type":"static","name":"diagonal-fractions"}]},{"id":".fit","name":"fit","type":-2,"emit":{"type":"static","rules":[{"declarations":{"width":"fit-content","height":"fit-content"}}]},"matchers":[{"type":"static","name":"fit"}]},{"id":".fixed","name":"fixed","type":-2,"emit":{"type":"static","rules":[{"declarations":{"position":"fixed"}}]},"matchers":[{"type":"static","name":"fixed"}]},{"id":".flex","name":"flex","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"flex"}}]},"matchers":[{"type":"static","name":"flex"}]},{"id":".flex-col","name":"flex-col","type":-2,"emit":{"type":"static","rules":[{"declarations":{"flex-direction":"column"}}]},"matchers":[{"type":"static","name":"flex-col"}]},{"id":".flex-col-reverse","name":"flex-col-reverse","type":-2,"emit":{"type":"static","rules":[{"declarations":{"flex-direction":"column-reverse"}}]},"matchers":[{"type":"static","name":"flex-col-reverse"}]},{"id":".flex-row","name":"flex-row","type":-2,"emit":{"type":"static","rules":[{"declarations":{"flex-direction":"row"}}]},"matchers":[{"type":"static","name":"flex-row"}]},{"id":".flex-row-reverse","name":"flex-row-reverse","type":-2,"emit":{"type":"static","rules":[{"declarations":{"flex-direction":"row-reverse"}}]},"matchers":[{"type":"static","name":"flex-row-reverse"}]},{"id":".flow-root","name":"flow-root","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"flow-root"}}]},"matchers":[{"type":"static","name":"flow-root"}]},{"id":".font-antialiased","name":"font-antialiased","type":-2,"emit":{"type":"static","rules":[{"declarations":{"-webkit-font-smoothing":"antialiased","-moz-osx-font-smoothing":"grayscale"}}]},"matchers":[{"type":"static","name":"font-antialiased"}]},{"id":".font-subpixel-antialiased","name":"font-subpixel-antialiased","type":-2,"emit":{"type":"static","rules":[{"declarations":{"-webkit-font-smoothing":"auto","-moz-osx-font-smoothing":"auto"}}]},"matchers":[{"type":"static","name":"font-subpixel-antialiased"}]},{"id":".font-bolder","name":"font-bolder","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-weight":"bolder"}}]},"matchers":[{"type":"static","name":"font-bolder"}]},{"id":".full","name":"full","type":-2,"emit":{"type":"static","rules":[{"declarations":{"width":"100%","height":"100%"}}]},"matchers":[{"type":"static","name":"full"}]},{"id":".text-gradient","name":"text-gradient","type":-2,"emit":{"type":"static","rules":[{"declarations":{"-webkit-text-fill-color":"transparent","background-clip":"text"}}]},"matchers":[{"type":"static","name":"text-gradient"}]},{"id":".grid","name":"grid","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"grid"}}]},"matchers":[{"type":"static","name":"grid"}]},{"id":".hidden","name":"hidden","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"none"}}]},"matchers":[{"type":"static","name":"hidden"}]},{"id":".inline","name":"inline","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"inline"}}]},"matchers":[{"type":"static","name":"inline"}]},{"id":".inline-block","name":"inline-block","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"inline-block"}}]},"matchers":[{"type":"static","name":"inline-block"}]},{"id":".inline-flex","name":"inline-flex","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"inline-flex"}}]},"matchers":[{"type":"static","name":"inline-flex"}]},{"id":".inline-grid","name":"inline-grid","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"inline-grid"}}]},"matchers":[{"type":"static","name":"inline-grid"}]},{"id":".inline-table","name":"inline-table","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"inline-table"}}]},"matchers":[{"type":"static","name":"inline-table"}]},{"id":".invisible","name":"invisible","type":-2,"emit":{"type":"static","rules":[{"declarations":{"visibility":"hidden"}}]},"matchers":[{"type":"static","name":"invisible"}]},{"id":".isolate","name":"isolate","type":-2,"emit":{"type":"static","rules":[{"declarations":{"isolation":"isolate"}}]},"matchers":[{"type":"static","name":"isolate"}]},{"id":".italic","name":"italic","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-style":"italic"}}]},"matchers":[{"type":"static","name":"italic"}]},{"id":"items-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"align-items":null}}]},"matchers":[{"type":"pattern","prefix":"items-","values":["baseline","center","end","flex-end","flex-start","normal","self-end","self-start","start","stretch"]}]},{"id":"justify-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"justify-content":null}}]},"matchers":[{"type":"pattern","prefix":"justify-","values":["around","between","evenly"],"valueMap":{"around":"space-around","between":"space-between","evenly":"space-evenly"}}]},{"id":"justify-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"justify-content":null}}]},"matchers":[{"type":"pattern","prefix":"justify-","values":["center","end","flex-end","flex-start","left","normal","right","start","stretch"]}]},{"id":".left","name":"left","type":-2,"emit":{"type":"static","rules":[{"declarations":{"left":"0"}}]},"matchers":[{"type":"static","name":"left"}]},{"id":".line-through","name":"line-through","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-decoration":"line-through"}}]},"matchers":[{"type":"static","name":"line-through"}]},{"id":".lining-nums","name":"lining-nums","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"lining-nums"}}]},"matchers":[{"type":"static","name":"lining-nums"}]},{"id":".list-item","name":"list-item","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"list-item"}}]},"matchers":[{"type":"static","name":"list-item"}]},{"id":".lowercase","name":"lowercase","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-transform":"lowercase"}}]},"matchers":[{"type":"static","name":"lowercase"}]},{"id":".max-vh","name":"max-vh","type":-2,"emit":{"type":"static","rules":[{"declarations":{"max-height":"100vh"}}]},"matchers":[{"type":"static","name":"max-vh"}]},{"id":".max-vw","name":"max-vw","type":-2,"emit":{"type":"static","rules":[{"declarations":{"max-width":"100vw"}}]},"matchers":[{"type":"static","name":"max-vw"}]},{"id":".middle","name":"middle","type":-2,"emit":{"type":"static","rules":[{"declarations":{"top":"0","bottom":"0","margin-top":"auto","margin-bottom":"auto"}}]},"matchers":[{"type":"static","name":"middle"}]},{"id":".min-vh","name":"min-vh","type":-2,"emit":{"type":"static","rules":[{"declarations":{"min-height":"100vh"}}]},"matchers":[{"type":"static","name":"min-vh"}]},{"id":".min-vw","name":"min-vw","type":-2,"emit":{"type":"static","rules":[{"declarations":{"min-width":"100vw"}}]},"matchers":[{"type":"static","name":"min-vw"}]},{"id":".oblique","name":"oblique","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-style":"oblique"}}]},"matchers":[{"type":"static","name":"oblique"}]},{"id":".oldstyle-nums","name":"oldstyle-nums","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"oldstyle-nums"}}]},"matchers":[{"type":"static","name":"oldstyle-nums"}]},{"id":".ordinal","name":"ordinal","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"ordinal"}}]},"matchers":[{"type":"static","name":"ordinal"}]},{"id":".overline","name":"overline","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-decoration":"overline"}}]},"matchers":[{"type":"static","name":"overline"}]},{"id":".overflow","name":"overflow","type":-2,"emit":{"type":"static","rules":[{"declarations":{"overflow":"visible"}}]},"matchers":[{"type":"static","name":"overflow"}]},{"id":".proportional-nums","name":"proportional-nums","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"proportional-nums"}}]},"matchers":[{"type":"static","name":"proportional-nums"}]},{"id":".rel","name":"rel","type":-2,"emit":{"type":"static","rules":[{"declarations":{"position":"relative"}}]},"matchers":[{"type":"static","name":"rel"}]},{"id":".right","name":"right","type":-2,"emit":{"type":"static","rules":[{"declarations":{"right":"0"}}]},"matchers":[{"type":"static","name":"right"}]},{"id":".round","name":"round","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-radius":"50%","aspect-ratio":"1/1"}}]},"matchers":[{"type":"static","name":"round"}]},{"id":".rounded","name":"rounded","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-radius":"1e9em"}}]},"matchers":[{"type":"static","name":"rounded"}]},{"id":"self-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"align-self":null}}]},"matchers":[{"type":"pattern","prefix":"self-","values":["anchor-center","auto","baseline","center","end","flex-end","flex-start","normal","self-end","self-start","start","stretch"]}]},{"id":".shape-border","name":"shape-border","type":-2,"emit":{"type":"static","rules":[{"declarations":{"shape-outside":"border-box"}}]},"matchers":[{"type":"static","name":"shape-border"}]},{"id":".shape-content","name":"shape-content","type":-2,"emit":{"type":"static","rules":[{"declarations":{"shape-outside":"content-box"}}]},"matchers":[{"type":"static","name":"shape-content"}]},{"id":".shape-margin","name":"shape-margin","type":-2,"emit":{"type":"static","rules":[{"declarations":{"shape-outside":"margin-box"}}]},"matchers":[{"type":"static","name":"shape-margin"}]},{"id":".shape-none","name":"shape-none","type":-2,"emit":{"type":"static","rules":[{"declarations":{"shape-outside":"none"}}]},"matchers":[{"type":"static","name":"shape-none"}]},{"id":".shape-padding","name":"shape-padding","type":-2,"emit":{"type":"static","rules":[{"declarations":{"shape-outside":"padding-box"}}]},"matchers":[{"type":"static","name":"shape-padding"}]},{"id":".slashed-zero","name":"slashed-zero","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"slashed-zero"}}]},"matchers":[{"type":"static","name":"slashed-zero"}]},{"id":".stacked-fractions","name":"stacked-fractions","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"stacked-fractions"}}]},"matchers":[{"type":"static","name":"stacked-fractions"}]},{"id":".square","name":"square","type":-2,"emit":{"type":"static","rules":[{"declarations":{"aspect-ratio":"1/1"}}]},"matchers":[{"type":"static","name":"square"}]},{"id":".sr-only","name":"sr-only","type":-2,"emit":{"type":"static","rules":[{"declarations":{"position":"absolute","width":"1px","height":"1px","padding":"0","margin":"-1px","overflow":"hidden","clip":"rect(0, 0, 0, 0)","white-space":"nowrap","border-width":"0"}}]},"matchers":[{"type":"static","name":"sr-only"}]},{"id":".static","name":"static","type":-2,"emit":{"type":"static","rules":[{"declarations":{"position":"static"}}]},"matchers":[{"type":"static","name":"static"}]},{"id":".sticky","name":"sticky","type":-2,"emit":{"type":"static","rules":[{"declarations":{"position":"sticky"}}]},"matchers":[{"type":"static","name":"sticky"}]},{"id":".table","name":"table","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table"}}]},"matchers":[{"type":"static","name":"table"}]},{"id":".table-caption","name":"table-caption","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-caption"}}]},"matchers":[{"type":"static","name":"table-caption"}]},{"id":".table-cell","name":"table-cell","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-cell"}}]},"matchers":[{"type":"static","name":"table-cell"}]},{"id":".table-column","name":"table-column","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-column"}}]},"matchers":[{"type":"static","name":"table-column"}]},{"id":".table-column-group","name":"table-column-group","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-column-group"}}]},"matchers":[{"type":"static","name":"table-column-group"}]},{"id":".table-footer-group","name":"table-footer-group","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-footer-group"}}]},"matchers":[{"type":"static","name":"table-footer-group"}]},{"id":".table-header-group","name":"table-header-group","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-header-group"}}]},"matchers":[{"type":"static","name":"table-header-group"}]},{"id":".table-row","name":"table-row","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-row"}}]},"matchers":[{"type":"static","name":"table-row"}]},{"id":".table-row-group","name":"table-row-group","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-row-group"}}]},"matchers":[{"type":"static","name":"table-row-group"}]},{"id":".tabular-nums","name":"tabular-nums","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"tabular-nums"}}]},"matchers":[{"type":"static","name":"tabular-nums"}]},{"id":".top","name":"top","type":-2,"emit":{"type":"static","rules":[{"declarations":{"top":"0"}}]},"matchers":[{"type":"static","name":"top"}]},{"id":"transform-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"transform-box":null}}]},"matchers":[{"type":"pattern","prefix":"transform-","values":["border","content","fill","stroke","view"],"valueMap":{"border":"border-box","content":"content-box","fill":"fill-box","stroke":"stroke-box","view":"view-box"}}]},{"id":".untouchable","name":"untouchable","type":-2,"emit":{"type":"static","rules":[{"declarations":{"pointer-events":"none"}}]},"matchers":[{"type":"static","name":"untouchable"}]},{"id":".underline","name":"underline","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-decoration":"underline"}}]},"matchers":[{"type":"static","name":"underline"}]},{"id":".uppercase","name":"uppercase","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-transform":"uppercase"}}]},"matchers":[{"type":"static","name":"uppercase"}]},{"id":".vh","name":"vh","type":-2,"emit":{"type":"static","rules":[{"declarations":{"height":"100vh"}}]},"matchers":[{"type":"static","name":"vh"}]},{"id":".video","name":"video","type":-2,"emit":{"type":"static","rules":[{"declarations":{"aspect-ratio":"16/9"}}]},"matchers":[{"type":"static","name":"video"}]},{"id":".visible","name":"visible","type":-2,"emit":{"type":"static","rules":[{"declarations":{"visibility":"visible"}}]},"matchers":[{"type":"static","name":"visible"}]},{"id":".vw","name":"vw","type":-2,"emit":{"type":"static","rules":[{"declarations":{"width":"100vw"}}]},"matchers":[{"type":"static","name":"vw"}]},{"id":"wrap-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"overflow-wrap":null}}]},"matchers":[{"type":"pattern","prefix":"wrap-","values":["anywhere","break-word","normal"]}]},{"id":"animate-<~animate>","type":-1,"variableAliasRefs":["~animate"],"emit":{"type":"static","rules":[{"declarations":{"animation":null}}]},"matchers":[{"type":"token","prefix":"animate-"}]},{"id":"font-<~font-size>","type":0,"variableAliasRefs":["~font-size"],"emit":{"type":"static","rules":[{"declarations":{"font-size":null}}]},"matchers":[{"type":"token","prefix":"font-"}]},{"id":"font-<~font-family>","type":0,"variableAliasRefs":["~font-family"],"emit":{"type":"static","rules":[{"declarations":{"font-family":null}}]},"matchers":[{"type":"token","prefix":"font-"}]},{"id":"font-<~font-weight>","type":0,"variableAliasRefs":["~font-weight"],"emit":{"type":"static","rules":[{"declarations":{"font-weight":null}}]},"matchers":[{"type":"token","prefix":"font-"}]},{"id":"bg-<~color>","type":0,"variableAliasRefs":["~color"],"emit":{"type":"static","rules":[{"declarations":{"background-color":null}}]},"matchers":[{"type":"token","prefix":"bg-"}]},{"id":"surface-<~color-surface>","type":0,"variableAliasRefs":["~color-surface"],"emit":{"type":"static","rules":[{"declarations":{"background-color":null}}]},"matchers":[{"type":"token","prefix":"surface-"}]},{"id":"size-<~container>","type":-1,"variableAliasRefs":["~container"],"emit":{"type":"static","rules":[{"declarations":{"width":null,"height":null}}]},"matchers":[{"type":"token","prefix":"size-"}]},{"id":"size:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"width":null,"height":null}}]},"matchers":[{"type":"key","keys":["size"]}]},{"id":"min-size-<~container>","type":-1,"variableAliasRefs":["~container"],"emit":{"type":"static","rules":[{"declarations":{"min-width":null,"min-height":null}}]},"matchers":[{"type":"token","prefix":"min-size-"}]},{"id":"min-size:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"min-width":null,"min-height":null}}]},"matchers":[{"type":"key","keys":["min-size"]}]},{"id":"max-size-<~container>","type":-1,"variableAliasRefs":["~container"],"emit":{"type":"static","rules":[{"declarations":{"max-width":null,"max-height":null}}]},"matchers":[{"type":"token","prefix":"max-size-"}]},{"id":"max-size:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"max-width":null,"max-height":null}}]},"matchers":[{"type":"key","keys":["max-size"]}]},{"id":"b-<~color-line|~color>","type":-1,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-color":null}}]},"matchers":[{"type":"token","prefix":"b-"}]},{"id":"bt-<~color-line|~color>","type":0,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-top-color":null}}]},"matchers":[{"type":"token","prefix":"bt-"}]},{"id":"br-<~color-line|~color>","type":0,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-right-color":null}}]},"matchers":[{"type":"token","prefix":"br-"}]},{"id":"bb-<~color-line|~color>","type":0,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-bottom-color":null}}]},"matchers":[{"type":"token","prefix":"bb-"}]},{"id":"bl-<~color-line|~color>","type":0,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-left-color":null}}]},"matchers":[{"type":"token","prefix":"bl-"}]},{"id":"bx-<~color-line|~color>","type":-1,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-inline-color":null}}]},"matchers":[{"type":"token","prefix":"bx-"}]},{"id":"by-<~color-line|~color>","type":-1,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-block-color":null}}]},"matchers":[{"type":"token","prefix":"by-"}]},{"id":"outline-<~color-line|~color>","type":0,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"outline-color":null}}]},"matchers":[{"type":"token","prefix":"outline-"}]},{"id":"outline-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"outline-width":null}}]},"matchers":[{"type":"pattern","prefix":"outline-","values":["medium","thick","thin"]}]},{"id":"outline-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"outline-style":null}}]},"matchers":[{"type":"pattern","prefix":"outline-","values":["auto","dashed","dotted","double","hidden","none","solid"]}]},{"id":"grid-cols:<*>","type":0,"emit":{"type":"static","rules":[{"declarations":{"display":"grid","grid-template-columns":["repeat(",null,", minmax(0, 1fr))"]}}]},"matchers":[{"type":"key","keys":["grid-cols"]}]},{"id":"grid-rows:<*>","type":0,"emit":{"type":"static","rules":[{"declarations":{"display":"grid","grid-auto-flow":"column","grid-template-rows":["repeat(",null,", minmax(0, 1fr))"]}}]},"matchers":[{"type":"key","keys":["grid-rows"]}]},{"id":"grid-col-span:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"grid-column":["span ",null,"/span ",null]}}]},"matchers":[{"type":"key","keys":["grid-col-span"]}]},{"id":"grid-row-span:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"grid-row":["span ",null,"/span ",null]}}]},"matchers":[{"type":"key","keys":["grid-row-span"]}]},{"id":"clamp-lines:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"display":"-webkit-box","-webkit-box-orient":"vertical","-webkit-line-clamp":null,"overflow":"hidden","overflow-wrap":"break-word","text-overflow":"ellipsis"}}]},"matchers":[{"type":"key","keys":["clamp-lines"]}]},{"id":"text-<~font-size>","type":-1,"variableAliasRefs":["~font-size"],"emit":{"type":"static","rules":[{"declarations":{"font-size":null,"line-height":["max(1.8em - max(0rem, ",null," - 1rem) * 1.12, ",null,")"],"letter-spacing":["clamp(-.072em, calc((",null," - 1rem) * -.048), 0em)"]}}]},"matchers":[{"type":"token","prefix":"text-"}]},{"id":"text:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"font-size":null,"line-height":["max(1.8em - max(0rem, ",null," - 1rem) * 1.12, ",null,")"],"letter-spacing":["clamp(-.072em, calc((",null," - 1rem) * -.048), 0em)"]}}]},"matchers":[{"type":"key","keys":["text"]}]},{"id":"text-<~color-text>","type":0,"variableAliasRefs":["~color-text"],"emit":{"type":"static","rules":[{"declarations":{"color":null}}]},"matchers":[{"type":"token","prefix":"text-"}]},{"id":"text-decoration-<~color-text|~color>","type":0,"variableAliasRefs":["~color-text","~color"],"emit":{"type":"static","rules":[{"declarations":{"text-decoration-color":null}}]},"matchers":[{"type":"token","prefix":"text-decoration-"}]},{"id":"text-decoration:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"-webkit-text-decoration":null,"text-decoration":null}}]},"matchers":[{"type":"key","keys":["text-decoration"]}]},{"id":"text-decoration-thickness:<*>","type":0,"emit":{"type":"static","rules":[{"declarations":{"text-decoration-thickness":null}}]},"matchers":[{"type":"key","keys":["text-decoration-thickness"]}]},{"id":"text-underline-<~spacing>","type":0,"variableAliasRefs":["~spacing"],"emit":{"type":"static","rules":[{"declarations":{"text-underline-offset":null}}]},"matchers":[{"type":"token","prefix":"text-underline-"}]},{"id":"text-stroke-<~color>","type":0,"variableAliasRefs":["~color"],"emit":{"type":"static","rules":[{"declarations":{"-webkit-text-stroke-color":null}}]},"matchers":[{"type":"token","prefix":"text-stroke-"}]},{"id":"text-stroke:<*>","type":0,"emit":{"type":"static","rules":[{"declarations":{"-webkit-text-stroke":null}}]},"matchers":[{"type":"key","keys":["text-stroke"]}]},{"id":"backdrop-filter-<~color>","type":-1,"variableAliasRefs":["~color"],"emit":{"type":"static","rules":[{"declarations":{"-webkit-backdrop-filter":null,"backdrop-filter":null}}]},"matchers":[{"type":"token","prefix":"backdrop-filter-"}]},{"id":"backdrop-filter:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"-webkit-backdrop-filter":null,"backdrop-filter":null}}]},"matchers":[{"type":"key","keys":["backdrop-filter"]}]},{"id":"box-decoration-break:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"-webkit-box-decoration-break":null,"box-decoration-break":null}}]},"matchers":[{"type":"key","keys":["box-decoration-break"]}]},{"id":"mask-image:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"-webkit-mask-image":null,"mask-image":null}}]},"matchers":[{"type":"key","keys":["mask-image"]}]},{"id":"user-drag:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"-webkit-user-drag":null,"user-drag":null}}]},"matchers":[{"type":"key","keys":["user-drag"]}]},{"id":"user-select:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"-webkit-user-select":null,"user-select":null}}]},"matchers":[{"type":"key","keys":["user-select"]}]},{"id":"bg-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-size":null}}]},"matchers":[{"type":"pattern","prefix":"bg-","values":["auto","contain","cover"]}]},{"id":"bg-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-position":null}}]},"matchers":[{"type":"pattern","prefix":"bg-","values":["bottom","center","left","right","top"]}]},{"id":"bg-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-attachment":null}}]},"matchers":[{"type":"pattern","prefix":"bg-","values":["fixed","local","scroll"]}]},{"id":"bg-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-repeat":null}}]},"matchers":[{"type":"pattern","prefix":"bg-","values":["repeat","no-repeat","repeat-x","repeat-y"]}]},{"id":"b-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-style":null}}]},"matchers":[{"type":"pattern","prefix":"b-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"bt-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-top-style":null}}]},"matchers":[{"type":"pattern","prefix":"bt-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"br-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-right-style":null}}]},"matchers":[{"type":"pattern","prefix":"br-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"bb-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-bottom-style":null}}]},"matchers":[{"type":"pattern","prefix":"bb-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"bl-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-left-style":null}}]},"matchers":[{"type":"pattern","prefix":"bl-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"bx-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-inline-style":null}}]},"matchers":[{"type":"pattern","prefix":"bx-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"by-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-block-style":null}}]},"matchers":[{"type":"pattern","prefix":"by-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"decoration-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-decoration-style":null}}]},"matchers":[{"type":"pattern","prefix":"decoration-","values":["solid","double","dotted","dashed","wavy"]}]},{"id":"flex-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"flex-wrap":null}}]},"matchers":[{"type":"pattern","prefix":"flex-","values":["wrap","nowrap","wrap-reverse"]}]},{"id":"list-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"list-style-type":null}}]},"matchers":[{"type":"pattern","prefix":"list-","values":["disc","decimal"]}]},{"id":"list-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"list-style-position":null}}]},"matchers":[{"type":"pattern","prefix":"list-","values":["inside","outside"]}]},{"id":"object-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"object-fit":null}}]},"matchers":[{"type":"pattern","prefix":"object-","values":["cover","contain","fill","scale-down"]}]},{"id":"object-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"object-position":null}}]},"matchers":[{"type":"pattern","prefix":"object-","values":["center","top","bottom","left","right"]}]},{"id":"snap-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"scroll-snap-type":null}}]},"matchers":[{"type":"pattern","prefix":"snap-","values":["x","y","both","block","inline"]}]},{"id":"snap-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"scroll-snap-align":null}}]},"matchers":[{"type":"pattern","prefix":"snap-","values":["start","end","center"]}]},{"id":"snap-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"scroll-snap-stop":null}}]},"matchers":[{"type":"pattern","prefix":"snap-","values":["normal","always"]}]},{"id":"text-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-align":null}}]},"matchers":[{"type":"pattern","prefix":"text-","values":["left","center","right","start","end","justify"]}]},{"id":"text-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-wrap":null}}]},"matchers":[{"type":"pattern","prefix":"text-","values":["wrap","nowrap","balance","pretty"]}]},{"id":"text-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-overflow":null}}]},"matchers":[{"type":"pattern","prefix":"text-","values":["ellipsis","clip"]}]}]}
\ No newline at end of file
+{"version":1,"languageVersion":3,"modes":[{"name":"light","branches":[{"selector":":root","conditions":["@media (prefers-color-scheme:light)"]},{"selector":":host","conditions":["@media (prefers-color-scheme:light)"]}]},{"name":"dark","branches":[{"selector":":root","conditions":["@media (prefers-color-scheme:dark)"]},{"selector":":host","conditions":["@media (prefers-color-scheme:dark)"]}]}],"variables":{"color":[{"key":"stone-0","value":"oklch(99% .002 72)"},{"key":"stone-5","value":"oklch(94.9% .0053 72)"},{"key":"stone-10","value":"oklch(90.8% .0158 72)"},{"key":"stone-20","value":"oklch(82.6% .0287 72)"},{"key":"stone-30","value":"oklch(74.4% .04 72)"},{"key":"stone-40","value":"oklch(66.2% .044 72)"},{"key":"stone-50","value":"oklch(58% .045 72)"},{"key":"stone-60","value":"oklch(49.8% .033 72)"},{"key":"stone-70","value":"oklch(41.6% .0275 72)"},{"key":"stone-80","value":"oklch(33.4% .022 72)"},{"key":"stone-90","value":"oklch(25.2% .0105 72)"},{"key":"stone-95","value":"oklch(21.1% .0079 72)"},{"key":"stone-100","value":"oklch(17% .0053 72)"},{"key":"gray-0","value":"oklch(98.48% 0 none)"},{"key":"gray-5","value":"oklch(96.5% 0 none)"},{"key":"gray-10","value":"oklch(90% 0 none)"},{"key":"gray-20","value":"oklch(82% 0 none)"},{"key":"gray-30","value":"oklch(73.5% 0 none)"},{"key":"gray-40","value":"oklch(65% 0 none)"},{"key":"gray-50","value":"oklch(55.2% 0 none)"},{"key":"gray-60","value":"oklch(48% 0 none)"},{"key":"gray-70","value":"oklch(39.5% 0 none)"},{"key":"gray-80","value":"oklch(31% 0 none)"},{"key":"gray-90","value":"oklch(23.5% 0 none)"},{"key":"gray-95","value":"oklch(18.5% 0 none)"},{"key":"gray-100","value":"oklch(14.5% 0 none)"},{"key":"neutral-0","value":"oklch(98.38% .0033 250)"},{"key":"neutral-5","value":"oklch(96.8% .0048 253)"},{"key":"neutral-10","value":"oklch(94.8% .0074 262)"},{"key":"neutral-20","value":"oklch(88.5% .014 268)"},{"key":"neutral-30","value":"oklch(79.5% .02 270)"},{"key":"neutral-40","value":"oklch(68.5% .026 272)"},{"key":"neutral-50","value":"oklch(57% .03 273)"},{"key":"neutral-60","value":"oklch(48% .028 273)"},{"key":"neutral-70","value":"oklch(39% .024 273)"},{"key":"neutral-80","value":"oklch(30.5% .019 273)"},{"key":"neutral-90","value":"oklch(23% .014 273)"},{"key":"neutral-95","value":"oklch(18% .01 273)"},{"key":"neutral-100","value":"oklch(14% .007 273)"},{"key":"slate-0","value":"oklch(98.07% .0055 257.1)"},{"key":"slate-5","value":"oklch(96.15% .0145 267.3)"},{"key":"slate-10","value":"oklch(90.16% .0324 268.2)"},{"key":"slate-20","value":"oklch(82.16% .045 268.2)"},{"key":"slate-30","value":"oklch(74.16% .069 268.2)"},{"key":"slate-40","value":"oklch(63.99% .0804 266.1)"},{"key":"slate-50","value":"oklch(55.43% .0949 263.4)"},{"key":"slate-60","value":"oklch(45.03% .0817 265.9)"},{"key":"slate-70","value":"oklch(39% .0702 263.9)"},{"key":"slate-80","value":"oklch(32.14% .0604 264.8)"},{"key":"slate-90","value":"oklch(27.33% .0536 264.8)"},{"key":"slate-95","value":"oklch(21.5% .0573 267.4)"},{"key":"slate-100","value":"oklch(17.5% .0688 267.4)"},{"key":"brown-0","value":"oklch(97% .0097 47.1)"},{"key":"brown-5","value":"oklch(95.48% .0183 34.8)"},{"key":"brown-10","value":"oklch(88.65% .0558 33.4)"},{"key":"brown-20","value":"oklch(81.37% .1065 33.6)"},{"key":"brown-30","value":"oklch(74.39% .12 32.5)"},{"key":"brown-40","value":"oklch(67.62% .12 32.5)"},{"key":"brown-50","value":"oklch(61.9% .12 32.5)"},{"key":"brown-60","value":"oklch(55.58% .12 32.5)"},{"key":"brown-70","value":"oklch(49.11% .12 32.5)"},{"key":"brown-80","value":"oklch(42.07% .12 32.5)"},{"key":"brown-90","value":"oklch(35.11% .12 32.5)"},{"key":"brown-95","value":"oklch(24.7% .0958 31.2)"},{"key":"brown-100","value":"oklch(21.21% .0822 31.2)"},{"key":"orange-0","value":"oklch(96.76% .0202 84.6)"},{"key":"orange-5","value":"oklch(94.78% .0417 83)"},{"key":"orange-10","value":"oklch(89.94% .0784 75.7)"},{"key":"orange-20","value":"oklch(82.86% .1343 69.2)"},{"key":"orange-30","value":"oklch(75.09% .179 58.4)"},{"key":"orange-40","value":"oklch(71.4% .1941 48.1)"},{"key":"orange-50","value":"oklch(66.61% .2247 36.7)"},{"key":"orange-60","value":"oklch(61.68% .2388 31.2)"},{"key":"orange-70","value":"oklch(53.53% .2196 29.2)"},{"key":"orange-80","value":"oklch(46.33% .1901 29.2)"},{"key":"orange-90","value":"oklch(36.63% .1503 29.2)"},{"key":"orange-95","value":"oklch(25.4% .1042 29.2)"},{"key":"orange-100","value":"oklch(21.44% .088 29.2)"},{"key":"amber-0","value":"oklch(97.5% .0306 99)"},{"key":"amber-5","value":"oklch(96.24% .0573 98.1)"},{"key":"amber-10","value":"oklch(93.46% .0995 95.8)"},{"key":"amber-20","value":"oklch(88.25% .1592 91.3)"},{"key":"amber-30","value":"oklch(86% .1633 86.9)"},{"key":"amber-40","value":"oklch(83.04% .1701 81.1)"},{"key":"amber-50","value":"oklch(79.4% .1709 71.1)"},{"key":"amber-60","value":"oklch(73.31% .1784 56.5)"},{"key":"amber-70","value":"oklch(63.23% .1757 46.7)"},{"key":"amber-80","value":"oklch(53.09% .1677 39.7)"},{"key":"amber-90","value":"oklch(42.68% .138 38.6)"},{"key":"amber-95","value":"oklch(29.27% .0971 37.4)"},{"key":"amber-100","value":"oklch(23.94% .0818 36.1)"},{"key":"yellow-0","value":"oklch(98.86% .0355 107.4)"},{"key":"yellow-5","value":"oklch(98.27% .0758 108)"},{"key":"yellow-10","value":"oklch(97.31% .1513 109.1)"},{"key":"yellow-20","value":"oklch(95.82% .207 108.4)"},{"key":"yellow-30","value":"oklch(93.51% .1981 104.7)"},{"key":"yellow-40","value":"oklch(91.5% .1909 101.1)"},{"key":"yellow-50","value":"oklch(87.52% .1796 94.6)"},{"key":"yellow-60","value":"oklch(82.02% .169 82.1)"},{"key":"yellow-70","value":"oklch(72.04% .1592 67)"},{"key":"yellow-80","value":"oklch(64.84% .1477 63.1)"},{"key":"yellow-90","value":"oklch(52.17% .1199 62.2)"},{"key":"yellow-95","value":"oklch(33.35% .083 54.6)"},{"key":"yellow-100","value":"oklch(26.22% .0646 55.4)"},{"key":"lime-0","value":"oklch(98.05% .0399 116)"},{"key":"lime-5","value":"oklch(96.62% .08 121.2)"},{"key":"lime-10","value":"oklch(95.06% .1441 121.5)"},{"key":"lime-20","value":"oklch(92.45% .2251 126)"},{"key":"lime-30","value":"oklch(87.79% .2261 126.9)"},{"key":"lime-40","value":"oklch(82.22% .225 131.1)"},{"key":"lime-50","value":"oklch(74.39% .2131 133.9)"},{"key":"lime-60","value":"oklch(66.45% .195 135.3)"},{"key":"lime-70","value":"oklch(58.7% .1769 136.7)"},{"key":"lime-80","value":"oklch(51.46% .1612 138.7)"},{"key":"lime-90","value":"oklch(44.54% .1437 140.1)"},{"key":"lime-95","value":"oklch(29.84% .097 140.4)"},{"key":"lime-100","value":"oklch(25.83% .0851 141.1)"},{"key":"green-0","value":"oklch(97% .0305 145.7)"},{"key":"green-5","value":"oklch(94.95% .071 145.5)"},{"key":"green-10","value":"oklch(92.05% .1355 145.7)"},{"key":"green-20","value":"oklch(89.18% .2191 143.8)"},{"key":"green-30","value":"oklch(84.3% .24 143.9)"},{"key":"green-40","value":"oklch(77.68% .25 144.1)"},{"key":"green-50","value":"oklch(72.41% .2464 142.5)"},{"key":"green-60","value":"oklch(67.52% .2298 142.5)"},{"key":"green-70","value":"oklch(58.66% .1996 142.5)"},{"key":"green-80","value":"oklch(51.96% .1768 142.5)"},{"key":"green-90","value":"oklch(44.03% .1498 142.5)"},{"key":"green-95","value":"oklch(30.17% .1027 142.5)"},{"key":"green-100","value":"oklch(26.35% .0897 142.5)"},{"key":"beryl-0","value":"oklch(96.57% .03 163.7)"},{"key":"beryl-5","value":"oklch(94.71% .0634 163.5)"},{"key":"beryl-10","value":"oklch(91.87% .1178 162.2)"},{"key":"beryl-20","value":"oklch(90.33% .1569 161.2)"},{"key":"beryl-30","value":"oklch(86.43% .2104 155.8)"},{"key":"beryl-40","value":"oklch(82.49% .1978 156.6)"},{"key":"beryl-50","value":"oklch(76.89% .1885 155.4)"},{"key":"beryl-60","value":"oklch(69.77% .1794 153.1)"},{"key":"beryl-70","value":"oklch(60.74% .1602 151.9)"},{"key":"beryl-80","value":"oklch(54.36% .1421 152.3)"},{"key":"beryl-90","value":"oklch(46.09% .1213 152)"},{"key":"beryl-95","value":"oklch(30.39% .0888 147.6)"},{"key":"beryl-100","value":"oklch(26.71% .0855 144.4)"},{"key":"teal-0","value":"oklch(97.24% .023 179.8)"},{"key":"teal-5","value":"oklch(94.3% .0661 180.5)"},{"key":"teal-10","value":"oklch(92.33% .1056 181.5)"},{"key":"teal-20","value":"oklch(91.3% .1327 183.1)"},{"key":"teal-30","value":"oklch(90.52% .1472 184.8)"},{"key":"teal-40","value":"oklch(89.99% .1577 186.3)"},{"key":"teal-50","value":"oklch(86.13% .1485 190.5)"},{"key":"teal-60","value":"oklch(79.38% .1355 194.8)"},{"key":"teal-70","value":"oklch(67.86% .1154 199.2)"},{"key":"teal-80","value":"oklch(60.62% .1033 203.7)"},{"key":"teal-90","value":"oklch(52.19% .0898 208.3)"},{"key":"teal-95","value":"oklch(31.94% .0584 220.7)"},{"key":"teal-100","value":"oklch(28.34% .0534 224.3)"},{"key":"cyan-0","value":"oklch(97.47% .022 196.6)"},{"key":"cyan-5","value":"oklch(95.05% .0598 196)"},{"key":"cyan-10","value":"oklch(92.28% .1032 196.9)"},{"key":"cyan-20","value":"oklch(89.98% .1264 200.1)"},{"key":"cyan-30","value":"oklch(87.28% .1376 204.3)"},{"key":"cyan-40","value":"oklch(84.82% .1408 209.5)"},{"key":"cyan-50","value":"oklch(81.54% .1453 216.7)"},{"key":"cyan-60","value":"oklch(77.57% .1494 226.7)"},{"key":"cyan-70","value":"oklch(70.27% .1509 235.9)"},{"key":"cyan-80","value":"oklch(63.25% .1493 241.7)"},{"key":"cyan-90","value":"oklch(52.16% .1354 246.4)"},{"key":"cyan-95","value":"oklch(35.21% .0976 249.2)"},{"key":"cyan-100","value":"oklch(30.27% .0847 249.6)"},{"key":"sky-0","value":"oklch(97.39% .0139 209.4)"},{"key":"sky-5","value":"oklch(94.65% .0358 212.1)"},{"key":"sky-10","value":"oklch(90.51% .0667 216.5)"},{"key":"sky-20","value":"oklch(86.58% .0902 224)"},{"key":"sky-30","value":"oklch(77.94% .1431 228.4)"},{"key":"sky-40","value":"oklch(72.24% .1626 239)"},{"key":"sky-50","value":"oklch(67.09% .1828 248.5)"},{"key":"sky-60","value":"oklch(62.09% .2077 255.4)"},{"key":"sky-70","value":"oklch(55.12% .2483 261.6)"},{"key":"sky-80","value":"oklch(49.98% .2769 263.8)"},{"key":"sky-90","value":"oklch(40.76% .2499 264.2)"},{"key":"sky-95","value":"oklch(28.37% .1946 265.1)"},{"key":"sky-100","value":"oklch(25.85% .1768 265.4)"},{"key":"blue-0","value":"oklch(97.5% .0105 219.7)"},{"key":"blue-5","value":"oklch(93.53% .0305 231.3)"},{"key":"blue-10","value":"oklch(90.01% .0519 236.1)"},{"key":"blue-20","value":"oklch(81.69% .0975 246.5)"},{"key":"blue-30","value":"oklch(72.87% .1468 249.3)"},{"key":"blue-40","value":"oklch(64.31% .1921 258.5)"},{"key":"blue-50","value":"oklch(58.22% .2279 263.9)"},{"key":"blue-60","value":"oklch(51.83% .2687 266.1)"},{"key":"blue-70","value":"oklch(46.26% .3057 266.7)"},{"key":"blue-80","value":"oklch(42.89% .2907 266.3)"},{"key":"blue-90","value":"oklch(39.4% .2629 268)"},{"key":"blue-95","value":"oklch(28.64% .1893 269)"},{"key":"blue-100","value":"oklch(25.46% .168 269.2)"},{"key":"indigo-0","value":"oklch(97.1% .0083 257.2)"},{"key":"indigo-5","value":"oklch(94.11% .0228 279.6)"},{"key":"indigo-10","value":"oklch(87.83% .0547 274.4)"},{"key":"indigo-20","value":"oklch(77.74% .1153 280.2)"},{"key":"indigo-30","value":"oklch(70.2% .1611 282.9)"},{"key":"indigo-40","value":"oklch(61.3% .218 284)"},{"key":"indigo-50","value":"oklch(56.78% .2478 284.1)"},{"key":"indigo-60","value":"oklch(50.06% .2906 282)"},{"key":"indigo-70","value":"oklch(48.74% .2963 279.3)"},{"key":"indigo-80","value":"oklch(48.25% .2976 277.4)"},{"key":"indigo-90","value":"oklch(41.46% .2571 276.7)"},{"key":"indigo-95","value":"oklch(29.36% .1799 278.3)"},{"key":"indigo-100","value":"oklch(25.28% .1551 278.1)"},{"key":"violet-0","value":"oklch(97.96% .01 322.8)"},{"key":"violet-5","value":"oklch(94.02% .0266 299.5)"},{"key":"violet-10","value":"oklch(88.69% .0596 300.1)"},{"key":"violet-20","value":"oklch(80.47% .113 297.7)"},{"key":"violet-30","value":"oklch(71.63% .1722 298.7)"},{"key":"violet-40","value":"oklch(62.1% .237 297.8)"},{"key":"violet-50","value":"oklch(56.23% .2803 297.8)"},{"key":"violet-60","value":"oklch(52.55% .293 292.4)"},{"key":"violet-70","value":"oklch(51.12% .2931 287.9)"},{"key":"violet-80","value":"oklch(48.43% .2798 286.7)"},{"key":"violet-90","value":"oklch(40.64% .2331 287.9)"},{"key":"violet-95","value":"oklch(28.51% .1631 288.3)"},{"key":"violet-100","value":"oklch(24.44% .1403 287.8)"},{"key":"purple-0","value":"oklch(97.07% .0155 325.8)"},{"key":"purple-5","value":"oklch(94.28% .0315 314.4)"},{"key":"purple-10","value":"oklch(89.13% .0709 314.7)"},{"key":"purple-20","value":"oklch(81.4% .1318 312.8)"},{"key":"purple-30","value":"oklch(72.72% .2007 312.8)"},{"key":"purple-40","value":"oklch(63.36% .2677 310)"},{"key":"purple-50","value":"oklch(58.21% .2988 307.2)"},{"key":"purple-60","value":"oklch(55.59% .2952 301)"},{"key":"purple-70","value":"oklch(54.45% .294 297.9)"},{"key":"purple-80","value":"oklch(48.76% .264 297.5)"},{"key":"purple-90","value":"oklch(39.15% .2105 298.7)"},{"key":"purple-95","value":"oklch(27.95% .1488 300.5)"},{"key":"purple-100","value":"oklch(24.3% .128 302.4)"},{"key":"fuchsia-0","value":"oklch(97.07% .0155 325.8)"},{"key":"fuchsia-5","value":"oklch(94.57% .0378 324.9)"},{"key":"fuchsia-10","value":"oklch(89.9% .086 326.3)"},{"key":"fuchsia-20","value":"oklch(81.84% .1554 322)"},{"key":"fuchsia-30","value":"oklch(74.78% .2085 319.1)"},{"key":"fuchsia-40","value":"oklch(67.61% .25 316.5)"},{"key":"fuchsia-50","value":"oklch(62.91% .25 316.7)"},{"key":"fuchsia-60","value":"oklch(58.72% .25 311.8)"},{"key":"fuchsia-70","value":"oklch(53.61% .25 312.8)"},{"key":"fuchsia-80","value":"oklch(47.9% .2382 313.2)"},{"key":"fuchsia-90","value":"oklch(38.62% .1895 315.8)"},{"key":"fuchsia-95","value":"oklch(27.75% .1357 316.4)"},{"key":"fuchsia-100","value":"oklch(23.7% .1162 315.9)"},{"key":"pink-0","value":"oklch(97.07% .0155 325.8)"},{"key":"pink-5","value":"oklch(94.74% .0372 326.5)"},{"key":"pink-10","value":"oklch(88.85% .083 332.8)"},{"key":"pink-20","value":"oklch(81.57% .1379 341.6)"},{"key":"pink-30","value":"oklch(74.68% .2018 342.5)"},{"key":"pink-40","value":"oklch(69.18% .2455 347.6)"},{"key":"pink-50","value":"oklch(65.84% .25 350.7)"},{"key":"pink-60","value":"oklch(63.54% .25 359.2)"},{"key":"pink-70","value":"oklch(58.95% .2377 2.6)"},{"key":"pink-80","value":"oklch(53% .2126 6.4)"},{"key":"pink-90","value":"oklch(43.66% .1748 8.1)"},{"key":"pink-95","value":"oklch(31.48% .1261 7.8)"},{"key":"pink-100","value":"oklch(27.42% .1098 8.5)"},{"key":"crimson-0","value":"oklch(97.07% .0155 325.8)"},{"key":"crimson-5","value":"oklch(94.2% .0266 353.2)"},{"key":"crimson-10","value":"oklch(88.09% .0623 1)"},{"key":"crimson-20","value":"oklch(80.33% .1184 4.5)"},{"key":"crimson-30","value":"oklch(72.9% .1774 4.4)"},{"key":"crimson-40","value":"oklch(66.41% .2325 8.3)"},{"key":"crimson-50","value":"oklch(63.55% .25 15.3)"},{"key":"crimson-60","value":"oklch(62.66% .25 21.2)"},{"key":"crimson-70","value":"oklch(58.59% .2383 26.2)"},{"key":"crimson-80","value":"oklch(53.32% .2169 26.3)"},{"key":"crimson-90","value":"oklch(44.03% .1783 24.4)"},{"key":"crimson-95","value":"oklch(31.73% .1287 25.1)"},{"key":"crimson-100","value":"oklch(27.68% .1126 26.2)"},{"key":"red-0","value":"oklch(96.63% .01 17.2)"},{"key":"red-5","value":"oklch(94.05% .0239 17)"},{"key":"red-10","value":"oklch(87.16% .0632 17.8)"},{"key":"red-20","value":"oklch(79.39% .119 18.8)"},{"key":"red-30","value":"oklch(72.94% .1679 17.5)"},{"key":"red-40","value":"oklch(64.7% .2399 19.9)"},{"key":"red-50","value":"oklch(62.82% .25 28.6)"},{"key":"red-60","value":"oklch(60.94% .2501 29.2)"},{"key":"red-70","value":"oklch(57.58% .2363 29.2)"},{"key":"red-80","value":"oklch(53.09% .2178 29.2)"},{"key":"red-90","value":"oklch(44.45% .1824 29.2)"},{"key":"red-95","value":"oklch(32.59% .1337 29.2)"},{"key":"red-100","value":"oklch(28.54% .1171 29.2)"},{"key":"sand-0","value":"oklch(98.6% .007 88)"},{"key":"sand-5","value":"oklch(96.4% .014 86)"},{"key":"sand-10","value":"oklch(93.2% .025 84)"},{"key":"sand-20","value":"oklch(86.6% .045 82)"},{"key":"sand-30","value":"oklch(79.7% .064 80)"},{"key":"sand-40","value":"oklch(71.8% .079 78)"},{"key":"sand-50","value":"oklch(63.4% .082 76)"},{"key":"sand-60","value":"oklch(53.8% .074 73)"},{"key":"sand-70","value":"oklch(44.6% .064 70)"},{"key":"sand-80","value":"oklch(35.8% .05 67)"},{"key":"sand-90","value":"oklch(26.8% .034 64)"},{"key":"sand-95","value":"oklch(22.2% .026 62)"},{"key":"sand-100","value":"oklch(17.8% .018 60)"},{"key":"taupe-0","value":"oklch(98.5% .003 55)"},{"key":"taupe-5","value":"oklch(96.1% .006 53)"},{"key":"taupe-10","value":"oklch(92.4% .01 51)"},{"key":"taupe-20","value":"oklch(85% .018 49)"},{"key":"taupe-30","value":"oklch(77.3% .025 47)"},{"key":"taupe-40","value":"oklch(68.5% .03 45)"},{"key":"taupe-50","value":"oklch(59.2% .032 43)"},{"key":"taupe-60","value":"oklch(49.6% .03 41)"},{"key":"taupe-70","value":"oklch(40.6% .027 39)"},{"key":"taupe-80","value":"oklch(32.1% .023 37)"},{"key":"taupe-90","value":"oklch(23.8% .017 35)"},{"key":"taupe-95","value":"oklch(19.7% .013 34)"},{"key":"taupe-100","value":"oklch(15.8% .009 33)"},{"key":"olive-0","value":"oklch(98.5% .009 110)"},{"key":"olive-5","value":"oklch(96.2% .02 111)"},{"key":"olive-10","value":"oklch(92.8% .036 112)"},{"key":"olive-20","value":"oklch(86.4% .063 113)"},{"key":"olive-30","value":"oklch(79.4% .087 114)"},{"key":"olive-40","value":"oklch(71.5% .105 114)"},{"key":"olive-50","value":"oklch(62.8% .108 113)"},{"key":"olive-60","value":"oklch(53.4% .096 112)"},{"key":"olive-70","value":"oklch(44.5% .081 111)"},{"key":"olive-80","value":"oklch(35.8% .063 110)"},{"key":"olive-90","value":"oklch(27.1% .044 109)"},{"key":"olive-95","value":"oklch(22.6% .034 108)"},{"key":"olive-100","value":"oklch(18.2% .025 107)"},{"key":"sage-0","value":"oklch(98.4% .004 151)"},{"key":"sage-5","value":"oklch(96% .009 152)"},{"key":"sage-10","value":"oklch(92.5% .017 153)"},{"key":"sage-20","value":"oklch(85.6% .03 154)"},{"key":"sage-30","value":"oklch(78.1% .042 155)"},{"key":"sage-40","value":"oklch(69.8% .049 156)"},{"key":"sage-50","value":"oklch(60.9% .051 157)"},{"key":"sage-60","value":"oklch(51.5% .047 158)"},{"key":"sage-70","value":"oklch(42.8% .041 159)"},{"key":"sage-80","value":"oklch(34.3% .033 160)"},{"key":"sage-90","value":"oklch(25.9% .024 161)"},{"key":"sage-95","value":"oklch(21.5% .018 162)"},{"key":"sage-100","value":"oklch(17.3% .012 163)"},{"key":"moss-0","value":"oklch(98.3% .007 132)"},{"key":"moss-5","value":"oklch(95.8% .017 133)"},{"key":"moss-10","value":"oklch(92.1% .032 134)"},{"key":"moss-20","value":"oklch(85.2% .058 135)"},{"key":"moss-30","value":"oklch(77.8% .08 136)"},{"key":"moss-40","value":"oklch(69.9% .097 137)"},{"key":"moss-50","value":"oklch(61.3% .103 138)"},{"key":"moss-60","value":"oklch(52.2% .093 139)"},{"key":"moss-70","value":"oklch(43.6% .08 140)"},{"key":"moss-80","value":"oklch(35.3% .064 141)"},{"key":"moss-90","value":"oklch(26.8% .045 142)"},{"key":"moss-95","value":"oklch(22.3% .034 143)"},{"key":"moss-100","value":"oklch(17.9% .023 144)"},{"key":"petrol-0","value":"oklch(98.3% .005 205)"},{"key":"petrol-5","value":"oklch(95.8% .013 207)"},{"key":"petrol-10","value":"oklch(92% .026 209)"},{"key":"petrol-20","value":"oklch(84.8% .046 211)"},{"key":"petrol-30","value":"oklch(76.8% .066 213)"},{"key":"petrol-40","value":"oklch(68% .085 215)"},{"key":"petrol-50","value":"oklch(58.6% .099 217)"},{"key":"petrol-60","value":"oklch(49.3% .091 219)"},{"key":"petrol-70","value":"oklch(40.8% .075 221)"},{"key":"petrol-80","value":"oklch(32.8% .059 223)"},{"key":"petrol-90","value":"oklch(24.8% .041 225)"},{"key":"petrol-95","value":"oklch(20.6% .031 226)"},{"key":"petrol-100","value":"oklch(16.5% .022 227)"},{"key":"copper-0","value":"oklch(98.4% .007 76)"},{"key":"copper-5","value":"oklch(96% .017 75)"},{"key":"copper-10","value":"oklch(92.5% .031 74)"},{"key":"copper-20","value":"oklch(86% .059 72)"},{"key":"copper-30","value":"oklch(79% .087 70)"},{"key":"copper-40","value":"oklch(71.4% .115 68)"},{"key":"copper-50","value":"oklch(63.3% .13 66)"},{"key":"copper-60","value":"oklch(54.7% .116 64)"},{"key":"copper-70","value":"oklch(46% .098 62)"},{"key":"copper-80","value":"oklch(37.2% .078 60)"},{"key":"copper-90","value":"oklch(28.2% .055 58)"},{"key":"copper-95","value":"oklch(23.5% .042 57)"},{"key":"copper-100","value":"oklch(18.9% .03 56)"},{"key":"terracotta-0","value":"oklch(98.3% .006 47)"},{"key":"terracotta-5","value":"oklch(95.8% .015 46)"},{"key":"terracotta-10","value":"oklch(92% .03 44)"},{"key":"terracotta-20","value":"oklch(85.4% .05 42)"},{"key":"terracotta-30","value":"oklch(78.7% .073 40)"},{"key":"terracotta-40","value":"oklch(72% .09 38)"},{"key":"terracotta-50","value":"oklch(64.4% .096 36)"},{"key":"terracotta-60","value":"oklch(55.8% .087 34)"},{"key":"terracotta-70","value":"oklch(47% .076 32)"},{"key":"terracotta-80","value":"oklch(38% .062 30)"},{"key":"terracotta-90","value":"oklch(28.8% .044 28)"},{"key":"terracotta-95","value":"oklch(24% .034 27)"},{"key":"terracotta-100","value":"oklch(19.3% .025 26)"},{"key":"stone","value":"var(--color-stone-30)","dependencies":["color-stone-30","color-stone-40"],"modes":{"light":{"type":"string","value":"var(--color-stone-30)"},"dark":{"type":"string","value":"var(--color-stone-40)"}}},{"key":"gray","value":"var(--color-gray-30)","dependencies":["color-gray-30","color-gray-40"],"modes":{"light":{"type":"string","value":"var(--color-gray-30)"},"dark":{"type":"string","value":"var(--color-gray-40)"}}},{"key":"neutral","value":"var(--color-neutral-30)","dependencies":["color-neutral-30","color-neutral-40"],"modes":{"light":{"type":"string","value":"var(--color-neutral-30)"},"dark":{"type":"string","value":"var(--color-neutral-40)"}}},{"key":"slate","value":"var(--color-slate-30)","dependencies":["color-slate-30","color-slate-40"],"modes":{"light":{"type":"string","value":"var(--color-slate-30)"},"dark":{"type":"string","value":"var(--color-slate-40)"}}},{"key":"brown","value":"var(--color-brown-40)","dependencies":["color-brown-40","color-brown-50"],"modes":{"light":{"type":"string","value":"var(--color-brown-40)"},"dark":{"type":"string","value":"var(--color-brown-50)"}}},{"key":"orange","value":"var(--color-orange-40)","dependencies":["color-orange-40","color-orange-50"],"modes":{"light":{"type":"string","value":"var(--color-orange-40)"},"dark":{"type":"string","value":"var(--color-orange-50)"}}},{"key":"amber","value":"var(--color-amber-40)","dependencies":["color-amber-40","color-amber-50"],"modes":{"light":{"type":"string","value":"var(--color-amber-40)"},"dark":{"type":"string","value":"var(--color-amber-50)"}}},{"key":"yellow","value":"var(--color-yellow-40)","dependencies":["color-yellow-40","color-yellow-50"],"modes":{"light":{"type":"string","value":"var(--color-yellow-40)"},"dark":{"type":"string","value":"var(--color-yellow-50)"}}},{"key":"lime","value":"var(--color-lime-40)","dependencies":["color-lime-40","color-lime-50"],"modes":{"light":{"type":"string","value":"var(--color-lime-40)"},"dark":{"type":"string","value":"var(--color-lime-50)"}}},{"key":"green","value":"var(--color-green-40)","dependencies":["color-green-40","color-green-50"],"modes":{"light":{"type":"string","value":"var(--color-green-40)"},"dark":{"type":"string","value":"var(--color-green-50)"}}},{"key":"beryl","value":"var(--color-beryl-40)","dependencies":["color-beryl-40","color-beryl-50"],"modes":{"light":{"type":"string","value":"var(--color-beryl-40)"},"dark":{"type":"string","value":"var(--color-beryl-50)"}}},{"key":"teal","value":"var(--color-teal-40)","dependencies":["color-teal-40","color-teal-50"],"modes":{"light":{"type":"string","value":"var(--color-teal-40)"},"dark":{"type":"string","value":"var(--color-teal-50)"}}},{"key":"cyan","value":"var(--color-cyan-40)","dependencies":["color-cyan-40","color-cyan-50"],"modes":{"light":{"type":"string","value":"var(--color-cyan-40)"},"dark":{"type":"string","value":"var(--color-cyan-50)"}}},{"key":"sky","value":"var(--color-sky-60)","dependencies":["color-sky-60","color-sky-50"],"modes":{"light":{"type":"string","value":"var(--color-sky-60)"},"dark":{"type":"string","value":"var(--color-sky-50)"}}},{"key":"blue","value":"var(--color-blue-60)","dependencies":["color-blue-60","color-blue-50"],"modes":{"light":{"type":"string","value":"var(--color-blue-60)"},"dark":{"type":"string","value":"var(--color-blue-50)"}}},{"key":"indigo","value":"var(--color-indigo-60)","dependencies":["color-indigo-60","color-indigo-50"],"modes":{"light":{"type":"string","value":"var(--color-indigo-60)"},"dark":{"type":"string","value":"var(--color-indigo-50)"}}},{"key":"violet","value":"var(--color-violet-60)","dependencies":["color-violet-60","color-violet-50"],"modes":{"light":{"type":"string","value":"var(--color-violet-60)"},"dark":{"type":"string","value":"var(--color-violet-50)"}}},{"key":"purple","value":"var(--color-purple-60)","dependencies":["color-purple-60","color-purple-50"],"modes":{"light":{"type":"string","value":"var(--color-purple-60)"},"dark":{"type":"string","value":"var(--color-purple-50)"}}},{"key":"fuchsia","value":"var(--color-fuchsia-60)","dependencies":["color-fuchsia-60","color-fuchsia-50"],"modes":{"light":{"type":"string","value":"var(--color-fuchsia-60)"},"dark":{"type":"string","value":"var(--color-fuchsia-50)"}}},{"key":"pink","value":"var(--color-pink-60)","dependencies":["color-pink-60","color-pink-50"],"modes":{"light":{"type":"string","value":"var(--color-pink-60)"},"dark":{"type":"string","value":"var(--color-pink-50)"}}},{"key":"crimson","value":"var(--color-crimson-60)","dependencies":["color-crimson-60","color-crimson-50"],"modes":{"light":{"type":"string","value":"var(--color-crimson-60)"},"dark":{"type":"string","value":"var(--color-crimson-50)"}}},{"key":"red","value":"var(--color-red-60)","dependencies":["color-red-60","color-red-50"],"modes":{"light":{"type":"string","value":"var(--color-red-60)"},"dark":{"type":"string","value":"var(--color-red-50)"}}},{"key":"sand","value":"var(--color-sand-30)","dependencies":["color-sand-30","color-sand-40"],"modes":{"light":{"type":"string","value":"var(--color-sand-30)"},"dark":{"type":"string","value":"var(--color-sand-40)"}}},{"key":"taupe","value":"var(--color-taupe-30)","dependencies":["color-taupe-30","color-taupe-40"],"modes":{"light":{"type":"string","value":"var(--color-taupe-30)"},"dark":{"type":"string","value":"var(--color-taupe-40)"}}},{"key":"olive","value":"var(--color-olive-50)","dependencies":["color-olive-50","color-olive-40"],"modes":{"light":{"type":"string","value":"var(--color-olive-50)"},"dark":{"type":"string","value":"var(--color-olive-40)"}}},{"key":"sage","value":"var(--color-sage-30)","dependencies":["color-sage-30","color-sage-40"],"modes":{"light":{"type":"string","value":"var(--color-sage-30)"},"dark":{"type":"string","value":"var(--color-sage-40)"}}},{"key":"moss","value":"var(--color-moss-50)","dependencies":["color-moss-50","color-moss-40"],"modes":{"light":{"type":"string","value":"var(--color-moss-50)"},"dark":{"type":"string","value":"var(--color-moss-40)"}}},{"key":"petrol","value":"var(--color-petrol-60)","dependencies":["color-petrol-60","color-petrol-50"],"modes":{"light":{"type":"string","value":"var(--color-petrol-60)"},"dark":{"type":"string","value":"var(--color-petrol-50)"}}},{"key":"copper","value":"var(--color-copper-50)","dependencies":["color-copper-50","color-copper-40"],"modes":{"light":{"type":"string","value":"var(--color-copper-50)"},"dark":{"type":"string","value":"var(--color-copper-40)"}}},{"key":"terracotta","value":"var(--color-terracotta-50)","dependencies":["color-terracotta-50","color-terracotta-40"],"modes":{"light":{"type":"string","value":"var(--color-terracotta-50)"},"dark":{"type":"string","value":"var(--color-terracotta-40)"}}},{"key":"white","value":"oklch(100% 0 none)","inline":true},{"key":"black","value":"oklch(0% 0 none)","inline":true},{"key":"current","value":"currentColor","inline":true}],"color-surface":[{"key":"base","value":"var(--color-neutral-0)","dependencies":["color-neutral-0","color-gray-95"],"modes":{"light":{"type":"string","value":"var(--color-neutral-0)"},"dark":{"type":"string","value":"var(--color-gray-95)"}}},{"key":"muted","value":"var(--color-neutral-5)","dependencies":["color-neutral-5","color-gray-100"],"modes":{"light":{"type":"string","value":"var(--color-neutral-5)"},"dark":{"type":"string","value":"var(--color-gray-100)"}}},{"key":"raised","value":"var(--color-white)","dependencies":["color-white","color-gray-90"],"modes":{"light":{"type":"string","value":"var(--color-white)"},"dark":{"type":"string","value":"var(--color-gray-90)"}}},{"key":"overlay","value":"var(--color-white)","dependencies":["color-white","color-gray-80"],"modes":{"light":{"type":"string","value":"var(--color-white)"},"dark":{"type":"string","value":"var(--color-gray-80)"}}},{"key":"inverse","value":"var(--color-black)","dependencies":["color-black","color-white"],"modes":{"light":{"type":"string","value":"var(--color-black)"},"dark":{"type":"string","value":"var(--color-white)"}}}],"color-line":[{"key":"base","value":"oklch(0% 0 none / .12)","modes":{"light":{"type":"string","value":"oklch(0% 0 none / .12)"},"dark":{"type":"string","value":"oklch(100% 0 none / .12)"}}},{"key":"strong","value":"oklch(0% 0 none / .18)","modes":{"light":{"type":"string","value":"oklch(0% 0 none / .18)"},"dark":{"type":"string","value":"oklch(100% 0 none / .18)"}}},{"key":"muted","value":"oklch(0% 0 none / .09)","modes":{"light":{"type":"string","value":"oklch(0% 0 none / .09)"},"dark":{"type":"string","value":"oklch(100% 0 none / .09)"}}},{"key":"subtle","value":"oklch(0% 0 none / .06)","modes":{"light":{"type":"string","value":"oklch(0% 0 none / .06)"},"dark":{"type":"string","value":"oklch(100% 0 none / .06)"}}}],"color-text":[{"key":"body","value":"var(--color-neutral-70)","dependencies":["color-neutral-70","color-gray-30"],"modes":{"light":{"type":"string","value":"var(--color-neutral-70)"},"dark":{"type":"string","value":"var(--color-gray-30)"}}},{"key":"strong","value":"var(--color-neutral-100)","dependencies":["color-neutral-100","color-white"],"modes":{"light":{"type":"string","value":"var(--color-neutral-100)"},"dark":{"type":"string","value":"var(--color-white)"}}},{"key":"muted","value":"var(--color-neutral-60)","dependencies":["color-neutral-60","color-gray-40"],"modes":{"light":{"type":"string","value":"var(--color-neutral-60)"},"dark":{"type":"string","value":"var(--color-gray-40)"}}},{"key":"subtle","value":"var(--color-neutral-50)","dependencies":["color-neutral-50","color-gray-50"],"modes":{"light":{"type":"string","value":"var(--color-neutral-50)"},"dark":{"type":"string","value":"var(--color-gray-50)"}}},{"key":"disabled","value":"var(--color-neutral-40)","dependencies":["color-neutral-40","color-gray-60"],"modes":{"light":{"type":"string","value":"var(--color-neutral-40)"},"dark":{"type":"string","value":"var(--color-gray-60)"}}},{"key":"placeholder","value":"var(--color-neutral-40)","dependencies":["color-neutral-40","color-gray-60"],"modes":{"light":{"type":"string","value":"var(--color-neutral-40)"},"dark":{"type":"string","value":"var(--color-gray-60)"}}},{"key":"inverse","value":"var(--color-white)","dependencies":["color-white","color-black"],"modes":{"light":{"type":"string","value":"var(--color-white)"},"dark":{"type":"string","value":"var(--color-black)"}}},{"key":"link","value":"var(--color-blue-60)","dependencies":["color-blue-60","color-blue-30"],"modes":{"light":{"type":"string","value":"var(--color-blue-60)"},"dark":{"type":"string","value":"var(--color-blue-30)"}}},{"key":"link-hover","value":"var(--color-blue-70)","dependencies":["color-blue-70","color-blue-20"],"modes":{"light":{"type":"string","value":"var(--color-blue-70)"},"dark":{"type":"string","value":"var(--color-blue-20)"}}},{"key":"stone","value":"var(--color-stone-60)","dependencies":["color-stone-60","color-stone-30"],"modes":{"light":{"type":"string","value":"var(--color-stone-60)"},"dark":{"type":"string","value":"var(--color-stone-30)"}}},{"key":"gray","value":"var(--color-gray-60)","dependencies":["color-gray-60","color-gray-30"],"modes":{"light":{"type":"string","value":"var(--color-gray-60)"},"dark":{"type":"string","value":"var(--color-gray-30)"}}},{"key":"neutral","value":"var(--color-neutral-60)","dependencies":["color-neutral-60","color-neutral-30"],"modes":{"light":{"type":"string","value":"var(--color-neutral-60)"},"dark":{"type":"string","value":"var(--color-neutral-30)"}}},{"key":"slate","value":"var(--color-slate-60)","dependencies":["color-slate-60","color-slate-30"],"modes":{"light":{"type":"string","value":"var(--color-slate-60)"},"dark":{"type":"string","value":"var(--color-slate-30)"}}},{"key":"brown","value":"var(--color-brown-60)","dependencies":["color-brown-60","color-brown-30"],"modes":{"light":{"type":"string","value":"var(--color-brown-60)"},"dark":{"type":"string","value":"var(--color-brown-30)"}}},{"key":"orange","value":"var(--color-orange-60)","dependencies":["color-orange-60","color-orange-30"],"modes":{"light":{"type":"string","value":"var(--color-orange-60)"},"dark":{"type":"string","value":"var(--color-orange-30)"}}},{"key":"amber","value":"var(--color-amber-60)","dependencies":["color-amber-60","color-amber-40"],"modes":{"light":{"type":"string","value":"var(--color-amber-60)"},"dark":{"type":"string","value":"var(--color-amber-40)"}}},{"key":"yellow","value":"var(--color-yellow-70)","dependencies":["color-yellow-70","color-yellow-40"],"modes":{"light":{"type":"string","value":"var(--color-yellow-70)"},"dark":{"type":"string","value":"var(--color-yellow-40)"}}},{"key":"lime","value":"var(--color-lime-70)","dependencies":["color-lime-70","color-lime-40"],"modes":{"light":{"type":"string","value":"var(--color-lime-70)"},"dark":{"type":"string","value":"var(--color-lime-40)"}}},{"key":"green","value":"var(--color-green-70)","dependencies":["color-green-70","color-green-40"],"modes":{"light":{"type":"string","value":"var(--color-green-70)"},"dark":{"type":"string","value":"var(--color-green-40)"}}},{"key":"beryl","value":"var(--color-beryl-70)","dependencies":["color-beryl-70","color-beryl-40"],"modes":{"light":{"type":"string","value":"var(--color-beryl-70)"},"dark":{"type":"string","value":"var(--color-beryl-40)"}}},{"key":"teal","value":"var(--color-teal-70)","dependencies":["color-teal-70","color-teal-40"],"modes":{"light":{"type":"string","value":"var(--color-teal-70)"},"dark":{"type":"string","value":"var(--color-teal-40)"}}},{"key":"cyan","value":"var(--color-cyan-70)","dependencies":["color-cyan-70","color-cyan-40"],"modes":{"light":{"type":"string","value":"var(--color-cyan-70)"},"dark":{"type":"string","value":"var(--color-cyan-40)"}}},{"key":"sky","value":"var(--color-sky-70)","dependencies":["color-sky-70","color-sky-30"],"modes":{"light":{"type":"string","value":"var(--color-sky-70)"},"dark":{"type":"string","value":"var(--color-sky-30)"}}},{"key":"blue","value":"var(--color-blue-60)","dependencies":["color-blue-60","color-blue-30"],"modes":{"light":{"type":"string","value":"var(--color-blue-60)"},"dark":{"type":"string","value":"var(--color-blue-30)"}}},{"key":"indigo","value":"var(--color-indigo-60)","dependencies":["color-indigo-60","color-indigo-30"],"modes":{"light":{"type":"string","value":"var(--color-indigo-60)"},"dark":{"type":"string","value":"var(--color-indigo-30)"}}},{"key":"violet","value":"var(--color-violet-60)","dependencies":["color-violet-60","color-violet-30"],"modes":{"light":{"type":"string","value":"var(--color-violet-60)"},"dark":{"type":"string","value":"var(--color-violet-30)"}}},{"key":"purple","value":"var(--color-purple-60)","dependencies":["color-purple-60","color-purple-30"],"modes":{"light":{"type":"string","value":"var(--color-purple-60)"},"dark":{"type":"string","value":"var(--color-purple-30)"}}},{"key":"fuchsia","value":"var(--color-fuchsia-60)","dependencies":["color-fuchsia-60","color-fuchsia-30"],"modes":{"light":{"type":"string","value":"var(--color-fuchsia-60)"},"dark":{"type":"string","value":"var(--color-fuchsia-30)"}}},{"key":"pink","value":"var(--color-pink-60)","dependencies":["color-pink-60","color-pink-30"],"modes":{"light":{"type":"string","value":"var(--color-pink-60)"},"dark":{"type":"string","value":"var(--color-pink-30)"}}},{"key":"crimson","value":"var(--color-crimson-60)","dependencies":["color-crimson-60","color-crimson-30"],"modes":{"light":{"type":"string","value":"var(--color-crimson-60)"},"dark":{"type":"string","value":"var(--color-crimson-30)"}}},{"key":"red","value":"var(--color-red-60)","dependencies":["color-red-60","color-red-30"],"modes":{"light":{"type":"string","value":"var(--color-red-60)"},"dark":{"type":"string","value":"var(--color-red-30)"}}},{"key":"sand","value":"var(--color-sand-60)","dependencies":["color-sand-60","color-sand-30"],"modes":{"light":{"type":"string","value":"var(--color-sand-60)"},"dark":{"type":"string","value":"var(--color-sand-30)"}}},{"key":"taupe","value":"var(--color-taupe-60)","dependencies":["color-taupe-60","color-taupe-30"],"modes":{"light":{"type":"string","value":"var(--color-taupe-60)"},"dark":{"type":"string","value":"var(--color-taupe-30)"}}},{"key":"olive","value":"var(--color-olive-60)","dependencies":["color-olive-60","color-olive-30"],"modes":{"light":{"type":"string","value":"var(--color-olive-60)"},"dark":{"type":"string","value":"var(--color-olive-30)"}}},{"key":"sage","value":"var(--color-sage-60)","dependencies":["color-sage-60","color-sage-30"],"modes":{"light":{"type":"string","value":"var(--color-sage-60)"},"dark":{"type":"string","value":"var(--color-sage-30)"}}},{"key":"moss","value":"var(--color-moss-60)","dependencies":["color-moss-60","color-moss-30"],"modes":{"light":{"type":"string","value":"var(--color-moss-60)"},"dark":{"type":"string","value":"var(--color-moss-30)"}}},{"key":"petrol","value":"var(--color-petrol-60)","dependencies":["color-petrol-60","color-petrol-30"],"modes":{"light":{"type":"string","value":"var(--color-petrol-60)"},"dark":{"type":"string","value":"var(--color-petrol-30)"}}},{"key":"copper","value":"var(--color-copper-60)","dependencies":["color-copper-60","color-copper-30"],"modes":{"light":{"type":"string","value":"var(--color-copper-60)"},"dark":{"type":"string","value":"var(--color-copper-30)"}}},{"key":"terracotta","value":"var(--color-terracotta-70)","dependencies":["color-terracotta-70","color-terracotta-30"],"modes":{"light":{"type":"string","value":"var(--color-terracotta-70)"},"dark":{"type":"string","value":"var(--color-terracotta-30)"}}}],"font-family":[{"key":"sans","value":"var(--font-sans, ui-sans-serif), system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"","dependencies":["font-sans"]},{"key":"mono","value":"var(--font-mono, ui-monospace), SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace","dependencies":["font-mono"]},{"key":"serif","value":"var(--font-serif, ui-serif), Georgia, Cambria, \"Times New Roman\", Times, serif","dependencies":["font-serif"]}],"tracking":[{"key":"tightest","value":"-.072em"},{"key":"tighter","value":"-.04em"},{"key":"tight","value":"-.02em"},{"key":"normal","type":"number","value":0},{"key":"wide","value":".02em"},{"key":"wider","value":".04em"},{"key":"widest","value":".12em"}],"leading":[{"key":"xs","type":"number","value":1.2},{"key":"sm","type":"number","value":1.4},{"key":"md","type":"number","value":1.6},{"key":"lg","type":"number","value":1.8},{"key":"xl","type":"number","value":2}],"font-weight":[{"key":"thin","type":"number","value":100},{"key":"extralight","type":"number","value":200},{"key":"light","type":"number","value":300},{"key":"regular","type":"number","value":400},{"key":"medium","type":"number","value":500},{"key":"semibold","type":"number","value":600},{"key":"bold","type":"number","value":700},{"key":"extrabold","type":"number","value":800},{"key":"heavy","type":"number","value":900}],"font-size":[{"key":"3xs","type":"number","value":".5rem","numeric":{"value":0.5,"unit":"rem"}},{"key":"2xs","type":"number","value":".625rem","numeric":{"value":0.625,"unit":"rem"}},{"key":"xs","type":"number","value":".75rem","numeric":{"value":0.75,"unit":"rem"}},{"key":"sm","type":"number","value":".875rem","numeric":{"value":0.875,"unit":"rem"}},{"key":"md","type":"number","value":"1rem","numeric":{"value":1,"unit":"rem"}},{"key":"lg","type":"number","value":"1.125rem","numeric":{"value":1.125,"unit":"rem"}},{"key":"xl","type":"number","value":"1.25rem","numeric":{"value":1.25,"unit":"rem"}},{"key":"2xl","type":"number","value":"1.5rem","numeric":{"value":1.5,"unit":"rem"}},{"key":"3xl","type":"number","value":"2rem","numeric":{"value":2,"unit":"rem"}},{"key":"4xl","type":"number","value":"2.25rem","numeric":{"value":2.25,"unit":"rem"}},{"key":"5xl","type":"number","value":"2.5rem","numeric":{"value":2.5,"unit":"rem"}},{"key":"6xl","type":"number","value":"3rem","numeric":{"value":3,"unit":"rem"}},{"key":"7xl","type":"number","value":"3.75rem","numeric":{"value":3.75,"unit":"rem"}},{"key":"8xl","type":"number","value":"4.5rem","numeric":{"value":4.5,"unit":"rem"}},{"key":"9xl","type":"number","value":"6rem","numeric":{"value":6,"unit":"rem"}},{"key":"10xl","type":"number","value":"8rem","numeric":{"value":8,"unit":"rem"}}],"font-feature":[{"key":"tabular","value":"\"tnum\""}],"content":[{"key":"empty","value":"\"\""}],"radius":[{"key":"xs","type":"number","value":".125rem","numeric":{"value":0.125,"unit":"rem"}},{"key":"sm","type":"number","value":".25rem","numeric":{"value":0.25,"unit":"rem"}},{"key":"md","type":"number","value":".375rem","numeric":{"value":0.375,"unit":"rem"}},{"key":"lg","type":"number","value":".5rem","numeric":{"value":0.5,"unit":"rem"}},{"key":"xl","type":"number","value":".75rem","numeric":{"value":0.75,"unit":"rem"}},{"key":"2xl","type":"number","value":"1rem","numeric":{"value":1,"unit":"rem"}},{"key":"3xl","type":"number","value":"1.5rem","numeric":{"value":1.5,"unit":"rem"}},{"key":"4xl","type":"number","value":"2rem","numeric":{"value":2,"unit":"rem"}}],"spacing":[{"key":"4xs","type":"number","value":".125rem","numeric":{"value":0.125,"unit":"rem"}},{"key":"3xs","type":"number","value":".25rem","numeric":{"value":0.25,"unit":"rem"}},{"key":"2xs","type":"number","value":".375rem","numeric":{"value":0.375,"unit":"rem"}},{"key":"xs","type":"number","value":".5rem","numeric":{"value":0.5,"unit":"rem"}},{"key":"sm","type":"number","value":".75rem","numeric":{"value":0.75,"unit":"rem"}},{"key":"md","type":"number","value":"1rem","numeric":{"value":1,"unit":"rem"}},{"key":"lg","type":"number","value":"1.5rem","numeric":{"value":1.5,"unit":"rem"}},{"key":"xl","type":"number","value":"2rem","numeric":{"value":2,"unit":"rem"}},{"key":"2xl","type":"number","value":"3rem","numeric":{"value":3,"unit":"rem"}},{"key":"3xl","type":"number","value":"4rem","numeric":{"value":4,"unit":"rem"}},{"key":"4xl","type":"number","value":"6rem","numeric":{"value":6,"unit":"rem"}},{"key":"5xl","type":"number","value":"8rem","numeric":{"value":8,"unit":"rem"}}],"breakpoint":[{"key":"4xs","type":"number","value":"22.5rem","numeric":{"value":22.5,"unit":"rem"}},{"key":"3xs","type":"number","value":"30rem","numeric":{"value":30,"unit":"rem"}},{"key":"2xs","type":"number","value":"37.5rem","numeric":{"value":37.5,"unit":"rem"}},{"key":"xs","type":"number","value":"48rem","numeric":{"value":48,"unit":"rem"}},{"key":"sm","type":"number","value":"52.125rem","numeric":{"value":52.125,"unit":"rem"}},{"key":"md","type":"number","value":"64rem","numeric":{"value":64,"unit":"rem"}},{"key":"lg","type":"number","value":"80rem","numeric":{"value":80,"unit":"rem"}},{"key":"xl","type":"number","value":"90rem","numeric":{"value":90,"unit":"rem"}},{"key":"2xl","type":"number","value":"100rem","numeric":{"value":100,"unit":"rem"}},{"key":"3xl","type":"number","value":"120rem","numeric":{"value":120,"unit":"rem"}},{"key":"4xl","type":"number","value":"160rem","numeric":{"value":160,"unit":"rem"}}],"container":[{"key":"3xs","type":"number","value":"16rem","numeric":{"value":16,"unit":"rem"}},{"key":"2xs","type":"number","value":"18rem","numeric":{"value":18,"unit":"rem"}},{"key":"xs","type":"number","value":"20rem","numeric":{"value":20,"unit":"rem"}},{"key":"sm","type":"number","value":"24rem","numeric":{"value":24,"unit":"rem"}},{"key":"md","type":"number","value":"28rem","numeric":{"value":28,"unit":"rem"}},{"key":"lg","type":"number","value":"32rem","numeric":{"value":32,"unit":"rem"}},{"key":"xl","type":"number","value":"36rem","numeric":{"value":36,"unit":"rem"}},{"key":"2xl","type":"number","value":"42rem","numeric":{"value":42,"unit":"rem"}},{"key":"3xl","type":"number","value":"48rem","numeric":{"value":48,"unit":"rem"}},{"key":"4xl","type":"number","value":"56rem","numeric":{"value":56,"unit":"rem"}},{"key":"5xl","type":"number","value":"64rem","numeric":{"value":64,"unit":"rem"}},{"key":"6xl","type":"number","value":"72rem","numeric":{"value":72,"unit":"rem"}},{"key":"7xl","type":"number","value":"80rem","numeric":{"value":80,"unit":"rem"}},{"key":"8xl","type":"number","value":"90rem","numeric":{"value":90,"unit":"rem"}}],"duration":[{"key":"fastest","value":"75ms"},{"key":"faster","value":".1s"},{"key":"fast","value":".15s"},{"key":"normal","value":".2s"},{"key":"slow","value":".3s"},{"key":"slower","value":".5s"},{"key":"slowest","value":".8s"}],"easing":[{"key":"smooth","value":"cubic-bezier(.4, 0, .2, 1)"},{"key":"soft","value":"cubic-bezier(.33, 1, .68, 1)"},{"key":"crisp","value":"cubic-bezier(.16, 1, .3, 1)"},{"key":"snap","value":"cubic-bezier(.2, 0, 0, 1)"},{"key":"accelerate","value":"cubic-bezier(.4, 0, 1, 1)"},{"key":"decelerate","value":"cubic-bezier(0, 0, .2, 1)"},{"key":"overshoot","value":"cubic-bezier(.34, 1.56, .64, 1)"},{"key":"rewind","value":"cubic-bezier(.36, 0, .66, -.56)"},{"key":"spring","value":"cubic-bezier(.68, -.6, .32, 1.6)"}],"animate":[{"key":"fade","value":"fade 1s infinite"},{"key":"flash","value":"flash 1s infinite"},{"key":"float","value":"float 3s ease-in-out infinite"},{"key":"heart","value":"heart 1s infinite"},{"key":"jump","value":"jump 1s infinite"},{"key":"ping","value":"ping 1s infinite"},{"key":"pulse","value":"pulse 1s infinite"},{"key":"rotate","value":"rotate 1s linear infinite"},{"key":"shake","value":"shake 1s infinite"},{"key":"zoom","value":"zoom 1s infinite"}],"shadow":[{"key":"xs","value":"0 0 0 1px oklch(0% 0 none / .04), 0 1px 2px -1px oklch(0% 0 none / .08)","modes":{"light":{"type":"string","value":"0 0 0 1px oklch(0% 0 none / .04), 0 1px 2px -1px oklch(0% 0 none / .08)"},"dark":{"type":"string","value":"0 0 0 1px oklch(100% 0 none / .04), 0 1px 2px -1px oklch(0% 0 none / .3)"}}},{"key":"sm","value":"0 0 0 1px oklch(0% 0 none / .04), 0 1px 2px -1px oklch(0% 0 none / .06), 0 3px 6px -2px oklch(0% 0 none / .08)","modes":{"light":{"type":"string","value":"0 0 0 1px oklch(0% 0 none / .04), 0 1px 2px -1px oklch(0% 0 none / .06), 0 3px 6px -2px oklch(0% 0 none / .08)"},"dark":{"type":"string","value":"0 0 0 1px oklch(100% 0 none / .05), 0 1px 2px -1px oklch(0% 0 none / .34), 0 3px 6px -2px oklch(0% 0 none / .26)"}}},{"key":"md","value":"0 0 0 1px oklch(0% 0 none / .05), 0 2px 4px -2px oklch(0% 0 none / .06), 0 8px 16px -4px oklch(0% 0 none / .1)","modes":{"light":{"type":"string","value":"0 0 0 1px oklch(0% 0 none / .05), 0 2px 4px -2px oklch(0% 0 none / .06), 0 8px 16px -4px oklch(0% 0 none / .1)"},"dark":{"type":"string","value":"0 0 0 1px oklch(100% 0 none / .06), 0 2px 4px -2px oklch(0% 0 none / .38), 0 8px 16px -4px oklch(0% 0 none / .3)"}}},{"key":"lg","value":"0 0 0 1px oklch(0% 0 none / .05), 0 4px 8px -4px oklch(0% 0 none / .08), 0 16px 32px -8px oklch(0% 0 none / .12)","modes":{"light":{"type":"string","value":"0 0 0 1px oklch(0% 0 none / .05), 0 4px 8px -4px oklch(0% 0 none / .08), 0 16px 32px -8px oklch(0% 0 none / .12)"},"dark":{"type":"string","value":"0 0 0 1px oklch(100% 0 none / .06), 0 4px 8px -4px oklch(0% 0 none / .42), 0 16px 32px -8px oklch(0% 0 none / .34)"}}},{"key":"xl","value":"0 0 0 1px oklch(0% 0 none / .06), 0 8px 16px -6px oklch(0% 0 none / .1), 0 24px 48px -12px oklch(0% 0 none / .14)","modes":{"light":{"type":"string","value":"0 0 0 1px oklch(0% 0 none / .06), 0 8px 16px -6px oklch(0% 0 none / .1), 0 24px 48px -12px oklch(0% 0 none / .14)"},"dark":{"type":"string","value":"0 0 0 1px oklch(100% 0 none / .07), 0 8px 16px -6px oklch(0% 0 none / .46), 0 24px 48px -12px oklch(0% 0 none / .38)"}}},{"key":"2xl","value":"0 0 0 1px oklch(0% 0 none / .06), 0 12px 24px -8px oklch(0% 0 none / .12), 0 32px 64px -16px oklch(0% 0 none / .18)","modes":{"light":{"type":"string","value":"0 0 0 1px oklch(0% 0 none / .06), 0 12px 24px -8px oklch(0% 0 none / .12), 0 32px 64px -16px oklch(0% 0 none / .18)"},"dark":{"type":"string","value":"0 0 0 1px oklch(100% 0 none / .07), 0 12px 24px -8px oklch(0% 0 none / .5), 0 32px 64px -16px oklch(0% 0 none / .44)"}}}],"":[{"key":"full","value":"100%","inline":true},{"key":"fit","value":"fit-content","inline":true},{"key":"max","value":"max-content","inline":true},{"key":"min","value":"min-content","inline":true}],"order":[{"key":"first","type":"number","value":-999999,"inline":true},{"key":"last","type":"number","value":999999,"inline":true}]},"animations":{"fade":{"0%":{"opacity":"0"},"to":{"opacity":"1"}},"flash":{"0%":{"opacity":"1"},"50%":{"opacity":"1"},"to":{"opacity":"1"},"25%":{"opacity":"0"},"75%":{"opacity":"0"}},"float":{"0%":{"transform":"none"},"50%":{"transform":"translateY(-1.25rem)"},"to":{"transform":"none"}},"heart":{"0%":{"transform":"scale(1)"},"14%":{"transform":"scale(1.3)"},"28%":{"transform":"scale(1)"},"42%":{"transform":"scale(1.3)"},"70%":{"transform":"scale(1)"}},"jump":{"0%":{"transform":"translateY(-25%)","animation-timing-function":"cubic-bezier(.8, 0, 1, 1)"},"to":{"transform":"translateY(-25%)","animation-timing-function":"cubic-bezier(.8, 0, 1, 1)"},"50%":{"transform":"translateY(0)","animation-timing-function":"cubic-bezier(0, 0, .2, 1)"}},"ping":{"75%":{"transform":"scale(2)","opacity":"0"},"to":{"transform":"scale(2)","opacity":"0"}},"pulse":{"0%":{"transform":"none"},"50%":{"transform":"scale(1.05)"},"to":{"transform":"none"}},"rotate":{"0%":{"transform":"rotate(-360deg)"},"to":{"transform":"none"}},"shake":{"0%":{"transform":"none"},"6.5%":{"transform":"translateX(-6px) rotateY(-9deg)"},"18.5%":{"transform":"translateX(5px) rotateY(7deg)"},"31.5%":{"transform":"translateX(-3px) rotateY(-5deg)"},"43.5%":{"transform":"translateX(2px) rotateY(3deg)"},"50%":{"transform":"none"}},"zoom":{"0%":{"transform":"scale(0)"},"to":{"transform":"none"}}},"variants":[{"token":"@all","branches":[{"conditions":["@media all"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","value":"all"}]}]}]},{"token":"@print","branches":[{"conditions":["@media print"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","value":"print"}]}]}]},{"token":"@screen","branches":[{"conditions":["@media screen"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","value":"screen"}]}]}]},{"token":"@speech","branches":[{"conditions":["@media speech"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","value":"speech"}]}]}]},{"token":"@landscape","branches":[{"conditions":["@media (orientation:landscape)"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","name":"orientation","value":"landscape"}]}]}]},{"token":"@portrait","branches":[{"conditions":["@media (orientation:portrait)"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","name":"orientation","value":"portrait"}]}]}]},{"token":"@motion","branches":[{"conditions":["@media (prefers-reduced-motion:no-preference)"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","name":"prefers-reduced-motion","value":"no-preference"}]}]}]},{"token":"@reduce-motion","branches":[{"conditions":["@media (prefers-reduced-motion:reduce)"],"conditionNodes":[{"id":"media","nodes":[{"type":"string","name":"prefers-reduced-motion","value":"reduce"}]}]}]},{"token":"@base","branches":[{"layer":"base"}]},{"token":"@default","branches":[{"layer":"defaults"}]},{"token":"@component","branches":[{"layer":"components"}]},{"token":"@utility","branches":[{"layer":"utilities"}]},{"token":"@starting-style","branches":[{"conditions":["@starting-style"],"conditionNodes":[{"id":"starting-style","nodes":[]}]}]}],"conditions":{"4xs":{"id":"media","nodes":[{"type":"number","value":22.5,"unit":"rem"}]},"3xs":{"id":"media","nodes":[{"type":"number","value":30,"unit":"rem"}]},"2xs":{"id":"media","nodes":[{"type":"number","value":37.5,"unit":"rem"}]},"xs":{"id":"media","nodes":[{"type":"number","value":48,"unit":"rem"}]},"sm":{"id":"media","nodes":[{"type":"number","value":52.125,"unit":"rem"}]},"md":{"id":"media","nodes":[{"type":"number","value":64,"unit":"rem"}]},"lg":{"id":"media","nodes":[{"type":"number","value":80,"unit":"rem"}]},"xl":{"id":"media","nodes":[{"type":"number","value":90,"unit":"rem"}]},"2xl":{"id":"media","nodes":[{"type":"number","value":100,"unit":"rem"}]},"3xl":{"id":"media","nodes":[{"type":"number","value":120,"unit":"rem"}]},"4xl":{"id":"media","nodes":[{"type":"number","value":160,"unit":"rem"}]},"all":{"id":"media","nodes":[{"type":"string","value":"all"}]},"print":{"id":"media","nodes":[{"type":"string","value":"print"}]},"screen":{"id":"media","nodes":[{"type":"string","value":"screen"}]},"speech":{"id":"media","nodes":[{"type":"string","value":"speech"}]},"landscape":{"id":"media","nodes":[{"type":"string","name":"orientation","value":"landscape"}]},"portrait":{"id":"media","nodes":[{"type":"string","name":"orientation","value":"portrait"}]},"motion":{"id":"media","nodes":[{"type":"string","name":"prefers-reduced-motion","value":"no-preference"}]},"reduce-motion":{"id":"media","nodes":[{"type":"string","name":"prefers-reduced-motion","value":"reduce"}]},"base":{"id":"layer","nodes":[{"type":"string","value":"base"}]},"default":{"id":"layer","nodes":[{"type":"string","value":"defaults"}]},"component":{"id":"layer","nodes":[{"type":"string","value":"components"}]},"utility":{"id":"layer","nodes":[{"type":"string","value":"utilities"}]},"starting-style":{"id":"starting-style","nodes":[]}},"breakpointConditions":{"4xs":{"id":"media","nodes":[{"type":"number","value":22.5,"unit":"rem"}]},"3xs":{"id":"media","nodes":[{"type":"number","value":30,"unit":"rem"}]},"2xs":{"id":"media","nodes":[{"type":"number","value":37.5,"unit":"rem"}]},"xs":{"id":"media","nodes":[{"type":"number","value":48,"unit":"rem"}]},"sm":{"id":"media","nodes":[{"type":"number","value":52.125,"unit":"rem"}]},"md":{"id":"media","nodes":[{"type":"number","value":64,"unit":"rem"}]},"lg":{"id":"media","nodes":[{"type":"number","value":80,"unit":"rem"}]},"xl":{"id":"media","nodes":[{"type":"number","value":90,"unit":"rem"}]},"2xl":{"id":"media","nodes":[{"type":"number","value":100,"unit":"rem"}]},"3xl":{"id":"media","nodes":[{"type":"number","value":120,"unit":"rem"}]},"4xl":{"id":"media","nodes":[{"type":"number","value":160,"unit":"rem"}]}},"containerConditions":{"3xs":{"id":"container","nodes":[{"type":"number","value":16,"unit":"rem"}]},"2xs":{"id":"container","nodes":[{"type":"number","value":18,"unit":"rem"}]},"xs":{"id":"container","nodes":[{"type":"number","value":20,"unit":"rem"}]},"sm":{"id":"container","nodes":[{"type":"number","value":24,"unit":"rem"}]},"md":{"id":"container","nodes":[{"type":"number","value":28,"unit":"rem"}]},"lg":{"id":"container","nodes":[{"type":"number","value":32,"unit":"rem"}]},"xl":{"id":"container","nodes":[{"type":"number","value":36,"unit":"rem"}]},"2xl":{"id":"container","nodes":[{"type":"number","value":42,"unit":"rem"}]},"3xl":{"id":"container","nodes":[{"type":"number","value":48,"unit":"rem"}]},"4xl":{"id":"container","nodes":[{"type":"number","value":56,"unit":"rem"}]},"5xl":{"id":"container","nodes":[{"type":"number","value":64,"unit":"rem"}]},"6xl":{"id":"container","nodes":[{"type":"number","value":72,"unit":"rem"}]},"7xl":{"id":"container","nodes":[{"type":"number","value":80,"unit":"rem"}]},"8xl":{"id":"container","nodes":[{"type":"number","value":90,"unit":"rem"}]}},"utilities":[{"id":".abs","name":"abs","type":-2,"emit":{"type":"static","rules":[{"declarations":{"position":"absolute"}}]},"matchers":[{"type":"static","name":"abs"}]},{"id":".bg-clip-border","name":"bg-clip-border","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-clip":"border-box"}}]},"matchers":[{"type":"static","name":"bg-clip-border"}]},{"id":".bg-clip-content","name":"bg-clip-content","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-clip":"content-box"}}]},"matchers":[{"type":"static","name":"bg-clip-content"}]},{"id":".bg-clip-padding","name":"bg-clip-padding","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-clip":"padding-box"}}]},"matchers":[{"type":"static","name":"bg-clip-padding"}]},{"id":".bg-clip-text","name":"bg-clip-text","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-clip":"text"}}]},"matchers":[{"type":"static","name":"bg-clip-text"}]},{"id":"bg-origin-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-origin":null}}]},"matchers":[{"type":"pattern","prefix":"bg-origin-","values":["border","content","padding"],"valueMap":{"border":"border-box","content":"content-box","padding":"padding-box"}}]},{"id":".block","name":"block","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"block"}}]},"matchers":[{"type":"static","name":"block"}]},{"id":".bottom","name":"bottom","type":-2,"emit":{"type":"static","rules":[{"declarations":{"bottom":"0"}}]},"matchers":[{"type":"static","name":"bottom"}]},{"id":"box-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"box-sizing":null}}]},"matchers":[{"type":"pattern","prefix":"box-","values":["border","content"],"valueMap":{"border":"border-box","content":"content-box"}}]},{"id":".break-spaces","name":"break-spaces","type":-2,"emit":{"type":"static","rules":[{"declarations":{"white-space":"break-spaces"}}]},"matchers":[{"type":"static","name":"break-spaces"}]},{"id":".break-word","name":"break-word","type":-2,"emit":{"type":"static","rules":[{"declarations":{"word-break":"break-word"}}]},"matchers":[{"type":"static","name":"break-word"}]},{"id":".capitalize","name":"capitalize","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-transform":"capitalize"}}]},"matchers":[{"type":"static","name":"capitalize"}]},{"id":".center","name":"center","type":-2,"emit":{"type":"static","rules":[{"declarations":{"left":"0","right":"0","margin-left":"auto","margin-right":"auto"}}]},"matchers":[{"type":"static","name":"center"}]},{"id":".clip-border","name":"clip-border","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"border-box"}}]},"matchers":[{"type":"static","name":"clip-border"}]},{"id":".clip-content","name":"clip-content","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"content-box"}}]},"matchers":[{"type":"static","name":"clip-content"}]},{"id":".clip-fill","name":"clip-fill","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"fill-box"}}]},"matchers":[{"type":"static","name":"clip-fill"}]},{"id":".clip-margin","name":"clip-margin","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"margin-box"}}]},"matchers":[{"type":"static","name":"clip-margin"}]},{"id":".clip-none","name":"clip-none","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"none"}}]},"matchers":[{"type":"static","name":"clip-none"}]},{"id":".clip-padding","name":"clip-padding","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"padding-box"}}]},"matchers":[{"type":"static","name":"clip-padding"}]},{"id":".clip-stroke","name":"clip-stroke","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"stroke-box"}}]},"matchers":[{"type":"static","name":"clip-stroke"}]},{"id":".clip-view","name":"clip-view","type":-2,"emit":{"type":"static","rules":[{"declarations":{"clip-path":"view-box"}}]},"matchers":[{"type":"static","name":"clip-view"}]},{"id":".container","name":"container","type":-2,"emit":{"type":"static","rules":[{"declarations":{"container-type":"inline-size"}}]},"matchers":[{"type":"static","name":"container"}]},{"id":"content-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"align-content":null}}]},"matchers":[{"type":"pattern","prefix":"content-","values":["around","between","evenly"],"valueMap":{"around":"space-around","between":"space-between","evenly":"space-evenly"}}]},{"id":"content-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"align-content":null}}]},"matchers":[{"type":"pattern","prefix":"content-","values":["baseline","center","end","flex-end","flex-start","normal","start","stretch"]}]},{"id":".contents","name":"contents","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"contents"}}]},"matchers":[{"type":"static","name":"contents"}]},{"id":".decoration-from-font","name":"decoration-from-font","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-decoration-thickness":"from-font"}}]},"matchers":[{"type":"static","name":"decoration-from-font"}]},{"id":".diagonal-fractions","name":"diagonal-fractions","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"diagonal-fractions"}}]},"matchers":[{"type":"static","name":"diagonal-fractions"}]},{"id":".fit","name":"fit","type":-2,"emit":{"type":"static","rules":[{"declarations":{"width":"fit-content","height":"fit-content"}}]},"matchers":[{"type":"static","name":"fit"}]},{"id":".fixed","name":"fixed","type":-2,"emit":{"type":"static","rules":[{"declarations":{"position":"fixed"}}]},"matchers":[{"type":"static","name":"fixed"}]},{"id":".flex","name":"flex","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"flex"}}]},"matchers":[{"type":"static","name":"flex"}]},{"id":".flex-col","name":"flex-col","type":-2,"emit":{"type":"static","rules":[{"declarations":{"flex-direction":"column"}}]},"matchers":[{"type":"static","name":"flex-col"}]},{"id":".flex-col-reverse","name":"flex-col-reverse","type":-2,"emit":{"type":"static","rules":[{"declarations":{"flex-direction":"column-reverse"}}]},"matchers":[{"type":"static","name":"flex-col-reverse"}]},{"id":".flex-row","name":"flex-row","type":-2,"emit":{"type":"static","rules":[{"declarations":{"flex-direction":"row"}}]},"matchers":[{"type":"static","name":"flex-row"}]},{"id":".flex-row-reverse","name":"flex-row-reverse","type":-2,"emit":{"type":"static","rules":[{"declarations":{"flex-direction":"row-reverse"}}]},"matchers":[{"type":"static","name":"flex-row-reverse"}]},{"id":".flow-root","name":"flow-root","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"flow-root"}}]},"matchers":[{"type":"static","name":"flow-root"}]},{"id":".font-antialiased","name":"font-antialiased","type":-2,"emit":{"type":"static","rules":[{"declarations":{"-webkit-font-smoothing":"antialiased","-moz-osx-font-smoothing":"grayscale"}}]},"matchers":[{"type":"static","name":"font-antialiased"}]},{"id":".font-subpixel-antialiased","name":"font-subpixel-antialiased","type":-2,"emit":{"type":"static","rules":[{"declarations":{"-webkit-font-smoothing":"auto","-moz-osx-font-smoothing":"auto"}}]},"matchers":[{"type":"static","name":"font-subpixel-antialiased"}]},{"id":".font-bolder","name":"font-bolder","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-weight":"bolder"}}]},"matchers":[{"type":"static","name":"font-bolder"}]},{"id":".full","name":"full","type":-2,"emit":{"type":"static","rules":[{"declarations":{"width":"100%","height":"100%"}}]},"matchers":[{"type":"static","name":"full"}]},{"id":".text-gradient","name":"text-gradient","type":-2,"emit":{"type":"static","rules":[{"declarations":{"-webkit-text-fill-color":"transparent","background-clip":"text"}}]},"matchers":[{"type":"static","name":"text-gradient"}]},{"id":".grid","name":"grid","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"grid"}}]},"matchers":[{"type":"static","name":"grid"}]},{"id":".hidden","name":"hidden","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"none"}}]},"matchers":[{"type":"static","name":"hidden"}]},{"id":".inline","name":"inline","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"inline"}}]},"matchers":[{"type":"static","name":"inline"}]},{"id":".inline-block","name":"inline-block","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"inline-block"}}]},"matchers":[{"type":"static","name":"inline-block"}]},{"id":".inline-flex","name":"inline-flex","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"inline-flex"}}]},"matchers":[{"type":"static","name":"inline-flex"}]},{"id":".inline-grid","name":"inline-grid","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"inline-grid"}}]},"matchers":[{"type":"static","name":"inline-grid"}]},{"id":".inline-table","name":"inline-table","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"inline-table"}}]},"matchers":[{"type":"static","name":"inline-table"}]},{"id":".invisible","name":"invisible","type":-2,"emit":{"type":"static","rules":[{"declarations":{"visibility":"hidden"}}]},"matchers":[{"type":"static","name":"invisible"}]},{"id":".isolate","name":"isolate","type":-2,"emit":{"type":"static","rules":[{"declarations":{"isolation":"isolate"}}]},"matchers":[{"type":"static","name":"isolate"}]},{"id":".italic","name":"italic","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-style":"italic"}}]},"matchers":[{"type":"static","name":"italic"}]},{"id":"items-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"align-items":null}}]},"matchers":[{"type":"pattern","prefix":"items-","values":["baseline","center","end","flex-end","flex-start","normal","self-end","self-start","start","stretch"]}]},{"id":"justify-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"justify-content":null}}]},"matchers":[{"type":"pattern","prefix":"justify-","values":["around","between","evenly"],"valueMap":{"around":"space-around","between":"space-between","evenly":"space-evenly"}}]},{"id":"justify-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"justify-content":null}}]},"matchers":[{"type":"pattern","prefix":"justify-","values":["center","end","flex-end","flex-start","left","normal","right","start","stretch"]}]},{"id":".left","name":"left","type":-2,"emit":{"type":"static","rules":[{"declarations":{"left":"0"}}]},"matchers":[{"type":"static","name":"left"}]},{"id":".line-through","name":"line-through","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-decoration":"line-through"}}]},"matchers":[{"type":"static","name":"line-through"}]},{"id":".lining-nums","name":"lining-nums","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"lining-nums"}}]},"matchers":[{"type":"static","name":"lining-nums"}]},{"id":".list-item","name":"list-item","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"list-item"}}]},"matchers":[{"type":"static","name":"list-item"}]},{"id":".lowercase","name":"lowercase","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-transform":"lowercase"}}]},"matchers":[{"type":"static","name":"lowercase"}]},{"id":".max-vh","name":"max-vh","type":-2,"emit":{"type":"static","rules":[{"declarations":{"max-height":"100vh"}}]},"matchers":[{"type":"static","name":"max-vh"}]},{"id":".max-vw","name":"max-vw","type":-2,"emit":{"type":"static","rules":[{"declarations":{"max-width":"100vw"}}]},"matchers":[{"type":"static","name":"max-vw"}]},{"id":".middle","name":"middle","type":-2,"emit":{"type":"static","rules":[{"declarations":{"top":"0","bottom":"0","margin-top":"auto","margin-bottom":"auto"}}]},"matchers":[{"type":"static","name":"middle"}]},{"id":".min-vh","name":"min-vh","type":-2,"emit":{"type":"static","rules":[{"declarations":{"min-height":"100vh"}}]},"matchers":[{"type":"static","name":"min-vh"}]},{"id":".min-vw","name":"min-vw","type":-2,"emit":{"type":"static","rules":[{"declarations":{"min-width":"100vw"}}]},"matchers":[{"type":"static","name":"min-vw"}]},{"id":".oblique","name":"oblique","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-style":"oblique"}}]},"matchers":[{"type":"static","name":"oblique"}]},{"id":".oldstyle-nums","name":"oldstyle-nums","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"oldstyle-nums"}}]},"matchers":[{"type":"static","name":"oldstyle-nums"}]},{"id":".ordinal","name":"ordinal","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"ordinal"}}]},"matchers":[{"type":"static","name":"ordinal"}]},{"id":".overline","name":"overline","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-decoration":"overline"}}]},"matchers":[{"type":"static","name":"overline"}]},{"id":".overflow","name":"overflow","type":-2,"emit":{"type":"static","rules":[{"declarations":{"overflow":"visible"}}]},"matchers":[{"type":"static","name":"overflow"}]},{"id":".proportional-nums","name":"proportional-nums","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"proportional-nums"}}]},"matchers":[{"type":"static","name":"proportional-nums"}]},{"id":".rel","name":"rel","type":-2,"emit":{"type":"static","rules":[{"declarations":{"position":"relative"}}]},"matchers":[{"type":"static","name":"rel"}]},{"id":".right","name":"right","type":-2,"emit":{"type":"static","rules":[{"declarations":{"right":"0"}}]},"matchers":[{"type":"static","name":"right"}]},{"id":".round","name":"round","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-radius":"50%","aspect-ratio":"1/1"}}]},"matchers":[{"type":"static","name":"round"}]},{"id":".rounded","name":"rounded","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-radius":"1e9em"}}]},"matchers":[{"type":"static","name":"rounded"}]},{"id":"self-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"align-self":null}}]},"matchers":[{"type":"pattern","prefix":"self-","values":["anchor-center","auto","baseline","center","end","flex-end","flex-start","normal","self-end","self-start","start","stretch"]}]},{"id":".shape-border","name":"shape-border","type":-2,"emit":{"type":"static","rules":[{"declarations":{"shape-outside":"border-box"}}]},"matchers":[{"type":"static","name":"shape-border"}]},{"id":".shape-content","name":"shape-content","type":-2,"emit":{"type":"static","rules":[{"declarations":{"shape-outside":"content-box"}}]},"matchers":[{"type":"static","name":"shape-content"}]},{"id":".shape-margin","name":"shape-margin","type":-2,"emit":{"type":"static","rules":[{"declarations":{"shape-outside":"margin-box"}}]},"matchers":[{"type":"static","name":"shape-margin"}]},{"id":".shape-none","name":"shape-none","type":-2,"emit":{"type":"static","rules":[{"declarations":{"shape-outside":"none"}}]},"matchers":[{"type":"static","name":"shape-none"}]},{"id":".shape-padding","name":"shape-padding","type":-2,"emit":{"type":"static","rules":[{"declarations":{"shape-outside":"padding-box"}}]},"matchers":[{"type":"static","name":"shape-padding"}]},{"id":".slashed-zero","name":"slashed-zero","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"slashed-zero"}}]},"matchers":[{"type":"static","name":"slashed-zero"}]},{"id":".stacked-fractions","name":"stacked-fractions","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"stacked-fractions"}}]},"matchers":[{"type":"static","name":"stacked-fractions"}]},{"id":".square","name":"square","type":-2,"emit":{"type":"static","rules":[{"declarations":{"aspect-ratio":"1/1"}}]},"matchers":[{"type":"static","name":"square"}]},{"id":".sr-only","name":"sr-only","type":-2,"emit":{"type":"static","rules":[{"declarations":{"position":"absolute","width":"1px","height":"1px","padding":"0","margin":"-1px","overflow":"hidden","clip":"rect(0, 0, 0, 0)","white-space":"nowrap","border-width":"0"}}]},"matchers":[{"type":"static","name":"sr-only"}]},{"id":".static","name":"static","type":-2,"emit":{"type":"static","rules":[{"declarations":{"position":"static"}}]},"matchers":[{"type":"static","name":"static"}]},{"id":".sticky","name":"sticky","type":-2,"emit":{"type":"static","rules":[{"declarations":{"position":"sticky"}}]},"matchers":[{"type":"static","name":"sticky"}]},{"id":".table","name":"table","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table"}}]},"matchers":[{"type":"static","name":"table"}]},{"id":".table-caption","name":"table-caption","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-caption"}}]},"matchers":[{"type":"static","name":"table-caption"}]},{"id":".table-cell","name":"table-cell","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-cell"}}]},"matchers":[{"type":"static","name":"table-cell"}]},{"id":".table-column","name":"table-column","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-column"}}]},"matchers":[{"type":"static","name":"table-column"}]},{"id":".table-column-group","name":"table-column-group","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-column-group"}}]},"matchers":[{"type":"static","name":"table-column-group"}]},{"id":".table-footer-group","name":"table-footer-group","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-footer-group"}}]},"matchers":[{"type":"static","name":"table-footer-group"}]},{"id":".table-header-group","name":"table-header-group","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-header-group"}}]},"matchers":[{"type":"static","name":"table-header-group"}]},{"id":".table-row","name":"table-row","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-row"}}]},"matchers":[{"type":"static","name":"table-row"}]},{"id":".table-row-group","name":"table-row-group","type":-2,"emit":{"type":"static","rules":[{"declarations":{"display":"table-row-group"}}]},"matchers":[{"type":"static","name":"table-row-group"}]},{"id":".tabular-nums","name":"tabular-nums","type":-2,"emit":{"type":"static","rules":[{"declarations":{"font-variant-numeric":"tabular-nums"}}]},"matchers":[{"type":"static","name":"tabular-nums"}]},{"id":".top","name":"top","type":-2,"emit":{"type":"static","rules":[{"declarations":{"top":"0"}}]},"matchers":[{"type":"static","name":"top"}]},{"id":"transform-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"transform-box":null}}]},"matchers":[{"type":"pattern","prefix":"transform-","values":["border","content","fill","stroke","view"],"valueMap":{"border":"border-box","content":"content-box","fill":"fill-box","stroke":"stroke-box","view":"view-box"}}]},{"id":".untouchable","name":"untouchable","type":-2,"emit":{"type":"static","rules":[{"declarations":{"pointer-events":"none"}}]},"matchers":[{"type":"static","name":"untouchable"}]},{"id":".underline","name":"underline","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-decoration":"underline"}}]},"matchers":[{"type":"static","name":"underline"}]},{"id":".uppercase","name":"uppercase","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-transform":"uppercase"}}]},"matchers":[{"type":"static","name":"uppercase"}]},{"id":".vh","name":"vh","type":-2,"emit":{"type":"static","rules":[{"declarations":{"height":"100vh"}}]},"matchers":[{"type":"static","name":"vh"}]},{"id":".video","name":"video","type":-2,"emit":{"type":"static","rules":[{"declarations":{"aspect-ratio":"16/9"}}]},"matchers":[{"type":"static","name":"video"}]},{"id":".visible","name":"visible","type":-2,"emit":{"type":"static","rules":[{"declarations":{"visibility":"visible"}}]},"matchers":[{"type":"static","name":"visible"}]},{"id":".vw","name":"vw","type":-2,"emit":{"type":"static","rules":[{"declarations":{"width":"100vw"}}]},"matchers":[{"type":"static","name":"vw"}]},{"id":"wrap-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"overflow-wrap":null}}]},"matchers":[{"type":"pattern","prefix":"wrap-","values":["anywhere","break-word","normal"]}]},{"id":"animate-<~animate>","type":-1,"variableAliasRefs":["~animate"],"emit":{"type":"static","rules":[{"declarations":{"animation":null}}]},"matchers":[{"type":"token","prefix":"animate-"}]},{"id":"font-<~font-size>","type":0,"variableAliasRefs":["~font-size"],"emit":{"type":"static","rules":[{"declarations":{"font-size":null}}]},"matchers":[{"type":"token","prefix":"font-"}]},{"id":"font-<~font-family>","type":0,"variableAliasRefs":["~font-family"],"emit":{"type":"static","rules":[{"declarations":{"font-family":null}}]},"matchers":[{"type":"token","prefix":"font-"}]},{"id":"font-<~font-weight>","type":0,"variableAliasRefs":["~font-weight"],"emit":{"type":"static","rules":[{"declarations":{"font-weight":null}}]},"matchers":[{"type":"token","prefix":"font-"}]},{"id":"bg-<~color>","type":0,"variableAliasRefs":["~color"],"emit":{"type":"static","rules":[{"declarations":{"background-color":null}}]},"matchers":[{"type":"token","prefix":"bg-"}]},{"id":"surface-<~color-surface>","type":0,"variableAliasRefs":["~color-surface"],"emit":{"type":"static","rules":[{"declarations":{"background-color":null}}]},"matchers":[{"type":"token","prefix":"surface-"}]},{"id":"b-<~color-line|~color>","type":-1,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-color":null}}]},"matchers":[{"type":"token","prefix":"b-"}]},{"id":"bt-<~color-line|~color>","type":0,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-top-color":null}}]},"matchers":[{"type":"token","prefix":"bt-"}]},{"id":"br-<~color-line|~color>","type":0,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-right-color":null}}]},"matchers":[{"type":"token","prefix":"br-"}]},{"id":"bb-<~color-line|~color>","type":0,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-bottom-color":null}}]},"matchers":[{"type":"token","prefix":"bb-"}]},{"id":"bl-<~color-line|~color>","type":0,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-left-color":null}}]},"matchers":[{"type":"token","prefix":"bl-"}]},{"id":"bx-<~color-line|~color>","type":-1,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-inline-color":null}}]},"matchers":[{"type":"token","prefix":"bx-"}]},{"id":"by-<~color-line|~color>","type":-1,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"border-block-color":null}}]},"matchers":[{"type":"token","prefix":"by-"}]},{"id":"outline-<~color-line|~color>","type":0,"variableAliasRefs":["~color-line","~color"],"emit":{"type":"static","rules":[{"declarations":{"outline-color":null}}]},"matchers":[{"type":"token","prefix":"outline-"}]},{"id":"outline-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"outline-width":null}}]},"matchers":[{"type":"pattern","prefix":"outline-","values":["medium","thick","thin"]}]},{"id":"outline-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"outline-style":null}}]},"matchers":[{"type":"pattern","prefix":"outline-","values":["auto","dashed","dotted","double","hidden","none","solid"]}]},{"id":"grid-cols:<*>","type":0,"emit":{"type":"static","rules":[{"declarations":{"display":"grid","grid-template-columns":["repeat(",null,", minmax(0, 1fr))"]}}]},"matchers":[{"type":"key","keys":["grid-cols"]}]},{"id":"grid-rows:<*>","type":0,"emit":{"type":"static","rules":[{"declarations":{"display":"grid","grid-auto-flow":"column","grid-template-rows":["repeat(",null,", minmax(0, 1fr))"]}}]},"matchers":[{"type":"key","keys":["grid-rows"]}]},{"id":"grid-col-span:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"grid-column":["span ",null,"/span ",null]}}]},"matchers":[{"type":"key","keys":["grid-col-span"]}]},{"id":"grid-row-span:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"grid-row":["span ",null,"/span ",null]}}]},"matchers":[{"type":"key","keys":["grid-row-span"]}]},{"id":"clamp-lines:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"display":"-webkit-box","-webkit-box-orient":"vertical","-webkit-line-clamp":null,"overflow":"hidden","overflow-wrap":"break-word","text-overflow":"ellipsis"}}]},"matchers":[{"type":"key","keys":["clamp-lines"]}]},{"id":"text-<~font-size>","type":-1,"variableAliasRefs":["~font-size"],"emit":{"type":"static","rules":[{"declarations":{"font-size":null,"line-height":["max(1.8em - max(0rem, ",null," - 1rem) * 1.12, ",null,")"],"letter-spacing":["clamp(-.072em, calc((",null," - 1rem) * -.048), 0em)"]}}]},"matchers":[{"type":"token","prefix":"text-"}]},{"id":"text:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"font-size":null,"line-height":["max(1.8em - max(0rem, ",null," - 1rem) * 1.12, ",null,")"],"letter-spacing":["clamp(-.072em, calc((",null," - 1rem) * -.048), 0em)"]}}]},"matchers":[{"type":"key","keys":["text"]}]},{"id":"text-<~color-text>","type":0,"variableAliasRefs":["~color-text"],"emit":{"type":"static","rules":[{"declarations":{"color":null}}]},"matchers":[{"type":"token","prefix":"text-"}]},{"id":"text-decoration-<~color-text|~color>","type":0,"variableAliasRefs":["~color-text","~color"],"emit":{"type":"static","rules":[{"declarations":{"text-decoration-color":null}}]},"matchers":[{"type":"token","prefix":"text-decoration-"}]},{"id":"text-decoration:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"-webkit-text-decoration":null,"text-decoration":null}}]},"matchers":[{"type":"key","keys":["text-decoration"]}]},{"id":"text-decoration-thickness:<*>","type":0,"emit":{"type":"static","rules":[{"declarations":{"text-decoration-thickness":null}}]},"matchers":[{"type":"key","keys":["text-decoration-thickness"]}]},{"id":"text-underline-<~spacing>","type":0,"variableAliasRefs":["~spacing"],"emit":{"type":"static","rules":[{"declarations":{"text-underline-offset":null}}]},"matchers":[{"type":"token","prefix":"text-underline-"}]},{"id":"text-stroke-<~color>","type":0,"variableAliasRefs":["~color"],"emit":{"type":"static","rules":[{"declarations":{"-webkit-text-stroke-color":null}}]},"matchers":[{"type":"token","prefix":"text-stroke-"}]},{"id":"text-stroke:<*>","type":0,"emit":{"type":"static","rules":[{"declarations":{"-webkit-text-stroke":null}}]},"matchers":[{"type":"key","keys":["text-stroke"]}]},{"id":"backdrop-filter-<~color>","type":-1,"variableAliasRefs":["~color"],"emit":{"type":"static","rules":[{"declarations":{"-webkit-backdrop-filter":null,"backdrop-filter":null}}]},"matchers":[{"type":"token","prefix":"backdrop-filter-"}]},{"id":"backdrop-filter:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"-webkit-backdrop-filter":null,"backdrop-filter":null}}]},"matchers":[{"type":"key","keys":["backdrop-filter"]}]},{"id":"box-decoration-break:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"-webkit-box-decoration-break":null,"box-decoration-break":null}}]},"matchers":[{"type":"key","keys":["box-decoration-break"]}]},{"id":"mask-image:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"-webkit-mask-image":null,"mask-image":null}}]},"matchers":[{"type":"key","keys":["mask-image"]}]},{"id":"user-drag:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"-webkit-user-drag":null,"user-drag":null}}]},"matchers":[{"type":"key","keys":["user-drag"]}]},{"id":"user-select:<*>","type":-1,"emit":{"type":"static","rules":[{"declarations":{"-webkit-user-select":null,"user-select":null}}]},"matchers":[{"type":"key","keys":["user-select"]}]},{"id":"bg-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-size":null}}]},"matchers":[{"type":"pattern","prefix":"bg-","values":["auto","contain","cover"]}]},{"id":"bg-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-position":null}}]},"matchers":[{"type":"pattern","prefix":"bg-","values":["bottom","center","left","right","top"]}]},{"id":"bg-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-attachment":null}}]},"matchers":[{"type":"pattern","prefix":"bg-","values":["fixed","local","scroll"]}]},{"id":"bg-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"background-repeat":null}}]},"matchers":[{"type":"pattern","prefix":"bg-","values":["repeat","no-repeat","repeat-x","repeat-y"]}]},{"id":"b-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-style":null}}]},"matchers":[{"type":"pattern","prefix":"b-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"bt-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-top-style":null}}]},"matchers":[{"type":"pattern","prefix":"bt-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"br-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-right-style":null}}]},"matchers":[{"type":"pattern","prefix":"br-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"bb-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-bottom-style":null}}]},"matchers":[{"type":"pattern","prefix":"bb-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"bl-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-left-style":null}}]},"matchers":[{"type":"pattern","prefix":"bl-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"bx-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-inline-style":null}}]},"matchers":[{"type":"pattern","prefix":"bx-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"by-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"border-block-style":null}}]},"matchers":[{"type":"pattern","prefix":"by-","values":["solid","dashed","dotted","double","groove","ridge","inset","outset","none","hidden"]}]},{"id":"decoration-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-decoration-style":null}}]},"matchers":[{"type":"pattern","prefix":"decoration-","values":["solid","double","dotted","dashed","wavy"]}]},{"id":"flex-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"flex-wrap":null}}]},"matchers":[{"type":"pattern","prefix":"flex-","values":["wrap","nowrap","wrap-reverse"]}]},{"id":"list-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"list-style-type":null}}]},"matchers":[{"type":"pattern","prefix":"list-","values":["disc","decimal"]}]},{"id":"list-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"list-style-position":null}}]},"matchers":[{"type":"pattern","prefix":"list-","values":["inside","outside"]}]},{"id":"object-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"object-fit":null}}]},"matchers":[{"type":"pattern","prefix":"object-","values":["cover","contain","fill","scale-down"]}]},{"id":"object-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"object-position":null}}]},"matchers":[{"type":"pattern","prefix":"object-","values":["center","top","bottom","left","right"]}]},{"id":"snap-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"scroll-snap-type":null}}]},"matchers":[{"type":"pattern","prefix":"snap-","values":["x","y","both","block","inline"]}]},{"id":"snap-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"scroll-snap-align":null}}]},"matchers":[{"type":"pattern","prefix":"snap-","values":["start","end","center"]}]},{"id":"snap-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"scroll-snap-stop":null}}]},"matchers":[{"type":"pattern","prefix":"snap-","values":["normal","always"]}]},{"id":"text-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-align":null}}]},"matchers":[{"type":"pattern","prefix":"text-","values":["left","center","right","start","end","justify"]}]},{"id":"text-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-wrap":null}}]},"matchers":[{"type":"pattern","prefix":"text-","values":["wrap","nowrap","balance","pretty"]}]},{"id":"text-","type":-2,"emit":{"type":"static","rules":[{"declarations":{"text-overflow":null}}]},"matchers":[{"type":"pattern","prefix":"text-","values":["ellipsis","clip"]}]}]}
\ No newline at end of file
diff --git a/packages/preset/src/utilities.css b/packages/preset/src/utilities.css
index 19c69f329..7dc26c09a 100644
--- a/packages/preset/src/utilities.css
+++ b/packages/preset/src/utilities.css
@@ -450,7 +450,7 @@
}
}
-/* Token and size shorthands. */
+/* Named token utilities. */
@utilities {
animate-<~animate> {
animation: --value();
@@ -476,35 +476,7 @@
background-color: --value();
}
- size-<~container> {
- width: --value();
- height: --value();
- }
-
- size:<*> {
- width: --value();
- height: --value();
- }
-
- min-size-<~container> {
- min-width: --value();
- min-height: --value();
- }
- min-size:<*> {
- min-width: --value();
- min-height: --value();
- }
-
- max-size-<~container> {
- max-width: --value();
- max-height: --value();
- }
-
- max-size:<*> {
- max-width: --value();
- max-height: --value();
- }
}
/* Border and outline shorthands. */
diff --git a/packages/preset/tests/default-manifest.test.ts b/packages/preset/tests/default-manifest.test.ts
index 30f2d5ab2..02784513b 100644
--- a/packages/preset/tests/default-manifest.test.ts
+++ b/packages/preset/tests/default-manifest.test.ts
@@ -224,7 +224,7 @@ describe('@master/css-preset defaultManifest', () => {
const manifest = getCompiledDefaultManifest()
const utilities = manifest.utilities || []
- expect(utilities).toHaveLength(170)
+ expect(utilities).toHaveLength(164)
expect(utilities.some((utility) => 'order' in utility)).toBe(false)
expect(utilities.some((utility) => utility.layer === 'utilities')).toBe(false)
expect(utilities.some((utility) => utility.name === utility.id)).toBe(false)
@@ -536,21 +536,13 @@ describe('@master/css-preset defaultManifest', () => {
expect(css.createRule('font-family-sans')?.text).toBe('.font-family-sans{font-family:var(--font-family-sans)}')
expect(css.createRule('font-weight-bold')?.text).toBe('.font-weight-bold{font-weight:var(--font-weight-bold)}')
expect(declarationsCSS.createRule('font:var(--font-size-x)')?.text).toContain('font:var(--font-size-x)')
- expect(css.createRule('size:1.25rem')?.text).toBe('.size\\:1\\.25rem{width:1.25rem;height:1.25rem}')
- expect(css.createRule('size-md')?.text).toBe('.size-md{width:var(--container-md);height:var(--container-md)}')
- expect(css.createRule('size:var(--radius-4xl)')?.text).toBe('.size\\:var\\(--radius-4xl\\){width:var(--radius-4xl);height:var(--radius-4xl)}')
- expect(css.createRule('min-size:1.25rem')?.text).toBe('.min-size\\:1\\.25rem{min-width:1.25rem;min-height:1.25rem}')
- expect(css.createRule('min-size:var(--radius-4xl)')?.text).toBe('.min-size\\:var\\(--radius-4xl\\){min-width:var(--radius-4xl);min-height:var(--radius-4xl)}')
- expect(css.createRule('max-size:1.25rem')?.text).toBe('.max-size\\:1\\.25rem{max-width:1.25rem;max-height:1.25rem}')
- expect(css.createRule('max-size:var(--radius-4xl)')?.text).toBe('.max-size\\:var\\(--radius-4xl\\){max-width:var(--radius-4xl);max-height:var(--radius-4xl)}')
- expect(css.createRule('min:1.25rem')?.text).toBe('.min\\:1\\.25rem{min-width:1.25rem;min-height:1.25rem}')
- expect(css.createRule('max:1.25rem')?.text).toBe('.max\\:1\\.25rem{max-width:1.25rem;max-height:1.25rem}')
- expect(css.createRule('size:1.25rem|1.5rem')?.text).toBe('.size\\:1\\.25rem\\|1\\.5rem{width:1.25rem 1.5rem;height:1.25rem 1.5rem}')
- expect(css.createRule('min:1.25rem|1.5rem')?.text).toBe('.min\\:1\\.25rem\\|1\\.5rem{min-width:1.25rem 1.5rem;min-height:1.25rem 1.5rem}')
- expect(css.createRule('max:1.25rem|1.5rem')?.text).toBe('.max\\:1\\.25rem\\|1\\.5rem{max-width:1.25rem 1.5rem;max-height:1.25rem 1.5rem}')
- expect(css.createRule('size:auto')?.text).toBe('.size\\:auto{width:auto;height:auto}')
- expect(css.createRule('size:min-content')?.text).toBe('.size\\:min-content{width:min-content;height:min-content}')
- expect(css.createRule('size:max-content')?.text).toBe('.size\\:max-content{width:max-content;height:max-content}')
+ // Removed preset sizes use only the generic native fallback, never paired dimensions.
+ for (const key of ['size', 'min-size', 'max-size', 'min', 'max']) {
+ expect(css.createRule(`${key}:1.25rem`)?.text).toContain(`{${key}:1.25rem}`)
+ expect(css.createRule(`${key}-md`)).toBeUndefined()
+ }
+ expect(css.createRule('width-md')?.text).toContain('width:var(--container-md)')
+ expect(css.createRule('height-md')?.text).toContain('height:var(--container-md)')
expect(css.createRule('flex-basis-sm')?.text).toBe('.flex-basis-sm{flex-basis:var(--container-sm)}')
expect(css.createRule('flex-basis:0.5rem')?.text).toBe('.flex-basis\\:0\\.5rem{flex-basis:0.5rem}')
expect(declarationsCSS.createRule('outline-width:1px')?.text).toContain('outline-width:1px')
@@ -702,6 +694,6 @@ describe('@master/css-preset defaultManifest', () => {
expect([...ids].filter(([, indexes]) => indexes.length > 1)).toEqual([])
expect('utilityBuckets' in defaultManifest).toBe(false)
- expect(utilities).toHaveLength(170)
+ expect(utilities).toHaveLength(164)
})
})
diff --git a/packages/runtime/e2e/freeze-cascade-matrix.test.ts b/packages/runtime/e2e/freeze-cascade-matrix.test.ts
new file mode 100644
index 000000000..7bcc1d143
--- /dev/null
+++ b/packages/runtime/e2e/freeze-cascade-matrix.test.ts
@@ -0,0 +1,69 @@
+import { expect, test } from '@playwright/test'
+import { renderClassNamesSync } from '@master/css/node'
+import { createServerRenderer } from '@master/css-server'
+import defaultManifest from '@master/css-preset/default-manifest.json' with { type: 'json' }
+import type { MasterCSSManifest } from '@master/css-schema/manifest'
+import { getRuntimeLoaderURL } from './init'
+
+const manifest = defaultManifest as unknown as MasterCSSManifest
+const cases = [
+ { classes: 'p-md p:8px', padding: '8px' },
+ { classes: 'p:8px p-md', padding: '8px' },
+ { classes: 'p-md! p:8px', padding: '16px' },
+ { classes: 'p-md! p:8px!', padding: '8px' },
+ { classes: 'p:8px@base! p:12px!', padding: '8px' },
+ { classes: 'p:8px@base p:12px', padding: '12px' },
+ { classes: 'outside p:8px', padding: '32px' },
+ { classes: 'outside p:8px!', padding: '8px' },
+ { classes: 'component p:8px', padding: '8px' },
+ { classes: 'component-important p:8px!', padding: '24px' },
+ { classes: 'p:8px pt:12px', padding: '12px 8px 8px' },
+ { classes: '{p-md;pt:12px} p:8px', padding: '12px 8px 8px' }
+]
+const classes = [...cases.flatMap(item => item.classes.split(' ')), 'display:block', 'block', 'flex']
+const html = `
+${cases.map((item, index) => `
`).join('')}
+
+`
+
+for (const mode of ['static', 'ssr', 'runtime', 'progressive'] as const) {
+ test(`${mode}: value priority respects native importance and layer boundaries`, async ({ page }) => {
+ const generated = renderClassNamesSync(classes, { manifest })
+ if (mode === 'static') {
+ await page.setContent(html.replace('', ``))
+ } else if (mode === 'runtime') {
+ await page.setContent(html)
+ } else {
+ using server = createServerRenderer({ manifest })
+ const rendered = server.renderHTML(html, { hydrationManifest: 'inject' })
+ expect(rendered.cssText).toBe(generated.cssText)
+ await page.setContent(rendered.html)
+ }
+ if (mode === 'runtime' || mode === 'progressive') {
+ await page.evaluate(async ({ loader, manifest }) => {
+ const { startCSSRuntime } = await import(loader)
+ await startCSSRuntime({ manifest })
+ }, { loader: await getRuntimeLoaderURL(), manifest })
+ }
+ for (const [index, item] of cases.entries()) {
+ await expect(page.locator(`#case-${index}`)).toHaveCSS('padding', item.padding)
+ }
+ // These spellings are not cascade-equivalent. The companion public tooling
+ // test must reject a canonical rewrite from display:block to block.
+ await expect(page.locator('#raw')).toHaveCSS('display', 'block')
+ await expect(page.locator('#named')).toHaveCSS('display', 'flex')
+ if (mode === 'runtime' || mode === 'progressive') {
+ // Observe a full withdrawal before re-inserting in reverse order, so this
+ // exercises incremental CSSOM updates rather than only HTML class order.
+ await page.locator('#case-11').evaluate(element => { element.className = '' })
+ await expect(page.locator('#case-11')).toHaveCSS('padding', '0px')
+ await page.locator('#case-11').evaluate(element => { element.className = 'p:8px {pt:12px;p-md}' })
+ await expect(page.locator('#case-11')).toHaveCSS('padding', '12px 8px 8px')
+ }
+ })
+}
diff --git a/packages/runtime/e2e/native-components-compose.test.ts b/packages/runtime/e2e/native-components-compose.test.ts
index eaaac3d92..597d68153 100644
--- a/packages/runtime/e2e/native-components-compose.test.ts
+++ b/packages/runtime/e2e/native-components-compose.test.ts
@@ -4,20 +4,7 @@ import { renderClassNamesSync } from '@master/css/node'
import { createServerRenderer } from '@master/css-server'
import { getRuntimeLoaderURL } from './init'
-const compiled = compileManifestSync(`
-@utilities {
- fallback { display:block; display:made-up-value; padding-left:20px; padding:10px; padding-left:30px; }
-}
-@layer components {
- .native { display:block; display:made-up-value; padding-left:20px; padding:10px; padding-left:30px; }
- .composed { @compose color:red; @compose color:blue; }
- .same-list { @compose color:red color:blue; }
- .reversed-list { @compose color:blue color:red; }
- .unused { color:green; }
- .z-first { color:red; } .a-last { color:blue; }
- .override { height:10px; }
-}
-`, {})
+const compiled = compileManifestSync("\n@utilities {\n fallback { display:block; display:made-up-value; padding-left:20px; padding:10px; padding-left:30px; }\n}\n@layer components {\n .native { display:block; display:made-up-value; padding-left:20px; padding:10px; padding-left:30px; }\n .composed { @variant media(all){color:red;} @variant media(all){color:blue;} }\n .same-list { @variant media(all){color:blue;color:red;} }\n .reversed-list { @variant media(all){color:blue;color:red;} }\n .unused { color:green; }\n .z-first { color:red; } .a-last { color:blue; }\n .override { height:10px; }\n}\n", {})
const classes = ['fallback', 'height:48px']
for (const mode of ['static', 'ssr', 'runtime', 'progressive'] as const) {
test(`${mode}: ordered fallbacks and native components retain the browser cascade`, async ({ page }) => {
diff --git a/packages/runtime/e2e/sizing-resolution-contract.test.ts b/packages/runtime/e2e/sizing-resolution-contract.test.ts
new file mode 100644
index 000000000..db3eb8c26
--- /dev/null
+++ b/packages/runtime/e2e/sizing-resolution-contract.test.ts
@@ -0,0 +1,47 @@
+import { expect, test } from '@playwright/test'
+import preset from '@master/css-preset/default-manifest.json' with { type: 'json' }
+import type { MasterCSSManifest } from '@master/css-schema/manifest'
+import { renderClassNamesSync } from '@master/css/node'
+import { createServerRenderer } from '@master/css-server'
+import { getRuntimeLoaderURL } from './init'
+
+const manifest = { ...preset, utilities: [...preset.utilities,
+ { id: 'aliases', type: -1, emit: { type: 'property', property: 'width' }, matchers: [{ type: 'key', keys: ['tile', 'box'] }] },
+ { id: 'replaced-tile', type: -1, emit: { type: 'property', property: 'height' }, matchers: [{ type: 'key', keys: ['tile'] }] }
+] } as unknown as MasterCSSManifest
+const classes = ['{width:20px;height:20px}', 'size:99px', 'tile:40px', 'box:30px', 'flex', 'flex:1', 'display:flex:hover']
+
+for (const mode of ['static', 'ssr', 'runtime', 'progressive'] as const) {
+ test(`${mode}: independent alias replacement and explicit paired dimensions survive hydration and updates`, async ({ page }) => {
+ const html = '
'
+ const rendered = renderClassNamesSync(classes, { manifest })
+ expect(rendered.cssText).toContain('size:99px')
+ expect(rendered.cssText).not.toContain('width:99px')
+ expect(rendered.cssText).not.toContain('width:40px')
+ if (mode === 'static') await page.setContent(html.replace('', ``))
+ else if (mode === 'runtime') await page.setContent(html)
+ else {
+ using server = createServerRenderer({ manifest })
+ await page.setContent(server.renderHTML(html, { hydrationManifest: 'inject' }).html)
+ }
+ if (mode === 'runtime' || mode === 'progressive') await page.evaluate(async ({ loader, manifest }) => {
+ const { startCSSRuntime } = await import(loader)
+ await startCSSRuntime({ manifest })
+ }, { loader: await getRuntimeLoaderURL(), manifest })
+ expect(await page.locator('#fallback').evaluate(el => [getComputedStyle(el).width, getComputedStyle(el).height])).toEqual(await page.locator('#native').evaluate(el => [getComputedStyle(el).width, getComputedStyle(el).height]))
+ await expect(page.locator('#pair')).toHaveCSS('width', '20px')
+ await expect(page.locator('#pair')).toHaveCSS('height', '20px')
+ await expect(page.locator('#alias')).toHaveCSS('width', '30px')
+ await expect(page.locator('#alias')).toHaveCSS('height', '40px')
+ await expect(page.locator('#display')).toHaveCSS('display', 'flex')
+ await expect(page.locator('#display')).toHaveCSS('flex-grow', '1')
+ if (mode === 'runtime' || mode === 'progressive') {
+ await page.locator('#pair').evaluate(el => { el.className = '{width:28px;height:28px}' })
+ await expect(page.locator('#pair')).toHaveCSS('width', '28px')
+ await expect(page.locator('#pair')).toHaveCSS('height', '28px')
+ await page.locator('#alias').evaluate(el => { el.className = 'box:35px' })
+ await expect(page.locator('#alias')).toHaveCSS('width', '35px')
+ await expect(page.locator('#alias')).toHaveCSS('height', '0px')
+ }
+ })
+}
diff --git a/packages/runtime/e2e/utility-definition-contract.test.ts b/packages/runtime/e2e/utility-definition-contract.test.ts
index fef4e556c..3d22bdbb0 100644
--- a/packages/runtime/e2e/utility-definition-contract.test.ts
+++ b/packages/runtime/e2e/utility-definition-contract.test.ts
@@ -4,18 +4,7 @@ import { renderClassNamesSync } from '@master/css/node'
import { createServerRenderer } from '@master/css-server'
import { getRuntimeLoaderURL } from './init'
-const compiled = compileManifestSync(`
-@theme { --color-obsolete: red; }
-@utilities {
- panel:<*> { @compose display:block padding:5px; width:--value(); height:--value(); }
- cleared { color:var(--color-obsolete); &:hover { padding:100px; } }
- cleared { }
- aligned- { text-align:--value(); }
- aligned- { text-align:--value(); }
- aligned-end { text-align:left; }
-}
-@layer base { .stroke { color:blue; -webkit-text-stroke:3px red; } }
-`, {})
+const compiled = compileManifestSync("\n@theme { --color-obsolete: red; }\n@utilities {\n panel:<*> { @variant media(all){padding:5px;display:block;} width:--value(); height:--value(); }\n cleared { color:var(--color-obsolete); &:hover { padding:100px; } }\n cleared { }\n aligned- { text-align:--value(); }\n aligned- { text-align:--value(); }\n aligned-end { text-align:left; }\n}\n@layer base { .stroke { color:blue; -webkit-text-stroke:3px red; } }\n", {})
const classes = ['panel:var(--dimension)', 'cleared', 'aligned-start', 'aligned-end', 'text-stroke:1px', 'text-stroke-width:1px']
for (const mode of ['static', 'ssr', 'runtime', 'progressive'] as const) {
diff --git a/packages/schema/AI.md b/packages/schema/AI.md
index a4b57e25e..a0b6d6cf3 100644
--- a/packages/schema/AI.md
+++ b/packages/schema/AI.md
@@ -26,14 +26,19 @@
- `.`
- `./manifest`
-- `./manifest-json`
- `./hydration-manifest`
- `./css-directives`
- `./css-syntax`
- `./utility-type`
- `./runtime-style`
+- `./emitted-globals`
- `./native-css-shorthand`
- `./css-common`
+- `./diagnostics`
+- `./integration`
+
+Manifest JSON codec helpers are exported from `.` and `./manifest`;
+`src/manifest-json.ts` is an implementation module, not a public subpath.
## Key Files
diff --git a/packages/schema/src/css-directives.ts b/packages/schema/src/css-directives.ts
index e5689e6e3..60160342c 100644
--- a/packages/schema/src/css-directives.ts
+++ b/packages/schema/src/css-directives.ts
@@ -174,20 +174,6 @@ export interface CSSDirectiveReference {
file?: string
}
-export interface CSSDirectiveStyleComposeDefinition {
- type: 'compose'
- order: number
- className: string
- selector: string
- source?: CSSDirectiveSourceReference
- directiveSource?: CSSDirectiveSourceReference
- selectorSource?: CSSDirectiveSourceReference
- conditions?: string[]
- conditionPath?: CSSDirectiveConditionPathEntry[]
- layer?: CSSDirectiveLayerName
- name?: string
-}
-
export interface CSSOrderedDeclaration {
property: string
value: string
@@ -208,7 +194,6 @@ export interface CSSDirectiveStyleNativeDefinition {
}
export type CSSDirectiveStyleDefinition =
- | CSSDirectiveStyleComposeDefinition
| CSSDirectiveStyleNativeDefinition
/** Generated UTF-16 offset and its original authoring-source anchor. */
@@ -232,19 +217,8 @@ export interface CSSUtilitySource {
source: CSSDirectiveSourceReference
}
-export interface CSSCompositionTrace {
- order: number
- classes: string[]
- source?: CSSDirectiveSourceReference
- definitionSources: CSSDirectiveSourceReference[]
- css: string
- variableNames: string[]
- animationNames: string[]
-}
-
export interface CSSDirectiveResult {
utilitySources?: CSSUtilitySource[]
- compositions?: CSSCompositionTrace[]
nativeOutput?: CSSNativeOutput
outputMappings?: CSSOutputMapping[]
/** Serialized source map v3 for the final CSS, when produced by the stylesheet host. */
diff --git a/packages/svelte/README.md b/packages/svelte/README.md
index 62eaafc59..61f3ed627 100644
--- a/packages/svelte/README.md
+++ b/packages/svelte/README.md
@@ -85,9 +85,21 @@ export default defineConfig({
})
```
+### Client runtime
+
+For `runtime` or `progressive` mode, load the Vite-provided runtime bootstrap in `src/hooks.client.ts`. SvelteKit renders its own HTML, so selecting a mode does not insert Vite's HTML runtime script into the page.
+
+```ts
+///
+
+import 'virtual:master-css-runtime'
+```
+
+This module starts the runtime with the project manifest and emitted globals and handles Vite HMR. Static and pre-render modes do not use this client import.
+
### Server hook
-For progressive rendering, explicitly set `masterCSS({ mode: 'progressive' })` and export the server handle to inject streamed CSS before ``. Static mode needs no server hook. For pre-render only, select `mode: 'pre-render'` and create the server handle with `hydrationManifest: false`.
+For progressive rendering, explicitly set `masterCSS({ mode: 'progressive' })`, load the client runtime above, and export the server handle to inject streamed CSS before ``. Static mode needs no server hook. For pre-render only, select `mode: 'pre-render'` and create the server handle with `hydrationManifest: false`.
```ts
export { handle } from '@master/css-svelte/hooks.server'
diff --git a/packages/svelte/package.json b/packages/svelte/package.json
index 9b5ce7d3f..cc3d81f53 100644
--- a/packages/svelte/package.json
+++ b/packages/svelte/package.json
@@ -82,7 +82,7 @@
"svelte": "^5.57.0",
"svelte-check": "^4.7.6",
"tslib": "^2.8.1",
- "typescript": "^7.0.2",
+ "typescript": "^6.0.3",
"typescript-eslint": "^8.69.0",
"vite": "^8.2.2"
}
diff --git a/packages/svelte/src/lib/vite.ts b/packages/svelte/src/lib/vite.ts
index 0cb548d07..b33cb3950 100644
--- a/packages/svelte/src/lib/vite.ts
+++ b/packages/svelte/src/lib/vite.ts
@@ -2,11 +2,12 @@ import {
createMasterCSSVitePlugin as createBaseMasterCSSVitePlugin,
type MasterCSSVitePluginOptions
} from '@master/css-vite'
-import type { Plugin } from 'vite'
+
+type BasePlugin = ReturnType[number]
const SVELTEKIT_SSR_EXTERNAL = ['@master/css-server']
-function SvelteKitServerExternalPlugin(): Plugin {
+function SvelteKitServerExternalPlugin(): BasePlugin {
return {
name: 'master-css:svelte-kit-server-external',
config() {
@@ -26,7 +27,7 @@ function SvelteKitServerExternalPlugin(): Plugin {
export function createMasterCSSVitePlugin(
options: MasterCSSVitePluginOptions = {}
-): Plugin[] {
+): BasePlugin[] {
return [
SvelteKitServerExternalPlugin(),
...createBaseMasterCSSVitePlugin({
diff --git a/packages/svelte/tests/fixtures/theme-reference/src/routes/+layout.svelte b/packages/svelte/tests/fixtures/theme-reference/src/routes/+layout.svelte
index ebf1e4fbe..4fa864ce7 100644
--- a/packages/svelte/tests/fixtures/theme-reference/src/routes/+layout.svelte
+++ b/packages/svelte/tests/fixtures/theme-reference/src/routes/+layout.svelte
@@ -1,5 +1 @@
-
-
diff --git a/packages/svelte/tests/fixtures/theme-reference/src/routes/+page.svelte b/packages/svelte/tests/fixtures/theme-reference/src/routes/+page.svelte
index 6301573a1..723f14e53 100644
--- a/packages/svelte/tests/fixtures/theme-reference/src/routes/+page.svelte
+++ b/packages/svelte/tests/fixtures/theme-reference/src/routes/+page.svelte
@@ -1,6 +1,13 @@
-Theme reference probe
+
+
+Loaded project entry
+Unloaded entry route
diff --git a/packages/svelte/tests/fixtures/theme-reference/src/routes/globals.css b/packages/svelte/tests/fixtures/theme-reference/src/routes/globals.css
index 52c3a410f..5c4954c9e 100644
--- a/packages/svelte/tests/fixtures/theme-reference/src/routes/globals.css
+++ b/packages/svelte/tests/fixtures/theme-reference/src/routes/globals.css
@@ -1,3 +1,6 @@
@import '@master/css';
@theme light { --color-probe: #123456; }
@theme dark { --color-probe: #abcdef; }
+@theme { @keyframes project-pulse { from { opacity: .5; } to { opacity: .5; } } }
+@utilities { probe-tone { color: var(--color-probe); } }
+.never-loaded { color: lime; }
diff --git a/packages/svelte/tests/fixtures/theme-reference/src/routes/unloaded/+page.svelte b/packages/svelte/tests/fixtures/theme-reference/src/routes/unloaded/+page.svelte
new file mode 100644
index 000000000..49214ef4a
--- /dev/null
+++ b/packages/svelte/tests/fixtures/theme-reference/src/routes/unloaded/+page.svelte
@@ -0,0 +1,5 @@
+Project definitions without loading the entry
+
+
diff --git a/packages/svelte/tests/theme-reference-e2e.test.ts b/packages/svelte/tests/theme-reference-e2e.test.ts
index 8c284d278..23198e23a 100644
--- a/packages/svelte/tests/theme-reference-e2e.test.ts
+++ b/packages/svelte/tests/theme-reference-e2e.test.ts
@@ -1,43 +1,57 @@
import { execFileSync } from 'node:child_process'
-import { readFileSync } from 'node:fs'
+import { cpSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
import { createServer } from 'node:http'
+import { createRequire } from 'node:module'
import { join, dirname } from 'node:path'
import { fileURLToPath } from 'node:url'
import { chromium } from '@playwright/test'
import { expect, it } from 'vitest'
+import { createServer as createViteServer } from 'vite'
const packageDir = dirname(fileURLToPath(new URL('../package.json', import.meta.url)))
const fixtureDir = join(packageDir, 'tests/fixtures/theme-reference')
+const viteCLI = join(dirname(createRequire(import.meta.url).resolve('vite/package.json')), 'bin/vite.js')
-it('delivers native theme variables to a scoped Svelte style', async () => {
- execFileSync(join(packageDir, 'node_modules/.bin/vite'), ['build'], {
+it('delivers project definitions through each Svelte route that loads their scoped style', async () => {
+ execFileSync(process.execPath, [viteCLI, 'build'], {
cwd: fixtureDir,
stdio: 'pipe',
timeout: 120_000
})
const outputDir = join(fixtureDir, '.svelte-kit/output')
- const html = readFileSync(join(outputDir, 'prerendered/pages/index.html'), 'utf8')
- const stylesheets = [...html.matchAll(/ ]*href="([^"]+\.css)"[^>]*rel="stylesheet"/g)].map(([, href]) => href)
- expect(stylesheets.length).toBeGreaterThan(0)
- const seen = new Set()
- const readCSS = (href: string): string => {
- if (seen.has(href)) return ''
- seen.add(href)
- const css = readFileSync(join(outputDir, 'client', href), 'utf8')
- const imported = [...css.matchAll(/@import\s+"([^"]+)"/g)]
- .map(([, specifier]) => readCSS(new URL(specifier, new URL(href, 'http://localhost')).pathname))
- return [...imported, css].join('\n')
+ const routeCSS = (page: string): string => {
+ const html = readFileSync(join(outputDir, 'prerendered/pages', page), 'utf8')
+ const stylesheets = [...html.matchAll(/ ]*href="([^"]+\.css)"[^>]*rel="stylesheet"/g)].map(([, href]) => href)
+ expect(stylesheets.length).toBeGreaterThan(0)
+ const seen = new Set()
+ const readCSS = (href: string): string => {
+ if (seen.has(href)) return ''
+ seen.add(href)
+ const css = readFileSync(join(outputDir, 'client', href), 'utf8')
+ const imported = [...css.matchAll(/@import\s+"([^"]+)"/g)]
+ .map(([, specifier]) => readCSS(new URL(specifier, new URL(href, 'http://localhost')).pathname))
+ return [...imported, css].join('\n')
+ }
+ return stylesheets.map(readCSS).join('\n')
+ }
+ const loadedCSS = routeCSS('index.html'), unloadedCSS = routeCSS('unloaded.html')
+ for (const css of [loadedCSS, unloadedCSS]) {
+ expect(css).toMatch(/\.probe\.svelte-[\w-]+/)
+ expect(css).toContain('--color-probe:#123456')
+ expect(css).toContain('--color-probe:#abcdef')
+ expect(css).toContain('@keyframes project-pulse')
+ expect(css).not.toContain('@reference')
}
- const css = stylesheets.map(readCSS).join('\n')
- expect(css).toMatch(/\.probe\.svelte-[\w-]+/)
- expect(css).toContain('--color-probe:#123456')
- expect(css).toContain('--color-probe:#abcdef')
- expect(css).not.toContain('@reference')
+ expect(loadedCSS).toContain('.never-loaded')
+ expect(unloadedCSS).not.toContain('.never-loaded')
+ expect(unloadedCSS).not.toContain('.probe-tone{')
const server = createServer((request, response) => {
const pathname = new URL(request.url ?? '/', 'http://localhost').pathname
- const file = pathname === '/' ? join(outputDir, 'prerendered/pages/index.html') : join(outputDir, 'client', pathname)
+ const file = pathname === '/' ? join(outputDir, 'prerendered/pages/index.html')
+ : pathname === '/unloaded' ? join(outputDir, 'prerendered/pages/unloaded.html')
+ : join(outputDir, 'client', pathname)
try {
response.setHeader('Content-Type', pathname.endsWith('.css') ? 'text/css' : pathname.endsWith('.js') ? 'text/javascript' : 'text/html')
response.end(readFileSync(file))
@@ -55,9 +69,57 @@ it('delivers native theme variables to a scoped Svelte style', async () => {
for (const [scheme, color] of [['light', 'rgb(18, 52, 86)'], ['dark', 'rgb(171, 205, 239)']] as const) {
await page.emulateMedia({ colorScheme: scheme })
expect(await page.locator('.probe').evaluate(element => getComputedStyle(element).color)).toBe(color)
+ expect(await page.locator('.probe').evaluate(element => getComputedStyle(element).opacity)).toBe('0.5')
}
+ await page.locator('a[href="/unloaded"]').click()
+ await page.waitForURL('**/unloaded')
+ expect(await page.locator('.probe').evaluate(element => getComputedStyle(element).color)).toBe('rgb(171, 205, 239)')
+ const isolated = await browser.newPage({ colorScheme: 'light' })
+ await isolated.goto(`http://localhost:${address.port}/unloaded`)
+ expect(await isolated.locator('.probe').evaluate(element => getComputedStyle(element).color)).toBe('rgb(18, 52, 86)')
+ expect(await isolated.locator('.probe').evaluate(element => getComputedStyle(element).opacity)).toBe('0.5')
} finally {
await browser.close()
await new Promise(resolve => server.close(() => resolve()))
}
}, 120_000)
+
+it('hot-updates added and edited entries, then reloads after an entry is deleted', async () => {
+ const directory = mkdtempSync(join(packageDir, 'tests/fixtures/theme-hmr-'))
+ cpSync(fixtureDir, directory, { recursive: true, filter: source => !source.includes('/.svelte-kit') })
+ const entry = join(directory, 'src/routes/globals.css')
+ writeFileSync(join(directory, 'src/routes/+page.svelte'), 'HMR probe ')
+ writeFileSync(join(directory, 'src/routes/unloaded/+page.svelte'), 'Other route ')
+ rmSync(entry)
+ let browser: Awaited> | undefined
+ let server: Awaited> | undefined
+ const previousDirectory = process.cwd()
+ try {
+ process.chdir(directory)
+ server = await createViteServer({ configFile: join(directory, 'vite.config.ts'), logLevel: 'silent', server: { host: '127.0.0.1', port: 0 } })
+ await server.listen()
+ browser = await chromium.launch()
+ const page = await browser.newPage()
+ let loads = 0
+ page.on('load', () => { loads++ })
+ await page.goto(server.resolvedUrls!.local[0])
+ const color = () => page.locator('.probe').evaluate(element => getComputedStyle(element).color)
+ expect(await color()).toBe('rgb(255, 0, 255)')
+ expect(loads).toBe(1)
+ for (const [value, expected] of [['blue', 'rgb(0, 0, 255)'], ['red', 'rgb(255, 0, 0)'], [null, 'rgb(255, 0, 255)']] as const) {
+ if (value) writeFileSync(entry, `@master entry;@theme{--color-probe:${value}}`)
+ else rmSync(entry)
+ await expect.poll(color, { timeout: 15_000 }).toBe(expected)
+ if (value) expect(loads).toBe(1)
+ }
+ expect(loads).toBeGreaterThan(1)
+ } finally {
+ try {
+ await browser?.close()
+ await server?.close()
+ } finally {
+ process.chdir(previousDirectory)
+ rmSync(directory, { recursive: true, force: true })
+ }
+ }
+}, 120_000)
diff --git a/packages/tooling/package.json b/packages/tooling/package.json
index e4e91df44..8ae58ece5 100644
--- a/packages/tooling/package.json
+++ b/packages/tooling/package.json
@@ -114,10 +114,10 @@
"provenance": true
},
"dependencies": {
+ "@eslint/css-tree": "^4.1.1",
"@master/css-binding": "workspace:*",
"@master/css-schema": "workspace:*",
"consola": "^3.4.2",
- "css-tree": "^3.2.1",
"defu": "^6.1.7",
"ignore": "^7.0.8",
"mdn-data": "^2.35.0",
@@ -136,7 +136,6 @@
}
},
"devDependencies": {
- "@types/css-tree": "^3.2.0",
"svelte": "^5.57.0",
"vue": "^3.5.42"
}
diff --git a/packages/tooling/src/builtins.ts b/packages/tooling/src/builtins.ts
index 746b3866e..6e4044ab4 100644
--- a/packages/tooling/src/builtins.ts
+++ b/packages/tooling/src/builtins.ts
@@ -32,13 +32,11 @@ export const builtinKeyAliases = Object.freeze({
"iys": "inset-block-start",
"leading": "line-height",
"m": "margin",
- "max": "max-size",
"max-h": "max-height",
"max-size-x": "max-inline-size",
"max-size-y": "max-block-size",
"max-w": "max-width",
"mb": "margin-bottom",
- "min": "min-size",
"min-h": "min-height",
"min-size-x": "min-inline-size",
"min-size-y": "min-block-size",
diff --git a/packages/tooling/src/css-tree-version.ts b/packages/tooling/src/css-tree-version.ts
new file mode 100644
index 000000000..35c09805b
--- /dev/null
+++ b/packages/tooling/src/css-tree-version.ts
@@ -0,0 +1,4 @@
+import * as cssTree from '@eslint/css-tree'
+
+// The package exports version at runtime, but omits it from its type declarations.
+export const cssTreeVersion = (cssTree as typeof cssTree & { version: string }).version
diff --git a/packages/tooling/src/css.ts b/packages/tooling/src/css.ts
index 47b32708b..5be737165 100644
--- a/packages/tooling/src/css.ts
+++ b/packages/tooling/src/css.ts
@@ -1,4 +1,4 @@
-import { generate, lexer, parse, walk, property as propertyName } from 'css-tree'
+import { generate, lexer, parse, walk, property as propertyName } from '@eslint/css-tree'
import { type SyntaxError } from './validator/types/syntax-error'
export function validateCSS(text: string, parseOptions = {
@@ -52,6 +52,9 @@ export function isTargetError(error: SyntaxError | null) {
return null
}
+ // var() and env() cannot be matched before substitution; they are not invalid CSS.
+ if (error.name === 'UnsupportedMatchingTree') return null
+
if (error.name !== 'SyntaxError' &&
error.name !== 'SyntaxMatchError' &&
error.name !== 'SyntaxReferenceError') {
diff --git a/packages/tooling/src/language/session.ts b/packages/tooling/src/language/session.ts
index ad687b2e2..4b06e7fca 100644
--- a/packages/tooling/src/language/session.ts
+++ b/packages/tooling/src/language/session.ts
@@ -4,6 +4,7 @@ import type {
import { MASTER_CSS_LANGUAGE_BATCH_VERSION } from '@master/css-binding/tooling'
import { MasterCSSError } from '@master/css-schema'
import { freezeToolingResult } from '../immutable'
+import { removedUtilityDiagnostics } from '../removed-utilities'
import { withCSSValueValidation } from '../value-validation'
import type {
MasterCSSDocumentAnalysis,
@@ -62,8 +63,10 @@ function validate(value: T): T {
export function bindLanguageSession(
binding: LanguageSession['binding'],
- session: BindingLanguageSession
+ session: BindingLanguageSession,
+ nativeClassNames: readonly string[] = []
): LanguageSession {
+ const nativeClasses = new Set(nativeClassNames)
let disposed = false
const assertActive = () => {
if (disposed) throw new MasterCSSError({
@@ -103,9 +106,9 @@ export function bindLanguageSession(
},
inspectClassName(className, mode) {
assertActive()
- return validate(withCSSValueValidation(parse(
- session.inspectClassName(className, undefined, mode)
- )))
+ const candidates = session.nativeDeclarationCandidates([className]) as MasterCSSNativeDeclarationCandidate[]
+ const result = parse(session.inspectClassName(className, undefined, mode))
+ return validate(withCSSValueValidation({ ...result, diagnostics: [...(result.diagnostics ?? []), ...(result.rules.length ? removedUtilityDiagnostics(className, candidates, nativeClasses) : [])] }))
},
completionIndex() {
assertActive()
diff --git a/packages/tooling/src/lint/analysis.ts b/packages/tooling/src/lint/analysis.ts
index 8fa82559a..b613cc5f0 100644
--- a/packages/tooling/src/lint/analysis.ts
+++ b/packages/tooling/src/lint/analysis.ts
@@ -1,5 +1,4 @@
import type {
- CanonicalComposeDirectiveResult,
RawValuePolicyOptions,
CanonicalClassNameOptions
} from './contracts'
@@ -20,7 +19,7 @@ export interface MasterCSSLintPartialClassConflict {
}
export interface MasterCSSLintAnalysis {
- readonly version: 1
+ readonly version: 2
readonly sortedClassNames: readonly string[]
readonly conflicts: readonly MasterCSSLintClassConflict[]
readonly partialConflicts: readonly MasterCSSLintPartialClassConflict[]
@@ -30,13 +29,12 @@ export interface MasterCSSLintClassListOptions {
readonly disallowUnknownClass?: boolean
readonly rawValuePolicy?: RawValuePolicyOptions
readonly canonicalOptions?: CanonicalClassNameOptions
- readonly composeDirective?: boolean
}
export interface MasterCSSLintEdit {
readonly range: Readonly<{ start: number, end: number }>
readonly text: string
- readonly scope: 'class-list' | 'directive'
+ readonly scope: 'class-list'
}
export interface MasterCSSLintDiagnosticInput {
@@ -49,7 +47,7 @@ export interface MasterCSSLintDiagnosticInput {
}
export interface MasterCSSLintClassListAnalysis {
- readonly version: 1
+ readonly version: 2
readonly analysis: MasterCSSLintAnalysis
readonly diagnostics: readonly MasterCSSLintDiagnosticInput[]
readonly sortEdit?: MasterCSSLintEdit
diff --git a/packages/tooling/src/lint/binding-session.ts b/packages/tooling/src/lint/binding-session.ts
index 76671bc87..a24dd8427 100644
--- a/packages/tooling/src/lint/binding-session.ts
+++ b/packages/tooling/src/lint/binding-session.ts
@@ -8,7 +8,6 @@ import type { MasterCSSManifest } from '@master/css-schema/manifest'
import type {
MasterCSSLintCanonicalClassGroupSuggestions,
MasterCSSLintCanonicalClassSuggestions,
- MasterCSSLintCanonicalComposeDirective,
MasterCSSLintRawValueCandidates,
MasterCSSValidatorBatch
} from '@master/css-binding/tooling'
@@ -16,7 +15,6 @@ import { MASTER_CSS_LINT_BATCH_VERSION } from '@master/css-binding/tooling'
import { validateRuleDeclarations } from '../value-validation'
import type {
CanonicalClassNameOptions,
- CanonicalComposeDirectiveResult,
RawValuePolicyOptions
} from './contracts'
import type {
@@ -42,10 +40,6 @@ export interface LintSession {
classNames: string[],
options?: CanonicalClassNameOptions
): readonly MasterCSSLintCanonicalClassSuggestion[]
- canonicalComposeDirective(
- classNames: string[],
- options?: CanonicalClassNameOptions
- ): CanonicalComposeDirectiveResult | undefined
rawValueCandidates(classNames: string[]): readonly MasterCSSLintRawValueCandidate[]
analyzeClassList(
classList: string,
@@ -143,16 +137,6 @@ export function bindLintSession(
options
) as MasterCSSLintCanonicalClassGroupSuggestions).suggestions
},
- canonicalComposeDirective(classNames, options) {
- const inputs = resolveInputs(classNames)
- const result = lint.canonicalComposeDirective(
- classNames,
- inputs.nativeSupport,
- options
- ) as MasterCSSLintCanonicalComposeDirective
- const { version: _, ...compose } = result
- return compose.suggestions.length ? compose : undefined
- },
rawValueCandidates(classNames) {
const inputs = resolveInputs(classNames)
return (lint.rawValueCandidates(
@@ -172,7 +156,6 @@ export function bindLintSession(
validationErrors: inputs.validationErrors,
disallowUnknownClass: options?.disallowUnknownClass,
canonicalOptions: options?.canonicalOptions,
- composeDirective: options?.composeDirective,
rawValuePolicy: resolveRawValuePolicy(options?.rawValuePolicy)
}) as MasterCSSLintClassListAnalysis
},
diff --git a/packages/tooling/src/lint/contracts.ts b/packages/tooling/src/lint/contracts.ts
index 80407d840..aff27a801 100644
--- a/packages/tooling/src/lint/contracts.ts
+++ b/packages/tooling/src/lint/contracts.ts
@@ -9,8 +9,6 @@ export interface CanonicalClassNameOptions {
preferPropertyAliases?: boolean
preferCompositionUtilities?: boolean
preferConditionOrder?: boolean
- preferNativeDeclarationsInCompose?: boolean
- preferVariantBlocksInCompose?: boolean
}
export const defaultCanonicalClassNameOptions: Readonly> = Object.freeze({
@@ -18,19 +16,4 @@ export const defaultCanonicalClassNameOptions: Readonly
}
-export interface MasterCSSFixContentOptions extends MasterCSSLintContentOptions {
- includeDirectiveFixes?: boolean
-}
+export type MasterCSSFixContentOptions = MasterCSSLintContentOptions
export interface MasterCSSLintContentRuleOptions {
'no-invalid-classes'?: MasterCSSInvalidClassesReportOptions
@@ -111,7 +108,6 @@ interface ClassListContext {
text: string
sourceKind: Exclude
unescape?: string | false
- directive?: SourceRange
classNames: string[]
transformed: boolean
}
@@ -183,15 +179,7 @@ function detectClassListUnescape(content: string, range: SourceRange) {
return quote === '"' || quote === '\'' || quote === '`' ? quote : false
}
-function findComposeDirective(content: string, range: SourceRange): SourceRange | undefined {
- const start = content.lastIndexOf('@compose', range.start)
- if (start === -1) return
- const semicolon = content.indexOf(';', range.end)
- if (semicolon === -1 || content.slice(start, range.start).includes('{')) return
- return { start, end: semicolon + 1 }
-}
-
-function inferClassSourceKind(content: string, range: SourceRange): Exclude {
+function inferClassSourceKind(content: string, range: SourceRange): Exclude {
const prefix = content.slice(Math.max(0, range.start - 80), range.start)
return /(?:^|[\s{<])(?:class|className|class:list|:class|v-bind:class|\[class\]|\[className\]|\[ngClass\])\s*=\s*(?:"|'|`|\{[^]*$)/.test(prefix)
? 'class-attribute'
@@ -215,15 +203,13 @@ function collectClassListContexts(
existing.transformed ||= position.raw !== position.token
continue
}
- const directive = findComposeDirective(content, contextRange)
contexts.set(key, {
range: contextRange,
text: content.slice(contextRange.start, contextRange.end),
- sourceKind: directive ? 'compose-directive' : inferClassSourceKind(content, contextRange),
+ sourceKind: inferClassSourceKind(content, contextRange),
unescape: detectClassListUnescape(content, contextRange),
classNames: [position.token],
transformed: position.raw !== position.token,
- ...(directive ? { directive } : {})
})
}
return [...contexts.values()].map(context => {
@@ -270,7 +256,6 @@ function createContextLintDiagnostics(
canonicalOptions: rules['prefer-canonical-classes']
? options.ruleOptions?.['prefer-canonical-classes'] || {}
: undefined,
- composeDirective: context.sourceKind === 'compose-directive'
}).diagnostics
.filter(({ ruleId }) => rules[ruleId])
.map((diagnostic): MasterCSSLintDiagnostic => ({
@@ -285,20 +270,7 @@ function createContextLintDiagnostics(
function toSourceFix(context: ClassListContext, fix: MasterCSSLintFix): MasterCSSLintSourceFix | undefined {
if (context.transformed) return
- if (fix.scope === 'directive') {
- if (!context.directive) return
- return {
- kind: 'directive',
- safety: 'structural',
- range: {
- start: context.directive.start,
- end: context.directive.end
- },
- text: fix.text,
- description: 'Apply structural @compose rewrite.',
- requiresFormatting: true
- }
- }
+
return {
kind: 'class-list',
safety: 'safe',
@@ -380,11 +352,6 @@ function uniqueFixes(fixes: MasterCSSLintSourceFix[]) {
})
}
-function collectStructuralFixes(file: MasterCSSLintFileResult) {
- return uniqueFixes(file.diagnostics.flatMap((diagnostic) => diagnostic.fixes ?? []))
- .filter((fix) => fix.kind === 'directive')
- .sort((a, b) => b.range.start - a.range.start || b.range.end - a.range.end)
-}
function applyFixes(content: string, fixes: MasterCSSLintSourceFix[]) {
let fixed = content
@@ -406,7 +373,7 @@ function fixClassListText(context: ClassListContext, rules: Record diagnostic.fix)
- .find((fix): fix is MasterCSSLintFix => Boolean(fix && fix.scope !== 'directive'))
+ .find((fix): fix is MasterCSSLintFix => Boolean(fix))
if (!fix) return fixed
const next = applyReplacement(fixed, fix.range, fix.text)
if (next === fixed) return fixed
@@ -435,16 +402,7 @@ function fixSafeClassLists(content: string, filePath: string, rules: Record diagnostic.severity === 'warning').length,
fixable: diagnostics.filter((diagnostic) => diagnostic.fixes?.length).length,
safeFixes: fixes.filter((fix) => fix.safety === 'safe').length,
- structuralFixes: fixes.filter((fix) => fix.safety === 'structural').length
}
}
diff --git a/packages/tooling/src/math-types.ts b/packages/tooling/src/math-types.ts
new file mode 100644
index 000000000..207f15e30
--- /dev/null
+++ b/packages/tooling/src/math-types.ts
@@ -0,0 +1,180 @@
+import { clone, lexer, walk } from '@eslint/css-tree'
+import type { CssNode, FunctionNode } from '@eslint/css-tree'
+
+type Dimension = 'length' | 'angle' | 'time' | 'frequency' | 'resolution' | 'flex' | 'percentage'
+type Known = { kind: 'known', powers: Partial> }
+type Result = Known | { kind: 'invalid' } | { kind: 'unknown' }
+type Hint = Dimension | null | undefined
+const unknown: Result = { kind: 'unknown' }
+const invalid: Result = { kind: 'invalid' }
+const number = (): Known => ({ kind: 'known', powers: {} })
+const dimension = (name: Dimension): Known => ({ kind: 'known', powers: { [name]: 1 } })
+const examples = { length: 'px', angle: 'deg', time: 's', frequency: 'hz', resolution: 'dppx', flex: 'fr' } as const
+const units = new Map(Object.entries((lexer as typeof lexer & { units: Record }).units)
+ .filter(([type]) => type in examples)
+ .flatMap(([type, names]) => names.map(unit => [unit.toLowerCase(), type as Dimension] as const)))
+
+export const mathFunctions = new Set(['calc', 'min', 'max', 'clamp', 'mod', 'rem', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2', 'pow', 'sqrt', 'hypot', 'exp', 'abs', 'sign', 'log', 'round'])
+
+function same(a: Known, b: Known) {
+ return Object.keys({ ...a.powers, ...b.powers }).every(key => a.powers[key as Dimension] === b.powers[key as Dimension])
+}
+
+function combine(a: Result, b: Result, operator: string, hint: Hint): Result {
+ if (a.kind === 'invalid' || b.kind === 'invalid') return invalid
+ if (a.kind === 'unknown' || b.kind === 'unknown') return unknown
+ if (operator === '+' || operator === '-') {
+ if (same(a, b)) return a
+ if (hint === undefined && (a.powers.percentage || b.powers.percentage)) return unknown
+ return invalid
+ }
+ const powers = { ...a.powers }
+ for (const [dimension, exponent] of Object.entries(b.powers)) {
+ const key = dimension as Dimension
+ powers[key] = (powers[key] ?? 0) + exponent! * (operator === '/' ? -1 : 1)
+ if (powers[key] === 0) delete powers[key]
+ }
+ return { kind: 'known', powers }
+}
+
+function expression(nodes: CssNode[], hint: Hint): Result {
+ let offset = 0
+ const atom = (): Result => {
+ const node = nodes[offset++]
+ if (!node) return invalid
+ switch (node.type) {
+ case 'Number': return number()
+ case 'Dimension': return units.has(node.unit.toLowerCase()) ? dimension(units.get(node.unit.toLowerCase())!) : unknown
+ case 'Percentage': return dimension(hint ?? 'percentage')
+ case 'Identifier': return ['e', 'pi', 'infinity', '-infinity', 'nan'].includes(node.name.toLowerCase()) ? number() : unknown
+ case 'Parentheses': return expression([...node.children], hint)
+ case 'Function': return inferFunction(node, hint)
+ default: return unknown
+ }
+ }
+ const operator = () => {
+ const node = nodes[offset]
+ return node?.type === 'Operator' ? node.value.trim() : ''
+ }
+ const product = (): Result => {
+ let result = atom()
+ while (['*', '/'].includes(operator())) {
+ const op = operator()
+ offset++
+ result = combine(result, atom(), op, hint)
+ }
+ return result
+ }
+ let result = product()
+ let knownSum = result.kind === 'known' ? result : undefined
+ while (['+', '-'].includes(operator())) {
+ const op = operator()
+ offset++
+ const right = product()
+ if (right.kind === 'known') {
+ const sum = knownSum ? combine(knownSum, right, op, hint) : right
+ if (sum.kind === 'invalid') return invalid
+ knownSum = sum.kind === 'known' ? sum : undefined
+ }
+ result = combine(result, right, op, hint)
+ }
+ return offset === nodes.length ? result : unknown
+}
+
+function primitive(value: Known): Dimension | 'number' | undefined {
+ const entries = Object.entries(value.powers)
+ return !entries.length ? 'number' : entries.length === 1 && entries[0][1] === 1 ? entries[0][0] as Dimension : undefined
+}
+
+function inferFunction(node: FunctionNode, hint: Hint): Result {
+ const name = node.name.toLowerCase()
+ if (!mathFunctions.has(name)) return unknown
+ const args: CssNode[][] = [[]]
+ for (const child of node.children) {
+ if (child.type === 'Operator' && child.value.trim() === ',') args.push([])
+ else args.at(-1)!.push(child)
+ }
+ if (name === 'round' && args[0]?.length === 1 && args[0][0].type === 'Identifier'
+ && ['nearest', 'up', 'down', 'to-zero'].includes(args[0][0].name)) args.shift()
+ const values = args.map((nodes, index) => name === 'clamp' && index !== 1 && nodes.length === 1
+ && nodes[0].type === 'Identifier' && nodes[0].name === 'none' ? undefined : expression(nodes, hint))
+ .filter((value): value is Result => value !== undefined)
+ if (values.some(value => value.kind === 'invalid')) return invalid
+ // Check all known arguments, even when an independent argument is unknown.
+ const known = values.filter((value): value is Known => value.kind === 'known')
+ const uncertain = known.length !== values.length
+ const accepts = (types: (Dimension | 'number')[]) => known.every(value => {
+ const type = primitive(value)
+ return type !== undefined && types.includes(type)
+ })
+ let result: Result
+ switch (name) {
+ case 'calc': return values[0] ?? invalid
+ case 'sin': case 'cos': case 'tan':
+ result = accepts(['number', 'angle']) ? number() : invalid
+ break
+ case 'asin': case 'acos': case 'atan':
+ result = accepts(['number']) ? dimension('angle') : invalid
+ break
+ case 'pow': case 'sqrt': case 'exp': case 'log':
+ result = accepts(['number']) ? number() : invalid
+ break
+ case 'sign': result = known.every(value => primitive(value) !== undefined) ? number() : invalid; break
+ case 'abs': result = values[0] ?? invalid; break
+ default: {
+ // min/max/clamp/hypot/mod/rem/round/atan2 require compatible argument types.
+ result = known.reduce((result, value) => combine(result, value, '+', hint), known[0] ?? unknown)
+ if (name === 'round' && values.length === 1 && !accepts(['number'])) result = invalid
+ if (name === 'atan2' && result.kind === 'known') result = dimension('angle')
+ }
+ }
+ return result.kind === 'invalid' ? invalid : uncertain ? unknown : result
+}
+
+function representative(type: Dimension | 'number'): CssNode {
+ if (type === 'number') return { type: 'Number', value: '1' }
+ if (type === 'percentage') return { type: 'Percentage', value: '1' }
+ return { type: 'Dimension', value: '1', unit: examples[type] }
+}
+
+/** Substitute only proven result types into a disposable grammar AST. Never
+ * evaluate values, ranges, variable substitutions, or mutate emitted CSS.
+ * A nested calc may have a compound intermediate type which its parent cancels.
+ */
+export function validateMathTypes(ast: CssNode, matches: (value: CssNode) => boolean): { ast: CssNode, status?: 'valid' | 'invalid' | 'unknown' } {
+ const normalized = clone(ast)
+ let status: 'valid' | 'invalid' | 'unknown' = 'valid'
+ let found = false
+ walk(normalized, (node, item, list) => {
+ if (node.type !== 'Function' || !mathFunctions.has(node.name.toLowerCase()) || !item || !list) return
+ found = true
+ const original = item.data
+ const accepts = (type: Dimension | 'number') => {
+ item.data = representative(type)
+ const result = matches(normalized)
+ item.data = original
+ return result
+ }
+ let hint: Hint = null
+ let hasPercentage = false
+ walk(node, child => { if (child.type === 'Percentage') hasPercentage = true })
+ if (hasPercentage) {
+ // Infer the context from the complete property grammar at this location.
+ // A failed match containing substitutions cannot prove a percentage basis.
+ const bases = Object.keys(examples).filter(type => accepts(type as Dimension)) as Dimension[]
+ hint = accepts('percentage') && bases.length === 1 ? bases[0] : bases.length ? null : undefined
+ }
+ const inferred = inferFunction(node, hint)
+ if (inferred.kind === 'invalid') status = 'invalid'
+ else if (inferred.kind === 'unknown') { if (status !== 'invalid') status = 'unknown' }
+ else {
+ const type = primitive(inferred)
+ if (!type) {
+ if (hasPercentage && hint === undefined) { if (status !== 'invalid') status = 'unknown' }
+ else status = 'invalid'
+ } else item.data = representative(type)
+ }
+ return walk.skip
+ })
+ return { ast: normalized, status: found ? status : undefined }
+}
diff --git a/packages/tooling/src/math-validation.ts b/packages/tooling/src/math-validation.ts
index 5a5acc4f0..00b3b5664 100644
--- a/packages/tooling/src/math-validation.ts
+++ b/packages/tooling/src/math-validation.ts
@@ -1,11 +1,10 @@
-import { clone, generate, lexer, List, walk } from 'css-tree'
-import type { CssNode, FunctionNode } from 'css-tree'
-
-const functions = new Set(['calc', 'min', 'max', 'clamp', 'mod', 'rem', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2', 'pow', 'sqrt', 'hypot', 'exp', 'abs', 'sign', 'log', 'round'])
+import { clone, generate, lexer, List, walk } from '@eslint/css-tree'
+import type { CssNode, FunctionNode } from '@eslint/css-tree'
+import { mathFunctions as functions } from './math-types'
/** Check operator structure and arity, without inferring the result's dimension.
* CSS Values 4 allows dimensional division. Normalize operands for grammar-only
- * checks rather than applying css-tree's older numeric-divisor restriction.
+ * checks rather than applying the lexer's numeric-divisor restriction.
*/
export function mathFunctionStatus(node: FunctionNode): 'valid' | 'invalid' | 'unknown' | undefined {
const name = node.name.toLowerCase()
@@ -42,7 +41,7 @@ export function mathFunctionStatus(node: FunctionNode): 'valid' | 'invalid' | 'u
return 'unknown'
}
if (name === 'log' || name === 'round') {
- // css-tree's bundled draft still requires commas for omitted optional
+ // The bundled grammar still requires commas for omitted optional
// arguments. Validate the current arity and reuse its calc-sum grammar.
const parts: CssNode[][] = [[]]
for (const child of normalized.children) {
diff --git a/packages/tooling/src/node.ts b/packages/tooling/src/node.ts
index f12118af9..e3b69fc19 100644
--- a/packages/tooling/src/node.ts
+++ b/packages/tooling/src/node.ts
@@ -15,6 +15,8 @@ export { cssValueStatus, validateRuleDeclarations, CSS_VALUE_CHECK } from './val
export function createToolingSessionSync(options: {
readonly manifest: MasterCSSManifest
+ /** Explicit native class registrations; suppresses retired-utility advice only. */
+ readonly nativeClassNames?: readonly string[]
}): MasterCSSToolingSession {
const tooling = createToolingBindingSync()
const lexer = tooling.createLexerSession()
@@ -29,10 +31,11 @@ export function createToolingSessionSync(options: {
source: bindSourceExtractor('native', source),
validator: bindValidatorSession(
'native',
- validator
+ validator,
+ options.nativeClassNames
),
lint: bindLintSession(lint, lintValidator, lintLanguage),
- language: bindLanguageSession('native', language)
+ language: bindLanguageSession('native', language, options.nativeClassNames)
})
}
diff --git a/packages/tooling/src/removed-utilities.ts b/packages/tooling/src/removed-utilities.ts
new file mode 100644
index 000000000..e679508e4
--- /dev/null
+++ b/packages/tooling/src/removed-utilities.ts
@@ -0,0 +1,15 @@
+import type { MasterCSSDiagnostic, MasterCSSNativeDeclarationCandidate } from '@master/css-binding/tooling'
+
+/** Rust supplies only actual native fallbacks. Explicit custom utility matches
+ * never enter this projection, even when their public key is a retired name. */
+export function removedUtilityDiagnostics(className: string, candidates: readonly MasterCSSNativeDeclarationCandidate[], nativeClassNames: ReadonlySet = new Set()): MasterCSSDiagnostic[] {
+ if (nativeClassNames.has(className)) return []
+ return candidates.filter(candidate => candidate.className === className && ['size', 'min-size', 'max-size', 'min', 'max'].includes(candidate.property)).map(candidate => ({
+ code: 'REMOVED_PRESET_UTILITY',
+ phase: 'match',
+ severity: 'info',
+ message: `The built-in ${candidate.property} sizing utility was removed. Master no longer expands this input into paired dimensions; native declaration fallback remains and browser behavior may differ. Use explicit width/height properties or define a project utility.`,
+ range: { start: 0, end: className.length },
+ notes: ['Use master-css migrate --from rc-sizing with the saved RC manifest to review token identity and cascade order.']
+ }))
+}
diff --git a/packages/tooling/src/source/adapters/svelte.ts b/packages/tooling/src/source/adapters/svelte.ts
index e1a3c0bbe..cbc745729 100644
--- a/packages/tooling/src/source/adapters/svelte.ts
+++ b/packages/tooling/src/source/adapters/svelte.ts
@@ -13,6 +13,10 @@ interface SvelteRange {
end?: number
}
+interface SvelteScript extends SvelteRange {
+ content?: SvelteRange
+}
+
interface SvelteAttributeValue extends SvelteRange {
type?: string
data?: string
@@ -54,7 +58,15 @@ function addOxc(classes: Set, source: string, content: string) {
}
}
-function visitMarkup(node: SvelteMarkupNode | undefined, source: string, content: string, classes: Set) {
+function scriptExtension(content: string, script: SvelteScript | undefined): 'js' | 'ts' | 'tsx' {
+ if (script?.start == null || script.content?.start == null) return 'js'
+ const openingTag = content.slice(script.start, script.content.start)
+ const match = /(?:^|\s)lang\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))/iu.exec(openingTag)
+ const language = (match?.[1] ?? match?.[2] ?? match?.[3])?.toLowerCase()
+ return language === 'ts' || language === 'tsx' ? language : 'js'
+}
+
+function visitMarkup(node: SvelteMarkupNode | undefined, source: string, content: string, classes: Set, extension: 'js' | 'ts' | 'tsx') {
if (!node || typeof node !== 'object') return
if (Array.isArray(node.attributes)) {
@@ -62,7 +74,7 @@ function visitMarkup(node: SvelteMarkupNode | undefined, source: string, content
if (attribute.type === 'Class') {
addClassString(classes, attribute.name)
if (attribute.expression?.start != null && attribute.expression?.end != null) {
- addOxc(classes, `${source}.js`, content.slice(attribute.expression.start, attribute.expression.end))
+ addOxc(classes, `${source}.${extension}`, content.slice(attribute.expression.start, attribute.expression.end))
}
continue
}
@@ -71,17 +83,17 @@ function visitMarkup(node: SvelteMarkupNode | undefined, source: string, content
if (value.type === 'Text') {
addClassString(classes, value.data ?? value.raw)
} else if (value.start != null && value.end != null) {
- addOxc(classes, `${source}.js`, content.slice(value.start, value.end))
+ addOxc(classes, `${source}.${extension}`, content.slice(value.start, value.end))
}
}
}
}
for (const child of node.children || []) {
- visitMarkup(child, source, content, classes)
+ visitMarkup(child, source, content, classes, extension)
}
for (const branch of [node.else, node.pending, node.then, node.catch]) {
- visitMarkup(branch, source, content, classes)
+ visitMarkup(branch, source, content, classes, extension)
}
}
@@ -98,14 +110,17 @@ export async function extractSvelteClasses(source: string, content: string): Pro
try {
const ast = compiler.parse(content)
const classes = new Set()
+ const moduleExtension = scriptExtension(content, ast.module)
+ const instanceExtension = scriptExtension(content, ast.instance)
if (ast.module?.content) {
- addOxc(classes, `${source}.js`, content.slice(ast.module.content.start, ast.module.content.end))
+ addOxc(classes, `${source}.${moduleExtension}`, content.slice(ast.module.content.start, ast.module.content.end))
}
if (ast.instance?.content) {
- addOxc(classes, `${source}.js`, content.slice(ast.instance.content.start, ast.instance.content.end))
+ addOxc(classes, `${source}.${instanceExtension}`, content.slice(ast.instance.content.start, ast.instance.content.end))
}
- visitMarkup(ast.html as SvelteMarkupNode, source, content, classes)
+ visitMarkup(ast.html as SvelteMarkupNode, source, content, classes,
+ moduleExtension === 'tsx' || instanceExtension === 'tsx' ? 'tsx' : moduleExtension === 'ts' || instanceExtension === 'ts' ? 'ts' : 'js')
return [...classes]
} catch (error) {
diff --git a/packages/tooling/src/syntax-validation.ts b/packages/tooling/src/syntax-validation.ts
index e112b03bd..d1e196e51 100644
--- a/packages/tooling/src/syntax-validation.ts
+++ b/packages/tooling/src/syntax-validation.ts
@@ -1,7 +1,8 @@
-import { parse, tokenize, tokenTypes, version } from 'css-tree'
+import { parse, tokenize, tokenTypes } from '@eslint/css-tree'
+import { cssTreeVersion } from './css-tree-version'
import type { MasterCSSSyntaxStatus } from '@master/css-binding/tooling'
-export const CSS_SYNTAX_CHECK = Object.freeze({ name: 'css-tree', version, phase: 'css-syntax' as const, scope: 'selectors-queries-declarations' as const })
+export const CSS_SYNTAX_CHECK = Object.freeze({ name: '@eslint/css-tree', version: cssTreeVersion, phase: 'css-syntax' as const, scope: 'selectors-queries-declarations' as const })
/** Token structure is independent of property grammars and browser support. */
export function cssSyntaxStatus(text: string): MasterCSSSyntaxStatus {
@@ -26,7 +27,7 @@ export function cssSyntaxStatus(text: string): MasterCSSSyntaxStatus {
try {
let unknown = false
const ast = parse(text, { parseCustomProperty: false, onParseError: () => { unknown = true } })
- // Parsing checks syntax, not whether the browser implements it. css-tree's
+ // Parsing checks syntax, not whether the browser implements it. The parser's
// inability to parse a future construct is incomplete knowledge, not invalidity.
return ast && !unknown ? 'valid' : 'unknown'
} catch {
diff --git a/packages/tooling/src/tooling-session.ts b/packages/tooling/src/tooling-session.ts
index afb9ac2bb..3b891d5de 100644
--- a/packages/tooling/src/tooling-session.ts
+++ b/packages/tooling/src/tooling-session.ts
@@ -70,6 +70,8 @@ let bindToolingSession: (parts: ToolingSessionParts) => MasterCSSToolingSession
export interface MasterCSSToolingSessionOptions {
readonly manifest: MasterCSSManifest
+ /** Explicit native class registrations; suppresses retired-utility advice only. */
+ readonly nativeClassNames?: readonly string[]
readonly binding?: MasterCSSBinding
}
@@ -169,16 +171,6 @@ export class MasterCSSToolingSession implements Disposable {
)
}
- canonicalComposeDirective(
- classNames: readonly string[],
- options?: CanonicalClassNameOptions
- ) {
- this.assertActive()
- return freezeToolingResult(
- this.parts.lint.canonicalComposeDirective([...classNames], options)
- )
- }
-
rawValueCandidates(classNames: readonly string[]): readonly MasterCSSLintRawValueCandidate[] {
this.assertActive()
return freezeToolingResult(this.parts.lint.rawValueCandidates([...classNames]))
@@ -270,9 +262,9 @@ export async function createToolingSession(
const session = bindToolingSession({
lexer: bindLexerSession(binding.binding, lexerBinding),
source: bindSourceExtractor(binding.binding, sourceBinding),
- validator: bindValidatorSession(binding.binding, validatorBinding),
+ validator: bindValidatorSession(binding.binding, validatorBinding, options.nativeClassNames),
lint: bindLintSession(lintBinding, lintValidatorBinding, lintLanguageBinding),
- language: bindLanguageSession(binding.binding, languageBinding)
+ language: bindLanguageSession(binding.binding, languageBinding, options.nativeClassNames)
})
created.length = 0
return session
diff --git a/packages/tooling/src/validator/binding-session.ts b/packages/tooling/src/validator/binding-session.ts
index f1fb8a15a..980e0aa70 100644
--- a/packages/tooling/src/validator/binding-session.ts
+++ b/packages/tooling/src/validator/binding-session.ts
@@ -3,6 +3,7 @@ import type { MasterCSSManifest } from '@master/css-schema/manifest'
import type {
MasterCSSValidatorBatch
} from '@master/css-binding/tooling'
+import { removedUtilityDiagnostics } from '../removed-utilities'
import { withCSSValueValidation } from '../value-validation'
import type { MasterCSSClassValidationResult } from './contracts'
@@ -24,14 +25,17 @@ function parse(value: unknown): T {
export function bindValidatorSession(
binding: ValidatorSession['binding'],
- session: BindingValidatorSession
+ session: BindingValidatorSession,
+ nativeClassNames: readonly string[] = []
): ValidatorSession {
+ const nativeClasses = new Set(nativeClassNames)
return {
binding,
generate(classNames) {
const values = [...classNames]
+ const candidates = session.nativeDeclarationCandidates(values) as import('@master/css-binding/tooling').MasterCSSNativeDeclarationCandidate[]
const result = parse(session.generateClassRules(values))
- return { ...result, classes: result.classes.map(withCSSValueValidation) }
+ return { ...result, classes: result.classes.map(result => withCSSValueValidation({ ...result, diagnostics: [...(result.diagnostics ?? []), ...(result.rules.length ? removedUtilityDiagnostics(result.className, candidates, nativeClasses) : [])] })) }
},
dispose: () => session.dispose()
}
diff --git a/packages/tooling/src/value-validation.ts b/packages/tooling/src/value-validation.ts
index e8a779d55..117c8a03c 100644
--- a/packages/tooling/src/value-validation.ts
+++ b/packages/tooling/src/value-validation.ts
@@ -1,6 +1,8 @@
import { mathFunctionStatus } from './math-validation'
+import { validateMathTypes } from './math-types'
import { cssSyntaxStatus, CSS_SYNTAX_CHECK } from './syntax-validation'
-import { definitionSyntax, generate, lexer, parse, property as propertyName, walk, version as cssTreeVersion } from 'css-tree'
+import { cssTreeVersion } from './css-tree-version'
+import { definitionSyntax, generate, lexer, parse, property as propertyName, walk } from '@eslint/css-tree'
import type { MasterCSSDiagnostic, MasterCSSValueStatus } from '@master/css-binding/tooling'
export interface DeclarationValidation {
@@ -11,7 +13,7 @@ export interface DeclarationValidation {
readonly range?: { readonly start: number, readonly end: number }
}
-export const CSS_VALUE_CHECK = Object.freeze({ name: 'css-tree', version: cssTreeVersion, phase: 'css-value' as const, scope: 'expanded-declarations-and-known-math-grammar' as const })
+export const CSS_VALUE_CHECK = Object.freeze({ name: '@eslint/css-tree', version: cssTreeVersion, phase: 'css-value' as const, scope: 'expanded-declarations-and-known-math-grammar-and-static-types-v1' as const })
const units = new Set(Object.values((lexer as typeof lexer & { units: Record }).units).flat().map((unit) => unit.toLowerCase()))
const cache = new Map()
@@ -19,7 +21,13 @@ let knownKeywords: Set | undefined
function isKnownKeyword(name: string) {
if (!knownKeywords) {
knownKeywords = new Set()
- const grammar = lexer.dump() as { properties: Record, types: Record }
+ // The runtime accepts a boolean here; the bundled declaration incorrectly uses Syntax.
+ const grammar = (lexer as typeof lexer & {
+ dump(syntaxAsAst: boolean, pretty: boolean): {
+ properties: Record
+ types: Record
+ }
+ }).dump(false, false)
for (const syntax of [...Object.values(grammar.properties), ...Object.values(grammar.types)]) {
if (typeof syntax !== 'string') continue
definitionSyntax.walk(definitionSyntax.parse(syntax), node => {
@@ -76,9 +84,16 @@ function validateValue(property: string, value: string, atRule?: string): Master
unknownCapability = true
}
})
- const knownMatch = !(useDescriptor
- ? lexer.matchAtruleDescriptor(atRule!, property, ast)
- : lexer.matchProperty(property, ast)).error
+ const matches = (value: typeof ast) => !(useDescriptor
+ ? lexer.matchAtruleDescriptor(atRule!, property, value)
+ : lexer.matchProperty(property, value)).error
+ const math = validateMathTypes(ast, matches)
+ invalidMath ||= math.status === 'invalid'
+ unknownMath ||= math.status === 'unknown'
+ const knownMatch = matches(math.ast)
+ // A proven result type in an otherwise known property grammar is a definite
+ // mismatch. Unknown surrounding functions or keywords remain unknown.
+ if (math.status === 'valid' && !knownMatch && !unresolved && !unknownCapability) invalidMath = true
status = invalidRepeat || invalidMath ? 'invalid' : dependent || unknownMath || unknownCapability ? 'unknown' : knownMatch ? 'valid' : unresolved ? 'unknown' : 'invalid'
} catch {
status = 'invalid'
@@ -96,6 +111,7 @@ export function validateRuleDeclarations(text: string): DeclarationValidation[]
walk(ast, {
visit: 'Declaration',
enter(node) {
+ if (node.type !== 'Declaration') return
const value = generate(node.value)
const atRule = this.atrule && !this.rule ? this.atrule.name.toLowerCase() : undefined
declarations.push({ property: node.property, value, ...(atRule ? { atRule } : {}), status: validateValue(node.property, value, atRule), ...(node.loc ? { range: { start: node.loc.start.offset, end: node.loc.end.offset } } : {}) })
diff --git a/packages/tooling/tests/language/bug-hunt.test.ts b/packages/tooling/tests/language/bug-hunt.test.ts
index 3c670cb1e..912e7b9e1 100644
--- a/packages/tooling/tests/language/bug-hunt.test.ts
+++ b/packages/tooling/tests/language/bug-hunt.test.ts
@@ -13,13 +13,13 @@ test('BH-0014 semantic tokens retain raw source offsets after escaped quotes', (
test('audit control: Unicode CRLF formatting preserves text and is idempotent', () => {
using session = createTestToolingSession()
- const source = '/* 😀 中 */\r\n.x { @compose block fg-red ! ; }\r\n'
+ const source = '/* 😀 中 */\r\n@safelist "block fg-red !";\r\n'
const edits = session.formatDirectives({ source }).edits
let formatted = source
for (const edit of [...edits].reverse()) {
formatted = formatted.slice(0, edit.range.start) + edit.text + formatted.slice(edit.range.end)
}
- expect(formatted).toBe('/* 😀 中 */\r\n.x { @compose block fg-red!; }\r\n')
+ expect(formatted).toBe('/* 😀 中 */\r\n@safelist "block fg-red!";\r\n')
expect(session.formatDirectives({ source: formatted }).edits).toEqual([])
expect(() => session.analyzeDocument({
source: '😀', languageId: 'text', hostRanges: [{ start: 1, end: 2, unescape: [] }]
diff --git a/packages/tooling/tests/language/create-language-session.test.ts b/packages/tooling/tests/language/create-language-session.test.ts
index 67d09d737..72954fe0e 100644
--- a/packages/tooling/tests/language/create-language-session.test.ts
+++ b/packages/tooling/tests/language/create-language-session.test.ts
@@ -40,8 +40,8 @@ for (const [name, create] of Object.entries(factories)) {
const classes = ['block', 'display:flex', 'unknown']
expect(session.classifyClassNames(classes)).toEqual(full.classifyClassNames(classes))
expect(session.inspectClassName('block')).toEqual(full.inspectClassName('block'))
- expect(session.formatDirectives({ source: '@utilities { box { @compose block; } }' })).toEqual(
- full.formatDirectives({ source: '@utilities { box { @compose block; } }' })
+ expect(session.formatDirectives({ source: "@utilities { box { display:block; } }" })).toEqual(
+ full.formatDirectives({ source: "@utilities { box { display:block; } }" })
)
} finally {
session.dispose()
diff --git a/packages/tooling/tests/language/format-directives.test.ts b/packages/tooling/tests/language/format-directives.test.ts
index b625b9a93..58659e288 100644
--- a/packages/tooling/tests/language/format-directives.test.ts
+++ b/packages/tooling/tests/language/format-directives.test.ts
@@ -30,41 +30,19 @@ function format(source: string, range?: { start: number, end: number }) {
}
}
-function formatMasterCSSClassList(classList: string) {
- const prefix = '@compose '
- const formatted = format(`${prefix}${classList};`)
- return formatted.slice(prefix.length, -1)
-}
-
-test.concurrent('repairs detached important suffixes in class lists', () => {
- expect(formatMasterCSSClassList(' background-color:transparent ! fg-red !@sm block!:hover ')).toBe('background-color:transparent! fg-red!@sm block!:hover')
-})
-
-test('formats @compose class-list preludes', () => {
- expect(format('.btn { @compose background-color:transparent ! fg-red !@sm ; }'))
- .toBe('.btn { @compose background-color:transparent! fg-red!@sm; }')
-})
-
-test('leaves quoted and grouped @compose syntax unchanged', () => {
- expect(format('.btn { @compose "background-color:transparent !"; }')).toBe('.btn { @compose "background-color:transparent !"; }')
- expect(format('.btn { @compose { background-color:transparent ! }; }')).toBe('.btn { @compose { background-color:transparent ! }; }')
+test('formats safelist class lists and repairs detached important suffixes', () => {
+ expect(format('@safelist "background-color:transparent ! fg-red !@sm";'))
+ .toBe('@safelist "background-color:transparent! fg-red!@sm";')
})
-test('formats @safelist quoted class lists while preserving quote style', () => {
- expect(format('@safelist \'background-color:transparent ! fg-red !@sm\' ;\n@safelist "block bg-blue !";'))
- .toBe('@safelist \'background-color:transparent! fg-red!@sm\';\n@safelist "block bg-blue!";')
+test('leaves removed compose directives unchanged', () => {
+ for (const source of ['.btn { @compose block fg-red !; }', '.btn { @compose "block"; }', '.btn { @compose {block}; }']) {
+ expect(format(source)).toBe(source)
+ }
})
-test('leaves internal styles dogfood directives unchanged', () => {
- const source = [
- '@utilities {',
- ' monaco-editor {',
- ' @compose --vscode-editor-background:transparent! bg-blue filter:drop-shadow(0|2px|2px|rgba(0,0,0,.2px));',
- ' }',
- '}'
- ].join('\n')
-
- expect(format(source)).toBe(source)
+test('preserves safelist quote style', () => {
+ expect(format("@safelist 'block bg-blue !' ;")).toBe("@safelist 'block bg-blue!';")
})
test('normalizes directive spacing without changing block contents', () => {
@@ -73,13 +51,12 @@ test('normalizes directive spacing without changing block contents', () => {
})
test('ignores directives inside comments and strings', () => {
- expect(format('/* @compose bg-red !; */\n.x::before { content: "@compose bg-red !;"; @compose bg-blue !; }'))
- .toBe('/* @compose bg-red !; */\n.x::before { content: "@compose bg-red !;"; @compose bg-blue!; }')
+ const source = '/* @compose block !; */ .x { content: "@compose block !;"; }'
+ expect(format(source)).toBe(source)
})
test('can limit edits to a source range', () => {
- const source = '.a { @compose bg-red !; }\n.b { @compose bg-blue !; }'
- const start = source.indexOf('@compose bg-blue')
- const result = format(source, { start, end: source.length })
- expect(result).toBe('.a { @compose bg-red !; }\n.b { @compose bg-blue!; }')
+ const source = '@safelist "bg-red !";\n@safelist "bg-blue !";'
+ const start = source.indexOf('@safelist "bg-blue')
+ expect(format(source, { start, end: source.length })).toBe('@safelist "bg-red !";\n@safelist "bg-blue!";')
})
diff --git a/packages/tooling/tests/language/rust-language.test.ts b/packages/tooling/tests/language/rust-language.test.ts
index d93bc0077..835232a89 100644
--- a/packages/tooling/tests/language/rust-language.test.ts
+++ b/packages/tooling/tests/language/rust-language.test.ts
@@ -27,7 +27,7 @@ describe('Rust language session', () => {
expect(script.classPositions.map(({ token }) => token)).toEqual(['block', 'fg-red'])
const css = session.analyzeDocument({
- source: '.x { @compose block fg-red; }',
+ source: '@safelist "block fg-red";',
languageId: 'css'
})
expect(css.classPositions.map(({ token }) => token)).toEqual(['block', 'fg-red'])
diff --git a/packages/tooling/tests/lint/rc87-compat.ts b/packages/tooling/tests/lint/rc87-compat.ts
index 08e12c247..f1ffdd7b0 100644
--- a/packages/tooling/tests/lint/rc87-compat.ts
+++ b/packages/tooling/tests/lint/rc87-compat.ts
@@ -280,15 +280,6 @@ export function suggestCanonicalClassGroups(
return [...sessionFrom(css, names).canonicalClassGroups(names, options)]
}
-export function suggestCanonicalComposeDirective(
- classList: string,
- css: CSSCompat,
- options = defaultCanonicalClassNameOptions
-) {
- const session = sessionFrom(css)
- return session.canonicalComposeDirective(classNames(classList, session), options)
-}
-
function report(
classList: string,
css: CSSCompat,
@@ -300,7 +291,6 @@ function report(
disallowUnknownClass: Boolean(options.disallowUnknownClass),
rawValuePolicy: options.rawValuePolicy as never,
canonicalOptions: options.canonicalOptions as never,
- composeDirective: Boolean(options.composeDirective)
})
return {
diagnostics: analysis.diagnostics.map((diagnostic) => ({
@@ -343,18 +333,6 @@ export function createCanonicalClassesReport(
}), 'prefer-canonical-classes')
}
-export function createCanonicalComposeDirectiveReport(
- classList: string,
- css: CSSCompat,
- options: Record = {}
-) {
- return only(report(classList, css, {
- ...options,
- canonicalOptions: options,
- composeDirective: true
- }), 'prefer-canonical-classes')
-}
-
export function createClassListLintReport(
classList: string,
css: CSSCompat,
diff --git a/packages/tooling/tests/lint/rc87-index.test.ts b/packages/tooling/tests/lint/rc87-index.test.ts
index 8cc72d567..82d553c47 100644
--- a/packages/tooling/tests/lint/rc87-index.test.ts
+++ b/packages/tooling/tests/lint/rc87-index.test.ts
@@ -4,7 +4,6 @@ import {
createCSSWithNativeDeclarations,
defaultCanonicalClassNameOptions,
defaultClassLintSettings,
- createCanonicalComposeDirectiveReport,
createCanonicalClassesReport,
createClassListLintReport,
createConflictingClassesReport,
@@ -22,7 +21,6 @@ import {
resolveMasterCSSLintRules,
summarizeMasterCSSLintFiles,
suggestCanonicalClassGroups,
- suggestCanonicalComposeDirective,
sortClassList,
sortClassNames,
suggestCanonicalClassName
@@ -264,30 +262,6 @@ describe('lint diagnostics', () => {
}).diagnostics.map(({ code }) => code))
.toContain('unapproved-raw-value')
})
-
- test('reports structural compose fixes with directive scope', () => {
- const report = createCanonicalComposeDirectiveReport('contain:content bg-blue-60:hover@sm', css)
- expect(report.diagnostics).toContainEqual(expect.objectContaining({
- ruleId: 'prefer-canonical-classes',
- code: 'prefer-native-declaration',
- data: expect.objectContaining({
- actual: 'contain:content',
- recommended: 'contain: content'
- }),
- fix: expect.objectContaining({
- scope: 'directive',
- text: expect.stringContaining('contain: content;')
- })
- }))
- expect(report.diagnostics).toContainEqual(expect.objectContaining({
- code: 'prefer-native-declaration',
- message: 'Use CSS declaration `contain: content` instead of class `contain:content`.'
- }))
- expect(report.diagnostics).toContainEqual(expect.objectContaining({
- code: 'prefer-variant-block',
- message: 'Move class `bg-blue-60:hover@sm` into the canonical @compose block.'
- }))
- })
})
describe('source content linting', () => {
@@ -392,10 +366,10 @@ describe('source content linting', () => {
test('applies source fixes until class lists are stable', () => {
expect(fixMasterCSSContent({
- content: '
',
+ content: '
',
filePath: '/project/index.html',
css
- })).toBe('
')
+ })).toBe('
')
})
test('uses script language ids for cjs and typescript module files', () => {
@@ -415,32 +389,12 @@ describe('source content linting', () => {
})
})
- test('reports and applies structural compose directive fixes when allowed', () => {
+ test('leaves removed compose statements to compiler diagnostics', () => {
const content = '.btn { @compose contain:content; }'
- const result = lintMasterCSSContent({
- content,
- filePath: '/project/index.css',
- css
- })
-
- expect(result.sourceKind).toBe('stylesheet')
- expect(result.diagnostics).toContainEqual(expect.objectContaining({
- code: 'prefer-native-declaration',
- sourceKind: 'compose-directive',
- fixes: [expect.objectContaining({ kind: 'directive', safety: 'structural' })]
- }))
- expect(fixMasterCSSContent({
- content,
- filePath: '/project/index.css',
- css
- })).toBe(content)
- expect(fixMasterCSSContent({
- content,
- filePath: '/project/index.css',
- css,
- includeDirectiveFixes: true
- })).toBe('.btn { contain: content; }')
+ expect(lintMasterCSSContent({ content, filePath: '/project/index.css', css }).diagnostics).toEqual([])
+ expect(fixMasterCSSContent({ content, filePath: '/project/index.css', css })).toBe(content)
})
+
})
describe('class conflicts', () => {
@@ -754,92 +708,6 @@ describe('canonical class group suggestions', () => {
})
})
-describe('canonical compose directive suggestions', () => {
- test('keeps canonical utilities and extracts native declarations', () => {
- expect(suggestCanonicalComposeDirective('text-align:center contain:content', css)).toEqual({
- suggestions: [
- {
- actual: 'text-align:center',
- recommended: 'text-align: center',
- classNames: ['text-align:center'],
- kind: 'native-declaration'
- },
- {
- actual: 'contain:content',
- recommended: 'contain: content',
- classNames: ['contain:content'],
- kind: 'native-declaration'
- }
- ],
- structuralChange: true,
- replacement: 'text-align: center;\ncontain: content;'
- })
- })
-
- test('extracts variant suffixes into variant blocks', () => {
- expect(suggestCanonicalComposeDirective('bg-blue-60:hover@sm block@dark', css)).toEqual({
- suggestions: [
- {
- actual: 'bg-blue-60:hover@sm',
- recommended: '&:hover { @variant sm { @compose bg-blue-60; } }',
- classNames: ['bg-blue-60:hover@sm'],
- kind: 'variant-block'
- },
- {
- actual: 'block@dark',
- recommended: '@dark { @compose block; }',
- classNames: ['block@dark'],
- kind: 'variant-block'
- }
- ],
- structuralChange: true,
- replacement: '&:hover { @variant sm { @compose bg-blue-60; } }\n@dark { @compose block; }'
- })
- })
-
- test('extracts important native declarations', () => {
- expect(suggestCanonicalComposeDirective('contain:content!', css)).toEqual({
- suggestions: [
- {
- actual: 'contain:content!',
- recommended: 'contain: content !important',
- classNames: ['contain:content!'],
- kind: 'native-declaration'
- }
- ],
- structuralChange: true,
- replacement: 'contain: content !important;'
- })
- })
-
- test('does not extract token-backed, semantic, or alias classes as native declarations', () => {
- expect(suggestCanonicalComposeDirective('font-md block w:10px', css, {
- ...defaultCanonicalClassNameOptions,
- preferStaticUtilities: false,
- preferPropertyAliases: false
- })).toBeUndefined()
- })
-
- test('reports duplicate native declarations without autofix', () => {
- expect(suggestCanonicalComposeDirective('contain:content contain:none', css)).toEqual({
- suggestions: [
- {
- actual: 'contain:content',
- recommended: 'contain: content',
- classNames: ['contain:content'],
- kind: 'native-declaration'
- },
- {
- actual: 'contain:none',
- recommended: 'contain: none',
- classNames: ['contain:none'],
- kind: 'native-declaration'
- }
- ],
- structuralChange: true
- })
- })
-})
test('exports default lint target settings', () => {
expect(defaultClassLintSettings.classAttributes).toEqual(['class', 'className'])
diff --git a/packages/tooling/tests/math-types.test.ts b/packages/tooling/tests/math-types.test.ts
new file mode 100644
index 000000000..2080e04e2
--- /dev/null
+++ b/packages/tooling/tests/math-types.test.ts
@@ -0,0 +1,40 @@
+import { expect, it } from 'vitest'
+import { cssValueStatus, validateRuleDeclarations } from '../src/value-validation'
+
+it.each([
+ ['width', 'calc(1px + 1s)', 'invalid'],
+ ['width', 'calc(1px * 1px)', 'invalid'],
+ ['width', 'calc(1px / 1px)', 'invalid'],
+ ['width', 'calc(1px * 1px / 1px)', 'valid'],
+ ['width', 'calc(calc(1px * 1px) / 1px)', 'valid'],
+ ['width', 'calc((1px + 2rem) / 2)', 'valid'],
+ ['width', 'calc(1px + 10%)', 'valid'],
+ ['border-width', 'calc(1px + 10%)', 'invalid'],
+ ['width', 'min(1px, 2s)', 'invalid'],
+ ['width', 'clamp(1px, 2rem, 10vw)', 'valid'],
+ ['width', 'round(1px)', 'invalid'],
+ ['width', 'round(up, 1px, 2px)', 'valid'],
+ ['width', 'calc(1px * sin(30deg))', 'valid'],
+ ['opacity', 'sin(1px)', 'invalid'],
+ ['opacity', 'sin(10%)', 'invalid'],
+ ['opacity', 'calc(.5 + 10%)', 'unknown'],
+ ['rotate', 'atan2(1px, 2rem)', 'valid'],
+ ['rotate', 'atan2(1px, 2s)', 'invalid'],
+ ['width', 'calc(var(--x) + 1px)', 'unknown'],
+ ['width', 'calc(var(--x) + (1px + 1s))', 'invalid'],
+ ['width', 'calc(var(--x) + 1px + 1s)', 'invalid'],
+ ['width', 'calc(1px + future(2))', 'unknown'],
+ ['width', 'future(calc(1px))', 'unknown'],
+ ['width', 'calc(1px + 2future)', 'unknown'],
+ ['width', 'calc(1px +)', 'invalid'],
+ ['future-property', 'calc(1px + 10%)', 'unknown'],
+ ['future-property', 'calc(1px + 1s)', 'invalid'],
+ ['transform', 'translateX(calc(1px + 10%))', 'valid'],
+ ['--arbitrary', 'calc(1px + 1s)', 'unknown']
+])('%s:%s reports %s without computing values', (property, value, expected) => {
+ expect(cssValueStatus(property, value)).toBe(expected)
+})
+
+it('checks property context without applying ordinary grammars to descriptors', () => {
+ expect(validateRuleDeclarations('@page{size:calc(1cm + 1cm)}').map(value => value.status)).toEqual(['valid'])
+})
diff --git a/packages/tooling/tests/removed-utilities.test.ts b/packages/tooling/tests/removed-utilities.test.ts
new file mode 100644
index 000000000..5bcf8a47a
--- /dev/null
+++ b/packages/tooling/tests/removed-utilities.test.ts
@@ -0,0 +1,42 @@
+import { expect, test } from 'vitest'
+import { createToolingSessionSync } from '../src/node'
+import type { MasterCSSManifest } from '@master/css-schema/manifest'
+import preset from '@master/css-preset/default-manifest.json' with { type: 'json' }
+
+test('validator and editor report removed builtins without changing generation', () => {
+ const session = createToolingSessionSync({ manifest: preset as unknown as MasterCSSManifest })
+ try {
+ const value = session.validateClassNames(['size:20px']).classes[0]
+ const hover = session.inspectClassName('size:20px')
+ expect(value.rules[0].text).toContain('{size:20px}')
+ for (const result of [value, hover]) expect(result.diagnostics).toContainEqual(expect.objectContaining({ code: 'REMOVED_PRESET_UTILITY', severity: 'info' }))
+ expect(session.completionIndex().classEntries.some(entry => ['size:', 'size-sm', 'min-size:', 'max-size:'].includes(entry.label))).toBe(false)
+ } finally { session.dispose() }
+})
+
+test.each([{ rules: [] }, { rules: [{ declarations: { width: null, height: null } }] }])('custom size definitions including empty ones have no removed-builtin hint', ({ rules }) => {
+ const manifest = { ...preset, utilities: [...preset.utilities, { id: 'project-size', type: -1, emit: { type: 'static', rules }, matchers: [{ type: 'key', keys: ['size'] }] }] } as unknown as MasterCSSManifest
+ const session = createToolingSessionSync({ manifest })
+ try {
+ expect(session.validateClassNames(['size:20px']).classes[0].diagnostics?.some(d => d.code === 'REMOVED_PRESET_UTILITY')).toBe(false)
+ expect(session.inspectClassName('size:20px').diagnostics?.some(d => d.code === 'REMOVED_PRESET_UTILITY')).toBe(false)
+ expect(session.completionIndex().classEntries.some(entry => entry.label === 'size:')).toBe(true)
+ } finally { session.dispose() }
+})
+
+
+test('explicit native registrations suppress advice without changing engine results', async () => {
+ const { createToolingSession } = await import('../src/tooling-session')
+ for (const session of [
+ createToolingSessionSync({ manifest: preset as unknown as MasterCSSManifest, nativeClassNames: ['size:20px'] }),
+ await createToolingSession({ manifest: preset as unknown as MasterCSSManifest, nativeClassNames: ['size:20px'] })
+ ]) {
+ try {
+ for (const result of [session.validateClassNames(['size:20px']).classes[0], session.inspectClassName('size:20px')]) {
+ expect(result.diagnostics?.some(d => d.code === 'REMOVED_PRESET_UTILITY')).toBe(false)
+ expect(result.rules[0].text).toContain('{size:20px}')
+ }
+ expect(session.inspectClassName('size:30px').diagnostics?.some(d => d.code === 'REMOVED_PRESET_UTILITY')).toBe(true)
+ } finally { session.dispose() }
+ }
+})
diff --git a/packages/tooling/tests/source/rc87-adapters.test.ts b/packages/tooling/tests/source/rc87-adapters.test.ts
index 513745f87..b2c1638cc 100644
--- a/packages/tooling/tests/source/rc87-adapters.test.ts
+++ b/packages/tooling/tests/source/rc87-adapters.test.ts
@@ -96,6 +96,20 @@ describe('source adapters', () => {
])
})
+ test('parses TypeScript in Svelte scripts and class expressions without treating it as JavaScript', async () => {
+ await expect(extractSvelteClasses('Typed.svelte', `
+
+
+ Save
+ `)).resolves.toEqual(['fg-red', 'p:1rem', 'block', 'hidden', 'active'])
+ })
+
test('extracts frontmatter, script, and markup classes from Astro files while ignoring styles', () => {
expect(extractAstroClasses('Page.astro', `---
const frontmatterClasses = 'fg-red'
diff --git a/packages/tooling/tests/validator/css.test.ts b/packages/tooling/tests/validator/css.test.ts
index ab116ce83..618d97f52 100644
--- a/packages/tooling/tests/validator/css.test.ts
+++ b/packages/tooling/tests/validator/css.test.ts
@@ -12,3 +12,8 @@ it('min fn', () => {
it('max fn with calc for right property', () => {
expect(validateCSS('.foo { right: max(0px, calc(50% - 45.3125rem)) }')).toEqual([])
})
+
+it('does not reject values whose var() or env() substitution is unknown', () => {
+ expect(validateCSS('.foo { color: var(--accent); padding: env(safe-area-inset-top) }')).toEqual([])
+ expect(validateCSS('.foo { padding: red }')).not.toEqual([])
+})
diff --git a/packages/tooling/tests/validator/rc87-validator.test.ts b/packages/tooling/tests/validator/rc87-validator.test.ts
index d35665df8..b693e39eb 100644
--- a/packages/tooling/tests/validator/rc87-validator.test.ts
+++ b/packages/tooling/tests/validator/rc87-validator.test.ts
@@ -61,7 +61,7 @@ it('create rules by class', () => {
expect(generateValidRules('text:cente')).toHaveLength(0)
})
-it('validates native CSS declarations through css-tree fallback', () => {
+it('validates native CSS declarations through @eslint/css-tree', () => {
expect(generateValidRules('float:left')[0]?.text).toBe('.float\\:left{float:left}')
expect(generateValidRules('display:block')[0]?.text).toBe('.display\\:block{display:block}')
expect(generateValidRules('field-sizing:content')[0]?.text).toBe('.field-sizing\\:content{field-sizing:content}')
diff --git a/packages/tooling/tests/validator/test.ts b/packages/tooling/tests/validator/test.ts
index bde49ae45..83e987384 100644
--- a/packages/tooling/tests/validator/test.ts
+++ b/packages/tooling/tests/validator/test.ts
@@ -51,7 +51,9 @@ it('preserves native declarations while reporting invalid CSS values', () => {
'view-transition-name:hero',
'--foo:123',
'float:16px',
- 'display:16px'
+ 'display:16px',
+ 'float:banana',
+ 'display:banana'
])
expect(result.classes[0].rules[0]?.text).toBe('.float\\:left{float:left}')
expect(result.classes[1].rules[0]?.text)
@@ -59,6 +61,12 @@ it('preserves native declarations while reporting invalid CSS values', () => {
expect(result.classes[2].rules[0]?.text).toContain('{--foo:123}')
expect(result.classes[3].cssValueStatus).toBe('invalid')
expect(result.classes[4].cssValueStatus).toBe('invalid')
+ expect(result.classes[3].rules[0]?.text).toBe('.float\\:16px{float:16px}')
+ expect(result.classes[4].rules[0]?.text).toBe('.display\\:16px{display:16px}')
+ expect(result.classes[5].cssValueStatus).toBe('unknown')
+ expect(result.classes[6].cssValueStatus).toBe('unknown')
+ expect(result.classes[5].rules[0]?.text).toBe('.float\\:banana{float:banana}')
+ expect(result.classes[6].rules[0]?.text).toBe('.display\\:banana{display:banana}')
} finally {
validator.dispose()
}
diff --git a/packages/tooling/tests/value-validation.test.ts b/packages/tooling/tests/value-validation.test.ts
index 36901399e..976f86385 100644
--- a/packages/tooling/tests/value-validation.test.ts
+++ b/packages/tooling/tests/value-validation.test.ts
@@ -13,7 +13,9 @@ describe('CSS validation reports knowledge without changing declarations', () =>
['grid-template-columns', 'repeat(foo,minmax(0,1fr))', 'invalid'],
['grid-template-columns', 'repeat(3,minmax(0,1fr))', 'valid'],
['color', 'red', 'valid'],
+ ['view-transition-scope', 'all', 'valid'],
['padding', 'var(--spacing)', 'unknown'],
+ ['padding', 'env(safe-area-inset-top)', 'unknown'],
['width', '--space(2)', 'unknown'],
['width', '2future', 'unknown'],
['future-property', 'future-value', 'unknown'],
@@ -36,6 +38,16 @@ describe('CSS validation reports knowledge without changing declarations', () =>
expect(validateRuleDeclarations('@font-face{font-weight:red;future-descriptor:future(1)}').map(d => d.status)).toEqual(['invalid', 'unknown'])
})
+ it('uses the current CSS grammar without changing generated declarations', () => {
+ const rules = [{ text: '.a{view-transition-scope:all;padding:var(--space)}' }]
+ const result = withCSSValueValidation({ className: 'a', rules })
+ expect(result.rules).toBe(rules)
+ expect(result.declarations.map(declaration => declaration.status)).toEqual(['valid', 'unknown'])
+ expect(result.checks.map(check => check.name)).toEqual(['@eslint/css-tree', '@eslint/css-tree'])
+ expect(result.browserSupport).toBe('not-checked')
+ expect(cssSyntaxStatus('@supports font-tech(color-COLRv1){.a{display:block}}')).toBe('valid')
+ })
+
it('checks every declaration in managed and conditional rules', () => {
const rules = [{ text: '@media (width>1px){.grid{display:grid;grid-template-columns:repeat(2.5,minmax(0,1fr))}}' }]
const result = withCSSValueValidation({ className: 'grid-cols:2.5', rules })
diff --git a/packages/vite/README.md b/packages/vite/README.md
index 4e54ecd96..0c7ec9157 100644
--- a/packages/vite/README.md
+++ b/packages/vite/README.md
@@ -177,13 +177,13 @@ the default pruning policy keeps their rules.
Production build-watch tracks resolved CSS Modules `composes` dependencies,
including nested compositions. Editing a composed file rebuilds its consumers;
-correcting an invalid Master CSS composition in that file recovers the build.
+correcting an invalid Master CSS directive in that file recovers the build.
When Vite provides no original location for composed CSS, diagnostics explicitly
identify the preprocessed location.
Development CSS and Sass modules retain their scoped exports and native rules.
Editing the module or a resolved `composes` dependency updates both its CSS and
-exports through HMR, including modules that use local `@compose`.
+exports through HMR, including modules that use local `@variant`.
During development, editing a CSS project entry updates ordinary stylesheet
imports and its `?inline` and `?raw` consumers. Inline requests export processed
@@ -244,7 +244,7 @@ context's resource copies. Connected pages reload and reconnect to new asset URL
subsequent child CSS and image edits update without another page reload.
Local stylesheets compile imported local rules and retain qualified child imports
and resources in development and production builds. This also applies when the
-root and intermediate stylesheets contain only native CSS, and `@compose` appears
+root and intermediate stylesheets contain only native CSS, and `@variant` appears
only in an imported descendant. These graphs remain local stylesheets rather than
becoming project entries or native CSS pruning roots.
CSS Modules keep the root module's scoped exports; SSR inline requests return
@@ -257,7 +257,7 @@ asynchronous entry registration order.
Local CSS and Sass imported through `?url` deliver their compiled stylesheet
and retained child assets. When that URL is attached as a stylesheet link,
editing a retained CSS child or its image updates the styles without reloading
-the page, including when only an imported descendant contains `@compose`.
+the page, including when only an imported descendant contains `@variant`.
CSS Modules that import local CSS files expose the imported classes through the
root module's exports, with the same scope as its own classes. Imports retain their
conditions and layers, and relative resources keep their original file's directory.
@@ -277,7 +277,7 @@ Stylesheet URLs emitted for CSS Modules also support direct CSS requests through
policy, including allowed directories and denied files. A supplied map that cannot identify an
original filesystem source produces an error.
-During development, local CSS and Sass compositions retain their attempted CSS
+During development, local CSS and Sass variants retain their attempted CSS
reference dependencies after a compilation error. Creating a missing reference
retries its consumers; a failed initial page load reloads after compilation succeeds.
Deleting and restoring a reference after a successful load updates the stylesheet
diff --git a/packages/vite/playground/src/project.css b/packages/vite/playground/src/project.css
index db21416d9..58ff3dd00 100644
--- a/packages/vite/playground/src/project.css
+++ b/packages/vite/playground/src/project.css
@@ -34,23 +34,23 @@
/* Components */
@layer components {
.page {
- @compose grid items-center justify-center min-h:100vh p:1.25rem bg-panel fg-ink;
+ @layer components{display:grid;align-items:center;justify-content:center;padding:1.25rem;background-color:var(--color-panel);color:var(--color-ink);min-height:100vh;}
font-family: Inter, ui-sans-serif, system-ui, sans-serif;
}
.card {
- @compose grid gap:1rem p-card surface-raised r-card max-w:42rem content-auto;
+ @layer components{content-visibility:auto;contain-intrinsic-size:auto 28rem;display:grid;border-radius:var(--radius-card);padding:var(--spacing-card);gap:1rem;background-color:var(--color-surface-raised);max-width:42rem;}
@variant motion-safe {
- @compose animation:demo-fade-in|.55s;
+ @layer components{@media (prefers-reduced-motion:no-preference){animation:demo-fade-in .55s;}}
}
border: 1px solid var(--color-ring);
box-shadow: 0 22px 70px rgb(17 24 39 / 12%);
}
.live-label {
- @compose inline-flex items-center justify-center h:1.5rem px:.75rem bg-primary r-pill font-size:.75rem font-semibold;
+ @layer components{display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-pill);padding-inline:.75rem;background-color:var(--color-primary);font-weight:var(--font-weight-semibold);font-size:.75rem;height:1.5rem;}
@variant motion-safe {
- @compose animation:demo-pulse|1.4s|infinite;
+ @layer components{@media (prefers-reduced-motion:no-preference){animation:demo-pulse 1.4s infinite;}}
}
color: white;
justify-self: start;
@@ -59,19 +59,19 @@
}
.title {
- @compose m:0 font-size:2.5rem leading:1 fg-ink;
+ @layer components{margin:0;color:var(--color-ink);font-size:2.5rem;line-height:1;}
@variant md {
- @compose font:3.5rem;
+ @layer components{@media (width>=48rem){font:3.5rem;}}
}
max-width: 12ch;
}
.desc {
- @compose m:0 font-size:1.125rem leading:1.7 fg-muted max-w:34rem;
+ @layer components{margin:0;color:var(--color-muted);font-size:1.125rem;line-height:1.7;max-width:34rem;}
}
.btn {
- @compose inline-flex items-center justify-center h:2.75rem px:1rem bg-primary r-pill font-semibold;
+ @layer components{display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-pill);padding-inline:1rem;background-color:var(--color-primary);font-weight:var(--font-weight-semibold);height:2.75rem;}
border: 0;
box-shadow: 0 14px 28px rgb(17 34 51 / 18%);
color: white;
diff --git a/packages/vite/src/core.ts b/packages/vite/src/core.ts
index e8929b006..302d30e45 100644
--- a/packages/vite/src/core.ts
+++ b/packages/vite/src/core.ts
@@ -8,7 +8,7 @@ import EmittedGlobalsVirtualModulePlugin from './plugins/emitted-globals-virtual
import ContextPlugin from './plugins/context'
import ScannerPlugin from './plugins/scanner'
import UsageGraphPlugin from './plugins/usage-graph'
-import LocalComposePlugin from './plugins/local-compose'
+import LocalStylesPlugin from './plugins/local-styles'
import StylesheetRecoveryPlugin from './plugins/stylesheet-recovery'
import BuildStylesheetRecoveryPlugin from './plugins/build-stylesheet-recovery'
import SassSourcePlugin from './plugins/sass-source'
@@ -63,7 +63,7 @@ function createPlugins(options: ResolvedMasterCSSVitePluginOptions): Plugin[] {
StylesheetRecoveryPlugin(context),
BuildStylesheetRecoveryPlugin(context),
SassSourcePlugin(context),
- LocalComposePlugin(options, context),
+ LocalStylesPlugin(options, context),
StyleEntryPlugin(options, context),
StyleEntryHMRPlugin(options, context),
InlineStylesheetPlugin(context),
diff --git a/packages/vite/src/plugins/dev-stylesheet.ts b/packages/vite/src/plugins/dev-stylesheet.ts
index fda161338..4f0da7b17 100644
--- a/packages/vite/src/plugins/dev-stylesheet.ts
+++ b/packages/vite/src/plugins/dev-stylesheet.ts
@@ -1,10 +1,12 @@
import type { Plugin } from 'vite'
+import { relative } from 'node:path'
import { isFileLoadingAllowed, normalizePath } from 'vite'
import MagicString from 'magic-string'
import type { MasterCSSVitePluginContext } from '../core'
import { clearDevStylesheets, devStylesheetState } from '../utils/dev-stylesheet-delivery'
import { releaseScannerEnvironment } from '../utils/scanner-context'
import { toAssetHref } from '../utils/html'
+import { normalizeFilePath } from '../utils/path'
export default function DevStylesheetPlugin(context: MasterCSSVitePluginContext): Plugin {
return {
@@ -25,16 +27,18 @@ export default function DevStylesheetPlugin(context: MasterCSSVitePluginContext)
}
const resource = state.resources.get(url.pathname)
if (resource) {
- if (!server.config.server.fs.allow.includes(resource.source)) server.config.server.fs.allow.push(resource.source)
- if (!isFileLoadingAllowed(server.config, normalizePath(resource.source))) {
+ const source = normalizeFilePath(resource.source)
+ if (!server.config.server.fs.allow.includes(source)) server.config.server.fs.allow.push(source)
+ if (!isFileLoadingAllowed(server.config, source)) {
response.statusCode = 403
response.end('Development resource access denied')
return
}
- const file = resource.file
+ const file = normalizePath(resource.file)
if (!server.config.server.fs.allow.includes(file)) server.config.server.fs.allow.push(file)
- const encodedPath = normalizePath(file).split('/').map(encodeURIComponent).join('/').replace(/^\//, '')
- request.url = toAssetHref('@fs/' + encodedPath, server.config.base) + url.search
+ const path = normalizePath(relative(normalizeFilePath(server.config.root), file))
+ const encodedPath = encodeURI(path).replace(/[?#]/g, encodeURIComponent)
+ request.url = toAssetHref(encodedPath, server.config.base) + url.search
next()
return
}
diff --git a/packages/vite/src/plugins/local-compose.ts b/packages/vite/src/plugins/local-styles.ts
similarity index 59%
rename from packages/vite/src/plugins/local-compose.ts
rename to packages/vite/src/plugins/local-styles.ts
index 3f6290c3b..87219d7a2 100644
--- a/packages/vite/src/plugins/local-compose.ts
+++ b/packages/vite/src/plugins/local-styles.ts
@@ -1,13 +1,12 @@
import { withStylesheetDependencies } from '../utils/failed-stylesheet-dependencies'
import { withSassDiagnostics } from '../utils/sass-diagnostics'
-import type { ModuleNode, Plugin, ViteDevServer } from 'vite'
+import type { Plugin } from 'vite'
import {
discoverManifestEntries,
loadProjectManifest
} from '@master/css-compiler/project'
import { defaultBuildManifest } from '@master/css-internal/project'
import {
- collectStylesheetEmittedGlobals,
transformStylesheet,
resolveStylesheet
} from '@master/css-compiler/stylesheet'
@@ -20,23 +19,16 @@ import { includesFile } from '../utils/path'
import { captureBuildStylesheetSource, clearBuildStylesheetSources, getBuildImportResolver } from '../utils/build-import-resolver'
import { getSassSourceFile, getPreparedSassSource, getPreparedSassSourceMap, isRawStyleRequest } from '../utils/build-sass-source'
-import { getDevStylesheetDelivery, publishDevStylesheets } from '../utils/dev-stylesheet-delivery'
+import { getDevStylesheetDelivery, publishDevGlobalStylesheet, publishDevStylesheets } from '../utils/dev-stylesheet-delivery'
import { getBuildStylesheetDelivery } from '../utils/build-stylesheet-delivery'
import { inlineDelivery, isInlineStylesheet, registerLocalInlineStylesheet } from '../utils/inline-stylesheet'
import { clearLocalStylesheets, registerLocalStylesheet } from '../utils/local-stylesheet'
-function invalidateModule(module: ModuleNode | undefined, server: ViteDevServer): boolean {
- if (!module) return false
- server.moduleGraph.invalidateModule(module)
- return true
-}
-
-export default function LocalComposePlugin(options: ResolvedMasterCSSVitePluginOptions, context: MasterCSSVitePluginContext): Plugin {
+export default function LocalStylesPlugin(options: ResolvedMasterCSSVitePluginOptions, context: MasterCSSVitePluginContext): Plugin {
let projectManifest: Awaited> | undefined
let projectManifestEntries: string[] = []
let projectManifestDependencies: string[] = []
- let styleEntryEmittedGlobals: Awaited> | undefined
- const localComposeModules = new Set()
+ const localStyleModules = new Set()
const addServerAllow = (paths: string[]) => {
const allow = context.config?.server.fs.allow
@@ -46,8 +38,11 @@ export default function LocalComposePlugin(options: ResolvedMasterCSSVitePluginO
}
}
- const loadComposeContext = async (pluginContext: { addWatchFile?: (id: string) => void }) => {
- if (projectManifest) return projectManifest
+ const loadStyleContext = async (pluginContext: { addWatchFile?: (id: string) => void }) => {
+ if (projectManifest) {
+ for (const dependency of projectManifestDependencies) pluginContext.addWatchFile?.(dependency)
+ return projectManifest
+ }
const root = context.config?.root
const entries = await discoverManifestEntries({ root })
projectManifestEntries = [...entries]
@@ -65,7 +60,8 @@ export default function LocalComposePlugin(options: ResolvedMasterCSSVitePluginO
projectManifest = await loadProjectManifest({
root,
entries,
- baseManifest: defaultBuildManifest
+ baseManifest: defaultBuildManifest,
+ onDependency: file => { dependencies.add(file); pluginContext.addWatchFile?.(file) }
})
for (const dependency of projectManifest.dependencies) {
if (dependencies.has(dependency)) continue
@@ -77,25 +73,8 @@ export default function LocalComposePlugin(options: ResolvedMasterCSSVitePluginO
return projectManifest
}
- const loadStyleEntryEmittedGlobals = async (pluginContext: { addWatchFile?: (id: string) => void }) => {
- const manifestResult = await loadComposeContext(pluginContext)
- if (styleEntryEmittedGlobals) return styleEntryEmittedGlobals
- const dependencies = new Set(projectManifestDependencies)
- styleEntryEmittedGlobals = await collectStylesheetEmittedGlobals(projectManifestEntries, {
- baseManifest: manifestResult.manifest,
- projectDir: context.config?.root
- })
- for (const dependency of styleEntryEmittedGlobals.dependencies) {
- dependencies.add(dependency)
- pluginContext.addWatchFile?.(dependency)
- }
- projectManifestDependencies = [...dependencies]
- addServerAllow(projectManifestDependencies)
- return styleEntryEmittedGlobals
- }
-
return {
- name: 'master-css:local-compose',
+ name: 'master-css:local-styles',
enforce: 'pre',
async buildStart() {
clearBuildStylesheetSources(context)
@@ -103,7 +82,6 @@ export default function LocalComposePlugin(options: ResolvedMasterCSSVitePluginO
projectManifest = undefined
projectManifestEntries = []
projectManifestDependencies = []
- styleEntryEmittedGlobals = undefined
},
async transform(code, id) {
return withStylesheetDependencies(context, this, id, onDependency => withSassDiagnostics(context, async () => {
@@ -117,32 +95,45 @@ export default function LocalComposePlugin(options: ResolvedMasterCSSVitePluginO
preserveImports: true,
resolveImport: getBuildImportResolver(context, dependencyHost),
onDependency
+ }).catch(error => {
+ onDependency(getSassSourceFile(id) ?? id.replace(/[?#].*$/, ''))
+ throw error
})
const prepared = getPreparedSassSource(context, id)
const moduleGraph = prepared && (await prepared.prepared).moduleSources
const nativeModuleGraph = resolution?.kind === 'plain' && Boolean(moduleGraph && moduleGraph.size > 1)
- if (resolution?.kind !== 'local' && !nativeModuleGraph) return sourceMeta ? { meta: sourceMeta } : undefined
+ if (resolution?.kind !== 'local' && resolution?.kind !== 'plain') return sourceMeta ? { meta: sourceMeta } : undefined
const dependencies = new Set(resolution.dependencies)
for (const dependency of dependencies) {
onDependency(dependency)
}
- const manifestResult = await loadComposeContext(dependencyHost)
- const emittedGlobalsResult = await loadStyleEntryEmittedGlobals(dependencyHost)
+ const manifestResult = await loadStyleContext(dependencyHost)
+ // Even a no-op depends on the context: adding a token can make it managed.
+ localStyleModules.add(id)
+ if (!projectManifestEntries.length && resolution.kind === 'plain' && !nativeModuleGraph) return sourceMeta ? { meta: sourceMeta } : undefined
+ const scopedVueStyle = id.includes('?vue&') && /(?:^|[?&])scoped(?:=|&|$)/u.test(id)
+ const compileOptions = {
+ baseManifest: manifestResult.manifest, projectDir: context.config?.root,
+ referenceFiles: projectManifestEntries, transformNativeStylesheets: true,
+ baseFile: getSassSourceFile(id), sourceMap: await getPreparedSassSourceMap(context, id), onDependency,
+ generatedGlobals: scopedVueStyle ? 'separate' as const : 'inline' as const
+ }
+ if (resolution.kind === 'plain' && !nativeModuleGraph) {
+ const probe = await transformStylesheet(id, code, compileOptions)
+ if (!probe.transformed) return sourceMeta ? { meta: sourceMeta } : undefined
+ }
const inline = context.config?.command === 'build' && isInlineStylesheet(id)
const delivery = inline ? inlineDelivery(context) : getBuildStylesheetDelivery(context) ?? getDevStylesheetDelivery(context)
const result = await transformStylesheet(id, code, {
- transformNativeStylesheets: nativeModuleGraph,
- baseManifest: manifestResult.manifest,
- projectDir: context.config?.root,
- emittedGlobals: emittedGlobalsResult.emittedGlobals,
+ ...compileOptions,
...(delivery ? { delivery: {
...delivery, baseFile: getSassSourceFile(id), sourceMap: await getPreparedSassSourceMap(context, id), resolveImport: getBuildImportResolver(context, dependencyHost),
onDependency
} } : {})
})
if (!result.transformed) return sourceMeta ? { meta: sourceMeta } : undefined
- localComposeModules.add(id)
+ localStyleModules.add(id)
for (const dependency of result.dependencies) {
if (dependencies.has(dependency)) continue
onDependency(dependency)
@@ -152,16 +143,18 @@ export default function LocalComposePlugin(options: ResolvedMasterCSSVitePluginO
else if (context.config?.command === 'build') {
// Vue scopes selectors after this transform. Keep native rules in
// that pipeline, while the generated theme rules remain global.
- const scopedVueStyle = id.includes('?vue&') && /(?:^|[?&])scoped(?:=|&|$)/u.test(id)
- if (scopedVueStyle && result.compilation && !result.stylesheets?.length) {
- const { nativeCSS, generatedCSS } = result.compilation
- if (generatedCSS) {
- const slot = registerLocalStylesheet(context, id, { ...result, code: generatedCSS })
+ if (scopedVueStyle && !result.stylesheets?.length) {
+ if (result.globalStylesheet) {
+ const slot = registerLocalStylesheet(context, id, { ...result, code: result.globalStylesheet.css, globalStylesheet: undefined })
+ const nativeCSS = result.code
output = `${nativeCSS}\n:global(${slot.slice(0, slot.indexOf('{'))})${slot.slice(slot.indexOf('{'))}`
- } else output = nativeCSS
+ } else output = result.code
} else output = registerLocalStylesheet(context, id, result)
}
- else if (context.config?.command === 'serve') output = publishDevStylesheets(context, { ...result, css: result.code, emittedGlobals: emittedGlobalsResult.emittedGlobals }, '#master-css-local-slot{--slot:0}')
+ else if (context.config?.command === 'serve') {
+ output = publishDevStylesheets(context, { ...result, css: result.code, emittedGlobals: { variables: {}, animations: {} } }, '#master-css-local-slot{--slot:0}')
+ if (result.globalStylesheet) output = publishDevGlobalStylesheet(context, result.globalStylesheet.css) + '\n' + output
+ }
return {
code: output,
map: null,
@@ -169,20 +162,26 @@ export default function LocalComposePlugin(options: ResolvedMasterCSSVitePluginO
}
}))
},
- async handleHotUpdate({ file, server }) {
- if (!includesFile(projectManifestDependencies, file)) return
+ async hotUpdate({ type, file, modules }) {
+ const entriesChanged = /\.(?:css|scss|sass)$/u.test(file)
+ && JSON.stringify(await discoverManifestEntries({ root: context.config?.root })) !== JSON.stringify(projectManifestEntries)
+ if (!includesFile(projectManifestDependencies, file) && !entriesChanged) return
projectManifest = undefined
- projectManifestEntries = []
- projectManifestDependencies = []
- styleEntryEmittedGlobals = undefined
- let handled = false
- for (const moduleId of localComposeModules) {
- const module = server.moduleGraph.getModuleById(moduleId)
- handled ||= Boolean(module)
- invalidateModule(module, server)
- if (module) await server.reloadModule(module)
+ const affected = new Set(modules)
+ for (const moduleId of localStyleModules) {
+ const module = this.environment.moduleGraph.getModuleById(moduleId)
+ if (!module) continue
+ this.environment.moduleGraph.invalidateModule(module)
+ affected.add(module)
+ }
+ // Svelte's HMR plugin tries to reload deleted CSS modules before it can
+ // update their dependent styles. A reload also clears orphaned CSS.
+ const hasSvelteStyle = [...affected].some(module => /\.svelte\?svelte&type=style(?:&|$)/u.test(module.id ?? ''))
+ if (type === 'delete' && entriesChanged && hasSvelteStyle) {
+ if (this.environment.name === 'client') this.environment.hot.send({ type: 'full-reload' })
+ return []
}
- if (handled) return []
+ return [...affected]
}
}
}
diff --git a/packages/vite/src/plugins/manifest-virtual-module.ts b/packages/vite/src/plugins/manifest-virtual-module.ts
index bbc254dc7..9a078f87e 100644
--- a/packages/vite/src/plugins/manifest-virtual-module.ts
+++ b/packages/vite/src/plugins/manifest-virtual-module.ts
@@ -1,4 +1,4 @@
-import type { Plugin } from 'vite'
+import { normalizePath, type Plugin } from 'vite'
import type { MasterCSSVitePluginContext } from '../core'
import { createMasterCSSManifestVirtualModulePlugin } from '@master/css-internal/manifest-virtual-module'
import { loadMasterCSSVirtualManifest } from '@master/css-internal/manifest-loader'
@@ -25,10 +25,14 @@ export default function ManifestVirtualModulePlugin(
context: MasterCSSVitePluginContext
): Plugin {
const plugin = createMasterCSSManifestVirtualModulePlugin(
- (options) => loadMasterCSSVirtualManifest({
- ...options,
- host: manifestHost
- }),
+ async (options) => {
+ const result = await loadMasterCSSVirtualManifest({
+ ...options,
+ onDependency: file => options.onDependency(normalizePath(file)),
+ host: manifestHost
+ })
+ return { ...result, dependencies: result.dependencies.map(normalizePath) }
+ },
context
)
type Host = DependencyHost & ThisParameterType
diff --git a/packages/vite/src/plugins/sass-source.ts b/packages/vite/src/plugins/sass-source.ts
index 850cceba0..4da30e62b 100644
--- a/packages/vite/src/plugins/sass-source.ts
+++ b/packages/vite/src/plugins/sass-source.ts
@@ -3,6 +3,7 @@ import { installSassProxyAccessCheck } from '../utils/sass-proxy-access'
import type { Plugin } from 'vite'
import type { MasterCSSVitePluginContext } from '../core'
import { getScanner } from '../utils/scanner-context'
+import { normalizeFilePath } from '../utils/path'
import { clearBuildSassSources, invalidatePreparedSassSources, getSassSourceFile, prepareBuildSassSource, sassSourceID, sassModuleID, isSassModuleID, isRawStyleRequest } from '../utils/build-sass-source'
/** Sass and CSS Modules enter the CSS pipeline after host preprocessing. */
@@ -37,8 +38,8 @@ export default function SassSourcePlugin(context: MasterCSSVitePluginContext): P
const registration: Promise = server.moduleGraph.getModuleByUrl(graphURL).then(module => {
const owner = module?.id && getSassSourceFile(module.id)
if (!owner) return
- let urls = serverStylesheetURLs.get(owner)
- if (!urls) { urls = new Set(); serverStylesheetURLs.set(owner, urls) }
+ let urls = serverStylesheetURLs.get(normalizeFilePath(owner))
+ if (!urls) { urls = new Set(); serverStylesheetURLs.set(normalizeFilePath(owner), urls) }
urls.add(servedPath)
}).catch(error => server.config.logger.warn(`[master-css] Could not track stylesheet URL ${servedPath}: ${String(error)}`))
.finally(() => { serverPendingURLs.delete(registration) })
@@ -58,14 +59,14 @@ export default function SassSourcePlugin(context: MasterCSSVitePluginContext): P
const pending = new Set(modules)
for (const module of pending) {
const owner = getSassSourceFile(module.id ?? '')
- if (owner) owners.add(owner)
+ if (owner) owners.add(normalizeFilePath(owner))
else for (const importer of module.importers) pending.add(importer)
}
if (!owners.size) return
const affected = new Set(modules)
for (const module of moduleGraph.idToModuleMap.values()) {
const owner = getSassSourceFile(module.id ?? '')
- if (!owner || !owners.has(owner)) continue
+ if (!owner || !owners.has(normalizeFilePath(owner))) continue
moduleGraph.invalidateModule(module)
affected.add(module)
}
diff --git a/packages/vite/src/utils/build-import-resolver.ts b/packages/vite/src/utils/build-import-resolver.ts
index 1c6e261c0..59d670042 100644
--- a/packages/vite/src/utils/build-import-resolver.ts
+++ b/packages/vite/src/utils/build-import-resolver.ts
@@ -3,6 +3,7 @@ import { isAbsolute } from 'node:path'
import { getSassSourceFile, getPreparedSassSource, getPreparedSassSourceMap, prepareBuildSassSource, sassSourceID } from './build-sass-source'
import type { MasterCSSStylesheetImportResolver } from '@master/css-compiler/stylesheet'
import type { MasterCSSVitePluginContext } from '../core'
+import { normalizeFilePath } from './path'
interface ImportResolverContext {
resolve?: (id: string, importer: string, options: { skipSelf: true }) => Promise<{ id: string, external?: boolean | string } | null>
@@ -52,7 +53,8 @@ export function getBuildImportResolver(context: MasterCSSVitePluginContext, plug
if (!result) return
if (result.external) return null
const sassFile = getSassSourceFile(result.id)
- const originalFile = sassFile ?? result.id.replace(/[?#].*$/, '')
+ const original = sassFile ?? result.id.replace(/[?#].*$/, '')
+ const originalFile = isAbsolute(original) ? normalizeFilePath(original) : original
const preparedOwner = owner && getPreparedSassSource(context, owner)
const scopedSource = preparedOwner && (await preparedOwner.prepared).moduleSources?.get(originalFile)
if (typeof scopedSource === 'string') {
diff --git a/packages/vite/src/utils/build-sass-source.ts b/packages/vite/src/utils/build-sass-source.ts
index 2db4d11f1..5bac90214 100644
--- a/packages/vite/src/utils/build-sass-source.ts
+++ b/packages/vite/src/utils/build-sass-source.ts
@@ -1,11 +1,12 @@
import { readFileSync } from 'node:fs'
-import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'
+import { mkdir, mkdtemp, realpath, rm, writeFile } from 'node:fs/promises'
import { isAbsolute, join } from 'node:path'
import { createHash } from 'node:crypto'
import { pathToFileURL } from 'node:url'
import { preprocessCSS, type ResolvedConfig } from 'vite'
import { createModuleSourceProjection, moduleSourceOwner, type ModuleSourceDiagnostic } from './module-sources'
import { createSassSourceMarkers } from './sass-source-markers'
+import { normalizeFilePath } from './path'
import type { MasterCSSVitePluginContext } from '../core'
const CSS_SUFFIX = '.master-css-sass.css'
@@ -42,6 +43,7 @@ export function clearBuildSassSources(context: MasterCSSVitePluginContext) {
/** Invalidate every prepared owner of an edited source or composed dependency. */
export function invalidatePreparedSassSources(context: MasterCSSVitePluginContext, file: string) {
+ file = normalizeFilePath(file)
const cache = caches.get(context)
const affected: string[] = []
for (const [owner, entry] of cache ?? []) {
@@ -54,7 +56,7 @@ export function invalidatePreparedSassSources(context: MasterCSSVitePluginContex
}
export function getPreparedSassSource(context: MasterCSSVitePluginContext, id: string) {
- const file = getSassSourceFile(id) ?? id.replace(/[?#].*$/, '')
+ const file = normalizeFilePath(getSassSourceFile(id) ?? id.replace(/[?#].*$/, ''))
const cached = caches.get(context)?.get(file)
return cached?.prepared ? { file, ...cached, prepared: cached.prepared } : undefined
}
@@ -80,6 +82,7 @@ export async function getPreparedSassSourceMap(context: MasterCSSVitePluginConte
/** Use Vite's preprocessors/Modules and URL rebasing, leaving imports for Rust. */
export function prepareBuildSassSource(context: MasterCSSVitePluginContext, file: string, onDependency?: (file: string) => void) {
if (!context.config) throw new Error('Sass preparation requires resolved Vite configuration.')
+ file = normalizeFilePath(file)
let cache = caches.get(context)
if (!cache) { cache = new Map(); caches.set(context, cache) }
let cached = cache.get(file)
@@ -108,7 +111,7 @@ export function prepareBuildSassSource(context: MasterCSSVitePluginContext, file
const discovered = new Set()
let importDirectory: Promise | undefined
const importedSources = new Map>()
- const originalFile = (id: string) => projection?.sourceFiles.get(id) ?? id
+ const originalFile = (id: string) => projection?.sourceFiles.get(normalizeFilePath(id)) ?? normalizeFilePath(id)
const preprocessorConfig: ResolvedConfig = {
...config,
createResolver(options) {
@@ -117,7 +120,7 @@ export function prepareBuildSassSource(context: MasterCSSVitePluginContext, file
return async (...args) => {
if (args[1]) args[1] = originalFile(args[1])
const resolved = await resolve(...args)
- if (resolved && isAbsolute(resolved)) { dependencies.add(resolved); discovered.add(resolved) }
+ if (resolved && isAbsolute(resolved)) { dependencies.add(originalFile(resolved)); discovered.add(originalFile(resolved)) }
if (resolved && projection && cssImport && /\.(?:scss|sass)$/.test(resolved)) {
let prepared = importedSources.get(resolved)
if (!prepared) {
@@ -148,12 +151,13 @@ export function prepareBuildSassSource(context: MasterCSSVitePluginContext, file
css: { ...preprocessorConfig.css, modules: false, postcss: { plugins: [preserveImports] } }
})
for (const dependency of result.deps ?? []) { discovered.add(originalFile(dependency)); dependencies.add(originalFile(dependency)) }
- importDirectory ??= mkdir(config.cacheDir, { recursive: true }).then(() => mkdtemp(join(config.cacheDir, 'master-css-sass-import-')))
- const path = join(await importDirectory, `${createHash('sha256').update(id).digest('hex')}.css`)
+ importDirectory ??= mkdir(config.cacheDir, { recursive: true }).then(() => mkdtemp(join(config.cacheDir, 'master-css-sass-import-'))).then(directory => realpath(directory))
+ const path = normalizeFilePath(join(await importDirectory, `${createHash('sha256').update(id).digest('hex')}.css`))
projection!.sourceFiles.set(path, id)
const raw = typeof result.map === 'string' ? JSON.parse(result.map) as { sources?: string[], sourceRoot?: string } : result.map
- const base = new URL(raw && 'sourceRoot' in raw && raw.sourceRoot ? raw.sourceRoot.replace(/\/?$/, '/') : './', pathToFileURL(id))
- const map = raw && 'sources' in raw && raw.sources ? JSON.stringify({ ...raw, sourceRoot: '', sources: raw.sources.map(source => source ? new URL(source, base).href : source) }) : undefined
+ const root = raw && 'sourceRoot' in raw && raw.sourceRoot ? raw.sourceRoot.replace(/\/?$/, '/') : './'
+ const base = isAbsolute(root) ? pathToFileURL(root) : new URL(root, pathToFileURL(id))
+ const map = raw && 'sources' in raw && raw.sources ? JSON.stringify({ ...raw, sourceRoot: '', sources: raw.sources.map(source => source ? (isAbsolute(source) ? pathToFileURL(source) : new URL(source, base)).href : source) }) : undefined
const annotation = map ? `\n/*# sourceMappingURL=data:application/json;base64,${Buffer.from(map).toString('base64')} */` : ''
await writeFile(path, result.code + annotation)
return path
diff --git a/packages/vite/src/utils/dev-stylesheet-delivery.ts b/packages/vite/src/utils/dev-stylesheet-delivery.ts
index 20f2fc355..71a6867e1 100644
--- a/packages/vite/src/utils/dev-stylesheet-delivery.ts
+++ b/packages/vite/src/utils/dev-stylesheet-delivery.ts
@@ -1,7 +1,6 @@
import { createHash, randomUUID } from 'node:crypto'
-import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
+import { mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, writeFileSync } from 'node:fs'
import { basename, join } from 'node:path'
-import { tmpdir } from 'node:os'
import { createCompilerSync } from '@master/css-compiler/node'
import type { MasterCSSStylesheetComposition, MasterCSSStylesheetDeliveryOptions } from '@master/css-compiler/stylesheet'
import type { MasterCSSVitePluginContext } from '../core'
@@ -31,6 +30,14 @@ export function clearDevStylesheets(context: MasterCSSVitePluginContext) {
states.delete(context)
}
+/** A separate import keeps generated selectors and keyframes outside SFC scoping. */
+export function publishDevGlobalStylesheet(context: MasterCSSVitePluginContext, css: string) {
+ const state = devStylesheetState(context)
+ const path = state.prefix + `globals-${digest(css)}.css`
+ state.stylesheets.set(path, css.replaceAll(state.origin, ''))
+ return `@import ${JSON.stringify(state.origin + path)};`
+}
+
/** Give Vite external URLs while its CSS pipeline runs; the post hook makes them same-origin. */
export function getDevStylesheetDelivery(context: MasterCSSVitePluginContext): MasterCSSStylesheetDeliveryOptions | undefined {
if (context.config?.command !== 'serve') return
@@ -43,7 +50,13 @@ export function getDevStylesheetDelivery(context: MasterCSSVitePluginContext): M
const href = base + `resource/${digest(source + '\0' + digest(content))}/${encodeURIComponent(basename(source))}`
const key = new URL(href).pathname
if (!state.resources.has(key)) {
- state.resourceDir ??= mkdtempSync(join(tmpdir(), 'master-css-vite-resources-'))
+ if (!state.resourceDir) {
+ // Root-relative static delivery preserves the drive when Vite's root
+ // and the process working directory are on different Windows volumes.
+ const cache = join(context.config!.root, 'node_modules', '.master-css')
+ mkdirSync(cache, { recursive: true })
+ state.resourceDir = realpathSync.native(mkdtempSync(join(cache, 'master-css-vite-resources-')))
+ }
// Name and publish the same bytes, even if the source changes while the
// graph is being compiled. Safe filenames retain Vite's static delivery.
const file = join(state.resourceDir, digest(href) + '-' + basename(source).replace(/[^a-zA-Z0-9._-]/g, '_'))
diff --git a/packages/vite/src/utils/failed-dependency-reconciliation.ts b/packages/vite/src/utils/failed-dependency-reconciliation.ts
index 75ddd5a55..1dd5c202a 100644
--- a/packages/vite/src/utils/failed-dependency-reconciliation.ts
+++ b/packages/vite/src/utils/failed-dependency-reconciliation.ts
@@ -3,6 +3,7 @@ import { stat } from 'node:fs/promises'
import { isAbsolute } from 'node:path'
import { createFilter, type ViteDevServer, type ResolvedConfig } from 'vite'
import type { MasterCSSVitePluginContext } from '../core'
+import { normalizeFilePath } from './path'
export type FailedDependencyRecovery = (environment: object, id: string, changed: string[], active: () => boolean) => Promise
interface Pending {
@@ -45,6 +46,7 @@ export function configureBuildDependencyReconciliation(context: MasterCSSVitePlu
/** A real host event already schedules compilation; avoid a duplicate fallback. */
export function acknowledgeFailedDependencyChange(context: MasterCSSVitePluginContext, file: string) {
+ file = normalizeFilePath(file)
const state = states.get(context)
if (!state) return
const value = failedDependencyVersion(context, file)
diff --git a/packages/vite/src/utils/failed-stylesheet-dependencies.ts b/packages/vite/src/utils/failed-stylesheet-dependencies.ts
index fb76b3496..2306f4a5c 100644
--- a/packages/vite/src/utils/failed-stylesheet-dependencies.ts
+++ b/packages/vite/src/utils/failed-stylesheet-dependencies.ts
@@ -1,6 +1,7 @@
import { existsSync } from 'node:fs'
import { dirname, isAbsolute } from 'node:path'
import type { ViteDevServer } from 'vite'
+import { normalizeFilePath } from './path'
import type { MasterCSSVitePluginContext } from '../core'
import { clearFailedDependencyReconciliation, failedDependencyVersion, forgetFailedDependencyReconciliation, trackFailedDependencyReconciliation } from './failed-dependency-reconciliation'
import type { FailedDependencyRecovery } from './failed-dependency-reconciliation'
@@ -48,6 +49,7 @@ export async function withStylesheetDependencies(context: MasterCSSVitePlugin
try {
const result = await operation(file => {
if (file.includes('\0')) return
+ file = normalizeFilePath(file)
if ((modules || buildRecovery) && !dependencies.has(file)) {
const version = failedDependencyVersion(context, file)
if (version !== undefined) versions.set(file, version)
@@ -73,6 +75,7 @@ export async function withStylesheetDependencies(context: MasterCSSVitePlugin
}
export function stylesheetDependencyOwners(context: MasterCSSVitePluginContext, environment: object, file: string) {
+ file = normalizeFilePath(file)
const owners = new Map()
for (const entry of failures.get(context)?.get(environment)?.values() ?? []) {
if (entry.dependencies.has(file)) owners.set(entry.id, { id: entry.id, failed: entry.failed || Boolean(owners.get(entry.id)?.failed) })
diff --git a/packages/vite/src/utils/module-sources.ts b/packages/vite/src/utils/module-sources.ts
index 785ce1694..2a36f5933 100644
--- a/packages/vite/src/utils/module-sources.ts
+++ b/packages/vite/src/utils/module-sources.ts
@@ -1,6 +1,8 @@
import type { CSSOptions } from 'vite'
import { fileURLToPath, pathToFileURL } from 'node:url'
+import { isAbsolute } from 'node:path'
import { createSassSourceMarkers } from './sass-source-markers'
+import { normalizeFilePath } from './path'
type InlinePostCSS = Exclude
type HostPlugin = Exclude[number], { postcssPlugin: string }>, (...args: never[]) => unknown>
@@ -27,16 +29,17 @@ export function moduleSourceOwner(id: string) {
/** Project Vite's Modules AST changes onto its original per-file syntax trees. */
export function createModuleSourceProjection(file: string): { plugin: HostPlugin, sources: Map, diagnostics: Map, sourceFiles: Map, copyDuplicate(id: string, source: string): void, additionalData(value: AdditionalData): AdditionalData } {
+ file = normalizeFilePath(file)
const originals = new Map()
const sources = new Map()
const projectedInputs = new Map()
const inputDiagnostics = new Map()
const diagnostics = new Map()
const authoredInputs = new Map()
- const preparation = createSassSourceMarkers((id, source) => authoredInputs.set(id, source))
+ const preparation = createSassSourceMarkers((id, source) => authoredInputs.set(normalizeFilePath(id), source))
const { markers } = preparation
const sourceFiles = new Map()
- const sourceFile = (id: string) => sourceFiles.get(id) ?? id
+ const sourceFile = (id: string) => sourceFiles.get(normalizeFilePath(id)) ?? normalizeFilePath(id)
const key = (node: HostNode) => `${node.type}:${node.source?.start?.offset}:${node.source?.end?.offset}`
const plugin: HostPlugin = {
postcssPlugin: 'master-css:module-source-projection',
@@ -51,7 +54,7 @@ export function createModuleSourceProjection(file: string): { plugin: HostPlugin
if (input?.file && !originals.has(sourceFile(input.file))) originals.set(sourceFile(input.file), postcss.parse(input.css, { from: sourceFile(input.file) }))
})
root.walkComments(node => {
- const temporaryMap = node.source?.input.file && sourceFiles.has(node.source.input.file) && node.text.trim().startsWith('# sourceMappingURL=')
+ const temporaryMap = node.source?.input.file && sourceFiles.has(normalizeFilePath(node.source.input.file)) && node.text.trim().startsWith('# sourceMappingURL=')
if (temporaryMap || markers.has(node.text.trim())) node.remove()
})
},
@@ -82,8 +85,8 @@ export function createModuleSourceProjection(file: string): { plugin: HostPlugin
const printed = original.toResult({ from: id, to: id, map: { inline: false, annotation: false, sourcesContent: true } })
const map = printed.map?.toJSON()
if (map) map.sources = map.sources.map((source, index) => {
- const url = new URL(source, pathToFileURL(id))
- const temporary = url.protocol === 'file:' ? sourceFiles.get(fileURLToPath(url)) : undefined
+ const url = isAbsolute(source) ? pathToFileURL(source) : new URL(source, pathToFileURL(id))
+ const temporary = url.protocol === 'file:' ? sourceFiles.get(normalizeFilePath(fileURLToPath(url))) : undefined
if (!temporary) return source
// Unmapped generated segments must not point at deleted scratch
// files or claim to be authored Sass. The diagnostic adapter treats
@@ -102,6 +105,7 @@ export function createModuleSourceProjection(file: string): { plugin: HostPlugin
}
}
return { plugin, sources, diagnostics, sourceFiles, additionalData: preparation.additionalData, copyDuplicate(id, source) {
+ id = normalizeFilePath(id)
// postcss-import can omit another file with byte-identical input. Reuse
// that input's host transformation, retaining the duplicate's own base.
const projected = projectedInputs.get(source)
diff --git a/packages/vite/src/utils/path.ts b/packages/vite/src/utils/path.ts
index b538cdcaa..f33e5f98b 100644
--- a/packages/vite/src/utils/path.ts
+++ b/packages/vite/src/utils/path.ts
@@ -1,11 +1,18 @@
import { realpathSync } from 'node:fs'
-import { resolve } from 'node:path'
+import { basename, dirname, join, resolve } from 'node:path'
export function normalizeFilePath(file: string) {
- try {
- return realpathSync.native(file).replace(/\\/g, '/')
- } catch {
- return resolve(file).replace(/\\/g, '/')
+ let ancestor = resolve(file)
+ const missing: string[] = []
+ while (true) {
+ try {
+ return join(realpathSync.native(ancestor), ...missing).replace(/\\/g, '/')
+ } catch {
+ const parent = dirname(ancestor)
+ if (parent === ancestor) return resolve(file).replace(/\\/g, '/')
+ missing.unshift(basename(ancestor))
+ ancestor = parent
+ }
}
}
diff --git a/packages/vite/src/utils/sass-diagnostics.ts b/packages/vite/src/utils/sass-diagnostics.ts
index abf523af2..acfec76cf 100644
--- a/packages/vite/src/utils/sass-diagnostics.ts
+++ b/packages/vite/src/utils/sass-diagnostics.ts
@@ -1,8 +1,10 @@
import { SourceMap } from 'node:module'
import { fileURLToPath, pathToFileURL } from 'node:url'
+import { isAbsolute } from 'node:path'
import { MasterCSSError, type MasterCSSDiagnostic } from '@master/css-schema'
import type { MasterCSSVitePluginContext } from '../core'
import { getPreparedSassDiagnosticSource } from './build-sass-source'
+import { normalizeFilePath } from './path'
const mappedErrors = new WeakSet()
@@ -21,15 +23,16 @@ async function mapDiagnostic(context: MasterCSSVitePluginContext, diagnostic: Ma
const { start, end } = diagnostic.range
const origin = map.findEntry(start.line, start.character)
if (!('originalSource' in origin) || !origin.originalSource || origin.originalSource.includes('\0') || origin.generatedLine !== start.line) return unavailable
- const root = new URL(sourceRoot ? sourceRoot.replace(/\/?$/, '/') : './', pathToFileURL(cached.file))
- const url = new URL(origin.originalSource, root)
+ const rootSource = sourceRoot ? sourceRoot.replace(/\/?$/, '/') : './'
+ const root = isAbsolute(rootSource) ? pathToFileURL(rootSource) : new URL(rootSource, pathToFileURL(cached.file))
+ const url = isAbsolute(origin.originalSource) ? pathToFileURL(origin.originalSource) : new URL(origin.originalSource, root)
const source = url.protocol === 'file:' ? fileURLToPath(url) : url.href
if (source.includes('\0')) return unavailable
const position = { line: origin.originalLine, character: origin.originalColumn }
let original = sourcesContent[raw.sources.indexOf(origin.originalSource)]
// Vite's string additionalData map omits its original source content. A
// callback without a map instead labels its modified text as the root file.
- if (source === cached.file) {
+ if (url.protocol === 'file:' && normalizeFilePath(source) === cached.file) {
if (original != null && original !== cached.source) return unavailable
original = cached.source
}
diff --git a/packages/vite/tests/dev-hmr.test.ts b/packages/vite/tests/dev-hmr.test.ts
index 87de30f43..7cbd2bd54 100644
--- a/packages/vite/tests/dev-hmr.test.ts
+++ b/packages/vite/tests/dev-hmr.test.ts
@@ -22,7 +22,7 @@ function writeStyle(root: string, displayClass: string) {
'@master entry;',
'@utilities {',
' probe {',
- ` @compose ${displayClass};`,
+ ` display: ${displayClass === 'hidden' ? 'none' : displayClass};`,
' width: 4px;',
' height: 4px;',
' }',
diff --git a/packages/vite/tests/fixtures/manifest-virtual-module/css-only/app.css b/packages/vite/tests/fixtures/manifest-virtual-module/css-only/app.css
index 03ffcc07e..f9bd28b72 100644
--- a/packages/vite/tests/fixtures/manifest-virtual-module/css-only/app.css
+++ b/packages/vite/tests/fixtures/manifest-virtual-module/css-only/app.css
@@ -8,7 +8,7 @@
@utilities {
btn {
- @compose bg-primary;
+ background-color:var(--color-primary);
display: inline-flex;
}
}
diff --git a/packages/vite/tests/fixtures/manifest-virtual-module/css-only/master.css b/packages/vite/tests/fixtures/manifest-virtual-module/css-only/master.css
index 649cf8254..89d227a57 100644
--- a/packages/vite/tests/fixtures/manifest-virtual-module/css-only/master.css
+++ b/packages/vite/tests/fixtures/manifest-virtual-module/css-only/master.css
@@ -7,7 +7,7 @@
@utilities {
btn {
- @compose bg-primary;
+ background-color:var(--color-primary);
display: inline-flex;
}
}
diff --git a/packages/vite/tests/fixtures/manifest-virtual-module/master.css b/packages/vite/tests/fixtures/manifest-virtual-module/master.css
index 649cf8254..89d227a57 100644
--- a/packages/vite/tests/fixtures/manifest-virtual-module/master.css
+++ b/packages/vite/tests/fixtures/manifest-virtual-module/master.css
@@ -7,7 +7,7 @@
@utilities {
btn {
- @compose bg-primary;
+ background-color:var(--color-primary);
display: inline-flex;
}
}
diff --git a/packages/vite/tests/fixtures/pre-render/master-css-entry/app.css b/packages/vite/tests/fixtures/pre-render/master-css-entry/app.css
index 18c94d742..05e008621 100644
--- a/packages/vite/tests/fixtures/pre-render/master-css-entry/app.css
+++ b/packages/vite/tests/fixtures/pre-render/master-css-entry/app.css
@@ -7,9 +7,9 @@
@utilities {
card {
- @compose bg-brand;
+ background-color:var(--color-brand);
@variant md {
- @compose font-size:1.125rem;
+ font-size:1.125rem;
}
border-color: #456;
}
diff --git a/packages/vite/tests/fixtures/pre-render/master-css-entry/master.css b/packages/vite/tests/fixtures/pre-render/master-css-entry/master.css
index ec0df51ce..156d0999a 100644
--- a/packages/vite/tests/fixtures/pre-render/master-css-entry/master.css
+++ b/packages/vite/tests/fixtures/pre-render/master-css-entry/master.css
@@ -5,9 +5,9 @@
@utilities {
card {
- @compose bg-brand;
+ background-color:var(--color-brand);
@variant md {
- @compose font-size:1.125rem;
+ font-size:1.125rem;
}
border-color: #456;
}
diff --git a/packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts b/packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts
index 38f9837b3..d2ad97d5f 100644
--- a/packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts
@@ -17,7 +17,7 @@ async function setup(mode: 'static' | 'runtime' | 'pre-render' | 'progressive',
const trace = (kind: string, detail: unknown) => {
if (process.env.BH_WATCH_TRACE_FILE) appendFileSync(process.env.BH_WATCH_TRACE_FILE, JSON.stringify({ root, mode, managed, at: performance.now(), kind, detail }) + '\n')
}
- writeFileSync(style, (managed ? '@master entry;' : '') + '@reference "./missing/nested/tokens.css";.target{@compose paint;}')
+ writeFileSync(style, (managed ? '@master entry;' : '') + '@reference "./missing/nested/tokens.css";.target{@variant media(all){padding:var(--paint-padding);}}')
writeFileSync(join(root, 'entry.js'), 'import "./style.css"')
writeFileSync(join(root, 'index.html'), '
')
const result = await build({ root, cacheDir, configFile: false, logLevel: 'silent', plugins: [masterCSS({ mode }), { name: 'recovery-event-observer', transform(code, id) { if (id.endsWith('/style.css')) trace('transformed-style', code) }, watchChange(id, change) { trace('watch', { id, change });if (process.env.BH_WATCH_TRACE) console.log('WATCH', mode, Date.now(), id, change) } }], build: { watch: { include, exclude }, minify: false } }).catch(error => { rmSync(root, { recursive: true, force: true });throw error })
@@ -44,17 +44,18 @@ for (const managed of [false, true]) for (const mode of ['static', 'runtime', 'p
await fixture(mode, async state => {
expect((await state.next()).code).toBe('ERROR')
state.write('@utilities{paint{@compose definitely-missing;}}')
- const invalid = await state.next();expect(invalid.code).toBe('ERROR');expect(String(invalid.error)).toContain('definitely-missing')
+ const invalid = await state.next();expect(invalid.code).toBe('ERROR');expect(String(invalid.error)).toContain('@compose has been removed')
await delay(process.env.BH_WATCH_TRACE ? 2000 : 250);expect(state.events).toEqual([])
- state.write('@utilities{paint{padding:3rem}}')
- expect((await state.next()).code).toBe('BUNDLE_END');expect(state.output()).toContain('padding:3rem')
+ state.write('@theme{--paint-padding:3rem}')
+ const recovered = await state.next()
+ expect(recovered.code, String(recovered.error)).toBe('BUNDLE_END');expect(state.output()).toContain('padding:3rem')
writeFileSync(state.style, '.target{padding:4rem}')
expect((await state.next()).code).toBe('BUNDLE_END')
// Recovery can already have queued a rebuild when this edit arrives.
// Assert the eventual authored output, not the identity of the next event.
await vi.waitFor(() => expect(state.output()).toContain('padding:4rem'), { timeout: watchDeadline })
const before = state.cacheFiles().map(file => [file, statSync(file).mtimeMs] as const)
- state.write('@utilities{paint{padding:99rem}}')
+ state.write('@theme{--paint-padding:99rem}')
await delay(350)
for (const [file, mtime] of before) expect(statSync(file).mtimeMs).toBe(mtime)
// Rolldown retains old watch files even when the next transform omits them.
@@ -72,7 +73,7 @@ test('closing a failed build releases its polling and owned cache files', async
expect(state.cacheFiles().length).toBeGreaterThan(0)
await state.close()
expect(state.cacheFiles()).toEqual([])
- state.write('@utilities{paint{padding:3rem}}')
+ state.write('@theme{--paint-padding:3rem}')
await delay(250);expect(state.events).toEqual([])
})
})
@@ -80,7 +81,7 @@ test('closing a failed build releases its polling and owned cache files', async
test('build recovery respects excluded dependencies', async () => {
await fixture('static', async state => {
expect((await state.next()).code).toBe('ERROR')
- state.write('@utilities{paint{padding:3rem}}')
+ state.write('@theme{--paint-padding:3rem}')
await delay(350);expect(state.events).toEqual([])
}, ['**/tokens.css'])
})
@@ -92,7 +93,7 @@ for (const filter of [
const state = await setup('static', filter.exclude, false, filter.include)
try {
expect((await state.next()).code).toBe('ERROR')
- state.write('@utilities{paint{padding:3rem}}')
+ state.write('@theme{--paint-padding:3rem}')
expect((await state.next()).code).toBe('BUNDLE_END')
expect(state.output()).toContain('padding:3rem')
} finally { await state.close();rmSync(state.root, { recursive: true, force: true }) }
diff --git a/packages/vite/tests/plugins/bug-hunt-build-recovery-ownership.test.ts b/packages/vite/tests/plugins/bug-hunt-build-recovery-ownership.test.ts
index 8f7346ed0..6d58c7e39 100644
--- a/packages/vite/tests/plugins/bug-hunt-build-recovery-ownership.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-build-recovery-ownership.test.ts
@@ -65,7 +65,7 @@ test('independent plugin configurations sharing a cache directory release only t
try {
for (const root of roots) {
mkdirSync(root)
- writeFileSync(join(root, 'style.css'), '@reference "./missing.css";.target{@compose paint;}')
+ writeFileSync(join(root, 'style.css'), '@reference "./missing.css";.target{@variant media(all){padding:var(--paint-padding);background-image:var(--paint-background-image);}}')
writeFileSync(join(root, 'entry.js'), 'import "./style.css"')
const watcher = await build({ root, cacheDir: f.cacheDir, configFile: false, logLevel: 'silent', plugins, build: { watch: {}, rolldownOptions: { input: join(root, 'entry.js') } } })
if (!('on' in watcher)) throw new Error('Expected watcher')
diff --git a/packages/vite/tests/plugins/bug-hunt-css-modules.test.ts b/packages/vite/tests/plugins/bug-hunt-css-modules.test.ts
index b436214a1..ca7c37f3a 100644
--- a/packages/vite/tests/plugins/bug-hunt-css-modules.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-css-modules.test.ts
@@ -10,7 +10,7 @@ const require = createRequire(import.meta.url)
const sassDirectory = dirname(createRequire(require.resolve('vite')).resolve('sass'))
async function compile(extension: string, source: string, script: string, modules: NonNullable['modules'] = { generateScopedName: 'scoped_[local]' }, shared = '.shared { color: blue; }') {
- const root = realpathSync(mkdtempSync(join(tmpdir(), 'master-css-modules-test-')))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'master-css-modules-test-')))
try {
mkdirSync(join(root, 'node_modules'))
symlinkSync(sassDirectory, join(root, 'node_modules/sass'), 'dir')
@@ -69,12 +69,12 @@ test('BH-0004 managed CSS Modules inline requests keep the scoped stylesheet str
test('BH-0004 CSS Modules compiler errors retain authored directive locations', async () => {
await expect(compile('css', '@master entry;\n.example {\n @compose unknown-utility;\n}', 'import names from "./style.module.css";console.log(names)')).rejects.toMatchObject({
- errors: [{ diagnostics: [{ code: 'invalid-compose-class', source: expect.stringMatching(/\/style\.module\.css$/), range: { start: { line: 2, character: 11 }, end: { line: 2, character: 26 } } }] }]
+ errors: [{ diagnostics: [{ code: 'removed-compose-directive', source: expect.stringMatching(/[\\/]style\.module\.css$/), range: { start: { line: 2, character: 2 }, end: { line: 2, character: 10 } } }] }]
})
})
test('BH-0004 unattributed composed Module content does not invent an original filename', async () => {
await expect(compile('css', '@master entry;.example{composes:shared from "./shared.module.css"}', 'import names from "./style.module.css";console.log(names)', undefined, '.shared{@compose unknown-utility;}')).rejects.toMatchObject({
- errors: [{ diagnostics: [{ code: 'invalid-compose-class', source: expect.stringMatching(/\/style\.module\.css\.master-css-sass\.css$/), notes: ['Original CSS Modules location is unavailable; this range refers to preprocessed CSS.'] }] }]
+ errors: [{ diagnostics: [{ code: 'removed-compose-directive', source: expect.stringMatching(/[\\/]style\.module\.css\.master-css-sass\.css$/), notes: ['Original CSS Modules location is unavailable; this range refers to preprocessed CSS.'] }] }]
})
})
diff --git a/packages/vite/tests/plugins/bug-hunt-custom-environment-close.test.ts b/packages/vite/tests/plugins/bug-hunt-custom-environment-close.test.ts
index 6433d13ef..43ebf53eb 100644
--- a/packages/vite/tests/plugins/bug-hunt-custom-environment-close.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-custom-environment-close.test.ts
@@ -12,7 +12,7 @@ const sassDirectory = dirname(createRequire(require.resolve('vite')).resolve('sa
for (const managed of [false, true]) {
test.each(['edge', 'ssr', 'client'])('BH-0004 remaining environments load fresh styles after closing %s (managed=' + managed + ')', async (closing) => {
- const root = realpathSync(mkdtempSync(join(tmpdir(), 'master-custom-environments-')))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'master-custom-environments-')))
let server: Awaited> | undefined
const dispose = vi.spyOn(MasterCSSScanner.prototype, 'dispose')
let initialized = false
diff --git a/packages/vite/tests/plugins/bug-hunt-dev-graph-environments.test.ts b/packages/vite/tests/plugins/bug-hunt-dev-graph-environments.test.ts
index a4f1c1f44..d6fb2a3d7 100644
--- a/packages/vite/tests/plugins/bug-hunt-dev-graph-environments.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-dev-graph-environments.test.ts
@@ -39,8 +39,8 @@ function makeRoot() {
const root = mkdtempSync(join(parent, 'dev-graph-environments-'))
for (const [name, color] of [['initial', 'red'], ['later', 'green']]) {
writeFileSync(join(root, `${name}.css`), `@import "./${name}-child.css" layer(guard);@master entry;@preserve native;`)
- writeFileSync(join(root, `${name}-child.css`), `@import "/base/external.css";.${name}{color:${color};background-image:url("./${name}%23%3F.svg?q=1#part")}`)
- writeFileSync(join(root, `${name}#?.svg`), `${color} `)
+ writeFileSync(join(root, `${name}-child.css`), `@import "/base/external.css";.${name}{color:${color};background-image:url("./${name}%23%25.svg?q=1#part")}`)
+ writeFileSync(join(root, `${name}#%.svg`), `${color} `)
writeFileSync(join(root, `${name}.js`), `export { default as css } from './${name}.css?inline'`)
}
writeFileSync(join(root, 'index.html'), '
')
@@ -70,7 +70,7 @@ test.each(cases)('retained graphs survive idle environment replacement mode=$mod
await expectAssets(initial.assets)
const later = await readGraph((await replacement.runner.import('/later.js')).css, origin)
expect(later.css).toMatch(/\.later\s*\{[^}]*color:\s*green/)
- writeFileSync(join(root, 'later-child.css'), '@import "/base/external.css";.later{color:purple;background-image:url("./later%23%3F.svg?q=1#part")}')
+ writeFileSync(join(root, 'later-child.css'), '@import "/base/external.css";.later{color:purple;background-image:url("./later%23%25.svg?q=1#part")}')
await vi.waitFor(async () => expect((await readGraph((await replacement.runner.import('/later.js')).css, origin)).css).toMatch(/\.later\s*\{[^}]*color:\s*purple/), { timeout: watchDeadline })
await expectAssets(initial.assets)
await expectAssets(later.assets)
@@ -102,7 +102,7 @@ test.each(restartCases)('retained graph restart mode=$mode middleware=$middlewar
const currentOrigin = middleware ? origin : server.resolvedUrls!.local[0]
const current = await readGraph((await server.ssrLoadModule('/initial.js')).css, currentOrigin)
expect([...current.assets.keys()].sort()).not.toEqual([...old.assets.keys()].sort())
- writeFileSync(join(root, 'initial-child.css'), '@import "/base/external.css";.initial{color:purple;background-image:url("./initial%23%3F.svg?q=1#part")}')
+ writeFileSync(join(root, 'initial-child.css'), '@import "/base/external.css";.initial{color:purple;background-image:url("./initial%23%25.svg?q=1#part")}')
await vi.waitFor(async () => expect((await readGraph((await server!.ssrLoadModule('/initial.js')).css, currentOrigin)).css).toMatch(/\.initial\s*\{[^}]*color:\s*purple/), { timeout: watchDeadline })
await expectAssets(current.assets)
for (const file of server.config.server.fs.allow) if (file.includes('/master-css-vite-resources-')) copies.add(file)
diff --git a/packages/vite/tests/plugins/bug-hunt-dev-resource-lifecycle.test.ts b/packages/vite/tests/plugins/bug-hunt-dev-resource-lifecycle.test.ts
index 04faf55f3..2b5c60c7d 100644
--- a/packages/vite/tests/plugins/bug-hunt-dev-resource-lifecycle.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-dev-resource-lifecycle.test.ts
@@ -14,8 +14,8 @@ test('shared plugin roots retain resource delivery as another root or SSR enviro
const urls: URL[] = []
try {
for (const [index, root] of roots.entries()) {
- writeFileSync(join(root, 'style.css'), '@master entry;@preserve native;.resource{background-image:url("./pixel%23%3F.svg")}')
- writeFileSync(join(root, 'pixel#?.svg'), images[index])
+ writeFileSync(join(root, 'style.css'), '@master entry;@preserve native;.resource{background-image:url("./pixel%23%25.svg")}')
+ writeFileSync(join(root, 'pixel#%.svg'), images[index])
writeFileSync(join(root, 'server.js'), 'export { default as css } from "./style.css?inline"')
const server = await createServer({ root, base: `/base-${index}/`, configFile: false, logLevel: 'silent', plugins, server: { host: '127.0.0.1', port: 0 } })
servers.push(server);await server.listen()
diff --git a/packages/vite/tests/plugins/bug-hunt-dev-resource-paths.test.ts b/packages/vite/tests/plugins/bug-hunt-dev-resource-paths.test.ts
index c5afe20a0..275a2ba83 100644
--- a/packages/vite/tests/plugins/bug-hunt-dev-resource-paths.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-dev-resource-paths.test.ts
@@ -5,7 +5,7 @@ import { expect, test } from 'vitest'
import masterCSS from '../../src/core'
const cases = (['static', 'progressive'] as const).flatMap(mode =>
- [...['pixel.svg', 'pixel space.svg', 'pixel#part.svg', 'pixel?query.svg', 'pixel%value.svg', '圖像.svg'].map(name => ({ mode, name, denied: false })), { mode, name: 'private.svg', denied: true }]
+ [...['pixel.svg', 'pixel space.svg', 'pixel#part.svg', 'pixel%value.svg', '圖像.svg', ...process.platform === 'win32' ? [] : ['pixel?query.svg']].map(name => ({ mode, name, denied: false })), { mode, name: 'private.svg', denied: true }]
)
test.each(cases)('development resource path mode=$mode name=$name', async ({ mode, name, denied }) => {
diff --git a/packages/vite/tests/plugins/bug-hunt-environment-replacement.test.ts b/packages/vite/tests/plugins/bug-hunt-environment-replacement.test.ts
index 601c9e2b7..57dffbc93 100644
--- a/packages/vite/tests/plugins/bug-hunt-environment-replacement.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-environment-replacement.test.ts
@@ -12,7 +12,7 @@ const sassDirectory = dirname(createRequire(require.resolve('vite')).resolve('sa
for (const managed of [false, true]) for (const perEnvironment of [false, true]) {
test(`BH-0004 idle replacement survives old environments closing (managed=${managed}, perEnvironment=${perEnvironment})`, async () => {
- const root = realpathSync(mkdtempSync(join(tmpdir(), 'master-environment-replacement-')))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'master-environment-replacement-')))
let server: Awaited> | undefined
const dispose = vi.spyOn(MasterCSSScanner.prototype, 'dispose')
try {
@@ -48,7 +48,7 @@ for (const managed of [false, true]) for (const perEnvironment of [false, true])
}
test.each([false, true])('BH-0004 environment startup attaches HMR listeners once (perEnvironment=%s)', async (perEnvironment) => {
- const root = realpathSync(mkdtempSync(join(tmpdir(), 'master-environment-listeners-')))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'master-environment-listeners-')))
let server: Awaited> | undefined
const on = vi.spyOn(MasterCSSScanner.prototype, 'on')
try {
@@ -71,7 +71,7 @@ test.each([false, true])('BH-0004 environment startup attaches HMR listeners onc
})
test.each([false, true])('BH-0004 late server environment startup preserves client Sass dependencies (perEnvironment=%s)', async (perEnvironment) => {
- const root = realpathSync(mkdtempSync(join(tmpdir(), 'master-environment-sass-')))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'master-environment-sass-')))
let server: Awaited> | undefined
try {
mkdirSync(join(root, 'node_modules'))
diff --git a/packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts b/packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts
index 1a017904a..0bc711ad5 100644
--- a/packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts
@@ -1,7 +1,7 @@
import { mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from 'node:fs'
import { tmpdir } from 'node:os'
import { dirname, join } from 'node:path'
-import { createServer, type PluginOption, type WatchOptions } from 'vite'
+import { normalizePath, createServer, type PluginOption, type WatchOptions } from 'vite'
import { setTimeout as delay } from 'node:timers/promises'
import { expect, test, vi } from 'vitest'
import masterCSS from '../../src/core'
@@ -9,12 +9,12 @@ import { watchDeadline } from '../watch-deadline-helper'
const modes = ['static', 'runtime', 'pre-render', 'progressive'] as const
function fixture(resource = false) {
- const parent = realpathSync(mkdtempSync(join(tmpdir(), 'master-css-failed-reconcile-'))), root = join(parent, 'app'), external = join(parent, 'external')
+ const parent = realpathSync.native(mkdtempSync(join(tmpdir(), 'master-css-failed-reconcile-'))), root = join(parent, 'app'), external = join(parent, 'external')
mkdirSync(root);mkdirSync(external)
const dependency = join(external, resource ? 'one/two/pixel.svg' : 'one/two/tokens.css')
- const tokens = `@utilities{paint{padding:7rem;${resource ? 'background-image:url("./one/two/pixel.svg?v=1#icon")' : ''}}}`
+ const tokens = `@theme{--paint-padding:7rem;${resource ? '--paint-background-image:url("./one/two/pixel.svg?v=1#icon")' : ''}}`
if (resource) writeFileSync(join(external, 'tokens.css'), tokens)
- writeFileSync(join(root, 'style.css'), `${resource ? '@master entry;@preserve native;' : ''}@reference "../external/${resource ? 'tokens.css' : 'one/two/tokens.css'}";.target{@compose paint;}`)
+ writeFileSync(join(root, 'style.css'), `${resource ? '@master entry;@preserve native;' : ''}@reference "../external/${resource ? 'tokens.css' : 'one/two/tokens.css'}";.target{@variant media(all){padding:var(--paint-padding);background-image:var(--paint-background-image);}}`)
writeFileSync(join(root, 'entry.js'), 'import "./style.css";if(import.meta.hot)import.meta.hot.accept("./style.css",()=>{});')
writeFileSync(join(root, 'index.html'), '')
return { parent, root, dependency, restore() { mkdirSync(dirname(dependency), { recursive: true });writeFileSync(dependency, resource ? ' ' : tokens) } }
@@ -95,7 +95,7 @@ test('BH-0004 unchanged failures are not retried continuously and corrected cont
await delay(350);expect(result.transform).not.toHaveBeenCalled()
mkdirSync(dirname(f.dependency), { recursive: true });writeFileSync(f.dependency, '@utilities{paint{@compose definitely-missing-class;}}')
await vi.waitFor(() => expect(result!.transform).toHaveBeenCalled(), { timeout: watchDeadline })
- await vi.waitFor(() => expect(JSON.stringify(result!.send.mock.calls)).toContain('definitely-missing-class'), { timeout: watchDeadline })
+ await vi.waitFor(() => expect(JSON.stringify(result!.send.mock.calls)).toContain('@compose has been removed'), { timeout: watchDeadline })
await result.server.environments.client.waitForRequestsIdle()
const attempts = result.transform.mock.calls.length
await delay(350);expect(result.transform).toHaveBeenCalledTimes(attempts);expect(notified(result.send.mock.calls)).toBe(false)
@@ -109,8 +109,9 @@ test('BH-0004 a successful edit drops obsolete failed dependency reconciliation'
const f = fixture();let result: Awaited> | undefined
try {
result = await start(f)
- // Isolate reconciliation: a delayed native event for this source edit must not be attributed to restoring the obsolete external dependency.
- await result.server.watcher.unwatch(f.root)
+ // Isolate reconciliation from native events, including file watches that
+ // were registered separately from the root directory on Windows.
+ await result.server.watcher.close()
const events: string[] = []
result.server.watcher.on('all', (event, file) => { if (file.startsWith(f.parent)) events.push(event) })
writeFileSync(join(f.root, 'style.css'), '.target{padding:9rem}')
@@ -139,14 +140,14 @@ test('BH-0004 two failed owners recover independently in one environment', async
const f = fixture();let result: Awaited> | undefined
const second = join(f.parent, 'external/other/tokens.css')
try {
- writeFileSync(join(f.root, 'second.css'), '@reference "../external/other/tokens.css";.second{@compose paint;}')
+ writeFileSync(join(f.root, 'second.css'), "@reference \"../external/other/tokens.css\";.second{@variant media(all){padding:9rem;}}")
result = await start(f)
const initial = await fetch(new URL('second.css', result.origin));expect(initial.status).toBe(500);await initial.text()
result.transform.mockClear();f.restore()
await vi.waitFor(() => expect(notified(result!.send.mock.calls)).toBe(true), { timeout: watchDeadline })
expect(result.transform.mock.calls.some(([url]) => url.includes('second.css'))).toBe(false)
const first = await fetch(new URL('style.css', result.origin));expect(first.status).toBe(200);expect(await first.text()).toContain('7rem')
- result.send.mockClear();mkdirSync(dirname(second), { recursive: true });writeFileSync(second, '@utilities{paint{padding:9rem}}')
+ result.send.mockClear();mkdirSync(dirname(second), { recursive: true });writeFileSync(second, "@theme{--paint-padding:9rem}")
await vi.waitFor(() => expect(notified(result!.send.mock.calls)).toBe(true), { timeout: watchDeadline })
const recovered = await fetch(new URL('second.css', result.origin));expect(recovered.status).toBe(200);expect(await recovered.text()).toContain('9rem')
} finally { await stop(f, result) }
@@ -160,7 +161,7 @@ test.each(['client', 'server'])('BH-0004 closing %s during a reconciliation supp
const gate = new Promise(resolve => { release = resolve })
try {
result = await start(f, [{ name: 'hold-reconciliation', enforce: 'pre', async transform(_code, id) {
- if (enabled && id === join(f.root, 'style.css')) { entered = true;await gate }
+ if (enabled && id === normalizePath(join(f.root, 'style.css'))) { entered = true;await gate }
} }, ...masterCSS({ mode: 'static', runtime: false })])
enabled = true;f.restore()
await vi.waitFor(() => expect(entered).toBe(true), { timeout: watchDeadline })
diff --git a/packages/vite/tests/plugins/bug-hunt-imported-sass-original-maps.test.ts b/packages/vite/tests/plugins/bug-hunt-imported-sass-original-maps.test.ts
index 57f450cbf..fcc33c660 100644
--- a/packages/vite/tests/plugins/bug-hunt-imported-sass-original-maps.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-imported-sass-original-maps.test.ts
@@ -4,7 +4,7 @@ import { tmpdir } from 'node:os'
import { dirname, join } from 'node:path'
import { fileURLToPath } from 'node:url'
import type { MasterCSSError } from '@master/css-schema'
-import { build, createServer, preprocessCSS, resolveConfig } from 'vite'
+import { normalizePath, build, createServer, preprocessCSS, resolveConfig } from 'vite'
import { expect, test } from 'vitest'
import MagicString from 'magic-string'
import masterCSS from '../../src/core'
@@ -14,7 +14,7 @@ const sassDirectory = dirname(createRequire(require.resolve('vite')).resolve('sa
const cases = ['css', 'scss'].flatMap(rootExtension => ['scss', 'sass'].flatMap(syntax => [false, true].flatMap(partial => ['identity', 'string', 'mapped'].flatMap(addition => ['build', 'serve'].map(command => ({ rootExtension, syntax, partial, addition, command }))))))
test.each(cases)('imported Sass maps original file and token: $rootExtension / $syntax / partial=$partial / $addition / $command', async ({ rootExtension, syntax, partial, addition, command }) => {
- const root = realpathSync(mkdtempSync(join(tmpdir(), 'master-css-original-import-map-')))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'master-css-original-import-map-')))
try {
mkdirSync(join(root, 'node_modules')); symlinkSync(sassDirectory, join(root, 'node_modules/sass'), 'dir')
mkdirSync(join(root, 'nested'))
@@ -46,18 +46,18 @@ test.each(cases)('imported Sass maps original file and token: $rootExtension / $
}
} catch (error) { failure = (error as MasterCSSError).diagnostics ? error as MasterCSSError : (error as { errors?: MasterCSSError[] }).errors?.[0] }
finally { await server?.environments.client.waitForRequestsIdle(); await server?.close() }
- expect(failure?.diagnostics[0]?.code).toBe('invalid-compose-class')
- expect(calls.filter(file => file === child)).toHaveLength(addition === 'string' ? 0 : 1)
+ expect(failure?.diagnostics[0]?.code).toBe('removed-compose-directive')
+ expect(calls.filter(file => file === normalizePath(child))).toHaveLength(addition === 'string' ? 0 : 1)
const diagnostic = failure!.diagnostics[0]
console.log(JSON.stringify({ rootExtension, syntax, partial, addition, command, diagnostic, additionalDataCalls: calls }))
expect(diagnostic.source).toBe(original)
- expect(diagnostic.range).toEqual({ start: { line: 3, character: 11 }, end: { line: 3, character: 26 } })
+ expect(diagnostic.range).toEqual({ start: { line: 3, character: 2 }, end: { line: 3, character: 10 } })
expect(diagnostic.notes).toBeUndefined()
} finally { rmSync(root, { recursive: true, force: true }) }
})
test.each(['scss', 'sass'])('pure Vite direct preprocessing exposes original imported-partial maps: %s', async syntax => {
- const root = realpathSync(mkdtempSync(join(tmpdir(), 'master-css-vite-map-control-')))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'master-css-vite-map-control-')))
try {
mkdirSync(join(root, 'node_modules')); symlinkSync(sassDirectory, join(root, 'node_modules/sass'), 'dir')
const original = join(root, `_bad.${syntax}`), child = join(root, `child.${syntax}`)
@@ -72,7 +72,7 @@ test.each(['scss', 'sass'])('pure Vite direct preprocessing exposes original imp
const origin = new SourceMap(raw as ConstructorParameters[0]).findEntry(line, column)
expect('originalSource' in origin).toBe(true)
if (!('originalSource' in origin)) throw new Error('Missing original map source')
- expect(origin.originalSource.startsWith('file:') ? fileURLToPath(origin.originalSource) : origin.originalSource).toBe(original)
+ expect(normalizePath(origin.originalSource.startsWith('file:') ? fileURLToPath(origin.originalSource) : origin.originalSource)).toBe(normalizePath(original))
expect(origin.originalLine).toBe(2)
expect(origin.originalColumn).toBe(2)
console.log(JSON.stringify({ control: 'pure-vite-preprocessCSS', syntax, origin, sources: raw?.sources, pass: true }))
@@ -80,7 +80,7 @@ test.each(['scss', 'sass'])('pure Vite direct preprocessing exposes original imp
})
for (const syntax of ['scss', 'sass']) for (const kind of ['interpolated', 'unmapped']) test(`imported ${syntax} keeps honest ${kind} diagnostic precision`, async () => {
- const root = realpathSync(mkdtempSync(join(tmpdir(), 'master-css-import-map-precision-')))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'master-css-import-map-precision-')))
try {
mkdirSync(join(root, 'node_modules')); symlinkSync(sassDirectory, join(root, 'node_modules/sass'), 'dir')
const child = join(root, `child.${syntax}`)
@@ -98,13 +98,13 @@ for (const syntax of ['scss', 'sass']) for (const kind of ['interpolated', 'unma
} catch (error) { failure = (error as { errors?: MasterCSSError[] }).errors?.[0] }
expect(calls).toBe(1)
const diagnostic = failure!.diagnostics[0]
- expect(diagnostic.code).toBe('invalid-compose-class')
+ expect(diagnostic.code).toBe('removed-compose-directive')
if (kind === 'interpolated') {
expect(diagnostic.source).toBe(child)
- expect(diagnostic.range).toEqual({ start: { line: 2, character: 2 }, end: { line: 2, character: 2 } })
- expect(diagnostic.notes).toContain('The source map identifies the originating segment; an exact original token range is unavailable.')
+ expect(diagnostic.range).toEqual({ start: { line: 2, character: 2 }, end: { line: 2, character: 10 } })
+ expect(diagnostic.notes).toBeUndefined()
} else {
- expect(diagnostic.source).toBe(child + '.master-css-sass.css')
+ expect(diagnostic.source).toBe(normalizePath(child) + '.master-css-sass.css')
expect(diagnostic.notes).toContain('Original Sass location is unavailable; this range refers to preprocessed CSS.')
}
} finally { rmSync(root, { recursive: true, force: true }) }
diff --git a/packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts b/packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts
index 406bb4623..f83754147 100644
--- a/packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts
@@ -15,8 +15,8 @@ for (const command of ['serve', 'build'] as const) {
try {
writeFileSync(join(root, 'index.html'), '
')
writeFileSync(join(root, 'client.js'), 'import "./local.css"')
- writeFileSync(join(root, 'local.css'), `@import "./child.css" layer(guard) supports(display:grid) screen and (min-width:700px);.local{${rootCompose ? '@compose block;' : 'display:block'}}`)
- writeFileSync(join(root, 'child.css'), `@import "https://example.invalid/external.css";.child{${composeChild ? '@compose p:2rem;' : ''}color:red}`)
+ writeFileSync(join(root, 'local.css'), `@import "./child.css" layer(guard) supports(display:grid) screen and (min-width:700px);.local{${rootCompose ? '@variant media(all){display:block;}' : 'display:block'}}`)
+ writeFileSync(join(root, 'child.css'), `@import "https://example.invalid/external.css";.child{${composeChild ? '@variant media(all){padding:2rem;}' : ''}color:red}`)
const config = { root, configFile: false as const, logLevel: 'silent' as const, plugins: masterCSS({ mode }) }
const sources: string[] = []
if (command === 'serve') {
diff --git a/packages/vite/tests/plugins/bug-hunt-local-graph-requests.test.ts b/packages/vite/tests/plugins/bug-hunt-local-graph-requests.test.ts
index d235a69fc..b6101c96c 100644
--- a/packages/vite/tests/plugins/bug-hunt-local-graph-requests.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-local-graph-requests.test.ts
@@ -10,8 +10,8 @@ for (const command of ['serve', 'build'] as const) {
const root = mkdtempSync(join(parent, 'local-graph-requests-'))
let server: Awaited> | undefined
try {
- writeFileSync(join(root, 'style.module.css'), '@import "./child.css" layer(guard);.local{@compose inline-flex;}')
- writeFileSync(join(root, 'child.css'), '@import "https://external.test/style.css";.child{@compose p:2rem;}')
+ writeFileSync(join(root, 'style.module.css'), "@import \"./child.css\" layer(guard);.local{@variant media(all){display:inline-flex;}}")
+ writeFileSync(join(root, 'child.css'), "@import \"https://external.test/style.css\";.child{@variant media(all){padding:2rem;}}")
writeFileSync(join(root, 'server.js'), 'export {default as names} from "./style.module.css";export {default as css} from "./style.module.css?inline";export {default as raw} from "./style.module.css?raw";')
writeFileSync(join(root, 'client.js'), 'import {names,css,raw} from "./server.js";console.log(names.local,css,raw)')
writeFileSync(join(root, 'index.html'), '')
diff --git a/packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts b/packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts
index e9e5790ad..f8c83c510 100644
--- a/packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts
@@ -13,7 +13,7 @@ for (const command of ['serve', 'build'] as const) {
try {
writeFileSync(join(root, 'style.css'), '@import "./bridge.css" layer(guard) supports(display:grid) screen and (min-width:700px);.local{display:inline-flex}')
writeFileSync(join(root, 'bridge.css'), '@import "./child.css";.bridge{display:block}')
- writeFileSync(join(root, 'child.css'), '@import "https://external.test/style.css";.child{@compose p:2rem;}')
+ writeFileSync(join(root, 'child.css'), "@import \"https://external.test/style.css\";.child{@variant media(all){padding:2rem;}}")
const module = query === 'url' ? 'export {default as url} from "./style.css?url";' : 'import "./style.css?theme=dark";export const url="/style.css?theme=dark";'
writeFileSync(join(root, 'server.js'), module)
writeFileSync(join(root, 'client.js'), 'import {url} from "./server.js";console.log(url)')
diff --git a/packages/vite/tests/plugins/bug-hunt-local-sass-url-hmr.test.ts b/packages/vite/tests/plugins/bug-hunt-local-sass-url-hmr.test.ts
index 395453973..03d45dc0c 100644
--- a/packages/vite/tests/plugins/bug-hunt-local-sass-url-hmr.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-local-sass-url-hmr.test.ts
@@ -12,7 +12,7 @@ const sassDirectory = dirname(createRequire(require.resolve('vite')).resolve('sa
for (const base of ['/', '/nested/']) {
test.each(['static', 'runtime', 'pre-render', 'progressive'] as const)(`local Sass URL reloads retained child and resource under ${base}/%s`, async mode => {
- const root = realpathSync(mkdtempSync(join(tmpdir(), 'master-local-sass-url-')))
+ const root = realpathSync.native(mkdtempSync(join(tmpdir(), 'master-local-sass-url-')))
let server: Awaited> | undefined
try {
mkdirSync(join(root, 'node_modules'))
@@ -20,7 +20,7 @@ for (const base of ['/', '/nested/']) {
writeFileSync(join(root, 'style.scss'), '$layout:inline-flex;@import "./bridge.css" layer(guard);.local{display:$layout}')
writeFileSync(join(root, 'other.scss'), '$tone:red;.other{color:$tone}')
writeFileSync(join(root, 'bridge.css'), '@import "./child.css";')
- const child = (color: string) => `.child{@compose p:2rem;color:${color};background:url("./pixel.svg")}`
+ const child = (color: string) => `.child{@variant media(all){padding:2rem;}color:${color};background:url("./pixel.svg")}`
writeFileSync(join(root, 'child.css'), child('red'))
writeFileSync(join(root, 'pixel.svg'), 'red ')
server = await createServer({ root, base, configFile: false, logLevel: 'silent', plugins: masterCSS({ mode }), server: { host: '127.0.0.1', port: 0 } })
diff --git a/packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts b/packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts
index 2d48c2fc8..543a0ca70 100644
--- a/packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts
@@ -23,12 +23,12 @@ afterEach(() => { interception.afterGlobals = undefined;vi.restoreAllMocks() })
const modes = ['static', 'runtime', 'pre-render', 'progressive'] as const
function fixture(initiallyMissing = false) {
- const parent = realpathSync(mkdtempSync(join(tmpdir(), 'master-css-manifest-lifecycle-'))), root = join(parent, 'app'), dependency = join(parent, 'external/deep/tokens.css')
+ const parent = realpathSync.native(mkdtempSync(join(tmpdir(), 'master-css-manifest-lifecycle-'))), root = join(parent, 'app'), dependency = join(parent, 'external/deep/tokens.css')
mkdirSync(root);mkdirSync(join(parent, 'external'))
- writeFileSync(join(root, 'style.css'), '@master entry;@reference "../external/deep/tokens.css";@utilities{card{@compose paint;}}')
+ writeFileSync(join(root, 'style.css'), '@master entry;@reference "../external/deep/tokens.css";@utilities{card{@variant paint{padding:1rem;}}}')
writeFileSync(join(root, 'entry.js'), 'export const ready=true;')
writeFileSync(join(root, 'index.html'), '
')
- const write = (padding = '7rem') => { mkdirSync(dirname(dependency), { recursive: true });writeFileSync(dependency, `@utilities{paint{padding:${padding}}}`) }
+ const write = (padding = '7rem') => { mkdirSync(dirname(dependency), { recursive: true });writeFileSync(dependency, `@custom-variant paint{@media (width>=${padding}){@slot;}}`) }
if (!initiallyMissing) write()
return { parent, root, dependency, write }
}
@@ -50,7 +50,7 @@ for (const fail of [false, true]) test.each(['pre-render', 'progressive'] as con
const render = vi.spyOn(MasterCSSServerRenderer.prototype, 'renderHTML')
try {
server = await createServer({ root: f.root, configFile: false, logLevel: 'silent', plugins: masterCSS({ mode }), server: { host: '127.0.0.1', port: 0, watch: { ignored: ['**/*'] }, fs: { allow: [f.parent] }, perEnvironmentStartEndDuringDev: true } })
- await server.listen();expect((await html(server)).text).toContain('.card{padding:7rem}')
+ await server.listen();expect((await html(server)).text).toContain('@media (width>=7rem){.card{padding:1rem}}')
const liveRenderer = render.mock.contexts.at(-1)
await server.environments.client.waitForRequestsIdle()
gate = hold(fail)
@@ -59,7 +59,7 @@ for (const fail of [false, true]) test.each(['pre-render', 'progressive'] as con
const send = vi.spyOn(server.ws, 'send'), closing = server.environments.ssr.close()
gate.release();await closing;await pending
const result = await html(server)
- expect(result.status).toBe(200);expect(result.text).toContain('.card{padding:7rem}')
+ expect(result.status).toBe(200);expect(result.text).toContain('@media (width>=7rem){.card{padding:1rem}}')
expect(render.mock.contexts.at(-1)).toBe(liveRenderer)
expect(send).not.toHaveBeenCalled()
} finally { gate?.release();await pending;await server?.environments.client.waitForRequestsIdle();await server?.close();rmSync(f.parent, { recursive: true, force: true }) }
@@ -76,7 +76,7 @@ test.each(modes)('BH-0004 restarting a failed manifest server transfers recovery
oldTransform.mockClear();const send = vi.spyOn(server.ws, 'send');f.write()
await vi.waitFor(() => expect(reloaded(send.mock.calls)).toBe(true), { timeout: watchDeadline })
await expect.poll(async () => (await html(server!)).status, { timeout: watchDeadline }).toBe(200)
- if (mode === 'pre-render' || mode === 'progressive') expect((await html(server)).text).toContain('.card{padding:7rem}')
+ if (mode === 'pre-render' || mode === 'progressive') expect((await html(server)).text).toContain('@media (width>=7rem){.card{padding:1rem}}')
expect(oldTransform).not.toHaveBeenCalled()
} finally { await server?.environments.client.waitForRequestsIdle();await server?.close();rmSync(f.parent, { recursive: true, force: true }) }
})
@@ -85,7 +85,7 @@ for (const fail of [false, true]) test.each(['pre-render', 'progressive'] as con
const f = fixture();let server: ViteDevServer | undefined, gate: ReturnType | undefined, pending: Promise | undefined
try {
server = await createServer({ root: f.root, configFile: false, logLevel: 'silent', plugins: masterCSS({ mode }), server: { host: '127.0.0.1', port: 0, watch: { ignored: ['**/*'] }, fs: { allow: [f.parent] } } })
- await server.listen();expect((await html(server)).text).toContain('.card{padding:7rem}');await server.environments.client.waitForRequestsIdle()
+ await server.listen();expect((await html(server)).text).toContain('@media (width>=7rem){.card{padding:1rem}}');await server.environments.client.waitForRequestsIdle()
const hook = server.config.plugins.find(p => p.name === 'master-css:pre-render')!.handleHotUpdate
if (typeof hook !== 'function') throw new Error('Expected pre-render HMR hook')
gate = hold(fail);f.write('9rem')
@@ -109,7 +109,7 @@ test('BH-0004 reconciliation updates an already loaded manifest through its HMR
expect(module.isSelfAccepting).toBe(false)
writeFileSync(f.dependency, '@utilities{paint{@compose lifecycle-invalid-class;}}')
environment.moduleGraph.invalidateModule(module)
- await expect(environment.transformRequest(module.url)).rejects.toThrow('lifecycle-invalid-class')
+ await expect(environment.transformRequest(module.url)).rejects.toThrow('@compose has been removed')
const send = vi.spyOn(server.ws, 'send');f.write('9rem')
await vi.waitFor(() => expect(send).toHaveBeenCalled(), { timeout: watchDeadline })
expect(reloaded(send.mock.calls)).toBe(false)
diff --git a/packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts b/packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts
index 534ca8eee..a1d66c61b 100644
--- a/packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts
+++ b/packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts
@@ -10,13 +10,13 @@ import { watchDeadline } from '../watch-deadline-helper'
const modes = ['static', 'runtime', 'pre-render', 'progressive'] as const
const manifestURL = '/@id/__x00__virtual:master-css-manifest'
function fixture() {
- const parent = realpathSync(mkdtempSync(join(tmpdir(), 'master-css-manifest-startup-'))), root = join(parent, 'app'), external = join(parent, 'external')
+ const parent = realpathSync.native(mkdtempSync(join(tmpdir(), 'master-css-manifest-startup-'))), root = join(parent, 'app'), external = join(parent, 'external')
mkdirSync(root);mkdirSync(external)
const dependency = join(external, 'nested/tokens.css')
- writeFileSync(join(root, 'style.css'), '@master entry;@reference "../external/nested/tokens.css";@utilities{card{@compose paint;}}')
+ writeFileSync(join(root, 'style.css'), '@master entry;@reference "../external/nested/tokens.css";@utilities{card{@variant paint{padding:1rem;}}}')
writeFileSync(join(root, 'entry.js'), 'import "./style.css";import manifest from "virtual:master-css-manifest";window.manifest=manifest;')
writeFileSync(join(root, 'index.html'), '
')
- return { parent, root, dependency, write(value = '@utilities{paint{padding:7rem}}') { mkdirSync(dirname(dependency), { recursive: true });writeFileSync(dependency, value) } }
+ return { parent, root, dependency, write(value = '@custom-variant paint{@media (width>=7rem){@slot;}}') { mkdirSync(dirname(dependency), { recursive: true });writeFileSync(dependency, value) } }
}
function noExternalEvents(): Plugin {
return { name: 'test:miss-bootstrap-watcher-registration', configureServer(server) {
@@ -41,18 +41,18 @@ test.each(modes)('BH-0004 manifest bootstrap reports HTTP errors and recovers wi
expect(initial.status).toBe(500);expect(initial.text).toContain('tokens.css');expect(initial.text).not.toContain(' | 373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc → null | Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately. |
+| rc87-c8992b1d2cb069c0 | rc87-412b1ba3107a0ec3 → retired | packages/eslint-plugin/tests/prefer-canonical-classes.test.ts — prefer canonical classes compose directives / valid[7] / | 373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc → null | Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately. |
+| rc87-9c498b75f794b066 | rc87-4da48330a0cb81b7 → retired | packages/eslint-plugin/tests/prefer-canonical-classes.test.ts — prefer canonical classes compose directives / valid[1] / .btn { @compose "font-size:16px margin-md"; } | 373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc → null | Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately. |
+| rc87-7bfafd80ccb12306 | rc87-9fc25e01696467d1 → retired | packages/eslint-plugin/tests/prefer-canonical-classes.test.ts — prefer canonical classes compose directives / valid[2] / .btn { @compose { font-size:16px margin-md }; } | 373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc → null | Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately. |
+| rc87-a9089141c66a0123 | rc87-3859acb15543b980 → retired | packages/eslint-plugin/tests/prefer-canonical-classes.test.ts — prefer canonical classes compose directives / valid[3] / const css = '.btn { @compose font-size:16px margin-md; }' | 373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc → null | Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately. |
+| rc87-a93cde17bde04a07 | rc87-bd41a23cea075da6 → retired | packages/eslint-plugin/tests/prefer-canonical-classes.test.ts — prefer canonical classes compose directives / valid[4] / @compose font-size:16px margin-md
| 373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc → null | Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately. |
+| rc87-4e00d48fec9dd39c | rc87-eea13400378d81a7 → retired | packages/eslint-plugin/tests/prefer-canonical-classes.test.ts — prefer canonical classes compose directives / valid[5] / | 373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc → null | Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately. |
+| rc87-8ad65d3ab79a1f48 | rc87-8ad65d3ab79a1f48 → rc87-27e60509430513e9 | packages/eslint-plugin/tests/schema.test.ts — provides an opt-in stylesheet config | c207ef39336748ae6323e8f9733d936e005fa0b7b117a8f32bb9aad774140b90 → ace904c0aa312ec6c9f931285c2e281bb05e9629df0f5614b5605a45f4f2a8a0 | Assert the removed stylesheet config is absent and recommended config contains only source configuration. |
+| rc87-cce0d208b209b2eb | rc87-cce0d208b209b2eb → rc87-cce0d208b209b2eb | packages/language-server/tests/diagnostics.test.ts — publishes exact @compose class diagnostics in CSS documents | df00fdae0eb774276257b8172dd9cec36a4223b3c8540bfe0c102708e11f31e9 → a25a264a47e0c764a97b5fe9147604ada2ee743170063354c2cd307d8f977ad0 | Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling. |
+| rc87-057f64e6f899063a | rc87-057f64e6f899063a → rc87-057f64e6f899063a | packages/language-server/tests/diagnostics.test.ts — publishes exact @compose class diagnostics in SFC style blocks | 24e1c8cebce31d502263084fd59eff6228173cdc825d5cf4a0a1d8c20f0a680e → 7e80c48215904c0af08dd5245190e121e40b4473452a35cda9a1b6b2a12bc2a5 | Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling. |
+| rc87-4d3a4318c7c80d47 | rc87-4d3a4318c7c80d47 → rc87-4d3a4318c7c80d47 | packages/language-server/tests/diagnostics.test.ts — preserves UTF-16 offsets in Svelte style fragments | 614c61308e7c12dd8c2b8fdc206b3fce5b5b00c683ccb89f950215e0a253f32e → d0e7ea203025f7f41728f56b22405fb88a5bd9e2d580993d1dafd25b2105bae4 | Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling. |
+| rc87-c9dc0a318d3d099c | rc87-c9dc0a318d3d099c → rc87-c9dc0a318d3d099c | packages/language-server/tests/diagnostics.test.ts — publishes quoted @compose syntax diagnostics | 38abe58d284e9ed5aa721551425c78d0e6f149541143a298697f35e59fde35af → 01f5374d1f6894d205ec956560806d4ac9dd402c5ea7308fbede8fba4e83c9d7 | Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling. |
+| rc87-7d4098ee94edaa69 | rc87-7d4098ee94edaa69 → rc87-7d4098ee94edaa69 | packages/language-server/tests/diagnostics.test.ts — publishes grouped @compose syntax diagnostics | 7cebfebc33ef52e6d153b26d25398b8e67f8f8c9c963fabb8d50b5e410de804c → 476ae7af9a5187c589328eafb1c90426f2d348f9f86d33764e676d620476f9ba | Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling. |
+| rc87-e87cb64b936fab83 | rc87-e87cb64b936fab83 → rc87-e87cb64b936fab83 | packages/language-server/tests/diagnostics.test.ts — publishes manifest loading diagnostics | e94ae29c6d7a565e01c2cc80d9d4f4119af80aef68a200b3e69aeff29fdaf60d → e31f9f87223c5961a7b8ce6eff7aa2ccd2f821599451b02ee50c7642f1270893 | Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling. |
+| rc87-2ca28a8fee7427df | rc87-2ca28a8fee7427df → rc87-2ca28a8fee7427df | packages/language-server/tests/formatting.test.ts — returns document formatting edits for CSS directives | 23cb0ca8d52a4f693c74d7225983ce4c6a5a8cd3a044265329e535be9a3f7a79 → 0133441fdb6e4dcf464955b79bb68b47be3ce8b9bd40af2aaebde816559c5308 | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-aff0c5687d375213 | rc87-aff0c5687d375213 → rc87-aff0c5687d375213 | packages/language-server/tests/formatting.test.ts — returns range formatting edits for CSS directives | 8c74d9460292ab77055e94d545b222fead38ba65fd82d86c0a18c90d5a994709 → eb914f139414d777665294bae2dda12eaaecae44b7cd47854a6918cbf7300cd8 | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-dc7591a4ae298a44 | rc87-dc7591a4ae298a44 → rc87-dc7591a4ae298a44 | packages/language-server/tests/semantic-tokens.test.ts — returns CSS directive class-list semantic tokens in active mode | 6d5dce779921cc5ae5b8b1799b53ba3181fa9eaf8b1291d0e85587c750bfce46 → c2d01f313263da035fec7b65cf62fb7ab7ab22e2bc3669bd3868aee48efddaaa | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-3dbeb88b8f407cb0 | rc87-3dbeb88b8f407cb0 → rc87-3dbeb88b8f407cb0 | packages/language-server/tests/semantic-tokens.test.ts — returns CSS directive class-list semantic tokens when highlighting is off | ca81ede3c884219b41514efb0673a2824952ad5918662e066e92ba9d371e4754 → f60183bbd3c4019a5601d4967b83fa4e7f475ae7094d14475af389be09705099 | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-2fa1682486ebcf8c | rc87-26a0fc70a4fe84a2 → rc87-26a0fc70a4fe84a2 | packages/language-service/tests/rc87-shiki.test.ts — defines deterministic TextMate grammar scopes for CSS directives | ddc49cb77fb114233ca75b1d782de0fca5ec3df506b8aaf14455064232c3ab66 → 0c81536fd07fe53affba02b91eacb6101b910de445b6767c34b6119edc3e5393 | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-50a6d8ef235beb32 | rc87-75bb3596f5f148b0 → rc87-75bb3596f5f148b0 | packages/language-service/tests/rc87-shiki.test.ts — registers a real Shiki TextMate injection grammar for CSS directives | 01733549eb1cda0955c23fd38874b9a386ea2827d471c055f66cfc76ed024f17 → 354b739b9da65931bafc2e0b9100dffa14e82bf0038efc797fde28b0d449aa8c | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-12186aa5abf43d09 | rc87-12186aa5abf43d09 → rc87-12186aa5abf43d09 | packages/language-service/tests/shiki.test.ts — creates Shiki decorations for CSS directive class-list spans | dc739deaba64ac325fa9c31dafaade59670639080252c627dd3b06e7dce25c9c → 18ca5a9cff56d761acb43883f730888fe83d399101306c910df4770d33fbca1b | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-45de05367dfbdb24 | rc87-45de05367dfbdb24 → rc87-45de05367dfbdb24 | packages/language-service/tests/shiki.test.ts — uses semantic token scope styles for documentation Master CSS tokens | 0e416e0ba32a231a7c2603e56bc12915244436a08d3fbb5b50a25699ad654527 → dbd90dff6f48b274b163a3b0e2f8c14cf9a79585226091342930a342dc8dba32 | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-49294136507486df | rc87-49294136507486df → rc87-49294136507486df | packages/language-service/tests/shiki.test.ts — uses semantic token scope styles for CSS directive class-list tokens | 18e667b81f01c4f29798d1ca8d9a368227b8aba1fd8199e17109773cfa7885ba → 8b583f7a42a0e2fad7cc7eebc9e782e97b4b2978cd813d4886cf813fe137c4f7 | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-70467a45db659966 | rc87-70467a45db659966 → rc87-70467a45db659966 | packages/mcp/tests/core.test.ts — audits setup and inspects CSS-first directives through MCP | 26c57562a06bf83f235b579db6905a5e1e9410db7699429bdf4db03dcf1f3790 → 44813697951688c7a5d07bed3a5b292f512feef6d598e9e684022419a8cb0d89 | Advance MCP directive inspection to version 2 after removing composition traces; preserve directive inventory and setup assertions. |
+| rc87-d58e50c2a10ef009 | rc87-d58e50c2a10ef009 → rc87-d58e50c2a10ef009 | packages/mcp/tests/core.test.ts — previews directive formatting without writing until the preview is applied | 6ebbc3c4d71b71d11587b300039213cd4f0918b0d5b50754854eb4cd4ee4afac → 516ebeade7dc639994e49b5b265fd83c7ae8a11b2008a4115119a1b87f507a46 | Use safelist formatting in content and file previews while preserving confirmation-token, no-write-before-apply and applied-output checks. |
+| rc87-bda5260bf5403fa5 | rc87-bda5260bf5403fa5 → rc87-bda5260bf5403fa5 | packages/mcp/tests/core.test.ts — scans project sources with missing CSS classification | 5b44a6d5eb4caa8bac41aa242359bc618befb7d55d5d29dbbf0b0306d433da8a → 2cf3007f88ae0c20dfdf22a7b91775b63d4557e980db95b94c0f499c91d1336b | Advance the diagnostics report expectation from version 3 to 4; scanner, lint and missing-CSS assertions remain. |
+| rc87-6c45d1556603cf91 | rc87-6c45d1556603cf91 → rc87-6c45d1556603cf91 | packages/mcp/tests/core.test.ts — lints in-memory content without requiring a file on disk | 42139dc561f4d78ef4dcd1b261380b781f15df9dbe2cc34cdce7d0f7bfe4a9fa → 69082146b1a90a7bb702dfa0a951f33bf0302be7b7ba1e965c66f901db25a771 | Advance the diagnostics report expectation from version 3 to 4; scanner, lint and missing-CSS assertions remain. |
+| rc87-f3a51f991c07da68 | rc87-f3a51f991c07da68 → rc87-f3a51f991c07da68 | packages/next/tests/build-state.test.ts — resolves @compose entries against the loaded base manifest while extracting native CSS | 999028c048d0793e5b6979d2efc0cbc7507e4e313db5910e0cc0f8ce509dc0e7 → c1ac4752d14ba983e1e1862ccfbcac48fe93d173ae4e55ebb96dbd7917f044f0 | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-9320973372113ac9 | rc87-9320973372113ac9 → rc87-9320973372113ac9 | packages/next/tests/css-manifest-loader.test.ts — keeps virtual manifest dependencies registered after invalid CSS and recovers on the next run | ec51f31ae6b1b3972a7de3aa9e4f5fa5e2eca1d5da86c5f2488d76cab018e1f1 → c0a24776c7042e71a562534258eb8ebb5403ca83f02bf20a14a0066b15cc684f | Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions. |
+| rc87-55b73f1c832fdb61 | rc87-55b73f1c832fdb61 → rc87-55b73f1c832fdb61 | packages/next/tests/stylesheet-loader.test.ts — locally lowers @compose in CSS Modules without importing package CSS | 885c6208f34a6fe859ed2517d48c45ab52b07335cd39f30cded2e00294e42970 → f0a8299334e547956fc0913129b34ec48982648af8daaecff44a983c19d8a28b | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-72b32e8d8e81f786 | rc87-72b32e8d8e81f786 → rc87-72b32e8d8e81f786 | packages/next/tests/stylesheet-loader.test.ts — locally lowers explicit @reference CSS Modules without importing package CSS | 27113417e16999a27f662af7aabdb95f3fa71ba2358b407d63790e709c1c7959 → 5554aa18cf2bb182eef13a015e70b874c7f6c32d8e63708ca24cf710f4ffe118 | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-0ab81b21d1f50161 | rc87-0ab81b21d1f50161 → rc87-0ab81b21d1f50161 | packages/next/tests/stylesheet-loader.test.ts — emits referenced default theme variables for page-level CSS | 185b3cbd370ebdde6741c69cd978c9232d48a528cd77869de50bfb3b83b38dd2 → 01efa6f04b79c289a466be4a9e8c57fc76d7fdc2809d335907550f5e4c5871c4 | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-bdad67c1e43d1886 | rc87-0edd975cbfed3450 → rc87-0edd975cbfed3450 | packages/next/tests/stylesheet-loader.test.ts — retains local resources when a discovered global entry is not guaranteed loaded | 8af8cbc7941d57032754c87c71b2c165bbcd5898a9f2028aff5bb23248c70638 → 21ff69ee9a48b1c808ba857d182dbd4844e19057186f6d7128c43cb51054da76 | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-fb72a22f3bdde978 | rc87-fb72a22f3bdde978 → rc87-fb72a22f3bdde978 | packages/next/tests/stylesheet-loader.test.ts — keeps local style dependencies registered after invalid @compose and recovers on the next run | 749c44e1da3b05839483d03a5d9bff95a879b9d82b9fa330339806c729e413cb → f785e2ced3e33bcc71332fd4a058f117f25ef6631c836110ccf33c573d1ffe99 | Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions. |
+| rc87-b161e2fcad643e62 | rc87-b161e2fcad643e62 → rc87-3933ebb66361fdcd | packages/tooling/tests/language/format-directives.test.ts — formats @compose class-list preludes | 05437de834f7f49769b3e2be73e85ed89625de7b78f55136fa8b2eba96aaa0a2 → a1bddf4676161d1441aefa687090b7474ed7725df45466b2b844eda32b99cc3d | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-8af187233ba94d35 | rc87-8af187233ba94d35 → retired | packages/tooling/tests/language/format-directives.test.ts — leaves quoted and grouped @compose syntax unchanged | 4484e2c5e6025e3f51fafa757b3455fe74f93a0f600da274bf71992ad8e881d8 → null | Retire this Compose-specific formatting fixture; removed directives remain untouched and safelist formatting retains dedicated executable cases. |
+| rc87-0fab234554e87fd8 | rc87-0fab234554e87fd8 → rc87-299bf6931184b6b8 | packages/tooling/tests/language/format-directives.test.ts — formats @safelist quoted class lists while preserving quote style | d3ccaf3848304bfe04e9395fad1e6339195a83e3836412fd50057a4e12b69ca8 → e273ca528027a1af0d65bdc37d4f3d210dd67cf332ad9afe36007f5794ef93c8 | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-e825fd439c22cdf5 | rc87-e825fd439c22cdf5 → retired | packages/tooling/tests/language/format-directives.test.ts — leaves internal styles dogfood directives unchanged | d13fb3cb7393de85f33a24ccdb3bceaa67d04a582581087cfc00996285df6d9b → null | Retire this Compose-specific formatting fixture; removed directives remain untouched and safelist formatting retains dedicated executable cases. |
+| rc87-2b946a760e1253bc | rc87-2b946a760e1253bc → rc87-2b946a760e1253bc | packages/tooling/tests/language/format-directives.test.ts — ignores directives inside comments and strings | 10d3e35e6378cb42c37d508ff4746873c76b48212433f36ba1414450fef1c908 → bce9907c6f150b0714f4b2d18f2b606f47fd21fdb48ab2106490d4cb1120e0cf | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-a0e40cebddb38394 | rc87-a0e40cebddb38394 → rc87-a0e40cebddb38394 | packages/tooling/tests/language/format-directives.test.ts — can limit edits to a source range | c839318ad50dbd165a28d6ba094a60c7957b3cfa5ffb39624376b28c481872c5 → ab6d66b3bc5a95adbcbb870218c1cd93764cf175ed25f612f39ef0305683e9ff | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-6f3145ee8c7d46b5 | rc87-6f3145ee8c7d46b5 → rc87-6f3145ee8c7d46b5 | packages/tooling/tests/language/rust-language.test.ts — discovers UTF-16 class contexts for markup, script, and CSS | 0dd4830d5658ac62618705a14ab132f37fdd1097d9554f8c5f8b5e81e3d6381c → 26cfc0299cdd25dedfa751a027fe4657616bf1508deeac34d6bf7466a044fb6c | Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested. |
+| rc87-4830c5bbe833a934 | rc87-4830c5bbe833a934 → rc87-bc885bad6849fc41 | packages/vite/tests/plugins/local-compose.test.ts — lowers @compose in CSS Modules without emitting a Master CSS slot | a707c5a00f741455f5828147a6f7f5e17b5f868a0c1965a34c3ff8ab3bbaf820 → d3712ff1f2315a709e0d53a29d5fb52f0b9cd5af1f31fc2244b5ed545ebe8d56 | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-979c4a4224515564 | rc87-44bc64018d765f9e → rc87-6cf452021b9b88ee | packages/vite/tests/plugins/local-compose.test.ts — retains local resources when discovered entries are not guaranteed loaded | 5f498467821193401fa69c88151c3eb0ab0a2dc6e4d49657a9cc8df0bd52dab6 → 818586f8408fa9fb11595dc40c57acb3ff80e8ab001496c427b71dfa972a8a00 | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-3c895256e4ada270 | rc87-3c895256e4ada270 → rc87-2296a08861e42312 | packages/vite/tests/plugins/local-compose.test.ts — leaves ordinary CSS and Master entries to their existing pipelines | 65a4141289437558edcd825e52cbcdee1c0c4797601f4513985bdc90d0f07862 → 2e26db7f9b49c0ff9fdbbe2a21c00eb052edbddda693f086d13c057acf1f7f38 | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-8f612ed6cfd8a913 | rc87-8f612ed6cfd8a913 → rc87-af46134c2e32e600 | packages/vite/tests/plugins/local-compose.test.ts — lowers @compose in SFC style requests | f4b8ac676237fbd8ee9a1673668f0c4b0ca998d482addd225a8538487eae66a1 → 19afcb2cd1c36baecb1fd6cc224aa3e4340b5bf568b4c44b08691b71fc0e98c0 | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-054c879ed15dfa40 | rc87-054c879ed15dfa40 → rc87-eecad1a7a2b1e039 | packages/vite/tests/plugins/local-compose.test.ts — lowers explicit @reference styles and watches the reference file | 63103fb922d62f0e373dd714a61a4ed02cf74b65316cb69e838d35530b33de37 → 4b7245428c0bcdc48304ea307cc2a4a3c460bdd10b9fd4e6613a8dc8d7762a14 | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-38a81a3aed064c0b | rc87-38a81a3aed064c0b → rc87-992add79cfd20c24 | packages/vite/tests/plugins/local-compose.test.ts — keeps local style dependencies registered after invalid @compose and recovers on the next run | fcc5a58ac073347f8d9866f55bbfb9b9721ac8bb893e89663938dd7884cde639 → 6bc5648a4f2e5a7e5e57a87f267db89a47152678c03fda702dce74b9bfb16e1d | Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions. |
+| rc87-7bd1070dec3c3eb5 | rc87-7bd1070dec3c3eb5 → rc87-7be859c17bbf2af1 | packages/vite/tests/plugins/local-compose.test.ts — reloads local compose modules without forcing a full reload when project manifest dependencies change | 3289703b02ff412452c919066b6c9a1cfe76cf92aa5ae7f82fa6d658e3c63e44 → bf646e17edf3653a683172a790957b7bdbdecf077144fe393e342cdd40977479 | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-8c38f5f8d793e40e | rc87-8c38f5f8d793e40e → rc87-8c38f5f8d793e40e | packages/vite/tests/plugins/manifest-loader.test.ts — keeps per-file manifest dependencies registered after invalid CSS and recovers on the next run | 3720f91c97e1f9fd063f6c36115a0da7878175858aa0a498816e9037e101e91c → 262f30cf7520a06c4ac952d00712e47f56a8ead5755cde069ff0c1b30bfb5a99 | Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions. |
+| rc87-011aece17a20bf7a | rc87-011aece17a20bf7a → rc87-011aece17a20bf7a | packages/vite/tests/plugins/manifest-virtual-module.test.ts — keeps default manifest dependencies registered after invalid CSS and recovers on the next run | 5a4c261687085226bb3f3ff03408214270c27b632cbe30f1dd412353203d32d9 → dacd55188818471237f1f41e6531482f7ff30a3af216723ac0b19a0758f6897c | Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions. |
+| rc87-48ff4814761d1c90 | rc87-48ff4814761d1c90 → rc87-48ff4814761d1c90 | packages/vite/tests/plugins/style-entry.test.ts — keeps managed style dependencies registered after invalid CSS | 508f6473ef88e3d56d375c771c446075ef4878df5d648a91ea80589cd41e681d → 652c915163351d4fa0a4fe4e70d83e14eea0a4293a4bcbb21bf1115673212f55 | Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions. |
+| rc87-69b24f0ff70fd33c | rc87-69b24f0ff70fd33c → rc87-69b24f0ff70fd33c | packages/vscode/tests/textmate-grammar.test.js — highlights every Master CSS directive keyword | e7382ef0b147d626f9678ede371265705c81f2a46f1284ce66d167a97326799c → 12645ef688592a2ef9c96d88708d4b63ca3da0f6d6cea7f31cdcc128c0a007ed | Use supported safelist class-list highlighting and native declarations in selector/variant fixtures; exclude Compose from supported directive keywords, and verify removed Compose receives exactly native CSS highlighting in an additional case. |
+| rc87-5b8cc29aa8a94cb9 | rc87-5b8cc29aa8a94cb9 → rc87-5b8cc29aa8a94cb9 | packages/vscode/tests/textmate-grammar.test.js — highlights directive preludes, strings, class lists, and dynamic patterns | be22a37a9e3bbec979841b086aa4cac5593f82e7c6273e91043b91472fd5239a → f618a028705a4f002cabc9c7f9ca14b7a929e90be1f80b72cc90ae74a401c2e8 | Use supported safelist class-list highlighting and native declarations in selector/variant fixtures; exclude Compose from supported directive keywords, and verify removed Compose receives exactly native CSS highlighting in an additional case. |
+| rc87-a6cb1f63877dcff7 | rc87-a6cb1f63877dcff7 → rc87-a6cb1f63877dcff7 | packages/vscode/tests/textmate-grammar.test.js — highlights custom variants, nested selectors, queries, and values | 192d095d345f8dd5b39ea053feb1eebfc9e0cd1c8df4f10892f187db3fe11c1d → 161f82b215b02c2f3db4ebed9afa34317d801b91f48c7421741b79117ba198d7 | Use supported safelist class-list highlighting and native declarations in selector/variant fixtures; exclude Compose from supported directive keywords, and verify removed Compose receives exactly native CSS highlighting in an additional case. |
+| rc87-5a3a055267fe6e03 | rc87-5a3a055267fe6e03 → rc87-5a3a055267fe6e03 | packages/vscode/tests/textmate-grammar.test.js — highlights detailed Master directive syntax without misclassifying native pieces | a0caea6b591cc50c0f9b4c8d8e435f84ba1576875740522f1cd86ff363208f34 → 4fd16e059938da8cdf902849ed38ae9a0a2237003661b1662b9a39dadde16efe | Use supported safelist class-list highlighting and native declarations in selector/variant fixtures; exclude Compose from supported directive keywords, and verify removed Compose receives exactly native CSS highlighting in an additional case. |
+| rc87-41097ea300e09962 | rc87-41097ea300e09962 → rc87-41097ea300e09962 | packages/webpack/tests/plugin.test.ts — locally lowers @compose in CSS Modules without rewriting to the virtual CSS import | 6769de48065438edaa6849ecccf37a266366a5b000d191fd2ffb6b0e38486e6f → bf1d0f61bc562d04dde4dd9d5c02bb1fe05e726c14eb83595c260367a25ad80c | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-b4ff936f0bef3660 | rc87-bc3220b00a9e8560 → rc87-bc3220b00a9e8560 | packages/webpack/tests/plugin.test.ts — retains local resources separately when discovered entries are not guaranteed loaded | 80bbc641b66bf2c83003b04e84606c79109d2ea3f496126c5ae3be3fec1c33d8 → 70e4a509a9a9983922619f170f9deb0bfdd7fe0c99eca644284372b71b84e0ff | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-7b3f20f279ae6e88 | rc87-7b3f20f279ae6e88 → rc87-7b3f20f279ae6e88 | packages/webpack/tests/plugin.test.ts — style loader keeps local style dependencies registered after invalid @compose | 0070e262990127f859bd73ffafeab2dab19e5d95bad0747dcf45c22c563b187c → b6791a110c5ff6b58d3914a5c7f475c9e3198f2cb249e751515b0f4b61a437f3 | Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions. |
+| rc87-7551338099ad9f97 | rc87-7551338099ad9f97 → rc87-7551338099ad9f97 | packages/webpack/tests/plugin.test.ts — locally lowers explicit @reference CSS Modules and reports reference dependencies | acd2963ec6b70f299152357f779674f905594540e4cdba42ff40455666bc2fa9 → 4f316caa734bbdeb338d95f713309505dcd07aecbebe1c69dd03546479dd20c5 | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+| rc87-1300f23ca2eac111 | rc87-1300f23ca2eac111 → rc87-1300f23ca2eac111 | packages/webpack/tests/plugin.test.ts — keeps virtual manifest file dependencies after invalid CSS | b61f5415f06b20db1fbc51ecb57bbbc11a995ee893d6ad33147bd925500bd15f → d7bc84f5bde4c4581e6cdc6e79c0d4d184c82dcf3a2ac542be71601c7c439034 | Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions. |
+| rc87-b8a6d8670385ca12 | rc87-b8a6d8670385ca12 → rc87-b8a6d8670385ca12 | packages/webpack/tests/plugin.test.ts — keeps ?master-css-manifest file dependencies after invalid CSS | 49590c9a54c346ff8743f63c9f1226904aea30bef076d70a3597d99bee41a7c2 → 19d3d8d7c2cb3538f1af87dbb4b8c6109fd2f4cba0a7d7dfdc6e93fac477f806 | Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions. |
+| rc87-4eaffae5c3984d01 | rc87-e7d134890a94e6d9 → rc87-e7d134890a94e6d9 | packages/webpack/tests/plugin-runtime.test.ts — keeps managed CSS fallback reset dependencies after failed style registration | a452900bb250eaf3b7c982a364e55b90bc8892a6b86a3ab0ff69605ee2379db3 → a491a165eba005ec99a62a7f48a237e6bb33961f8afd9876e120e8f3e5b9f3bf | Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API. |
+
+## Surface decisions
+
+| Surface | Prior digest | Current digest |
+| --- | --- | --- |
+| public-api-contract | a4efe9c284c329734df1bd19428a70fe05ca5669eaa6ecfb37bca3c284312648 | dc932f985895b73e74651d6c657a2855c78c3ffcfd22ee9e8cbe8b26ac7f3564 |
+| binding-version-contract | caf4b8e6f33f7b9e5c26a6cd4f9bb92d6a581e2a116e2bcb3091bfc18d0ab243 | 34c602f88db14176975785917fb088331f4092ce7d2ca7c78c079ca14fc2fe40 |
+
+## Manifest file supplement
+
+The four adapter test files replace Compose success fixtures with native variants/theme declarations and expect the removal error on invalid input. The Manifest implementation files, all 21 reviewed Manifest case digests, upstream overlay, adaptation behavior and invariants remain unchanged. The file-level hashes change because those files also contain directive/recovery tests. This supplement does not change browser import/fetch behavior.
+
+| File | Prior digest | Current digest |
+| --- | --- | --- |
+| packages/next/tests/css-manifest-loader.test.ts | 599b3566096d66fac471824dcc97f639c33cb7621d8602afc38f976a9e6b762d | bff410e72ce62b0c64d1c24ea567cea92f9eb35af95c959d0bee2832e5f612c1 |
+| packages/vite/tests/plugins/manifest-loader.test.ts | c7b9ed2b0cff059c0ea0c637e7356b277e56ac58cb8bf52607de4ff8221fcb32 | d1bc876582ad6e0f9b1a88ba00a75c1b3616b072df9f67cc7dd960f02602d9cd |
+| packages/vite/tests/plugins/manifest-virtual-module.test.ts | 77148fe32f807138339ea30f94ba76b9f4815680475f88a768f54fc426e4e4a0 | bf099daae9d9bf4f3dca24ff01df97fe931039ea2024835b9352cd0790531eb0 |
+| packages/webpack/tests/plugin.test.ts | 8fbfb3b737bb2e99924f82a73d88f673c6e1c604b51614c3bf2288c7e13979bb | 40fd5d98515cee83f121f08a09bed0fd5f905aa786d2f30f2161ab1af079c002 |
+
+## Validation status
+
+Conflict-focused tests passed: Vite 153, Next 6, compiler migration/ordering 19 plus updated issue #448 4, Rust removal 4. Full builds passed after backing up stale local generated declarations. The corrected tooling Wasm smoke suite passes 4/4. Full Rust checks pass. Package validation passed 110/111 tasks before correcting VSCode grammar fixtures; the scoped VSCode rerun passes 36/36 tasks and 34 tests. Site docs/Reference/LLM tests pass 17 + 20 + 32. Combined-version CI remains mandatory; consult `.ai/freeze-audit.md` for final results.
diff --git a/parity/eslint-policy-freeze-approval.md b/parity/eslint-policy-freeze-approval.md
new file mode 100644
index 000000000..81b5ef1ce
--- /dev/null
+++ b/parity/eslint-policy-freeze-approval.md
@@ -0,0 +1,126 @@
+# ESLint diagnostic and autofix policy freeze QA approval
+
+## Approved scope
+
+Aron explicitly approved these 112 exact case differences in Codex task `01a0dbdd-0a03-7673-9933-a64a98fd1de5`, replying to request `call_M5C9Zebls1XKr1iCmuUg19je`, item 0. Recorded at `2026-09-27T17:33:53.038Z`.
+
+The baseline is `bd164e4b5ae3a713940913d745183e9ab6b54263` and reviewed target `4c0690aed92c5cd5021bea9b7fa3f6dcbdd8482e`. All target case digests were reverified at `4c0690aed92c5cd5021bea9b7fa3f6dcbdd8482e`. The pinned review JSON SHA-256 is `add18971b345046cef1165d4594a09c31b56948c28f4fc1c371c33a2bea58d2d`; patch SHA-256 is `72411b3cf4a04dbbd2aaed597ee556aa74ed71e3c78d23ecd2a09a60691aa29c`.
+
+The exact review covers generated-CSS conflict winners, preserved partial overlaps, conservative canonical fixes, native compose declaration rewrites, MDX display-content exclusion, vendor/standard CSS-value diagnostics, explicit raw-value syntax, and stable cross-rule autofix. Forty-five former invalid cases now intentionally produce no diagnostics. The complete 24-file ESLint suite passes 300/300. The issue 387 fixture and end-column changes are included in the pinned review.
+
+This approval covers only the digest pairs below and does not approve other migration differences, assert old/new byte equality, waive CI, authorize publication or close #445.
+
+| Source ID | Target ID | Source digest | Target digest |
+| --- | --- | --- | --- |
+| `rc87-391567b61761e5b3` | `rc87-be1c3a90118aff29` | `bf8b86b2f7ef0252f13f44104ebea418d41b656601dee199e2350537dc968df5` | `b6e4e7a2a2ede3157de9905cdc5de01cc9ad3c23dc2b9d3ab7c6170aabd2c367` |
+| `rc87-2d7ed4cfbec0f561` | `rc87-6383321bfb3c21af` | `3b0286e3200f10df07d50c78f6854cf9718b0cf92eac31e111ba665f9bfdaa52` | `ebf5f750e2a1c65fcd4ffb089889c32298f3569ad4533e3389d887547dcb8424` |
+| `rc87-cce4c18aae1d74d5` | `rc87-4d774e08644297a7` | `3b0286e3200f10df07d50c78f6854cf9718b0cf92eac31e111ba665f9bfdaa52` | `ebf5f750e2a1c65fcd4ffb089889c32298f3569ad4533e3389d887547dcb8424` |
+| `rc87-da07c18cc490324c` | `rc87-d9547ed9b9f5e4ad` | `3b0286e3200f10df07d50c78f6854cf9718b0cf92eac31e111ba665f9bfdaa52` | `ebf5f750e2a1c65fcd4ffb089889c32298f3569ad4533e3389d887547dcb8424` |
+| `rc87-fdcd1d9f64063f54` | `rc87-1baec11fe5f76f86` | `24b82a32934f19aac0b3bece621cde17deb288f182cfe2e7b37e9ab037486f59` | `f5e6905506dc5c8b5f9840dad099b632182f9fd1518ca5e4f4b9abc03d63524d` |
+| `rc87-1999ea10b3b32750` | `rc87-0a5baa22a14dd5cb` | `864577c33d862f45a708c531250e1f49c86e000f3d96e26029df9fa52b69d567` | `46eaae5defb4eac7814715e03a2208f4a360cd44964a0b451b65daea69134acf` |
+| `rc87-c89312d3d30db393` | `rc87-071ff7a856a4137f` | `7255c746c48fec245700be281b1fd2747e7dec5691c2bed1b7d9669e12af1d4c` | `929bdb0145c47ba268b5e031f176bebf5c8956bc9e482ad1b678902577651b48` |
+| `rc87-42c671c588ddda84` | `rc87-e9c2fc9e05a3e41e` | `7255c746c48fec245700be281b1fd2747e7dec5691c2bed1b7d9669e12af1d4c` | `929bdb0145c47ba268b5e031f176bebf5c8956bc9e482ad1b678902577651b48` |
+| `rc87-5691111c39a50ab2` | `rc87-0b929c832971243a` | `6435423f8c6cd500ebc0a1698877926e00664fabd565ce4118896a9052da3878` | `22daff76a797be052844d6dec05f02e1d62da115a479d57f831b8a9f1cd8b695` |
+| `rc87-bbac92e3c825c448` | `rc87-bbac92e3c825c448` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-ff05bdc57df805bf` | `rc87-e57971266b9e3aff` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-90b9b3ef00379f80` | `rc87-7b78be465a791af4` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-f60a866d8509f22e` | `rc87-7e2e3c70cb3772eb` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-534873fc29c8093d` | `rc87-3c7785c329b8d250` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-03ad82b0ba2fb87c` | `rc87-4e1d70b27818db36` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-10141c3b5bc8a95f` | `rc87-543493831b71d616` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-4c45cd11db6e7a62` | `rc87-595773f312c886f1` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-77da2091521b42f1` | `rc87-3be524758ae661d5` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-387dcd6370375c79` | `rc87-1cfbfc78d5723e1f` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-8b18d2adf383ded1` | `rc87-96d1689239293854` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-7cdff47024dc4a96` | `rc87-d3cec04c77616113` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-34145c99b79f0625` | `rc87-6af48924f405a79d` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-a9677a7014d6ed1f` | `rc87-183b76f2c83eae45` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-819b33f560336415` | `rc87-e4bb0a60d69454a5` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-7c20aa3cb230decb` | `rc87-8b68744e7c707eff` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-75e692740899ee0b` | `rc87-e4ec4443388c5560` | `b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752` | `aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f` |
+| `rc87-e1bc74276f9fda7f` | `rc87-37b3faeec0991f4a` | `94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c` | `b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c` |
+| `rc87-b90edd25bc89df60` | `rc87-b762ef59d79b3a5a` | `94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c` | `b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c` |
+| `rc87-1ec2176be61624b0` | `rc87-8ad7f469e0459c2d` | `94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c` | `b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c` |
+| `rc87-2b12ab30706efde4` | `rc87-486d568b650ce608` | `94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c` | `b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c` |
+| `rc87-edae79ffa999de71` | `rc87-6a44520f6a131ad1` | `94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c` | `b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c` |
+| `rc87-be74e9a8bebf4924` | `rc87-258f645b01db598a` | `78df1b65f3abb0913f31507f9643c26d14b8ad0793c92b44b5c7786d11d4b8e1` | `66d3c1f8434c9788fbc66a5cbe98ebf0de1dde77e69a34346daaee3c13b193b5` |
+| `rc87-33d661ebbaf4fa9d` | `rc87-1631cd89141b7072` | `78df1b65f3abb0913f31507f9643c26d14b8ad0793c92b44b5c7786d11d4b8e1` | `66d3c1f8434c9788fbc66a5cbe98ebf0de1dde77e69a34346daaee3c13b193b5` |
+| `rc87-29148015e682db52` | `rc87-24a83639da3db69e` | `71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506` | `2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170` |
+| `rc87-a383fec7a7a366eb` | `rc87-4cba8c4e54a925a9` | `71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506` | `2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170` |
+| `rc87-92eabf6d0c8890a9` | `rc87-11602bc2e0d1e20b` | `71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506` | `2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170` |
+| `rc87-f668461dc72c77dc` | `rc87-878c2a729c95e6ba` | `71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506` | `2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170` |
+| `rc87-861cdb723d388428` | `rc87-fe62af08ed4c2e64` | `71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506` | `2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170` |
+| `rc87-cac6a0fcc5cd90b6` | `rc87-dad95b3c8d66f94f` | `71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506` | `2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170` |
+| `rc87-b880302edee3495d` | `rc87-d088287a7400a9c0` | `71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506` | `2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170` |
+| `rc87-3e9b6b68f9ff714e` | `rc87-f793976db04c4e18` | `33b5d7fdba1f6b13ee8b53ce108116613375207740d6479b12ac056240686cfe` | `f4ef82a563e53cba1d5ab49098c6ff01fa5eae3c08a9663d363934fe36689eef` |
+| `rc87-60ba5ca3998b5d79` | `rc87-e90c7280e31b1551` | `dc7050f7779ceddd9d7894b8727c6ec8a4ce7f03dbcf1d666de83aef4f36d3cb` | `27b4ee00f2cd01b9235c352803f284531bb421c658685bea032db59ab545b763` |
+| `rc87-485132b1bfbaf0d5` | `rc87-5097538bd9cc32e9` | `dc7050f7779ceddd9d7894b8727c6ec8a4ce7f03dbcf1d666de83aef4f36d3cb` | `27b4ee00f2cd01b9235c352803f284531bb421c658685bea032db59ab545b763` |
+| `rc87-06717a8f6562faf5` | `rc87-7b944dca2fb78d58` | `dc7050f7779ceddd9d7894b8727c6ec8a4ce7f03dbcf1d666de83aef4f36d3cb` | `27b4ee00f2cd01b9235c352803f284531bb421c658685bea032db59ab545b763` |
+| `rc87-79fdc091ba87d1c3` | `rc87-b9e6a67127fb99e8` | `dc7050f7779ceddd9d7894b8727c6ec8a4ce7f03dbcf1d666de83aef4f36d3cb` | `27b4ee00f2cd01b9235c352803f284531bb421c658685bea032db59ab545b763` |
+| `rc87-4791de9bd3ce10ba` | `rc87-ad6aeef7c1209a80` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-45c544d8e94ae20e` | `rc87-b570a066868eddaf` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-60ea934649e2f3b4` | `rc87-f3d003739808f76b` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-c8370e92b0ea52b1` | `rc87-d8c6c9e2fa60d788` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-79f505548ab25dc0` | `rc87-8ffc1598b9dc80d0` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-a5d83c832ae37878` | `rc87-3313f3be1ef98186` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-e8df67bb4446fc40` | `rc87-fd89c460702b2b1e` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-50fb5138fb1e143b` | `rc87-3dba7f33ca7a1375` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-51e1ae4fab780db7` | `rc87-5f63e70d73b95553` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-2e4381707f8ba68c` | `rc87-d3ad3c8b00566fa8` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-9d33dd88f22d116f` | `rc87-bb6092b776f5dd75` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-173901b039dba06c` | `rc87-f73b7e35f57d3523` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-1cf4a441a12eba30` | `rc87-3c0d4a2731017ab8` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-5220ea8868363aac` | `rc87-643ca11a57fc1d78` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-0fbea12cbc344812` | `rc87-ae45226ad14cab35` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-c15b6b254db828d6` | `rc87-9339668b01062296` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-7e8a2aa57fd614a5` | `rc87-cea0ef3a37d02e26` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-7931f166ae9c26b4` | `rc87-a0e83696b4af425f` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-a1b42b0ae4f35da5` | `rc87-4f9aa6e22fad7159` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-61552abd57dcc78f` | `rc87-f7a7a2067fb5abfa` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-24a4759cef2ebf86` | `rc87-02669c9330744b98` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-c74944578664b6a3` | `rc87-226dd738eab13d14` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-8f20942924f27cfe` | `rc87-8a173ee62aca252e` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-d90f6cf28023ebba` | `rc87-4efd7aaf1d9a8bc1` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-c183ed2405f120ce` | `rc87-26c5688398c60dc7` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-20e7d0283a684a74` | `rc87-7d6dc8b43d19d6b8` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-f569221ff687383b` | `rc87-484523ab64fd28f6` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-927cd4e360482a28` | `rc87-04a5ff1a14ac391e` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-7989689229005312` | `rc87-f635a0600e7a4e8b` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-c6420e672fd9b493` | `rc87-e33fa1ec98f13fda` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-af050a3e3399a5e3` | `rc87-9aeb5d039b18dbfc` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-290c76660baf3210` | `rc87-f1821005802355bb` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-3a9e07cc4a862b5d` | `rc87-05944ffacbb5e721` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-fc59a066e51fba4b` | `rc87-339a747bf2a86a96` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-431ae057ef257d7d` | `rc87-4bed6a1f03ad954b` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-e7cbef34c3653ad7` | `rc87-793f9d121e337eb8` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-903249b8eb142324` | `rc87-b36719969853c597` | `7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3` | `d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e` |
+| `rc87-7e2eb27a73d2ceca` | `rc87-a43613ddb550e64e` | `1228341c6c043be83b8121ea56f3bd19207f4eb4df889f0dd9f51c817051dffb` | `13a9f6b37151454d6d955669cb342540980817150b5e237a0684ddb4762e3c23` |
+| `rc87-76b7f7f11b0d43d8` | `rc87-ebf2d9bb17d4dd05` | `d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080` | `4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023` |
+| `rc87-90185aed40a54c8f` | `rc87-f8f36e867e6ee492` | `d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080` | `4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023` |
+| `rc87-65dad9b1586a51c4` | `rc87-84b1d82884710190` | `d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080` | `4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023` |
+| `rc87-8e6548f7b2da966b` | `rc87-7db22740288005e7` | `d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080` | `4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023` |
+| `rc87-382f83ef3864438b` | `rc87-e519d40edf542cc8` | `d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080` | `4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023` |
+| `rc87-89945b41afd045da` | `rc87-39702b3475593a76` | `d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080` | `4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023` |
+| `rc87-bc1db7b003c91340` | `rc87-26ca6c44a09ea006` | `d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080` | `4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023` |
+| `rc87-7f8e60d953565a77` | `rc87-b3d64cd51950dff3` | `d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080` | `4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023` |
+| `rc87-8f5974e01fbb69e1` | `rc87-8f5974e01fbb69e1` | `d64eaca39e37bf8e5fa5f3c59b4bd1006dbf5a6d00df45b714a0f99c93f8813a` | `38dd62f0e4654c7a3dba7b3b31ab854c29ffd901ea47ab25cb4052ced306a4f9` |
+| `rc87-317d63ee42e0b4a8` | `rc87-27585f3bb7451fa2` | `d64eaca39e37bf8e5fa5f3c59b4bd1006dbf5a6d00df45b714a0f99c93f8813a` | `38dd62f0e4654c7a3dba7b3b31ab854c29ffd901ea47ab25cb4052ced306a4f9` |
+| `rc87-e4c50f8d1daf8371` | `rc87-663b44c939d8366b` | `fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc` | `373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc` |
+| `rc87-e44a27b12a65edc0` | `rc87-89ff89a1d9931034` | `fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc` | `373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc` |
+| `rc87-8fb40499263db668` | `rc87-0045c55ac923aadd` | `fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc` | `373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc` |
+| `rc87-1de48ca5936adff8` | `rc87-aaf2d6fea90b7d2c` | `fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc` | `373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc` |
+| `rc87-bf90ee70a9fdc07f` | `rc87-bbb04171a9c858fc` | `fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc` | `373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc` |
+| `rc87-c8992b1d2cb069c0` | `rc87-412b1ba3107a0ec3` | `fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc` | `373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc` |
+| `rc87-9c498b75f794b066` | `rc87-4da48330a0cb81b7` | `fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc` | `373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc` |
+| `rc87-7bfafd80ccb12306` | `rc87-9fc25e01696467d1` | `fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc` | `373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc` |
+| `rc87-a9089141c66a0123` | `rc87-3859acb15543b980` | `fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc` | `373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc` |
+| `rc87-a93cde17bde04a07` | `rc87-bd41a23cea075da6` | `fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc` | `373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc` |
+| `rc87-4e00d48fec9dd39c` | `rc87-eea13400378d81a7` | `fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc` | `373d1c2ab2accf7bd9e212e198e41d22afb3c9c70025b94e3a5a9672a07c4edc` |
+| `rc87-7d09d3eaa22afadf` | `rc87-307a7f6b77748dd0` | `1ad284f2a792a61f0a3847fe0780bc14b943ed34a9c1653c846103e1933a21a2` | `c841407a37b104cf2cbb716ffdb5a7286c98391c767890efea3274687e3959bb` |
+| `rc87-0d0340035f5817b7` | `rc87-538ba311c3382ba3` | `1ad284f2a792a61f0a3847fe0780bc14b943ed34a9c1653c846103e1933a21a2` | `c841407a37b104cf2cbb716ffdb5a7286c98391c767890efea3274687e3959bb` |
+| `rc87-2370a06cc7a679fb` | `rc87-64cf8a912f74145f` | `1ad284f2a792a61f0a3847fe0780bc14b943ed34a9c1653c846103e1933a21a2` | `c841407a37b104cf2cbb716ffdb5a7286c98391c767890efea3274687e3959bb` |
+| `rc87-4bcefb994f63ae52` | `rc87-2c09fda07095a6b3` | `1ad284f2a792a61f0a3847fe0780bc14b943ed34a9c1653c846103e1933a21a2` | `c841407a37b104cf2cbb716ffdb5a7286c98391c767890efea3274687e3959bb` |
+| `rc87-d1902226d6ba1a66` | `rc87-d1902226d6ba1a66` | `c70fc1fafe42788b8dabd0e60b5429a3f9bc25e2f41391c66c6d8f437a79351f` | `6fb884af637ce9c7575a6185dca6d9d2ea303b062263b418193543793ff1e321` |
+| `rc87-ff2d555affd59529` | `rc87-33c3c06b092c97ed` | `9fd81305b5110aa606eaa6d7fe85538c9d8e11938b9072522e32edd4238363e1` | `f3936b3d746e751709b51eafe45a37cd3a180bc44c5ee9d2e7d7041fba0fb23b` |
+| `rc87-30f5dd4a175fce37` | `rc87-118cf688556d2488` | `fbd581bd73b9c2e01fcd8f5517023d1d13782556d0d3133ba15ede8dcc069f72` | `f3dfb6a7dfb7dcd2b4d1bb9577e38996423d7ce6ad612ad9f3b792ad602d0f04` |
+| `rc87-ba03d9ed18eba206` | `rc87-b8465a63460df029` | `fbd581bd73b9c2e01fcd8f5517023d1d13782556d0d3133ba15ede8dcc069f72` | `f3dfb6a7dfb7dcd2b4d1bb9577e38996423d7ce6ad612ad9f3b792ad602d0f04` |
diff --git a/parity/eslint-source-sort-freeze-approval.md b/parity/eslint-source-sort-freeze-approval.md
new file mode 100644
index 000000000..4c671515d
--- /dev/null
+++ b/parity/eslint-source-sort-freeze-approval.md
@@ -0,0 +1,87 @@
+# ESLint source matching and sorting freeze QA approval
+
+## Approved scope
+
+Aron explicitly approved these 71 exact case differences in Codex task `01a0dbdd-0a03-7673-9933-a64a98fd1de5`, replying to request `call_Rymc3amZuZEVmXNTUT5wPiwh`, item 0. Recorded at `2026-09-27T17:29:00.229Z`.
+
+The baseline is `bd164e4b5ae3a713940913d745183e9ab6b54263`; the reviewed target is `f9a1d2b606ce19cc691bd5124eb200e3cf45171b`. All case digests were reverified at `4c0690aed92c5cd5021bea9b7fa3f6dcbdd8482e`. The reviewed JSON SHA-256 is `24a72e871ae9fe32614531ba710ab20fc53de0ba70fbc92e5dd66094c0453b89` and patch SHA-256 is `a92f8b3fc89415770a91009b55ca782669fc95207b38db0203df70add53b0a00`.
+
+Scope: named tokens use hyphenated spelling; removed x units use explicit rem, numeric font values use font-size, full dimensions use 100%, and border/background fixtures use explicit native properties or variables. The reviewed sort changes include padding-block before padding-inline, weight tokens before numeric font sizes in these cases, unconditional before conditional declarations, and native font:error/hello:world candidates before unknown classes. One diagnostic end column changes from 93 to 96.
+
+All 71 source cases have unique targets; 69 change ID. Vue invalid entries after the inserted static-bound-class fixture are mapped by actual case content. The focused five-file suite passed 80/80; the subsequent complete ESLint suite passed 300/300.
+
+This approves only the digest pairs below. It does not approve collision, canonical autofix, invalid/raw-value policy or MDX changes, assert identical old/new CSS bytes, waive CI or close #445.
+
+| Source ID | Target ID | Source digest | Target digest |
+| --- | --- | --- | --- |
+| `rc87-0384f3b3b701342c` | `rc87-7b41a862e4030c96` | `a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0` | `8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba` |
+| `rc87-73cad9690d62dfda` | `rc87-f94e4c6a9ddbfb45` | `a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0` | `8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba` |
+| `rc87-121eca8ae4a12480` | `rc87-7c72c4500f513930` | `a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0` | `8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba` |
+| `rc87-2739de51bb0b9064` | `rc87-f4999ec65aab202d` | `a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0` | `8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba` |
+| `rc87-69c7d819588308ea` | `rc87-0f7bacd8fe32d976` | `a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0` | `8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba` |
+| `rc87-d80e44996d737a35` | `rc87-9fc97507f8b09f85` | `a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0` | `8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba` |
+| `rc87-74150fed0ee9ede3` | `rc87-1335a251c9ba8d6b` | `a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0` | `8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba` |
+| `rc87-71c26cbe571802ce` | `rc87-5efba643d454eb30` | `f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404` | `1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535` |
+| `rc87-04b5f1fa22234454` | `rc87-aff3fc9a69b5e01e` | `f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404` | `1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535` |
+| `rc87-ada382187e7b929d` | `rc87-8ab761db962a9935` | `f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404` | `1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535` |
+| `rc87-932b42c5a9d001d0` | `rc87-fb4a0bf3ce677611` | `f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404` | `1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535` |
+| `rc87-c3ef6c69e66d8156` | `rc87-15ea415dd78cf756` | `f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404` | `1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535` |
+| `rc87-9bd2764ee78a0a8d` | `rc87-166b861322362d7c` | `f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404` | `1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535` |
+| `rc87-07634e28f7afb0ef` | `rc87-5300e9ab6e70ceab` | `f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404` | `1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535` |
+| `rc87-3a4a38c90f7e0fd1` | `rc87-69930928c51df76c` | `f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404` | `1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535` |
+| `rc87-55e07b6010f30b04` | `rc87-0a53cf8bf804ed4c` | `f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404` | `1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535` |
+| `rc87-9238938224cfbe8c` | `rc87-37b0618d5110cb62` | `f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404` | `1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535` |
+| `rc87-ae3e1cd935fb3624` | `rc87-c906589cd19e545c` | `f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404` | `1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535` |
+| `rc87-72347d9fca0cf282` | `rc87-dd1ce40b312553c1` | `98cad66954adc9b7d4caf27f5a22c09859e80bafb752c99d5ae50f78ea762c7c` | `2a4d108b6d1b7cdeffbe332d99edf5676e9590b1205d7220f05e973a7c2aa44f` |
+| `rc87-3731770b03cf8842` | `rc87-d1773083de9a4af0` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-d81e62746a996449` | `rc87-cdce0c007b32e07a` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-b21e7002eaaae11e` | `rc87-6e65a5879d544d60` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-790a18d44de49783` | `rc87-d59c1c2155c52b0b` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-78879dee5e5a5fd4` | `rc87-3704e501abdb4d91` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-4f4284d37cfcf2d7` | `rc87-45f9ef373c06372b` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-d564debe5f3e3c88` | `rc87-65664ec8f76a3f7c` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-0fac4681b1286a01` | `rc87-f8391c8017764f4f` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-b5bdd47f07eb28e9` | `rc87-dc14ba6611e91773` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-2552e1586dbd4b0f` | `rc87-27a27252cf30b61a` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-db89d2874d8adb56` | `rc87-727af0bc6be3c76f` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-0d9740de7a0666e6` | `rc87-f99b48a9f28c56fc` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-659aeeb89028f2e4` | `rc87-53a0bdbb67a2ec50` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-c27d05524b6a0623` | `rc87-08db82e6ef93a313` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-250dbbcdb7658b07` | `rc87-250dbbcdb7658b07` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-6dfa4eb1e9b2b6ff` | `rc87-8f5d923bb01e21e7` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-26de8cb0c49c380d` | `rc87-7afd9024c0cc27d4` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-a022507eafb16cc8` | `rc87-70c24af48c2966fb` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-dc2fd359c8fd686d` | `rc87-5a51d3aa7b9247c4` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-869f9913c6d75f24` | `rc87-585c3502503e1e8c` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-3434d9506ad2d965` | `rc87-0f5fb5f3574992ea` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-75f0511fd2777494` | `rc87-d8f1fc00ebe433de` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-06f2b00f300934e2` | `rc87-c384666d35b37f86` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-4605c33f442beac7` | `rc87-a9bacade145befc0` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-148c7e18a476afc3` | `rc87-409f3aad30fc1e1a` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-735e4bc260161106` | `rc87-765605c07843abe5` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-c6ce617cbc168890` | `rc87-f533fe78acf682cf` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-21fa966e71ae460a` | `rc87-64635132e789b699` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-242a467e7ab109f4` | `rc87-54e265d55921f80e` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-375fa31d769740e8` | `rc87-b9a3e5d892b0df36` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-874d84a062e94ed6` | `rc87-874d84a062e94ed6` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-3a57b3dfd2fd37aa` | `rc87-af5f947eacf06c29` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-463a53011dbf42f6` | `rc87-99b29058f308e11f` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-55b09a827503f2d3` | `rc87-6fa94790fc2e4baa` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-8e07710996dc6e5f` | `rc87-318fa4a994829b9b` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-e29cabd5414dc31f` | `rc87-5319c47c7bc03af0` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-67d3d5a79018c9bb` | `rc87-f9421a12697e06c4` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-33d4b201b52f02df` | `rc87-f9e3634c67f832b0` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-e67ac62b73502ce3` | `rc87-f9b74c17a9e18a5b` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-c16f4f7672b8f35a` | `rc87-55ce86259e161e9c` | `0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894` | `d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320` |
+| `rc87-e4085fd7350e8b1d` | `rc87-0e05853b8eace42a` | `5f97a5fd0b4214bd3096cc1e5c9ce7acd2f9d0ef359e4554da1e6512e17103c3` | `1bb2627dd67cf9cbdd9faba0c809a3e217332ae883d55bb96734a5301036430e` |
+| `rc87-c23710bf7c0a928e` | `rc87-17def6a582f8d400` | `5f97a5fd0b4214bd3096cc1e5c9ce7acd2f9d0ef359e4554da1e6512e17103c3` | `1bb2627dd67cf9cbdd9faba0c809a3e217332ae883d55bb96734a5301036430e` |
+| `rc87-779d01df6dc7ccf4` | `rc87-15dc035f90801671` | `b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7` | `857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496` |
+| `rc87-bab408a404989821` | `rc87-ad09939d0a2e97ca` | `b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7` | `857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496` |
+| `rc87-b63f6a6103298c55` | `rc87-378e215d42f03e2c` | `b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7` | `857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496` |
+| `rc87-02a57e263bf20d18` | `rc87-f53abef897ff3ae3` | `b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7` | `857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496` |
+| `rc87-c0618ad6b8fe85c4` | `rc87-506e50a060048290` | `b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7` | `857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496` |
+| `rc87-574a8c3fadc1e7eb` | `rc87-3aa3863e09304ff6` | `b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7` | `857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496` |
+| `rc87-98a0718183701f81` | `rc87-9faa6671e9da1d5b` | `b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7` | `857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496` |
+| `rc87-4aca934f26dc6c47` | `rc87-1b9dd5b2e97b57ae` | `b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7` | `857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496` |
+| `rc87-4ecbf4d220120558` | `rc87-af629033059af3d5` | `b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7` | `857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496` |
+| `rc87-73a56558ce38481b` | `rc87-e97542b1e64f5287` | `b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7` | `857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496` |
diff --git a/parity/final-freeze-contract-approval.md b/parity/final-freeze-contract-approval.md
new file mode 100644
index 000000000..7a3dd9e94
--- /dev/null
+++ b/parity/final-freeze-contract-approval.md
@@ -0,0 +1,217 @@
+# Final pre-integration freeze contract QA approval
+
+## Approval and integration order
+
+Aron explicitly approved all three remaining exact review scopes with “全部核准” in Codex task `01a0dbdd-0a03-7673-9933-a64a98fd1de5`, while requesting assessment of integrating the removal of `@compose` first. The assessment was completed using both merge directions before this approval checkpoint.
+Recorded at `2026-09-28T02:45:50.429Z`. The existing freeze HEAD is `0a81364e54c972a7638c72a2494b399ba5d8fc79`; its latest package-source commit is `1f96130564027798866b3fa0f6cd4224277c2a29`. All 192 target case digests still match the frozen reviews.
+
+This records approval of the reviewed pre-integration source/target pairs. The original review JSON and patches remain immutable. Integrating the separately implemented `9d9817241` removal requires checking the combined tree and updating affected evidence; these historical approvals are not a claim that later bytes or validation results are unchanged.
+
+## Reviewed scopes
+
+| Scope | Cases | Reviewed target | JSON SHA-256 | Patch SHA-256 |
+| --- | ---: | --- | --- | --- |
+| moved | 37 | `cdc0ccc0a47635804b0a26aa13c8633b380d01be` | `03f1028d39666b88b53b40e923cac3344a40162a6b9f9679271443aa9f061f8e` | `c4ae686f8f57ba8733253164c9acab84f729b61beb3515ee50536cb0c2739274` |
+| renamed | 45 | `21327b2d3531dc47054dd02cb97f62e0937e9bcb` | `9f196caebc444faf97123e2567b5d0f6b0f1da328ae5d15d731d7f01da215cf6` | `67e49dc5abb3298e6c367fe9ba91099241a2ed012fb4708598949ddc45d85b58` |
+| final | 110 | `5b3c57171557682d9e05fdc0292200a03712ee75` | `65d4acd0c117e1b927f1cc224ecad0698d0b09beec97b5c0805808c22c38b42d` | `c5134538c42b89144392b2e435a9dc0f044b3f31c182529cb97084de592d52f2` |
+
+## Validation and scope
+
+The pre-integration Windows CI at `0a81364e5` completed successfully: 59/59 package tasks and 36/36 example-build tasks, including Vite 676/676 and VSCode 33/33. Linux E2E passed 432 runtime cases, 10 Next cases and 34/34 tasks. Rust quality and all eight native-target jobs passed. The migration gate previously stopped at these 192 unapproved cases; it is regenerated and checked for this checkpoint. The combined removal/freeze branch still requires its own validation.
+
+## Exact approved case pairs
+
+| Source ID | Target ID | Source digest | Target digest |
+| --- | --- | --- | --- |
+| `rc87-d4518d189871ff5e` | `rc87-483e149697dc82dc` | `7b1c90684a03f4bd22b3a69aaa6cb6cebb7257cb5020471f56e3fe6e9d73321e` | `cb829edd46a5989a08a8d9613d138d2df5fd4b2fca1bf9b31a590cda710bdd8d` |
+| `rc87-72a6e40c6d1db474` | `rc87-e8e3813db2ec4ad2` | `dae7408fe6df6e0b680e5a4070fae57cfe187c6bb8043114ce8b888681acdb38` | `868a49f93958ef4ecaee050a9cdd8be539dc9daa3ab859783b2a022bcb004d2f` |
+| `rc87-92eb0b6c5a192baa` | `rc87-02d08fe1bc65b74f` | `42600805fed50d7238605b44eab8be1db372d406312b97b84b7d9dd3a8b58d09` | `55f6c27aff7e486808c9b98912606fc67d48eb6685d1e2f2761cf65bed594997` |
+| `rc87-73bc4a85932a4a25` | `rc87-86ca35133d982e44` | `f25aed4b10be7bc32a45cd3d9c2a5555d6185afa74e4a276f3dabf2548e4edea` | `a0bef2421ebf8aaa1b877f429552019639fe396af752775fb246af6b31f6cb8f` |
+| `rc87-e0381c6da6c8dc76` | `rc87-61f5ceb3b7b3873f` | `ec8c378826a08cc4f20c57fa34aa29c16fba277e60c9ca321b9ff0b6f35a9497` | `dcaf2cb8565737f58a3c5a2d95c37b1e5e3a4eddd23b97ea9fd0aac93f86f03c` |
+| `rc87-9095f2fd8e3e5c57` | `rc87-47269d16db9c434b` | `1c038e0a1c9209d8e3f612e1e525dff989c10e7c07557c37183d732cedc6ec92` | `2740d15a4369d2009fd14cf3e5da34b2e0059b464a0064ea033cc4133fd8052b` |
+| `rc87-de39e31d6ce721f6` | `rc87-508a868dcc7d87d3` | `3689c5b048f51ca6cbfc3e8b47813dc1b86f7639ec9197da7e0850aaf9e6b8c8` | `fbc0680319114e3b3df8cb0360e0732b9dc39115848d89529cb3d3ffd64a84d6` |
+| `rc87-4a2b41936f34b21c` | `rc87-6ad281259cdea335` | `f35486b415d9ea7e567a8d27db7e3f77ddce1452333003832e90ec7df3472dd0` | `6b806f8ad50bbd0abb5ff9745f9fd7f19189c43bfcb21bbc585ec92dd4ff9b55` |
+| `rc87-10ee6d1ffa4e2ae5` | `rc87-1c89d39168c10bb5` | `33557b4ced3d08cdbcb8c703a56b624b7d7b773b14cbe94fec4f81066109a325` | `ee878af12a1937099e894ddf06a84a770ca0da642addf21115a23610877d82ca` |
+| `rc87-97a879e4593a9505` | `rc87-49bff4bc61b57aea` | `1df44c37ae32a2bc325e26d00afa3b6a81b4d120835755cc299c0c1d229be445` | `324176f59509fc25078dcdd885390d5b3f5404b070ced16b1ffb02546cdc1d2a` |
+| `rc87-e5b18e5b1e1d7ea8` | `rc87-c3ff2e816462e101` | `b248e0901b0414035e52e9182b6d894db84d3d342a3c5a99b6f3066d367f98cb` | `4e83a0739f37df18cc7df76933925a302d36d353130294743a3846c71f1f6509` |
+| `rc87-6e9b0547f7b98e4a` | `rc87-9d104e2894cff55d` | `ceb68e6d3c75032d58b903fa3fa8edb2ccf755a5bd1218da88aeee8336090386` | `88e8f14f0fe41b1ac25b70bf59d6aa34a4524068f2a5d48d723d23dc8364cc92` |
+| `rc87-0aba2efeb424c147` | `rc87-54a31f8abe5359f4` | `a05db3c282d72bfdee4ffa6f0cff432e99accb149f570acecc292dd95c10db88` | `220aa4ba6c14227f77caa072fc85a36d41eb0e69baf3fc2db6715402d669908b` |
+| `rc87-60b1f716859ca953` | `rc87-c998ae2b052bfa29` | `c0f565703887a390f36a50042ea256719bf39406c6d8ad6317ef872081bea6ac` | `2f784486fdef3f30fadbf4f91a93923da412394b5cc7986f2ea36971acf7ed79` |
+| `rc87-a479c2cb69cb5caf` | `rc87-d315621d52fcfe2c` | `1a5f95a62d2e54bdeb6a31a75216345e91e81b864e7a2485feb2f5d9782d7426` | `78b91e1678db33a7e333bfdf179100cbfe1768aa2556b82899764a27fcfd9e3d` |
+| `rc87-68e5ef2fb20016d4` | `rc87-a38ee56f287029ee` | `1e2b33500e55816e3d78c2b4e068d25d80f51dcb699522039b721294520add34` | `c5dfd7d2271f755c47e3f1c44d038b860fa24b559d5e02f17a8cec581ae7e90a` |
+| `rc87-541c5b0c6e0b47d9` | `rc87-93d062d388ddf5bf` | `512225e8a6b957154714863b9fcf26e71ff370ec8e600b61cf4f20393dd7dde7` | `eca94a2d7b311b7871d8fbc3e75cf384f61c2b30fd01a8ff13f55007e6984b71` |
+| `rc87-f14125a6e96736c0` | `rc87-414bd30d2442b401` | `c431b4b389d66c7b3c4056fc224b7400a6b7b76f685c5fd20759e813498db1ad` | `81eefeae8a2ac840ffdc9025668622baf7a864170a2c60d0ff36fee38588687d` |
+| `rc87-c709d394d3355b26` | `rc87-ac395974dce68384` | `4fcf14196209baeb82e7cc42a6f689af45d4359647c1bc4813ff01dfa92b161f` | `3f4f76eb7d1c4087a6b3d6a9914a3b08f240ea0988981a83d935e76bcb69ac84` |
+| `rc87-f411802a6c7a48b8` | `rc87-99ba8f3f22781fc9` | `f3b5a27854985a602a278394fa7b6375c6d41f86537a6731359702066dbba5bb` | `b7114ab8381cff7ba1b6481dad561ca93ff91fd9712de706a3a4dd63bb054068` |
+| `rc87-c74ec73a3a553803` | `rc87-9079ec8a716cd977` | `487ac9ed6033ebc835fe2746ab4d65493c90cc5d00fb7772d9cade9c0bad3aa4` | `90bc8c28245b7837787e8ba94a979bffdb531b6b0ff96763fb9e5fe2bec49503` |
+| `rc87-12e7c854b56d72b1` | `rc87-e2ed974b1ddd5b9e` | `7f35e07e299dd9e2205d9ef8e953da3d4da6054812033dcf2291eccb22b5dba5` | `098fcd5bbc5bade10fbce1838c07b2b4f26f53d468c6dd3a33f7b2e9920c3d4c` |
+| `rc87-45a00cfd1a5d7148` | `rc87-da509ee82b6d38f5` | `72892b67e97140b070ccbcf5b67c90a762e1b37fb93f4f2e5fe1151de6a1ed70` | `01274e90d3f1a8320edeb3782ac2dc8089d72e8506a2ae4ec8321738f1e84093` |
+| `rc87-e411ffd69b91ac22` | `rc87-93af2958154d0d1f` | `1e56b74b934b3410027ef789da4a1a736b987ce40243391f2df2a7a22fa79fef` | `9d23d2fdf0fc4b0200c2b419eb001011d4108293ff9267d510b345925230c5b2` |
+| `rc87-2696f0fa56a7c5d4` | `rc87-99f67a67e5155f1a` | `42b30fdb924eb54de1976ee5ca38cbf62d684927ad6ca3980d6c45b4d518b9b3` | `5f70f0d7e0fa3ce5a1554398311ddb90a08f11da1303785acc33b0b01b1afa96` |
+| `rc87-732d95da653fd58b` | `rc87-4146e1c67cb5ed87` | `664dde1f200bdb4682a352f2eaf577bae6e8e9d3c7e557c200864d1893e085b5` | `3cb1c7a1bb0929c99db76960bb9ca81400ee6948ba9f3dc2bfcf7c1365723a30` |
+| `rc87-430cf2445a3a99ba` | `rc87-dd785f5a00080d1c` | `40c713c41d230220cf249eb8b1d6786b4f33b8579871ce716ed4406a042f1e76` | `98d4af3e15e524882d0eb43fbccb41329ce9a1b38522bb845a71041ccc3aa9fb` |
+| `rc87-e9921559bcdcc602` | `rc87-5bd3bd774f2c4703` | `50e104544dfebccc46dfd26184113b054908e813d9eb62ed9066cffd7fd76776` | `e1bd52902099bc5ef432080bb1766ec2f56fbed98188b9891a8c82af54a3f5cf` |
+| `rc87-3f337089de44b759` | `rc87-820ed52581c5186c` | `7787a60a62733e6195291720952f34d8ee0bdd09f09d05a958950c2ef3454d95` | `548bf45a2068af0ed45bf5947fd429277516fee60df26dbc4ccb1cbb2585b8b2` |
+| `rc87-2ae476ee747fc6d7` | `rc87-56ba13b0f3001a60` | `f7b9e2e8bdee7f72709954dcd90c58e5405cd406f5f775eb827072c01875da56` | `90d6b1890baa6753cea33909b550c96b79ec0b61015f2cf17146201c6d29f15c` |
+| `rc87-6224a90501ed606d` | `rc87-57df4f677d5a9520` | `853607bc97d2402f3d9641b535f1e15dbe54a62454903512b6b55c1052ce0453` | `ae6cc5e65a9fd208e8c3919f14c8a5936432b461131cd19e85d17cb2be868111` |
+| `rc87-b04c04131bf97f5f` | `rc87-b0d4a6a4453fb277` | `076552e3785dfc1f28b17f665792e04a100dfa32901899d39bb08046fddaa79e` | `706a50c63c5694da42d93b39ba1959eb32cabb7c91cb3c7521cba6a3aa9ade28` |
+| `rc87-59fa6e066daa5b41` | `rc87-dc35f7170131e48f` | `5d351cddc52f9c442504b29e8ffa05627bbb93ac480d88fc5d3ccebfe30091db` | `59118a7359f28f2db016bac7b037da05c485d347c555db1d34b20d2e7ed54ee1` |
+| `rc87-4eaffae5c3984d01` | `rc87-e7d134890a94e6d9` | `1da3187b3f8f63477a2c0d1871276e1e8e3da0d34edb560e27f5822137221e8d` | `a452900bb250eaf3b7c982a364e55b90bc8892a6b86a3ab0ff69605ee2379db3` |
+| `rc87-b5c5944a3a9610da` | `rc87-9b20bf9cb7a80c61` | `0782ced5abc27d2041e0e169cf7d508561b50b56aa2cb786e01606e238c28ab0` | `740393df87f6f2c65d5c03abf2bd1930e926676d2147e3b2b2c499e9cc3a0759` |
+| `rc87-2ecb3e7e15dd3029` | `rc87-61248027460947bf` | `b1effb786b4dc7ea737e4ed3cedeae80e7f9f2c75f9964981ec10da9b95c63c3` | `e671c07f4df0c0d4176f7bb624684d03a4c5c8f334f5cc3b8bf76bdd84279208` |
+| `rc87-50dcf376e94a9488` | `rc87-c20408a4ef84b2ca` | `a60aee202e24ccd3e183f79dab3247726c6f421a12b8d178687e1b7b4f6c9469` | `d54350752a96e296354b2674634535133213c23e5de8a9d4c68f9aa9d90b1a37` |
+| `rc87-1a9fdd25ef07d349` | `rc87-2195cea925037a1a` | `effe9377a3b16b9f126db73ca94806b8eac215d3594a87f2752ea3dfd1e838a2` | `12f2e7d049265a7521fdb064f19b8df0cf0a05cda2e13765d2513624010359ee` |
+| `rc87-40029968737ebd2f` | `rc87-78177b9621c7bdd8` | `b8b9a8503444741ff61bc99e091a026d966c12b1dbcea70299ab713a552846ea` | `0c9843f30360d95ffcd6fdbaa8a00b9ea0dd6cea1a8dfa8e5715043ae233bb53` |
+| `rc87-a0fbed40746be454` | `rc87-9b7ccec53a85e8c4` | `df85aa3ef403399b8c217124fd00d377973818f78d023d2525c87670883717e6` | `3d3cfe7c8d6affd572f5fe04262dd72159e885c494042ea8371e409b3397bb2e` |
+| `rc87-e313a21fe3a417c3` | `rc87-2c4b5d9e404c2f65` | `1d13dcbd75e5d4395681c580c43dea32a13cd65812c656eacf5ea467fc4fe0a2` | `805b741dd5736ac396981b7f96efec60c2a2e6e4b6188a9bbfd85ab02fa809e8` |
+| `rc87-e350ddb11d14db44` | `rc87-c780431640b60780` | `be8a72dcfeea39814dec91b5807a8f6f3ba3fbe32f5e6f274daf31eacc377ce2` | `607adbc8607f48f89fc116357797a5990381a278e19c5025f162f539b0086a2a` |
+| `rc87-67f9d6a7675a0bf8` | `rc87-3ff3d5483ac3d7d8` | `82c85b1f358d3b5eac3aa53f3d79fe436b71bee6ee73388eea4ddab3e7a3d43e` | `cbdf0233ac26d9c2c65026a6de9dba0219a4f9349ed71e3e253d1c96eaa2b2da` |
+| `rc87-3f8dd60040b3044b` | `rc87-0c53862b26319af2` | `dc3ecd2a209d3e4614e1e0819399a4063907767558ae06d3e779945c19953c47` | `6424504fa7b6b3e15381ac10b00866e94a7ef7ca8d4424a7337595c7f238f7f5` |
+| `rc87-aae0aea5b22c6c94` | `rc87-95bd401346e17973` | `10c85eae5d8d3a63f2ca26960d97f5069f446ce750f51d1d02be04d561f81397` | `74673840449e561df6a0a9cd43959780fe7ea2d83a3bd140561beda2eeba484e` |
+| `rc87-17e43f06166d1338` | `rc87-6a37ead5bfec5da7` | `4ed40ea15f1fc70534c96ef746dc6dc36f57c217e329b32991f9dd3b37b2ba1e` | `473784a149976289cafee6a4e480c44dd1f4aeffd73f592e73941d04356e095e` |
+| `rc87-1e6aecd4b86c8315` | `rc87-fe6a24b7a29edc35` | `f8346de9359f85eb5438cec2939affcab25014bb7ca2278b204e7497fd2c127e` | `78fbc99729a57035e315de3a24d63ae1e77bc857d3fb5dede6ea37f28f14991a` |
+| `rc87-6e81d63acffb4178` | `rc87-974acf676a480923` | `5efa36bf57511763088a265c0a53af2c9cb078c3d4cf95585796bc406ea92324` | `9ef50940cf8caef486ef9109576a23038ed6c83513e0f8dabaf76d63bdaf6bd3` |
+| `rc87-680872391aab0c97` | `rc87-0378ac978a15ae59` | `bbae016feca0c506f32c584c5511e8a8730ac77c4fac86df6b023bd8c90d6d06` | `67d68bc6c46d23a2d0969a24313c5e6d5d73726a4db093831daa909c8df4324b` |
+| `rc87-fd3760b78ae36986` | `rc87-472e99bf07315db8` | `fea1388c83e7bf61c41f1cd354d6f52da799adec4307d98542bcc09b4debb4f3` | `95d455d90d5162a1c050632287ce28fa98a1e1bcd1d60836dc89d4c90c2022a6` |
+| `rc87-866deceef803b573` | `rc87-be28ac921969baea` | `d719e6bebc23dcfd8ccf2078208cd65ef07c9c6f36494903228f027d8160d90d` | `62d04ce3db8fcb2a6ea20441279cb70f4f2f01928c9a98df472abbc2cce02f5f` |
+| `rc87-557cc8c6feafdaec` | `rc87-56d44cf30066e05e` | `b100d8561bdf8f16f335d4c69dacd8476f87cad807b5f4356aacfe020657bcb0` | `4b7b274c025365429c64ade57a006f91e25a2dd116178f3ae33bfa4e56f8aec8` |
+| `rc87-2fa1682486ebcf8c` | `rc87-26a0fc70a4fe84a2` | `e7187843a68de3bad508bda887d786c23559a288711c97587ff1fdf2f700b18e` | `ddc49cb77fb114233ca75b1d782de0fca5ec3df506b8aaf14455064232c3ab66` |
+| `rc87-50a6d8ef235beb32` | `rc87-75bb3596f5f148b0` | `4b7b0d0733dcf636f9e7d33646649a0d0ddb2abe549652b5428104a9dccb962b` | `01733549eb1cda0955c23fd38874b9a386ea2827d471c055f66cfc76ed024f17` |
+| `rc87-829a1d4894486dd0` | `rc87-f1211f7319125596` | `c2394a7d1b0af643094e28ff052d68c3850b977bd1df67bae2875be820fb64b8` | `fda02e7fe62b04cf782009d7331fd772511b2b1699794f1d1131ec3b6a559626` |
+| `rc87-4c05d082c3d2b807` | `rc87-5a257d5426586008` | `a546eec2a2bba89f1012b6c37f2e4fe1c8f7c43aeae0e0c7c8709f4a19498165` | `8a1fe1b1006da9ba2b8abd218b1543cd9133bc7d5e10ab9ccbd4e0c6c43d1b10` |
+| `rc87-34f37c5dee8956d6` | `rc87-58466113d7ef359d` | `8039b43dda2a1e5694c892b718e4ecdc10621672e924a8b82c41adcc91f7b655` | `635d148b8503594cfeba08bc758b270b8afcef8013d830e772159fe2e3a46677` |
+| `rc87-eacaf42de80ce6ab` | `rc87-94ae65a723c0cb67` | `e2f039bb9bb458e4656ccd9a8ab00e09d3f63f41430ef62ec049aec1ec7bc131` | `930dc6b227f4c7c2982933e868a9237b935cb4a966a6d4f190624c6b76e7c7f4` |
+| `rc87-7124a1251a981322` | `rc87-bef21052a908494f` | `689c901d2937b01494067398ba7acfb96bd5cf932c3f0caa18a49e6e9e452669` | `727b1c146bcd589a616ea93ee1f2c18fb03e7391afd7c638bae68c5d4cddcfaa` |
+| `rc87-f647fa76fa45bb93` | `rc87-9fbde6cb16daf403` | `5298e7c41a13d65202cf331f67991bf7e30f0fc14a37fa28b2a4d90ed60e2076` | `077a45c29b8b2252440f9e50994c4097d868b211dd52a9b01815c0e8772e2117` |
+| `rc87-c936ed3d3cebc78c` | `rc87-89d8170051967c64` | `81fd4e71b0f4ccb5ac5db14c843408b6537c6c096243344ab048951bf3aac1c6` | `f0e0417ad659f7564b7207d906168a3902ce8633a64926843a49bfcf87e6d9d8` |
+| `rc87-9028ebc1995bef78` | `rc87-d27f05ed9cd53a65` | `a85f202cb3ba81862ba1b14f926c865e9c76777ea2b514bf21960b63c293cc5d` | `79619598e3ec464ac1e1a016de3b8866f70fb5fe6714f2a9944b4ec03bd36f33` |
+| `rc87-bdad67c1e43d1886` | `rc87-0edd975cbfed3450` | `56c42de527875f8b76054bbe2bbef9a0d4e5eaee7a41890cb7f7541403f887dc` | `8af8cbc7941d57032754c87c71b2c165bbcd5898a9f2028aff5bb23248c70638` |
+| `rc87-069973df7e52b6a3` | `rc87-a8de2822faa035a1` | `553c5b10bed5644764116787a5deb4a95015872e42f9676744716d2598f39e30` | `e0512488ee4f76a8b8877cb9647e54bb3241078f500255a63ac5c0fb615fdd61` |
+| `rc87-24d1ba25ea426f17` | `rc87-2aa23782268a878a` | `ea31e9c9f578b759317605f1506b9fe200757b09a2a1be2fb241ac8f262355f3` | `0ebddf6a3ebf4f957e83da9b0ba317d5f1d7966cdd22158017b133c500753524` |
+| `rc87-43ff1e405dc3ffac` | `rc87-64997ee47e90cc48` | `b8c63034c67bbbf1ee22d53d24d15aa5252566eb8066ecbe737b1bca893c8f7e` | `faea9e27f4626293d5900580917475319d5b439575c89f3ccb474718edb5dd80` |
+| `rc87-3b5381fe7ffcfeed` | `rc87-88346a45355ab2e1` | `c0c31660dfba9d9cf213172574f30f63f198c411ae76f82c5feb5cefb79793b2` | `f8a424a36e68a81f5c7e0cd7ce3e45dd69d8f3b857c063971e26664008f44882` |
+| `rc87-ef0bb430a248a76d` | `rc87-40e3b0c260f5f759` | `cf288e22c897ca82341ca61fe16338787bbec647e9538ce9a703a5274534e8c3` | `ec1d9f2fe2051712ff1580938847cfaf701c7e18180758a500154c338e7552fb` |
+| `rc87-4b87d4e154724d16` | `rc87-b7f91194506bc386` | `04b59723cc34da3e2f14b67305147b689a7489c705c1d3ed3a0cb9f3d618b8df` | `e0c321af4060b33842a41cbfb4df25dc444b221771394c7eb11fac83cfa74f67` |
+| `rc87-47da29b9f3ee6f32` | `rc87-bdca23b6ed84c4b5` | `8c085a83cc6912c5e8144b8b0ea48d2feed63fa13dcae89769bf8bb1564931dd` | `735d4201f9d7f86cf2c70321843517f2a612d89f84be6a22b237d73a04bce3e7` |
+| `rc87-92b7db2e09b4732c` | `rc87-fa2ad20a085f3178` | `3268c3102bae321068eebdadd20b597642b00d868cdd225fb980fe642f5c35fb` | `54f0adfe8b6fd78c604c9edaa7a894e6a46803269e44f0fd70f310b84ab118f1` |
+| `rc87-556cc73a1877ed47` | `rc87-31e4216d48a92883` | `fa906f1b647e4ea50cd12d7bc68f402a66413195e94df6324244ef16ee01f1b7` | `bf7280f2a78b4c604fb93fadeb467ede9747cb77be475c5e5fdc7a524364dfd7` |
+| `rc87-979c4a4224515564` | `rc87-44bc64018d765f9e` | `e8304cfbe92e7dbce244f2364d0659086b9e73fb972dfa5e72473473bd5f6119` | `5f498467821193401fa69c88151c3eb0ab0a2dc6e4d49657a9cc8df0bd52dab6` |
+| `rc87-1e6ed1519c10683b` | `rc87-c2233a4dcb41b846` | `4c282f8804c4e9dea0b5764bf4904c346aaf79d36cfc020fbfc84314f90765fe` | `2341f4556c56c6e0e754eb58641ad6911c5148c842d4edd82dea6c43eb8a34f3` |
+| `rc87-23ebb60ebffe120e` | `rc87-8436c9142c110082` | `855fad9700bdff0c318f33a8dc38d5c4ebca3fd0091a4941081d36ac944804e9` | `547a5a560ebba1fbb9ce9b4bc5a9b48365c43c7a8ea74a0aa1f45dab6a992581` |
+| `rc87-2d4455c6d2301761` | `rc87-b2ef88c31a82efa1` | `3e78f4bd7740faa1ea6ccb71d5cffcca5acff58ce52e15a4251393397325a280` | `a3309e16c5a40c50d773243878cf8e5bba5695e37de9c8c62a0a398901a5810f` |
+| `rc87-409a7df8ce71c205` | `rc87-475a451024126740` | `8700f021b9caf7724c4e927be75c89ae3dec005e80956c252e61d1ec36bbed82` | `0cacd035bfd137a4b16ee3c374a3dc5ea655af9a7a4f438b173c4940215a896c` |
+| `rc87-7ace699066028665` | `rc87-f37c934ad7a06426` | `612f2797b082f632caefc18f24e2b5da2f5651aad7ec570eff8586ab3b31381b` | `40d7fde8ad493ee5315a1005b7761bc3aba5a3d253d906bf8b4f08e9dbb9bb0b` |
+| `rc87-45d9aa7a252223a7` | `rc87-b4ead2e37b45fcfe` | `6c94e3b178bbe01e0e57d181162aeb777ae40bae42087ad23765824aa09993bd` | `e1470dd3f12aa3d74dd6c1bcb535dfcf7229b1e265628c8b0f8f9626d65bd683` |
+| `rc87-b4ff936f0bef3660` | `rc87-bc3220b00a9e8560` | `2330b2e08e2fd2ee041c5e94716d9508b700237aedb5e9243d00a6f8b264ed50` | `80bbc641b66bf2c83003b04e84606c79109d2ea3f496126c5ae3be3fec1c33d8` |
+| `rc87-dc72ae033f5d4677` | `rc87-33bf64a0000c0693` | `fa8e911c8399f4fd2e457ae7f4688239d4d3c5eab14ee8507751751abca4408a` | `060c984aec5910fd0a67376c16b1d9ddb23a1d0023d9f6078d4fd47d345e1229` |
+| `rc87-f14ff44beeca899e` | `rc87-9998c26f558f3cfd` | `2235006ca674396bf2635b61e2fefb4c5bb18b6e3eb9e6f7884df590cfbf104c` | `3ef8af062d32082439cbdd02e2a920d3cd7a27ab6b1a4c9d083ab583381fc871` |
+| `rc87-54cb03c4c412f3ba` | `rc87-54cb03c4c412f3ba` | `139e960c79540dba75eb7e8d9fce97f0d5afd7973833b6395d001d8ff2490f16` | `ea8e1212eceaf020af3ce965d391c61a3ffc142207f0238c6b54918bf8ccb3bb` |
+| `rc87-77861ecb988baaac` | `rc87-77861ecb988baaac` | `f1f1bc7be61bd62471737f24d6711c287bbc13b27f677754c22749da8a2c382b` | `7ffd0c78a9158a0f7994f00e9b4a583cf38e8aac9b14dc97c10dc960c3277242` |
+| `rc87-d1faf9e76f9fc0fa` | `rc87-d1faf9e76f9fc0fa` | `6c0090b466ba8a936b1da1c6c5839744a3ac98a5de0536b11ecc9d297c24468a` | `add9324076be02e07caf3fbfc5863d26eaa2ca62df97b8f88f8786c5eff3ef03` |
+| `rc87-37cea833d014908d` | `rc87-37cea833d014908d` | `e802d35ba945a50229321d8f7d1c0db67cd0e78dd41de70a558286d52934b7c1` | `9942f98620dd2ac85b778b1267787aa8a1adb99d60b6cd9a83f6d54694864f1f` |
+| `rc87-076ced27803a6943` | `rc87-076ced27803a6943` | `d6c00439f89a9faf63be1dc86bfc3ff6414240eb556163388e543c1eff387ab8` | `a3a6bb7accd94888b90725ddc003a39111c6e779c0ad0a846f4b2c44db6b3043` |
+| `rc87-6d625141262f1f5b` | `rc87-6d625141262f1f5b` | `4a19a7240e226a4d6b91227372b3241fcd71cf63bf2227fd5d23ff623f9c48df` | `dea7a005ec0f78642b1ef1cdfa22d63003dfb7e8af892473a5fbf2ce5081d6ad` |
+| `rc87-86d9f2b60f6413f0` | `rc87-86d9f2b60f6413f0` | `9001f8b0225dc5b4cfd56f892b9e44a06bbbfaff1f6dd804efd19cd80b79fddb` | `0614e5d2563bb33188fc0502c1b1258870a7bc90013f784e8495075c55f32c44` |
+| `rc87-7f3c754a921a8dcf` | `rc87-7f3c754a921a8dcf` | `83398cb4df095d39b708dc08dcbdf1085023453b38cee0b6a8c85d83a1534b73` | `d17a91a84e4bf2ed414420d46d2e8add3a03e950270afdad8e52c8c0c06dc179` |
+| `rc87-a42d3dbfa54e969a` | `rc87-a42d3dbfa54e969a` | `c7dc47628a7eb3b3b994786a499254ebbac9902fc46ae09d68f5de477012c9ae` | `4d774534d227f83ead562f94660b5ad35723dfad17c275e3e7299cff203ba878` |
+| `rc87-91a008ff477415bc` | `rc87-91a008ff477415bc` | `88fe70a8e8ea705314e811f60faa5b28e7f1beb7898125f4b8f87801656143ad` | `c69ec42a4724fd37a4f65a2e00b45f0c3437cba0be23d643d55d938c9e4d9dcb` |
+| `rc87-d695e1cbe3d61773` | `rc87-d695e1cbe3d61773` | `3b040bfe36070fa9ea467858738c06aad248420794fa2babc1a55152c113894b` | `07b2bfedbe69adcbda613dc968105dafde3b52491e5ba660683b1480d9462200` |
+| `rc87-49471ac2b718f0fc` | `rc87-49471ac2b718f0fc` | `a0aa8dda2fe828d5513906ff8fd54b586cd44a1270355971e1e62fcee8cbd4e5` | `df7dd5709d6b0911fbde522a1d825d73c8ef7aa03a6d55d944a44fb939e86298` |
+| `rc87-8dcba64252750664` | `rc87-8dcba64252750664` | `63196bf8684f782c3a4a105e5f2c8a04d43655b5ddb607df98d5af8b6e04c1b6` | `84a6271554b13a848aa9bec45f1b374ef47eccfde968d2566104ea29a3cc1679` |
+| `rc87-09e2f62fb4ee5891` | `rc87-09e2f62fb4ee5891` | `972bcddf2e19b9dd209c3a18f2afd9da3cd63fd940f349487afaa21cb8c5935b` | `967acdb3b7770a50bad60b2e1a0793158e4ece9a95fcf559c9706a32d80e6054` |
+| `rc87-338f505049a4542b` | `rc87-338f505049a4542b` | `5e644f166e36eadb1dcfdc25176cc9ca8623c1ad57cb7d22e402daaf8b4e02be` | `159dcf9e5521f3724435f0e1a9183dc035d90582c190acb683e9feef92ce2a1f` |
+| `rc87-96e4080672dc65a9` | `rc87-96e4080672dc65a9` | `5872c81ea795bd4636e2dab6e56f331a0d9045f5e97853a4ccf39e270b94c87d` | `5fd68aaf54bba14bd292d5f3b2134f36b4f6fd781d0a333281034852d53af639` |
+| `rc87-78e8c7d3c16908ec` | `rc87-78e8c7d3c16908ec` | `e7498f9e70054f2788174c084db84a16f0bf4667662e98692d810cc8f7b0baaa` | `692b8cafe4416dcce3a213babbb282a1f668a36191e60ec15d1ca4b6e9a1f29a` |
+| `rc87-0a84fe0c03239a4f` | `rc87-0a84fe0c03239a4f` | `c664b9c7f1f424358e0c3593aef794487566a760c1b5a4389e0af6eee7bff69f` | `5512ff854a90cb344c44886c0a8b7ca475fc28079b67ae4a8d74b064f056b529` |
+| `rc87-6c6698375612d791` | `rc87-6c6698375612d791` | `f4b272a55e298d45e59992d7f9c57e7c416fa71412ce4de130f8d0d90ec99d00` | `eff8c083fcc9cc2902696268d6b4df758c5584dd8b13773cfb8cab56b4b39862` |
+| `rc87-77a4ffb0adb8514d` | `rc87-77a4ffb0adb8514d` | `fb2e0939ef6088969ece84609f013ce3c29d3f8805d7c2583bc5196e5de55ef8` | `9f1a576eb4d2eea0499fe86390eb784db244ec5f840de2573f79d3af64324d94` |
+| `rc87-8daa6e7865747a18` | `rc87-8daa6e7865747a18` | `609f72ea36026034b91e6a411bb27768f579955b5f5c14b7fbd95eab9c6a1a37` | `80f6bb97c7a28041af4de27c8ae419b82805f4c5c04cb9e9fe5ceba869a2431b` |
+| `rc87-8e2904c1ab58a0dc` | `rc87-8e2904c1ab58a0dc` | `06ce23c4763d25a1e9aa51483b38bdb3d6e94d5d01e5381410921c497607abe1` | `1cca1b198ca33eabf7257efb9db426c40900944376035313bd7e33a23f1368ce` |
+| `rc87-3516c9bb81d10ca0` | `rc87-3516c9bb81d10ca0` | `46c59a9a55806bdd3df4c2c0c538abbe92fcae8ea12479d1c575a4032b56b0df` | `31e4dbb034f9c11bad22c4d3b2f8629428023e482b654c7fb00805116b7887df` |
+| `rc87-8457f11ca701faac` | `rc87-8457f11ca701faac` | `2e83cb40b6d665f5fc376ebc79f8c3159ac1d4f6b8816fd9e2e6ca740c0465ed` | `3ac8123930dd9ea0d9a24facaa42a6574fe068e982a81de233f3e07c577b0e8b` |
+| `rc87-d0359cd0342f8ae5` | `rc87-d0359cd0342f8ae5` | `6eaea612e7c0d822a37b8def8411045d48f0af77130adc3d52f6161204a10d3d` | `a709b95f2dcd3ea29cf17e3c505705236c460e761ba8dfaf3b58f5b4e4e9b2d7` |
+| `rc87-814905e211a00e2f` | `rc87-814905e211a00e2f` | `6ec7a20dbe9a778e56bd20f8bc52a457fb3159014955b88cc3d8bd4df11cdefb` | `13b7d2cbcc803d4121a4b7defa6464a31dc20611ef457d48eb4b08aed715a411` |
+| `rc87-a21238bfb7a88fe8` | `rc87-a21238bfb7a88fe8` | `277a070519866825dbff7c48164fcea8da9953017ae1ae67e7d4250188402b21` | `40cdc939154bc14684b4859446fb8b4ff5ea0bb6ff20ecfdea4cf89fb8221169` |
+| `rc87-c1e2ea9bda038754` | `rc87-c1e2ea9bda038754` | `a20c415416bfa59c5061f4a67f9fbdfbded8cbb756896dcb8ee1c6dad18bddcf` | `68c62f5be4a0345a9099668887f8f44fa188e62048c5023f121c1fe642d1bc87` |
+| `rc87-55dedf1d632d31fd` | `rc87-55dedf1d632d31fd` | `7f26efccac526859ba0078f6b33868da60c28cd24f67f06cd47568d9f8851903` | `9d59305b9b21748f625cfee349ff5b32540e14db9d820152d916d7bd6880b312` |
+| `rc87-7e1a673cdba4ccda` | `rc87-7e1a673cdba4ccda` | `4ca2057b55dae5dc4d8b2bf07fe4b427d3dc337faca187c12eee73d05e8bb00f` | `3fb13203f769a737cb61ea1e47590edb3b423e72b6fa599c29c0bb5156550ad9` |
+| `rc87-6f459da1798e8a99` | `rc87-6f459da1798e8a99` | `b88100e238160a22097dd2320a75541577c26141ba3820123667a6e691c6a29f` | `df93bd321952688502425dbac74cfb62ac5e235cc6a6b7a13a12917c3ac1c02f` |
+| `rc87-4a63c9e7dbdc43a7` | `rc87-4a63c9e7dbdc43a7` | `55e0d6676cd2e5ba7292b6bd5929e1314c08f66d3d886db37deaa6d77e4d05b4` | `e8a698a21a365ab3eec440b873876e6e4e61510adc9b73165bf4d370dc56d0a2` |
+| `rc87-db46c376e47a7d7f` | `rc87-db46c376e47a7d7f` | `1f62739dd2f8e252c35bebb60e72b730f16c8e929cc4b9c6621d9462572b0e63` | `cc54916beaa4325daaf324463270b8b72e25999d1c828be96800455bdee9f4e0` |
+| `rc87-e87cb64b936fab83` | `rc87-e87cb64b936fab83` | `1c35e298054b801336c4c95a667bc7838dd1f2dca8f9296836bc35a1eee5adc5` | `e94ae29c6d7a565e01c2cc80d9d4f4119af80aef68a200b3e69aeff29fdaf60d` |
+| `rc87-2ca28a8fee7427df` | `rc87-2ca28a8fee7427df` | `a84dfe8888f5efbc069d3c115d475986ae2221bbb3f3bbe11a868c61eafcee60` | `23cb0ca8d52a4f693c74d7225983ce4c6a5a8cd3a044265329e535be9a3f7a79` |
+| `rc87-ed144a8c64653ef0` | `rc87-ed144a8c64653ef0` | `ca0df59d5ca5b9575c1ea03b990326af7f0f08837355e04709a94e520905b603` | `eda80b486a1d0d4e2bf1677d77872b20d1c65468cf8b29523b7943408bf559da` |
+| `rc87-8f864fb0ea35d7ce` | `rc87-8f864fb0ea35d7ce` | `8f9861cd4e3caeafe27980503717a433cc12a1e531266810d338f9c077ae5c44` | `8eb06e080b0a324d74be7bb39d33ea1224b4dcc97564abaadbb837c577d40500` |
+| `rc87-70467a45db659966` | `rc87-70467a45db659966` | `914ea051ddf78805466bfad3a89e9da758e3b9a19862e42d4f77001f20d04807` | `26c57562a06bf83f235b579db6905a5e1e9410db7699429bdf4db03dcf1f3790` |
+| `rc87-5ee3dd7b8dcf6086` | `rc87-5ee3dd7b8dcf6086` | `c7c4369973523018c30e6ccc36b0749c9bbb6bdd9fb85ea33714009d504f7bca` | `6ad89c8e799b3a3b48edc27475be3bfa70b74d648e5d9fadf03b86345709dd7f` |
+| `rc87-d58e50c2a10ef009` | `rc87-d58e50c2a10ef009` | `be9d47f17ef638c5d93ba7a911fdceef27bd3b15c1a0615579ed989c37132ce8` | `6ebbc3c4d71b71d11587b300039213cd4f0918b0d5b50754854eb4cd4ee4afac` |
+| `rc87-37a716cccf338a1d` | `rc87-37a716cccf338a1d` | `6395e055805b961e3b8abbf648905fa91b765b157d5492862469b6830dcc4b72` | `07cd50824f157336fde88cb10de5c998c41372ab1d20b295b5666180eff0976d` |
+| `rc87-6a15248469d8ce76` | `rc87-6a15248469d8ce76` | `2eca7aae8fe216061489274591eb273a6e8f428ac6884ed66a10ff56719c8d6a` | `7258b15e92745d66a66325b485a73a35bc1ae5ba731de13cb28edbc49bb3297e` |
+| `rc87-bda5260bf5403fa5` | `rc87-bda5260bf5403fa5` | `3022a67f57969e21cc64cb77710322247730777a0bc4f342594cb3ddf0e5761d` | `5b44a6d5eb4caa8bac41aa242359bc618befb7d55d5d29dbbf0b0306d433da8a` |
+| `rc87-6c45d1556603cf91` | `rc87-6c45d1556603cf91` | `290a7c54010649eb030770bdb7cd1e1389f1325770a8dfe0ad475f75f3dd9252` | `42139dc561f4d78ef4dcd1b261380b781f15df9dbe2cc34cdce7d0f7bfe4a9fa` |
+| `rc87-5c0737810dccaf5c` | `rc87-5c0737810dccaf5c` | `92c26e5761c8952f44d2b95e84a25611dc27dc010ec16496a5ae30cf3fb65acf` | `6b1c09cea65b506b8936deb111574e6c106f09a273717659c646ae42b977a957` |
+| `rc87-e74315879f5ad97a` | `rc87-e74315879f5ad97a` | `d35441b7a582491febb582ccb5b7c47571a7529d3b9ae4d8a5c8eab49c397c9b` | `f9fb94577fcfb7414ce9f2e194ab86d4abb5ef1727828b6e77856fff2d36d2a0` |
+| `rc87-d79c47a9c3f2b39e` | `rc87-d79c47a9c3f2b39e` | `21cf6d741837551b7a30ce17251d53e6bf74a3689c9540b75a96e3fa1e803fe6` | `6e2d786add6a89f0d9c5aa01cef641aee3c175b0f0ed0a30399ec9e17f8f116a` |
+| `rc87-0c8501d038901aac` | `rc87-0c8501d038901aac` | `0c3d120074d4de76d7832b950d33503e866e352da02c0874f2c882f6d077659d` | `77d172ec601a9dcd4cb4b5f08ece5e3e14bd275cfb4a6f9762250a82cb160658` |
+| `rc87-c6efccfb5323a963` | `rc87-c6efccfb5323a963` | `a1fc6d1dbf6e76e71a6e1aa258b6f6e67b1721a31e60c5fb2f612aafb5a3496e` | `739b1f3d45a4d27681e18b76bd43ecc0b15ddfc014964a38639e76941381ab37` |
+| `rc87-dcd91d977e32457a` | `rc87-dcd91d977e32457a` | `61de6dbe9304dc01bf8b1c0997eebe9be0b7e53485e5cd2786a83ac5087e39e6` | `dae4949c59043a8a8a1f3832b8d29d78cd103ab480d97b4c468503b628616a1d` |
+| `rc87-78ebee2f1e48562c` | `rc87-78ebee2f1e48562c` | `7cb57df7d1821ad836b02eac5a4d734228487e31af15bdcf612d03572afb5f64` | `465d9a008fa8c01671fdc78ef5f363097084bc5f8cbd8a9eb0d8b28b5b7e2192` |
+| `rc87-cc64a4ef8922d47c` | `rc87-cc64a4ef8922d47c` | `fbcf0df7513913114cf9a03aea8d1d0c71ae9f5c47290a50b0df713784939d5a` | `06d42dae5c99211bf9e60051684af1bbf438c3ea47d7ef0af3ecc94619393435` |
+| `rc87-bdb21071a6a1472c` | `rc87-bdb21071a6a1472c` | `6561b80aafc67a162d38174be0871d5f0a1f4715acf2de9d116132577a1e1124` | `308bd54b08c225d6d0a2a326acb2ab4f06e4373bb33b453d67942cbb63600774` |
+| `rc87-9320973372113ac9` | `rc87-9320973372113ac9` | `4a6bbd0862e2e1283fea873c35fc4c3542944684e649443710afc5ba16e93c6d` | `ec51f31ae6b1b3972a7de3aa9e4f5fa5e2eca1d5da86c5f2488d76cab018e1f1` |
+| `rc87-aff116ec4161fc64` | `rc87-aff116ec4161fc64` | `787c9c35e103208182994e6534677168938687d4e17e762dbdcfc7b99a917482` | `32480936fb691017ec6e80d70d46f1c0611a5a4c752bed439559f63247506943` |
+| `rc87-680bf632928ceace` | `rc87-680bf632928ceace` | `398d3906212c6f0eca8375918d93f478bd24e17f3af6094324bb1bf55e149a34` | `beb52b30267579861497d5a8deb29b15062d785582f5a089768d47d81245b797` |
+| `rc87-91f24e279275cde6` | `rc87-91f24e279275cde6` | `8889140f1c7907e77f928045733e1172bef13a804aa215afbf57206657833bae` | `93c8946aa2b3f6e9d25dda96a145617b53aa69ca223cb13b67c3658d9876653e` |
+| `rc87-fe8901f174085d14` | `rc87-fe8901f174085d14` | `f2ee2cd64b314d361aca30a604db06fb0ec08b000cc683aa38a4a40f410a52e1` | `a44c731c0a841218fcdce5faa31582d391e2c550132d7f262c942b6efeaf5335` |
+| `rc87-5dc31ee125b79ae2` | `rc87-5dc31ee125b79ae2` | `f9c154bd7222a6954480644cfb88e83a840c7425aac8d6bd14004e194cb996e1` | `8bb84edc113e5ddec6cae4b1f3fee814de7099db631056d402885683b84a845d` |
+| `rc87-b0de955f29213cf0` | `rc87-b0de955f29213cf0` | `9741aeab74c3aa111640bcd9c0ee4d9ea02dcc3153aae33b9376a70e65b8276e` | `f9cef11a6de923a034fca6cd40e077c10031984f36b991c359f41c025dffdbbd` |
+| `rc87-fb72a22f3bdde978` | `rc87-fb72a22f3bdde978` | `2ae98ed79517b2ef58abec7e5f14a9fdf3c4b0d70cfe044426681f25929234d7` | `749c44e1da3b05839483d03a5d9bff95a879b9d82b9fa330339806c729e413cb` |
+| `rc87-446b3234ab1cf237` | `rc87-446b3234ab1cf237` | `b2dac8681206673cd08701736c42c63a8cb69bc706526855686640ca75f402cf` | `1a4cf72881bdf0db91d706e13a9dde04b1f6508c3c7ca550917384264e3dc11d` |
+| `rc87-1d16d45477ca8574` | `rc87-1d16d45477ca8574` | `f9723023ec1728039814883e25bd804f15ff04e3d37898ca6b3fec8a12abf6cb` | `51a937cf74965cf747812aa7321a4011925817ce737e39b3896d917576ee23f8` |
+| `rc87-926f3f474304ded0` | `rc87-926f3f474304ded0` | `5fc6c8a8ae7d84c16a631e5d526c5d13519ab46c8ad100556d857f74a8e34d2b` | `50fc27e1ff2b694b00896a724085d375e588a524d81ca4f5118da8cbc810e46b` |
+| `rc87-0440c9b8a8beccac` | `rc87-0440c9b8a8beccac` | `6cb0a210343555de62691f62afab0175e87fc0e8f52b06e9c9c232dcb3d3aea6` | `dac79565dffe4a58a21ec251e25af43d3f3454c6b020f94310a6c485cbc844da` |
+| `rc87-797e835ca45531f0` | `rc87-797e835ca45531f0` | `33ab393cf4d4c2b9e7a5ce1785420c3cb753d990975080a5dff99a91af094278` | `635e97bc0cdccae649695a7378328f84b2ba6d33ac57b2cf85593ad71eb5b2d1` |
+| `rc87-408a34c01bcc8aaf` | `rc87-408a34c01bcc8aaf` | `39043ed26a035969f53a7ffe283f208a311a4207dfe74a37fbb59e712219a88b` | `b253389ed36195a6c5e3e68f5382ae9af6f668e8ae73813f0845ff53efdb3757` |
+| `rc87-7a7b9fa25c74a52e` | `rc87-7a7b9fa25c74a52e` | `4c9a5a254cbbe15ce463d6e506d53c5fbdae9517c341f9850841d67bfb8e3592` | `b7e142f12351fc4306fd282604d49198536044182d29c387bb0a0cf0b30a8709` |
+| `rc87-d8f85d3df48bdcf5` | `rc87-d8f85d3df48bdcf5` | `040304fa50d7850f0fc3bbbebe2c882bf28fc46cc536ba5dce41fdc63c6e6789` | `de0b1f6bf7be7f2a7d2bfd2150452ee7f228d18459e1b476a9e0c7c51610b254` |
+| `rc87-bab35476046dc1a0` | `rc87-bab35476046dc1a0` | `b522deecd7ed5b8b0c843448f7e48df5565ce71b900c6068910f0e8849120add` | `ef3b48d4daaf76459cf9e3af917c99834b34c8a43cba4d2705025fe3fbb2ae50` |
+| `rc87-d1e28f5ab29e6c3e` | `rc87-d1e28f5ab29e6c3e` | `b029c2ed64c92c643305f5633fa2ea507a7c5f2fcd281706a4ab91cfe493f976` | `b00eb9c2305cad2a02d69dbfd355d69be2ee39f28da28b028108b08ef432a5f1` |
+| `rc87-4196983661cffb3d` | `rc87-4196983661cffb3d` | `e9a9bd2d6e8a0baa9e9f674f02b196a0a8174d477630bda329e7dfd8c6e655fb` | `0a53d3089e3ba9f464be12f59813fdab23c3d1b3d6d35498d1e04c0b8ff5f626` |
+| `rc87-1462d9a6987da8a2` | `rc87-1462d9a6987da8a2` | `314d9378be70f6ebb105d72f98182d0379fe823e4504b683c8957e2e89c72533` | `85b2b04ff8417f6ce0e0e56ed26caeb11c430d2d274a14a6b571840285111654` |
+| `rc87-b161e2fcad643e62` | `rc87-b161e2fcad643e62` | `b3687d2ae4f53502564dbfe1fd2a8e2cbd5c86c74e94a5ec0d36f8e77d785f6a` | `05437de834f7f49769b3e2be73e85ed89625de7b78f55136fa8b2eba96aaa0a2` |
+| `rc87-8af187233ba94d35` | `rc87-8af187233ba94d35` | `5514b1fac745e8eb079448ba66f86051670cc72e9eda08c5fc51024246554d15` | `4484e2c5e6025e3f51fafa757b3455fe74f93a0f600da274bf71992ad8e881d8` |
+| `rc87-0fab234554e87fd8` | `rc87-0fab234554e87fd8` | `7e9f2e59ef4b6143d038cc2096fb0c221e63382e08cd574d5ea986609fd2224d` | `d3ccaf3848304bfe04e9395fad1e6339195a83e3836412fd50057a4e12b69ca8` |
+| `rc87-e825fd439c22cdf5` | `rc87-e825fd439c22cdf5` | `5eec81b3d1ae2c7ebf91b2ea1546ebd9eba4434e84af1d6258173dab48c20e8d` | `d13fb3cb7393de85f33a24ccdb3bceaa67d04a582581087cfc00996285df6d9b` |
+| `rc87-7a9e5c45ec0fc87e` | `rc87-7a9e5c45ec0fc87e` | `592cfb2c6e481274a2f17d13e90da514609a9b763b9993ae25366fb8dd10c899` | `4938061d7f0cfdc8206f5ba89a7d5c99e0902226fc334964f98e57d4f5af2b02` |
+| `rc87-116f73ddf74ed32f` | `rc87-116f73ddf74ed32f` | `089267c9b01aa98d5fa8ea4153760b0cb38dc42f2ba7d3204101d042e152a739` | `5c28576de4efde7d63ce6d85b13c8909bf66b419753d11811e0cedcae6e14547` |
+| `rc87-ae6254f7191c455a` | `rc87-ae6254f7191c455a` | `4e19e2a2b759ee4f5abaa67eb7595362ac02189911ab338ba5b77852bf2ea283` | `959837de365f1e8d3c388f1ee1c5227d869fb70bfe32b3c215f10e7a21c520ee` |
+| `rc87-68c6f0fc9e3e8a48` | `rc87-68c6f0fc9e3e8a48` | `048193a99a0f5c594d997117506f6ff8dca3ade6f32e79aab62735e1260c4410` | `0850e009f576e98c8e83d9408e699aaf5b7307c062f9754de99799340099e06e` |
+| `rc87-2a7ddc50fae25bc9` | `rc87-2a7ddc50fae25bc9` | `aa0512fa8f33788e576bc94605a9a7f5da4b171f81815dee9c6e63a5acc6c0ff` | `1d36b182ad2e5a05909c1200ad6892e5f8da9536a3717c33c1507de1b7b1e569` |
+| `rc87-33c6c9451d628517` | `rc87-33c6c9451d628517` | `3bae7f2c2b9716671fb6c846fddf15b721aed11c89697a6cf6051cab941cae94` | `ef242c6914a70ef2c43ab842bbab4a869ddd70f9f4ea2150ce6cc3c359b5f51e` |
+| `rc87-0afc4bae825a62ef` | `rc87-0afc4bae825a62ef` | `7369856b6cea37dc5a2f821d768ed7187ebbc5fdb806c14b872839e4ac29caba` | `b0629d9fb7c7956df7ce8786aaf9f9c5a11dccea4063409bb5907754512133f2` |
+| `rc87-940ef33e2f9e54a5` | `rc87-940ef33e2f9e54a5` | `6875a1b146f943a29985f050d09dd793db36b0e84a3b9a59692e6dc44f1aaf61` | `f1728df42884a8338d8671c41f56a288beedba68a9b64c5ad9c7e3664628a92e` |
+| `rc87-50f036526635cc73` | `rc87-50f036526635cc73` | `b793ae0c0459b585e6ff46a99bedffebbd4a7b4466e50ef8d16656600f23844f` | `097283f365da95c111f7a7e5f07c3694a73959b2bbb94f9e37456d8326bf2565` |
+| `rc87-75c9417d1ccb141a` | `rc87-75c9417d1ccb141a` | `c7ae5986b22ae6cd72a875bfaffa559f9318b5884c3703558941487b23374569` | `f78ee3dc0a4e663ec646666604a4b8a7caa380d4113aafa2f81c8dbdb6f12890` |
+| `rc87-1760dc737cb86f2a` | `rc87-1760dc737cb86f2a` | `78ea5258e9f3f578f710ad2e561a61535e67a47ae89ff7c3e0f7f37b4dfb2b0d` | `f189a74b62e103a2c609a038756cf0f8f200502374de1fd8be9182092f655c41` |
+| `rc87-5c07a0ab3e427817` | `rc87-5c07a0ab3e427817` | `4960548e68084c4a6949be87b74d83f4db7ed82a291af230d3b4c8bbd9b6d767` | `753e0040502f23de4ea0c4f16451c24d18757def0533669bcff0ce1d845b7bd1` |
+| `rc87-72d9ca61d7283e10` | `rc87-72d9ca61d7283e10` | `a8a6ba69643956857090ecd7c778c0ef45f422716b5ac9df6444359fc30323a1` | `c97d1efb3f23dba803fcb9ba249ca9aff135a0f5277c9258d162b0aaa542ff39` |
+| `rc87-94b524d516938049` | `rc87-94b524d516938049` | `927c25009274e8ab864d42de635d13f0971359e444e5fd4642dc2f52993fe52a` | `a677a36c9315a08651449a704a7eeb87f503ec2b4e4bb3f8faeba566e03ac457` |
+| `rc87-38a81a3aed064c0b` | `rc87-38a81a3aed064c0b` | `0c3189271e8600b9de9bf67c45c46762cc281885dbb071c0a7437065fb4c4012` | `fcc5a58ac073347f8d9866f55bbfb9b9721ac8bb893e89663938dd7884cde639` |
+| `rc87-7bd1070dec3c3eb5` | `rc87-7bd1070dec3c3eb5` | `25bcd55f915e6a9ae604011404e26ac8d4a5d62658c73078541454d6aba7d234` | `3289703b02ff412452c919066b6c9a1cfe76cf92aa5ae7f82fa6d658e3c63e44` |
+| `rc87-8c38f5f8d793e40e` | `rc87-8c38f5f8d793e40e` | `9cb7ea75f848a8c565a64f5e5daa191a636a17180aa23928f1ffb5dac79fdd5c` | `3720f91c97e1f9fd063f6c36115a0da7878175858aa0a498816e9037e101e91c` |
+| `rc87-011aece17a20bf7a` | `rc87-011aece17a20bf7a` | `8d0024a31fbbde01386e16c5db23502542cf23685b4796010812af834b51cace` | `5a4c261687085226bb3f3ff03408214270c27b632cbe30f1dd412353203d32d9` |
+| `rc87-0bc6d109d462febe` | `rc87-0bc6d109d462febe` | `bac6f692049b40d34b2edc8fea9223168f7d694fc37952c9b4568a205af91d7c` | `79e368e7e89f939015f198af5216232de767cdb811e130084822734a6f9450e5` |
+| `rc87-d59d9f282901a287` | `rc87-d59d9f282901a287` | `fef7570d0e4451f13bda8e80193d09e53aebe0f7f226d49e0fa5d3e43badcacd` | `f001a805a90a4c6b574af82d0df544935a6475de8020f4e47915d254fdc3bb3f` |
+| `rc87-9f2d8be151bb8f92` | `rc87-9f2d8be151bb8f92` | `f0b53241bfde4e32f78dbf73d2c33929e84868d2c4569c4ed3ea2b1bfe76136c` | `dfd38a4816d94dff5b6df21655d50d4d170fd2c492c9350bb0d3c736314e1e75` |
+| `rc87-df7279821cd67e25` | `rc87-df7279821cd67e25` | `fc306517c0d170b9afad94b586e2e8f7041765409fe6a69009d6fbb39e575117` | `112cbc03b968b5a3050ba9f1aca0812a574fcc0e252ccee72e6f2824f8dc953b` |
+| `rc87-08ebbddcb7e50d7f` | `rc87-08ebbddcb7e50d7f` | `0c85d275fb8fd44c146f1ffee295a98ab340a7182ecdefc33c9ca95b2ff72306` | `ae9eb9459a81dfcb5a77d3f033101145d2ce16017ebe0ef4b7d69a1c89ed7d5c` |
+| `rc87-84acc9250ce6f4e8` | `rc87-84acc9250ce6f4e8` | `bfe4f31034e46c7b048b69f97912282d401c2e0780c795e8767bb01b4df53ba1` | `975d3f8ee561df1bbc9154fa876baf463de5a42a59dd1da68c58957a8edfc5ac` |
+| `rc87-52307c22d15207f6` | `rc87-52307c22d15207f6` | `8e8b406a4ab3318df37c9c2155d957b1b4861ea10ca17a2b4e2152f34d1eac11` | `6f6bc4bf8375de35332d1cc03b23bab31999090fc7c8258845d54da6d20996ee` |
+| `rc87-1923fa0372b572de` | `rc87-1923fa0372b572de` | `570d701e4632725df4beaf5e4a59ce4e586503b31237fc2453cf303f68fed273` | `e30574feca9610a60158152c6d4695afffe82f4b556f5dbf7ca4a8406b06f5b2` |
+| `rc87-c9d8806f571973d4` | `rc87-c9d8806f571973d4` | `bef7d6eec609f4e97ce4962fc243a0743dcdaf764e5312684bda079ffb864f4b` | `e78dd26c1c95bd03fd9c437bdce427ae6a46a0f9da36c2fd0fb8abe3eb30f299` |
+| `rc87-9b67d767485c6314` | `rc87-9b67d767485c6314` | `5f24fdedf1a5fc9732128c657b6d0d2bf77b57b9e9e22d396b8b86ab094156ae` | `2b196dce6198516b35e39a5ac9c4bfb9ee06bed92562db7dcd3d5e03eee61a92` |
+| `rc87-fa92a6eb10d7d185` | `rc87-fa92a6eb10d7d185` | `aa9c78d103562eac34166d1e850243658c89f65987015732452980bbea3f6561` | `5846a220b3465da1f416f0002ce1be8b23c8b3c1953e81e1b51f90cc50edc476` |
+| `rc87-7b3f20f279ae6e88` | `rc87-7b3f20f279ae6e88` | `5f54a0e92cfaa11da10f49e7dce8e6fd43089d99e19336d1b595d76dea4e6b57` | `0070e262990127f859bd73ffafeab2dab19e5d95bad0747dcf45c22c563b187c` |
+| `rc87-7551338099ad9f97` | `rc87-7551338099ad9f97` | `3f0b1f051db7c8a407fa8c66018882987937abeec15fb902c2457a040cf2d620` | `acd2963ec6b70f299152357f779674f905594540e4cdba42ff40455666bc2fa9` |
+| `rc87-1300f23ca2eac111` | `rc87-1300f23ca2eac111` | `2f6ede7b16a00c1b552f104004284f274e11b02eea476cda267856356a9045e7` | `b61f5415f06b20db1fbc51ecb57bbbc11a995ee893d6ad33147bd925500bd15f` |
+| `rc87-b8a6d8670385ca12` | `rc87-b8a6d8670385ca12` | `bf4e13f7244c82ccefc5817857f77b61514b64a4abe7ce52f57b55d61a3cd3bf` | `49590c9a54c346ff8743f63c9f1226904aea30bef076d70a3597d99bee41a7c2` |
diff --git a/parity/freeze-migration-approval.md b/parity/freeze-migration-approval.md
new file mode 100644
index 000000000..54b964a18
--- /dev/null
+++ b/parity/freeze-migration-approval.md
@@ -0,0 +1,76 @@
+# Freeze migration QA approval
+
+User QA was received in Codex task `01a0dbdd-0a03-7673-9933-a64a98fd1de5` and recorded at `2026-09-27T16:12:20Z` (2026-09-28 in Asia/Taipei). The user explicitly approved both review requests. This is a new approval of the scopes below, not a reuse of earlier implementation authorization.
+
+## Three contract records
+
+Response to request `call_GSl70xiBTXFDAvO1PwMCsX03`, item 0: the user approved the three contract updates. The review was `migration-approval-scope.md`, backed by the frozen `migration-contract-review.json`, HTML and full source patch.
+
+Frozen report target: `3561220d4e2c42af41077931948b32261da1f40b`. Report JSON SHA-256: `e5fc3430c19a408a3e2dc3001f04ff5c2e2074637c9174a760d47c7202b29a54`. The approved case and surface digests were checked against the current committed package target before recording.
+
+1. Next ordinary CSS/SCSS/Sass enters the stylesheet loader without a directive-content gate. Its rule excludes CSS Modules, generated output paths and manifest queries; CSS Modules use their separate project-context rule. Existing progressive mode and ESM manifest delivery remain.
+2. The public inventory removes `MasterCSSManifestUtilityKind` and `MasterCSSManifestUtilityMatcherValueSegments` from `@master/css-schema/manifest`, and records ABI 13/language version 3. Package entrypoints do not change.
+3. Binding ABI advances from 11 to 13 and language version from 2 to 3. Other recorded protocol versions remain unchanged.
+
+| Record | Approved target digest |
+| --- | --- |
+| `rc87-bc7adf7569796dc8` | `6acfe4d189cfa974bcecaf2ad5713cb1d83eae6da099757699f4f6f2c8e9cf4d` |
+| `public-api-contract` | `a4efe9c284c329734df1bd19428a70fe05ca5669eaa6ecfb37bca3c284312648` |
+| `binding-version-contract` | `caf4b8e6f33f7b9e5c26a6cd4f9bb92d6a581e2a116e2bcb3091bfc18d0ab243` |
+
+The previous reviewed targets, baseline digests and exact changed fields remain available in Git history. These three approvals do not approve the remaining changed or unmatched Rust-refactor cases.
+
+## Manifest loading adaptation
+
+Response to request `call_IE41F2vn2nZgHGVjjjtz3S1y`, item 0: the user approved the supplemental contract update in `post-rc87-adaptation-review.md`.
+
+Decision: `post-rc87-browser-manifest-import-fallback`. Previous reviewed target: `dd8a5c548bfa8c7a5f0ccb4650f3b458b2b560f5`. Approved target snapshot: `147dbcd4d8b2b79cf2b7e307760bb014befff5d4`. Full eight-file old/new patch SHA-256: `82b4c762b966df12b52766fd469832670784c944d1c7f38f8101fdb7924d5469`.
+
+The shared browser facade keeps JSON import attributes first and fetches only after loader-construction SyntaxError. Its universal server branch imports the supplied asset URL. Next emits standard ESM data and leaves asset delivery to the bundler. Runtime hydration uses direct dynamic JSON imports without loader construction or a fetch fallback; failures remain structured diagnostics. The review also includes language version 3 fixtures, progressive-state assertions, and current utility/token fixture syntax.
+
+All eight current files matched the approved snapshot byte for byte. Twelve of the 21 cases keep their digest; four change and five change with an approved rename. The modulepreload `as="json"` bytes remain unchanged.
+
+The original implementation provenance remains `becef751987086ffe7a93cdbd6985f1ac0158c08`, including the recorded runtime file splits. That commit identifies the initial adaptation, not the later reviewed bytes; the two snapshot commits above identify this supplemental review.
+
+| Approved file | SHA-256 |
+| --- | --- |
+| `packages/internal/src/manifest-facade.ts` | `0f4c306318b71d35cf4fed2e6560601ed8a64360ee87f6c3555553e08cf35f30` |
+| `packages/internal/tests/module.test.ts` | `8f048785d4de1a0813f58aa28379455f289d72aa1fc40314f6607ee863dd1620` |
+| `packages/next/tests/css-manifest-loader.test.ts` | `599b3566096d66fac471824dcc97f639c33cb7621d8602afc38f976a9e6b762d` |
+| `packages/runtime/src/hydration.ts` | `5b6d189a11c3aac3d2881b23047fcb48f2bffcb6d94d1d20b626bd3db4a2ce3f` |
+| `packages/runtime/e2e/hydration-edge-cases.test.ts` | `73f0ddbc1dd5f605a1b237b529c5f2dfab39f109636c0fd30b9e5a712110732e` |
+| `packages/vite/tests/plugins/manifest-loader.test.ts` | `c7b9ed2b0cff059c0ea0c637e7356b277e56ac58cb8bf52607de4ff8221fcb32` |
+| `packages/vite/tests/plugins/manifest-virtual-module.test.ts` | `ed2e70cfd4b0095b6dd625c5d42d0a947dcac184e0141d19bf871f51e774e363` |
+| `packages/webpack/tests/plugin.test.ts` | `06d8d32f6065e203c7f87975f46c66ca984565fd0bdd964849fc421d3a04ad2d` |
+
+| Previous case | Approved case | Review status |
+| --- | --- | --- |
+| `rc87-a2cc12f09d82bb91` | `rc87-a2cc12f09d82bb91` | unchanged |
+| `rc87-2d99ea0e5a8248fe` | `rc87-95afc75a0d20ce37` | changed-and-renamed |
+| `rc87-c3255a639bad7508` | `rc87-c3255a639bad7508` | changed |
+| `rc87-34bf97d92ae3004c` | `rc87-34bf97d92ae3004c` | changed |
+| `rc87-28031ac807ec5325` | `rc87-28031ac807ec5325` | unchanged |
+| `rc87-3b0f9e4b3218c695` | `rc87-3b0f9e4b3218c695` | unchanged |
+| `rc87-46f3c89f5237b1b9` | `rc87-46f3c89f5237b1b9` | unchanged |
+| `rc87-c6f234a37661be00` | `rc87-a9210afde2b25995` | changed-and-renamed |
+| `rc87-074e56c447b243c2` | `rc87-074e56c447b243c2` | unchanged |
+| `rc87-fb0fd2ea320a28ed` | `rc87-fb0fd2ea320a28ed` | unchanged |
+| `rc87-138d2a9846a509c5` | `rc87-138d2a9846a509c5` | unchanged |
+| `rc87-de63cfc41ad8a597` | `rc87-de63cfc41ad8a597` | unchanged |
+| `rc87-6c18481fc5cdfa31` | `rc87-6c18481fc5cdfa31` | changed |
+| `rc87-692ac35eb7556a3f` | `rc87-692ac35eb7556a3f` | unchanged |
+| `rc87-dd785f5a00080d1c` | `rc87-dd785f5a00080d1c` | changed |
+| `rc87-82aab64164d5d4a8` | `rc87-5d560f8098718cfe` | changed-and-renamed |
+| `rc87-0f080221ec60651a` | `rc87-3c3c79a9bd560910` | changed-and-renamed |
+| `rc87-81017bda3a0a433d` | `rc87-81017bda3a0a433d` | unchanged |
+| `rc87-90b45cbedb62f8ad` | `rc87-ac48cb8b3e2fe23a` | changed-and-renamed |
+| `rc87-ce29f729c5b6ac32` | `rc87-ce29f729c5b6ac32` | unchanged |
+| `rc87-f67818a2528723e4` | `rc87-f67818a2528723e4` | unchanged |
+
+The decision source records the approved case digests and fresh scope digest. The upstream rc.87 baseline and post-rc.87 overlay stay fixed. No package publication, unrelated contract change, expected-output rewrite, CI waiver or issue closure is authorized by these approvals.
+
+## Native layer fixture hash supplement
+
+Aron approved the exact one-line native layer restoration in response to `call_8EoD6MG81nD7zVwBRXMWSiqS`, item 0, recorded at `2026-09-27T17:29:00.229Z`. The review `manifest-review-native-layer-restoration.md` compares `1c58d9e13f3f0b972edb2e32d3888de2cd2e9b7b` with `a3b78f7b4fa982e2972a628b45c52cc207efc544`; patch SHA-256 is `05cfb20fdd87dad1571bbaed4518abafc7d02fe3c0f87d2d85250c3922287113`.
+
+Only `packages/webpack/tests/plugin.test.ts` changes from `06d8d32f6065e203c7f87975f46c66ca984565fd0bdd964849fc421d3a04ad2d` to `8fbfb3b737bb2e99924f82a73d88f673c6e1c604b51614c3bf2288c7e13979bb`. The fixture restores valid native `@layer components` from `@layer utilities`. All 21 Manifest test digests and the other seven file hashes were reverified unchanged at `4c0690aed92c5cd5021bea9b7fa3f6dcbdd8482e`. Manifest behavior and the original implementation commit remain unchanged. The decision target digest and approval scope digest are refreshed solely for this approved file-hash supplement. This does not expand approval to other migration cases.
diff --git a/parity/language-token-freeze-approval.md b/parity/language-token-freeze-approval.md
new file mode 100644
index 000000000..b255ea2ad
--- /dev/null
+++ b/parity/language-token-freeze-approval.md
@@ -0,0 +1,33 @@
+# Language token and highlighting freeze QA approval
+
+## Approved scope
+
+Aron explicitly approved these 19 exact case differences in Codex task `01a0dbdd-0a03-7673-9933-a64a98fd1de5`, replying to request `call_M5C9Zebls1XKr1iCmuUg19je`, item 1. Recorded at `2026-09-27T17:33:53.038Z`.
+
+The baseline is `bd164e4b5ae3a713940913d745183e9ab6b54263` and reviewed target `8fda9a42719f6700ad2a7339c8907ea58bb09d8d`. All target case digests were reverified at `4c0690aed92c5cd5021bea9b7fa3f6dcbdd8482e`. The pinned review JSON SHA-256 is `679ba03ede5a566d5b96cc836eb45536b20e34b805d23f190ed9d2001f8e4e58`; patch SHA-256 is `dd7ad3c50b2fe1d6cfdac2c8e6db3c34882b2ec9f36257a00e43634a211bea06`.
+
+The exact review covers complete named-token enumMember classification, semantic utility styling, removal of component-only font weight/modifiers, directive/query spans including @, updated utility/pattern syntax, and native CSS grammar ownership. Native property highlighting coverage remains. Validation passed: Shiki 25/25, LSP semantic tokens 8/8, VSCode TextMate 11/11, historical/grammar Shiki 23/23, and focused tooling language tests 2/2; changed-package lint passed.
+
+This approval covers only the digest pairs below and does not approve other migration differences, assert old/new byte equality, waive CI, authorize publication or close #445.
+
+| Source ID | Target ID | Source digest | Target digest |
+| --- | --- | --- | --- |
+| `rc87-1cc1d0090085ed33` | `rc87-1cc1d0090085ed33` | `0298511f7df9b9e243ecb772980b25550acb1ed5a6acc2a6c2d41fc937a1d4bf` | `aae3dcbf38ee3943874e7deffa034379fadeb9d66153bb8aac1e40cefcb11839` |
+| `rc87-dc7591a4ae298a44` | `rc87-dc7591a4ae298a44` | `6759722b51ad501fa7d1aa0dd30f81f5fd028162c9dab15d9eecd994fb3093e7` | `6d5dce779921cc5ae5b8b1799b53ba3181fa9eaf8b1291d0e85587c750bfce46` |
+| `rc87-e39e3553acb8ff50` | `rc87-e39e3553acb8ff50` | `369e6e9202cb4433d85012aa8b90d378a0e35d1a2e456c47f3efa069e6184012` | `1a3a3f1554dbcae46a7a0c82b50b43c3f917d279623580d01da360e7863517e4` |
+| `rc87-2c5a5b24e801cfff` | `rc87-2c5a5b24e801cfff` | `d3eaea3bbbcff8731825bf214123f891dc44e6e1f4c8d0decfa8bee3508a9849` | `3db1b85f0eaa0bb3ff8672b2d0494d954d944f3285b4057dae84a0aec9b35460` |
+| `rc87-12186aa5abf43d09` | `rc87-12186aa5abf43d09` | `495258ab526e870f3f031ee20752c85bbd5e0262245774d14bfb8973e9cd0b6d` | `dc739deaba64ac325fa9c31dafaade59670639080252c627dd3b06e7dce25c9c` |
+| `rc87-dd8bb950e0e1689f` | `rc87-dd8bb950e0e1689f` | `23618e63a338083833f901301ff8bb462a1bf048ba3610152fe992f6730f5ead` | `6df3d5ffaa6542cd8f7b0b22a3962ec356537714066e23d11c3e4a3a2a3c9908` |
+| `rc87-048c5fec4032b5c6` | `rc87-048c5fec4032b5c6` | `7bd31e18c36c85efcfd5834854c1613fefe53f59d57997a6c031dd9f20ce05a3` | `6eee4673eb1dfbfbb5429575816cd15779ec61d6b1c8983148ca61e634f94a36` |
+| `rc87-a5e7df0a818329f3` | `rc87-a5e7df0a818329f3` | `796b91a605afcaa326e393c89a33a741b8475db8b948486b385f11bae3ce325e` | `25b0bb634553e33d76c5336ecd4f0ef0080a3f9ad13a9fd1f0478e58dbf833d9` |
+| `rc87-b1ef4609b9c3a1a7` | `rc87-b1ef4609b9c3a1a7` | `6f7bf9ee8de1c8d2091515661eeb1bada31990906a454f9617be114be4578a6e` | `dd24bb47ce5fb3e35759b42738fd5d1ee58b346a78f99b0eda3cdb9a360a690f` |
+| `rc87-35f63a5af0e4a031` | `rc87-35f63a5af0e4a031` | `2d5d95474435bd62c4b77c3d26c455dbe72316b2d19a9a5061d47ef08120b16d` | `9272450eaa2d3290d9e5c4bca84e86a45eb432d47840eff16f1a549182e0a745` |
+| `rc87-b65ebde91c14e95b` | `rc87-b65ebde91c14e95b` | `7f181eed07de7eebb5e8acec7db516a62373df2bdf61dc061bd41f90dd8a8fc8` | `70512485e9a74b393a4fa0a83816bd9fbcb256dff987d559503a507f8de5efcf` |
+| `rc87-45de05367dfbdb24` | `rc87-45de05367dfbdb24` | `31518d64a8b7020b90db1956b106bcf004d3faaefcde762251e955e72234ec8e` | `0e416e0ba32a231a7c2603e56bc12915244436a08d3fbb5b50a25699ad654527` |
+| `rc87-49294136507486df` | `rc87-49294136507486df` | `5252878a3d8ab8c74835d088e3204acdad15889c1a632e42c1690a47bbad121c` | `18e667b81f01c4f29798d1ca8d9a368227b8aba1fd8199e17109773cfa7885ba` |
+| `rc87-69b24f0ff70fd33c` | `rc87-69b24f0ff70fd33c` | `95c367ee084d6559d985269d1fee310390d8507eca6ceaf3fbf2c6cdafe7f8fd` | `e7382ef0b147d626f9678ede371265705c81f2a46f1284ce66d167a97326799c` |
+| `rc87-5b8cc29aa8a94cb9` | `rc87-5b8cc29aa8a94cb9` | `35aade9d2c0c386992964071759c5214c6ac350805b003b5a839c9f27634be2f` | `be22a37a9e3bbec979841b086aa4cac5593f82e7c6273e91043b91472fd5239a` |
+| `rc87-a6cb1f63877dcff7` | `rc87-a6cb1f63877dcff7` | `4d6d31a2ec74ae42c8d3376ecba9355f8d129c4a29bb86ed876a13c4fb6aa662` | `192d095d345f8dd5b39ea053feb1eebfc9e0cd1c8df4f10892f187db3fe11c1d` |
+| `rc87-5a3a055267fe6e03` | `rc87-5a3a055267fe6e03` | `6d766679256afc405847fd9c2fafbefc669cc3b5c10a54d0e8e51401cf4d3b49` | `a0caea6b591cc50c0f9b4c8d8e435f84ba1576875740522f1cd86ff363208f34` |
+| `rc87-d6f1e639b422f215` | `rc87-d6f1e639b422f215` | `0254de95692502a2a4798f3f7f6b5c99289a91caff2c6390261a1553773cd462` | `12a0a3e4942a597e0bee57bea54d92cc0aa6a35dca0aa1b3531af8cdcc6e2fa4` |
+| `rc87-c611fc1e092ab84c` | `rc87-c611fc1e092ab84c` | `d04e0d6e07fb4a3cf18927d9603b76f4019f5df295d10167f0c219861c7eeb99` | `cbc55fd84cd5ae2040e32e85713dbc394a983a2e97b36f1d2528278e441baa42` |
diff --git a/parity/named-token-freeze-approval.md b/parity/named-token-freeze-approval.md
new file mode 100644
index 000000000..369129f15
--- /dev/null
+++ b/parity/named-token-freeze-approval.md
@@ -0,0 +1,76 @@
+# Named-token freeze QA approval
+
+## Approved scope
+
+Aron explicitly approved these 62 exact case differences in Codex task `01a0dbdd-0a03-7673-9933-a64a98fd1de5`, replying to request `call_KZB50kBwKp2mSHPC40HUiRz0`, item 0. Recorded at `2026-09-27T16:30:08.516Z`. This approval applies only to the digest pairs below.
+
+The reviewed baseline is `bd164e4b5ae3a713940913d745183e9ab6b54263`; the reviewed package target is `4b873a5c7280399e27babab861898093b8541a95`. All target case digests were rechecked before recording. The review package contains complete before/after case bodies and a unified diff. Its JSON SHA-256 is `135298b34b29bdbcec85380ae3485533c50bca806b64459749d2569169d8042b`; the patch SHA-256 is `7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f`.
+
+Named-token spelling changes include `fg:red` to `fg-red`, `font:bold` to `font-bold`, `py:5xl` to `py-5xl`, and `animate:fade` to `animate-fade`. The corresponding emitted selectors lose their escaped colon. Two blocklist cases change the prefix regex from `/^bg:/` to `/^bg-/`. All other assertions, values, ranges, lifecycle and cleanup expectations in these case bodies remain unchanged. Native values, states and conditions retain their colons, including `animation:fade|1s` and `:hover`.
+
+The individual differences were reviewed, not accepted by title similarity. The source case IDs do not change. This records intentional syntax and selector-byte changes; it does not claim byte parity with the old syntax. It does not approve the other 434 outstanding cases, waive CI, rewrite frozen expected output, or close #445.
+
+| Case ID | Package | Baseline source digest | Approved target digest |
+| --- | --- | --- | --- |
+| `rc87-0bcff8d19b2e7836` | astro | `d038ebf7074c48d0c2d4b63e6d249c57b5cf365c329399cb6c5921f0fb5157b1` | `35aab610c992d91b41d2754480d31e1fb7db1be3ff0fd526b29395f9a7ac9ac2` |
+| `rc87-9e148d7296283e73` | cli | `2531bd2b090295f603060aff288660434a85bb9669f83aa968dd6b7e77e66a58` | `34536d2ffed03c8d5c5f89a6b4a36e680337edb93ebcadc7cd43be7f103ef274` |
+| `rc87-8e935adce73acbb6` | compiler | `8d1f3d6c33a0b033f482f264dd0ea503df3e083bb5e149ae90f61734b8602737` | `313458146cedf4cf4d9246b22b56b18d5597effcd9721b4d4e828362643f6543` |
+| `rc87-7312b1740c4885fb` | compiler | `3c91779d5e77f7143e552e55c99b99d7bc1e0c30e394d83c18f072692e851fd3` | `03d8b8bb103c7d8a4924714a14dd21e20640501368fc293cb044f43dbe65be86` |
+| `rc87-52c9eb78b1e18775` | compiler | `ecede6cd401bc24e2af70e0a0f06391f6a9b043f09cba09abaab5d890bd40a3e` | `fdd94cb0c0e8061a1637895982520c6bc713fcb320bf2a08fc6bf983d0ec8eac` |
+| `rc87-51abb4c0cc50234d` | compiler | `9caaede90b1fe4698a846bb3ce2d0628ec64355d9b05ce27745837b83be8dda9` | `7ef7f9667440ea3937b721bf50f28072e9dc5ac9a1941a2841093e56e7317d96` |
+| `rc87-16dec65c866ce93c` | compiler | `a65877913d3abe5b5cb94a777f1614be38322f9cc4988900ef1d469682956b0e` | `dc78f24666384871fb7395f8b3b6879fe99834fce0784140ed6122e54d89c962` |
+| `rc87-d2ff63b2ee65d620` | css | `51649484e9f5872bdacbe26c29eea61c9068956acaae649aed7ee36f1f8715a9` | `127226f9ffb455e596eb379368f7a044de253381f1dde2ef5a98d75ac159d866` |
+| `rc87-a0c4813d727c5342` | css | `c061a046509c196bcef2bc1b89396ea337628cbe911d98c66a108f45987d8d96` | `9611c10cd0447afb56d481ddb8e2c810f06ba1c3d6c0d17a477bbdc073ecc18f` |
+| `rc87-aff0c5687d375213` | language-server | `3243b7d4c0aaae184bc121b7a180deeecd50f72b6b74fcd71795554bddf57e29` | `8c74d9460292ab77055e94d545b222fead38ba65fd82d86c0a18c90d5a994709` |
+| `rc87-3fac9efeebd10f88` | language-service | `0aacab8e23c2fbc940b60350a10b800be95886226e8e671436ebf04c697f1164` | `8822b648be61077962a077bc2bacb49462ef36ca216b031028aa680317c04608` |
+| `rc87-87a49eee126da67d` | language-service | `6ca790e1075125d57887e4821355c9d727ee5d2267c40b093f0f6ac568f50b3e` | `21baaaa52852fe0fe31cb42ff9aaaa33ce3150b8169f600919596fd04afa63e6` |
+| `rc87-11e7d929b66310fd` | language-service | `941f3ace18a98df984b80d5aeb5c8f0d5a8e7b50edf0b93b7104dbfc7ae25d6a` | `17ea44caae96a5b7da2593c21f2a27bec4833841a6527e8bb7d834f515dd12c3` |
+| `rc87-340707601e1b0a28` | next | `55a84fdc0e5d2d489bf7eb26e3a1ed01ce33a431f80df9dcb5c5b3366b9b2536` | `051fba9ce10a8375b9ec2bf0719d9e571d27b67558bda67c474e95c6b69b16af` |
+| `rc87-0ab81b21d1f50161` | next | `a66514e27f51015d3673a958491086b54c51838a5e072868941157c3b6633559` | `185b3cbd370ebdde6741c69cd978c9232d48a528cd77869de50bfb3b83b38dd2` |
+| `rc87-e26ee2198e53ea9b` | preset | `630589ccff44fb22e5cfb26b2cdfed05135e31f9f5a1598320cf96709a4b72a6` | `82a14152ac10253e7f08dafe737b26b0be760386084af95eb41076f6fa7c13f1` |
+| `rc87-f9c577219c15b646` | runtime | `117bfa4f0f85db1045132416dd9616d2418727855dc43244b7f4ae673861cd67` | `c6474730cc899821b19fb943eb94fc584b0941b4909c7a2fcdbc3b5388acbd92` |
+| `rc87-d8846c51fa3e2af2` | runtime | `1436a4d3c57c13288b19581f1ac0185fdcf424eeaae1414e9d45226c16e0b6ef` | `7e0c4f0263b69d766b925974acfaa57458d36db837e37285cf18f0b72a8cf985` |
+| `rc87-48a1ad4e356801ba` | runtime | `42b26757ad454928e6f02bf55a98a275bffaf8714621c37d5b6e3be682bd1f2a` | `fcd7e548c794be0e8ef59302c03b7a318fc9a6fa15620f4c9b75c304df34df90` |
+| `rc87-234d591dd8aabd90` | runtime | `d914ef996bf6561932c02d8342328f1ca604fd4bef2046996b715509dc66523a` | `9056290f7ae9da6f5199867aefa5b2ba9a43b51410b260ef82d696373e580312` |
+| `rc87-9533b10158c80bd7` | runtime | `712658b2709068f140555a4f3c333c7fef732bb6ae287068e0f89c76d309d9df` | `ead180946126478e8b6b2235310892a3c8714add15d735ffc19e61a92912f979` |
+| `rc87-5e8982a988021b9c` | runtime | `9e7cf59eec42b38d73be1e51e734d2968ff2775d395a21403d5be716eb709acd` | `1e415886a2ff31004e0992793794b658d328c758bcb54182a07448f86ecadb88` |
+| `rc87-ce04b418651dfdbb` | runtime | `8b3c26c19442e2a4dd425b18f86ecd19cf93a330e25b66b7b86d70fe286d704c` | `dba7ce6b3bff1470f445f6ab154bdda5218beda944f490afa35be0f71996b442` |
+| `rc87-044d450087fe9f83` | runtime | `b6054757145e919e41442b1b9ef6725478201c7ecdc4f9031d00716fcb402e3f` | `072e48139f49eaba5089660c3ba016c134c97aef053456a6b98f9b31391fd2ec` |
+| `rc87-20031249c83720ea` | runtime | `f21d4199cac9b506451cb5350b1cd0646caba86cac241b77ae54e51fb6e382e3` | `82b7c86a60c4c324f060e611724c224e7db449432fdfa758ce8c9f7f9b6d7c0b` |
+| `rc87-aa64f308290aae54` | runtime | `7131df434c8d476797f6c3a14f7a20d344b3cec79bb2f59aee9d5109bcbac12c` | `335e02c9ae35b3af16ed2e5087de8ae9e43214f9958662c43113d9e2c1a1949b` |
+| `rc87-007b3ff1d80bab7f` | runtime | `62fbb0e23662318005f0cb45f1dbfd0f0cbf8331b14e34adff2865f3dcbed051` | `bc36f4a9c40f5ab6669f951b62d54c924129c94c0c166a98f3fcfe1fad82d9e4` |
+| `rc87-e6459f3d31cfae86` | runtime | `b1fdbf8531dc33d5b233b681dda94e11b22ff63a17e5254e02c7804a317e1f7b` | `53db942036f8dfa6d8ce4e67a8f3eeea7614cbfff041241ef46b799e33b72bac` |
+| `rc87-aa9f904b5b77da78` | runtime | `643039c2daca54077274de8373a51156df566bfd9a933a9ca0cfdd99feca098a` | `5a3fee48182a3fde9d4b85a99be9b5849d2b33576be1d069d15703abb9040a1b` |
+| `rc87-4866e126c81aecc5` | runtime | `3de0a8111c78155734b3c2cdda940af53f5201e678f621a5dcaaa80a1720179a` | `e794b3353b951a079b8b592e41d6144b7b7c56c4967caa9127f7c10e216ead79` |
+| `rc87-c90242da5283c6bd` | runtime | `839a03cf67e6fe8e335719f45e4344d52eab718b4945c944682bbf29cf6a5e2a` | `4acb45eb87094c4d8cea24d6d6c012ee64409ec55be4d775467d20d68cb06db5` |
+| `rc87-15f40a5319465c15` | runtime | `54068fe8602f8692419359d643e396bda6f7f67d8b62a2f54c4bccae589aedce` | `52e33d19d6c9b402a73d2bbf5597ad5f863e57f52f7e7cbc625dfa26c1f927b3` |
+| `rc87-4e74f806433ac2c5` | runtime | `a20ea463ebdd351ee290277782ab3ebac605f0744b41fc21d0d1380f5e796e7f` | `1b849475984dd5c1e22b9d432d3729c14458851a3e00a3ed1ae090dfa122ce74` |
+| `rc87-8a9c1985a1f50938` | server | `1a7d21d519784d5725bdf63bac28c542d491e70c389365fe4d8256d0df15b4ae` | `9715b69871d64d371c123619efea55b4f60467c0b98f78d12615dd937a12ee02` |
+| `rc87-b7af484045f903f6` | server | `6c9d9bed9bd7801bdca99060e30eb8c8e8611e372655ef693341208f7b316e3c` | `9161f61c4a158d05fcdf375691f0d4eb428dd3afd17378e4ba582552bb1c48d2` |
+| `rc87-8740682ae4139966` | server | `58ab6c01a9b52e73b405e3d8982ce03d059712e4f43542e866d48d14f80ef4da` | `54c484fa6b6cc9db3f8210d2eb4f9ed25143f8e045e3c819b8caefff170de6a7` |
+| `rc87-4ea9659443aa1918` | server | `d4f14f2c615f3c87d7cc820cde449b74e3fda7dc412d70117737fc14f6e404c7` | `ba770083266fe8e84b24040525514bce20954b4eb42f16f3fd6e975815d78c22` |
+| `rc87-2a82e3387d1c954b` | server | `aba697fc601b0ed143d0ecc0051b7cc6dc170884981de5af49825d5be228d36b` | `26b32fe9ca6a980ac874b86da1413a3d94ed51200ccb631eb92adeee75909468` |
+| `rc87-989b124c0f6e9a46` | server | `530c9fc4b578cc26ae901cd633dfb87929567d5966f4a75b9b6c19fcaca6fa99` | `7bae902001ef5edcc8bb573a551cabfd3da8396070d358c807e589a62077d5cb` |
+| `rc87-b9dfe7e0dd133d3c` | server | `35231d5b7ebf857aad899c8539b3c0b35dead498a8121027616894b1751a569d` | `626a56fb46147339a494a9d4988e17188fcab6d493cd79f1a94fb0d4f369d121` |
+| `rc87-9e310fd655a40e23` | server | `4383190b9b9b08f6ffc7bb6b8438767cd3acc165c967c37eb81c4430886e61d3` | `b882b7151d6a692c09a52dd068b0ba5141fe32b58266c5dc3a18a150cb4f101d` |
+| `rc87-935e4fcec1473d25` | server | `536a2ff5149f253feefb7de1904b929f43ecaf52ce1d9644ef0e97acd3bfbced` | `0df2587a37e8ee56b8b2d0cca79d5007433ecfb804e1b232c6bef3759b3e5f05` |
+| `rc87-aba2deb3341faee6` | svelte | `5318cfa69fbf65cc01fc5b5f4657ace33dba6caf1a20c05c5309fcfc063e132e` | `adb696c90a3a30bc289954c2c32be73433fbff60f0e2bfb4accb4ef7e53790b5` |
+| `rc87-9890adf43c5e0dfb` | svelte | `61145016ea7eb05209c88595d455fc8dd6c3ec531b7615e4c93534172725d80a` | `4f488e861ba1f8e8d556ce20da9b7bdeed0fd26dbf4666cde9cc17e6fa1797b9` |
+| `rc87-9fb06cb439f3854e` | svelte | `697a1f416e2bd87d0abc3d32b4d6ce86351a25d9047fe7e2f42da492146dd896` | `b97427677fe1abc9708d979e0be56a11ca29551dfd9ee779430a0872306898b9` |
+| `rc87-2b946a760e1253bc` | tooling | `a6069e1837cfd4ffa47c22b0d9bbfbd6b19131b1584e6aa5ce99c4abab500db4` | `10d3e35e6378cb42c37d508ff4746873c76b48212433f36ba1414450fef1c908` |
+| `rc87-a0e40cebddb38394` | tooling | `09e0865ea6a199708131fcea551f5608e9229961b70bc03077fe14ca4607e85b` | `c839318ad50dbd165a28d6ba094a60c7957b3cfa5ffb39624376b28c481872c5` |
+| `rc87-6f3145ee8c7d46b5` | tooling | `6862dc7bcab7ad519273b6b4f53996a521e49fbabec3bb81dc1dcfbdf2a7d475` | `0dd4830d5658ac62618705a14ab132f37fdd1097d9554f8c5f8b5e81e3d6381c` |
+| `rc87-0c3b4f53433ec72f` | tooling | `c6d377146c1d516d9b06528b873b00c0abda2c3b06acb7d24603ef15da7ce438` | `48b9eee5e9ad2639c2cfda03dd6614e614e170b37c809ace6662a0cb8527be00` |
+| `rc87-10c2c919df81e395` | tooling | `cb868fed3193fd9077457430a068596b60bbfcda9dfacd0dac8c634f8e17ac7a` | `a8e4471ccf26f9f4b3ab0d1d7539fc8469e2dfe02a42dc2c22891cb164d93700` |
+| `rc87-3c28c41d2c671162` | tooling | `3a06b992e3ddeaa6c41c7aaa6b621c1b8e3d1f8e7860fce9fd587290fc70549c` | `9fddebb136566cfe390b02e3e019971cf50843ca555a959359f5d7ac14d0e813` |
+| `rc87-73c31dcdb81fde33` | tooling | `9a71f863048ceabd329af82bb91e50be33dc7c6efa053ee0b044caabf1d1e41e` | `4759cd7bbee8374426f79478db2df88fd2cb5c30bfbd2e2f5fd5278a790605a3` |
+| `rc87-3c486db7d89c53f8` | tooling | `0185e51f802418e6b5bc216ecc148f88dfe62c25c84603f129b23c2aafcb77ba` | `c74c177a8447e0fbae5406002c7eb6782c2768a93831bdf846042f4c43446b6d` |
+| `rc87-4e98d09d5fbd24d7` | tooling | `5663d721a67a569b3fc52f62158e8bb9de781fe08493296a25cede481b572171` | `2a91f55e2dc8eba856cf00e5bafc76d5d0d3f8c8c75bcb0c58170eb290b05c95` |
+| `rc87-b68640e106b42fb8` | tooling | `4751462a1623456e3c7b70543c33a7c33d978f589e083d3ad97c36b2ca34a0aa` | `965a971602a3401397f54a084b2671cd1996751eab80e2261138789f62842e2e` |
+| `rc87-4fef17fa41b4a953` | tooling | `96ec5045d3f3950f805c3063dc255d07bd5eb46800dd67dc48da87b265a4a2a6` | `826c69c2c987959edbb3ef707ab67eeb8a91b5bbcf1d3ee46449d7764907b7d7` |
+| `rc87-adfe1f2fcb029ef8` | tooling | `7a1872f27e9b059827b1c8ba7fa40215df7b6e05b81aed462867c2222a7af2a6` | `3ee81e9d74a25da9de1b3468acb7f38f81a9b5eaf5ca56bea12954d4865378e1` |
+| `rc87-ead0c852e550915b` | tooling | `dbeb5d859f4a1bc9a6cfc43586cbcec089e1411ba8ec7b1d4098981d788231db` | `d27488a4e861468d3fed2a83c591851161b86a7007d264d66a4afa531ac7cfbf` |
+| `rc87-8c2559572a593020` | tooling | `cd9637cba9c86a545c6d8e1cfdd7aa060d219bc2aa9ab280a1cef3e06f581f2e` | `d8e3f255854ed4e2dbf2589339ace0955aa6cd91736a728bf8f21d1994a4a760` |
+| `rc87-1036d5b7cf8ed78f` | tooling | `aad81071bc040643e4a2bdc6504bbfa641ceeac2c614e2ef37712ca0fce1f922` | `c41a0a25b569c2fa03d0b15ab9cbb2921f93aaaec95e3468ff40a7f39ee8f6a1` |
+| `rc87-e151716687bd682a` | vite | `df0b0a4be712ae665a1034e8ddfc6c1425083eedf4ecfe7e7302408aad522967` | `d7c00a711c889f6eff947ed2dc5932ff2a04e78260c06c798b644a44ad2090d9` |
+| `rc87-58ddaa9d830cec33` | vite | `8acdce155d8e361c894dfaca9a4a474e63f6b9799f7d9c81e199a8ff559b4763` | `fc3e0eb9024c8b8512215d34782f97d6eaa55ca292a8278f46ded5bfbefb33f0` |
diff --git a/parity/post-rc87-delta-decisions.json b/parity/post-rc87-delta-decisions.json
index 41a729a01..b6ec63b85 100644
--- a/parity/post-rc87-delta-decisions.json
+++ b/parity/post-rc87-delta-decisions.json
@@ -46,42 +46,42 @@
"digest": "ac5df2e06eef38ac2b851263a4d7fa90f6c2c6fb7c17fb263b31cbd772c3459d"
},
"target": {
- "behavior": "Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back.",
+ "behavior": "The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax.",
"implementedAtCommit": "becef751987086ffe7a93cdbd6985f1ac0158c08",
"files": [
{
"file": "packages/internal/src/manifest-facade.ts",
- "digest": "60599b4e73be23fcc1c76a667b4325ab1afba06c8697a6e7f9874dacc80689ec"
+ "digest": "0f4c306318b71d35cf4fed2e6560601ed8a64360ee87f6c3555553e08cf35f30"
},
{
"file": "packages/internal/tests/module.test.ts",
- "digest": "1c30426470be68a74c92ed1ddba8445f18779a61862a9c654f4b4f60b4b58d7b"
+ "digest": "8f048785d4de1a0813f58aa28379455f289d72aa1fc40314f6607ee863dd1620"
},
{
"file": "packages/next/tests/css-manifest-loader.test.ts",
- "digest": "3416ad19dfe0f78787a2b33555956ee955a1cdf73c034598edfe6fd65e4dc067"
+ "digest": "bff410e72ce62b0c64d1c24ea567cea92f9eb35af95c959d0bee2832e5f612c1"
},
{
"file": "packages/runtime/src/hydration.ts",
"implementedFrom": "packages/runtime/src/core.ts",
- "digest": "44bc1f07fd0c4b173cffd581d76c9049d1949405417ca7ad559a980458d88074"
+ "digest": "5b6d189a11c3aac3d2881b23047fcb48f2bffcb6d94d1d20b626bd3db4a2ce3f"
},
{
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
"implementedFrom": "packages/runtime/e2e/edge-cases.test.ts",
- "digest": "58559cb423a01e0766ecfaf572b7c5fe1cf8c876e09552bee23d55e1d8e7c11c"
+ "digest": "73f0ddbc1dd5f605a1b237b529c5f2dfab39f109636c0fd30b9e5a712110732e"
},
{
"file": "packages/vite/tests/plugins/manifest-loader.test.ts",
- "digest": "1f02e35a9d44a87c6029b87fa01baa5aaf1f2aae77a1813edceb74cac1d62c60"
+ "digest": "d1bc876582ad6e0f9b1a88ba00a75c1b3616b072df9f67cc7dd960f02602d9cd"
},
{
"file": "packages/vite/tests/plugins/manifest-virtual-module.test.ts",
- "digest": "c08dde056a4069705653ad5336fb75128bbebcc7146dc004b1cda904b8ac3b43"
+ "digest": "bf099daae9d9bf4f3dca24ff01df97fe931039ea2024835b9352cd0790531eb0"
},
{
"file": "packages/webpack/tests/plugin.test.ts",
- "digest": "c5ff44cd713a5aa21f4dc2fce8cb4aaadf736efbd7d98c52ff0bede53e942386"
+ "digest": "40fd5d98515cee83f121f08a09bed0fd5f905aa786d2f30f2161ab1af079c002"
}
],
"tests": [
@@ -91,19 +91,19 @@
"digest": "feb63a16b273d62cac7ceddcaf53c64baf728219284fbc81df694496200b795e"
},
{
- "caseId": "rc87-2d99ea0e5a8248fe",
+ "caseId": "rc87-95afc75a0d20ce37",
"runner": "vitest",
- "digest": "5bb285512b710f4cb5fe56e5902499814b647ee410347a7ea3ee6d92c6d070dc"
+ "digest": "632567a524db6c1138bc2dd6116ecb22bf57625eba4b9b1b7ca40e04cff861f5"
},
{
"caseId": "rc87-c3255a639bad7508",
"runner": "vitest",
- "digest": "31d52aeb5b1902eed217924cd53c616a1dd5bab1239d7a83e947b903694c357b"
+ "digest": "1186e1726c69d143c01523a6a1667897974782d0093e4cb5d02543c348628130"
},
{
"caseId": "rc87-34bf97d92ae3004c",
"runner": "vitest",
- "digest": "5786f75ec220311a3517b112d90713f7d195c94dc7afcbd12f3436007a9c7964"
+ "digest": "82501ee219ea1052023e6765a0c36ec072458af5dc2b77d1804d07cdfb8dc8f0"
},
{
"caseId": "rc87-28031ac807ec5325",
@@ -121,9 +121,9 @@
"digest": "9afe02024e6e8595625453c6ab9be4bad9c1b5fed8246137612b5f076afaba68"
},
{
- "caseId": "rc87-c6f234a37661be00",
+ "caseId": "rc87-a9210afde2b25995",
"runner": "vitest",
- "digest": "449583c35a6d3b4499950043ea16a0a2d16912810941afe4801ceac17028121e"
+ "digest": "18466eeec0c81b7e8e3f595f9b75f6593264bcdb8731aad877676e02eedb828f"
},
{
"caseId": "rc87-074e56c447b243c2",
@@ -148,7 +148,7 @@
{
"caseId": "rc87-6c18481fc5cdfa31",
"runner": "vitest",
- "digest": "825fbb83678c41c1bda9025b82f6d7e0e8dd5fbb774f4793fa605974249e5ab1"
+ "digest": "c260d70c0ab9722d3fd96f1fc881cfbb35b105f634e69b0b2bc31ce76080f438"
},
{
"caseId": "rc87-692ac35eb7556a3f",
@@ -158,17 +158,17 @@
{
"caseId": "rc87-dd785f5a00080d1c",
"runner": "playwright-or-vitest-e2e",
- "digest": "40c713c41d230220cf249eb8b1d6786b4f33b8579871ce716ed4406a042f1e76"
+ "digest": "98d4af3e15e524882d0eb43fbccb41329ce9a1b38522bb845a71041ccc3aa9fb"
},
{
- "caseId": "rc87-82aab64164d5d4a8",
+ "caseId": "rc87-5d560f8098718cfe",
"runner": "playwright-or-vitest-e2e",
- "digest": "2ed4cfb0fdbb4e7e3c4fd590b93f2b87649a1f0f782498e094c590fd552613db"
+ "digest": "22139a697fb9443140839e8cdbf4b2e0a6d87a2b1abac6a6881eddef7605f815"
},
{
- "caseId": "rc87-0f080221ec60651a",
+ "caseId": "rc87-3c3c79a9bd560910",
"runner": "playwright-or-vitest-e2e",
- "digest": "69ff6f4614ba1a53f6630d17720332f38956c60c3d9b23069f77f3bc8f639769"
+ "digest": "8e16ef448200605295b4cef7e27260dd8ac3539d5f31802e877f5b3c7650539b"
},
{
"caseId": "rc87-81017bda3a0a433d",
@@ -176,9 +176,9 @@
"digest": "c44bee73397b53ef689ac4994a2b9e2221a91d9582bb0c8450128225f3aa4a0a"
},
{
- "caseId": "rc87-90b45cbedb62f8ad",
+ "caseId": "rc87-ac48cb8b3e2fe23a",
"runner": "playwright-or-vitest-e2e",
- "digest": "9e55cb2d82857e07d7cfa9026b9a08ffec0a13ba2f8c4e8a89fe7a62d9bb71cc"
+ "digest": "d9b1311a89b160b48de9405c1fec16db5c07e98def140decbcbc954a1175dc76"
},
{
"caseId": "rc87-ce29f729c5b6ac32",
@@ -191,18 +191,19 @@
"digest": "d3e6830e3c6022e1d1d24eb297159eae4d437c9a5341840468445532ef932026"
}
],
- "digest": "65bce5983f2a05fea6fe10339768d726eb6ac655fe6e9a1bd52eec8b8cbad640"
+ "digest": "7e78c57bad6eb9692720f5580d92b62703f7a88445614b90781d1ab9774cdfa6"
},
"invariants": [
"modulepreload as=\"json\" HTML bytes remain unchanged.",
- "Node and universal server branches continue to use JSON imports.",
- "Published APIs, package exports, virtual module IDs, rendering options, and dependencies remain unchanged."
+ "The shared browser facade retains its construction-SyntaxError fetch fallback; runtime hydration is a separate direct JSON-module path without that fallback.",
+ "Next manifest modules use standard ESM data and the bundler owns asset delivery; the shared universal server facade imports the supplied asset URL.",
+ "This decision covers only the reviewed eight files and 21 cases; it does not close other Rust-refactor migration differences or authorize package publication."
],
"approval": {
- "approvedBy": "Aron ",
- "approvedAt": "2026-08-01T12:46:46Z",
- "reviewRef": "codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c",
- "scopeDigest": "004cf73c481819fb9bea3064499b04789bfd8d96c9c3514d6b71809957d032f0"
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md#manifest-file-supplement",
+ "scopeDigest": "c7765daa6db59019ae6949287a5c64b36975a3a15d5ff310b2e6e0bbfe2be4f5"
}
}
]
diff --git a/parity/post-rc87-delta-ledger.json b/parity/post-rc87-delta-ledger.json
index cf7b2f03b..e235ca3f5 100644
--- a/parity/post-rc87-delta-ledger.json
+++ b/parity/post-rc87-delta-ledger.json
@@ -20,7 +20,7 @@
},
"targetAudit": {
"ref": "latest-target-change",
- "commit": "f6d4fb9851fb4490afa241ee3bea4373287bb624"
+ "commit": "658f46c8fbeded44811c283fe1a463cf1d03654c"
},
"summary": {
"files": 7,
@@ -38,7 +38,7 @@
"priority": "P0",
"decision": "approved-adaptation",
"decisionId": "post-rc87-browser-manifest-import-fallback",
- "behavior": "Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back."
+ "behavior": "The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax."
},
{
"file": "packages/integration/tests/module.test.ts",
@@ -46,7 +46,7 @@
"priority": "P0",
"decision": "approved-adaptation",
"decisionId": "post-rc87-browser-manifest-import-fallback",
- "behavior": "Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back."
+ "behavior": "The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax."
},
{
"file": "packages/next/tests/css-manifest-loader.test.ts",
@@ -54,7 +54,7 @@
"priority": "P0",
"decision": "approved-adaptation",
"decisionId": "post-rc87-browser-manifest-import-fallback",
- "behavior": "Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back."
+ "behavior": "The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax."
},
{
"file": "packages/vite/tests/plugins/manifest-loader.test.ts",
@@ -62,7 +62,7 @@
"priority": "P0",
"decision": "approved-adaptation",
"decisionId": "post-rc87-browser-manifest-import-fallback",
- "behavior": "Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back."
+ "behavior": "The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax."
},
{
"file": "packages/vite/tests/plugins/manifest-virtual-module.test.ts",
@@ -70,7 +70,7 @@
"priority": "P0",
"decision": "approved-adaptation",
"decisionId": "post-rc87-browser-manifest-import-fallback",
- "behavior": "Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back."
+ "behavior": "The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax."
},
{
"file": "packages/vscode/package.json",
@@ -85,7 +85,7 @@
"priority": "P0",
"decision": "approved-adaptation",
"decisionId": "post-rc87-browser-manifest-import-fallback",
- "behavior": "Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back."
+ "behavior": "The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax."
}
],
"commits": [
@@ -155,42 +155,42 @@
"digest": "ac5df2e06eef38ac2b851263a4d7fa90f6c2c6fb7c17fb263b31cbd772c3459d"
},
"target": {
- "behavior": "Keep JSON import attributes as the primary browser path and use fetch only when JSON import-loader construction throws SyntaxError; import rejections and non-SyntaxError construction failures do not fall back.",
+ "behavior": "The shared browser facade prefers JSON import attributes and falls back to fetch only when loader construction throws SyntaxError; import evaluation and other construction failures do not fetch. The universal server branch imports the supplied asset URL directly. Next emits standard ESM manifest data owned by the bundler. Runtime external hydration uses direct dynamic JSON import attributes without constructing a loader or providing a fetch fallback, and reports import failures as structured diagnostics. Reviewed fixtures use languageVersion 3 and current utility/token syntax.",
"implementedAtCommit": "becef751987086ffe7a93cdbd6985f1ac0158c08",
"files": [
{
"file": "packages/internal/src/manifest-facade.ts",
- "digest": "60599b4e73be23fcc1c76a667b4325ab1afba06c8697a6e7f9874dacc80689ec"
+ "digest": "0f4c306318b71d35cf4fed2e6560601ed8a64360ee87f6c3555553e08cf35f30"
},
{
"file": "packages/internal/tests/module.test.ts",
- "digest": "1c30426470be68a74c92ed1ddba8445f18779a61862a9c654f4b4f60b4b58d7b"
+ "digest": "8f048785d4de1a0813f58aa28379455f289d72aa1fc40314f6607ee863dd1620"
},
{
"file": "packages/next/tests/css-manifest-loader.test.ts",
- "digest": "3416ad19dfe0f78787a2b33555956ee955a1cdf73c034598edfe6fd65e4dc067"
+ "digest": "bff410e72ce62b0c64d1c24ea567cea92f9eb35af95c959d0bee2832e5f612c1"
},
{
"file": "packages/runtime/src/hydration.ts",
"implementedFrom": "packages/runtime/src/core.ts",
- "digest": "44bc1f07fd0c4b173cffd581d76c9049d1949405417ca7ad559a980458d88074"
+ "digest": "5b6d189a11c3aac3d2881b23047fcb48f2bffcb6d94d1d20b626bd3db4a2ce3f"
},
{
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
"implementedFrom": "packages/runtime/e2e/edge-cases.test.ts",
- "digest": "58559cb423a01e0766ecfaf572b7c5fe1cf8c876e09552bee23d55e1d8e7c11c"
+ "digest": "73f0ddbc1dd5f605a1b237b529c5f2dfab39f109636c0fd30b9e5a712110732e"
},
{
"file": "packages/vite/tests/plugins/manifest-loader.test.ts",
- "digest": "1f02e35a9d44a87c6029b87fa01baa5aaf1f2aae77a1813edceb74cac1d62c60"
+ "digest": "d1bc876582ad6e0f9b1a88ba00a75c1b3616b072df9f67cc7dd960f02602d9cd"
},
{
"file": "packages/vite/tests/plugins/manifest-virtual-module.test.ts",
- "digest": "c08dde056a4069705653ad5336fb75128bbebcc7146dc004b1cda904b8ac3b43"
+ "digest": "bf099daae9d9bf4f3dca24ff01df97fe931039ea2024835b9352cd0790531eb0"
},
{
"file": "packages/webpack/tests/plugin.test.ts",
- "digest": "c5ff44cd713a5aa21f4dc2fce8cb4aaadf736efbd7d98c52ff0bede53e942386"
+ "digest": "40fd5d98515cee83f121f08a09bed0fd5f905aa786d2f30f2161ab1af079c002"
}
],
"tests": [
@@ -200,19 +200,19 @@
"digest": "feb63a16b273d62cac7ceddcaf53c64baf728219284fbc81df694496200b795e"
},
{
- "caseId": "rc87-2d99ea0e5a8248fe",
+ "caseId": "rc87-95afc75a0d20ce37",
"runner": "vitest",
- "digest": "5bb285512b710f4cb5fe56e5902499814b647ee410347a7ea3ee6d92c6d070dc"
+ "digest": "632567a524db6c1138bc2dd6116ecb22bf57625eba4b9b1b7ca40e04cff861f5"
},
{
"caseId": "rc87-c3255a639bad7508",
"runner": "vitest",
- "digest": "31d52aeb5b1902eed217924cd53c616a1dd5bab1239d7a83e947b903694c357b"
+ "digest": "1186e1726c69d143c01523a6a1667897974782d0093e4cb5d02543c348628130"
},
{
"caseId": "rc87-34bf97d92ae3004c",
"runner": "vitest",
- "digest": "5786f75ec220311a3517b112d90713f7d195c94dc7afcbd12f3436007a9c7964"
+ "digest": "82501ee219ea1052023e6765a0c36ec072458af5dc2b77d1804d07cdfb8dc8f0"
},
{
"caseId": "rc87-28031ac807ec5325",
@@ -230,9 +230,9 @@
"digest": "9afe02024e6e8595625453c6ab9be4bad9c1b5fed8246137612b5f076afaba68"
},
{
- "caseId": "rc87-c6f234a37661be00",
+ "caseId": "rc87-a9210afde2b25995",
"runner": "vitest",
- "digest": "449583c35a6d3b4499950043ea16a0a2d16912810941afe4801ceac17028121e"
+ "digest": "18466eeec0c81b7e8e3f595f9b75f6593264bcdb8731aad877676e02eedb828f"
},
{
"caseId": "rc87-074e56c447b243c2",
@@ -257,7 +257,7 @@
{
"caseId": "rc87-6c18481fc5cdfa31",
"runner": "vitest",
- "digest": "825fbb83678c41c1bda9025b82f6d7e0e8dd5fbb774f4793fa605974249e5ab1"
+ "digest": "c260d70c0ab9722d3fd96f1fc881cfbb35b105f634e69b0b2bc31ce76080f438"
},
{
"caseId": "rc87-692ac35eb7556a3f",
@@ -267,17 +267,17 @@
{
"caseId": "rc87-dd785f5a00080d1c",
"runner": "playwright-or-vitest-e2e",
- "digest": "40c713c41d230220cf249eb8b1d6786b4f33b8579871ce716ed4406a042f1e76"
+ "digest": "98d4af3e15e524882d0eb43fbccb41329ce9a1b38522bb845a71041ccc3aa9fb"
},
{
- "caseId": "rc87-82aab64164d5d4a8",
+ "caseId": "rc87-5d560f8098718cfe",
"runner": "playwright-or-vitest-e2e",
- "digest": "2ed4cfb0fdbb4e7e3c4fd590b93f2b87649a1f0f782498e094c590fd552613db"
+ "digest": "22139a697fb9443140839e8cdbf4b2e0a6d87a2b1abac6a6881eddef7605f815"
},
{
- "caseId": "rc87-0f080221ec60651a",
+ "caseId": "rc87-3c3c79a9bd560910",
"runner": "playwright-or-vitest-e2e",
- "digest": "69ff6f4614ba1a53f6630d17720332f38956c60c3d9b23069f77f3bc8f639769"
+ "digest": "8e16ef448200605295b4cef7e27260dd8ac3539d5f31802e877f5b3c7650539b"
},
{
"caseId": "rc87-81017bda3a0a433d",
@@ -285,9 +285,9 @@
"digest": "c44bee73397b53ef689ac4994a2b9e2221a91d9582bb0c8450128225f3aa4a0a"
},
{
- "caseId": "rc87-90b45cbedb62f8ad",
+ "caseId": "rc87-ac48cb8b3e2fe23a",
"runner": "playwright-or-vitest-e2e",
- "digest": "9e55cb2d82857e07d7cfa9026b9a08ffec0a13ba2f8c4e8a89fe7a62d9bb71cc"
+ "digest": "d9b1311a89b160b48de9405c1fec16db5c07e98def140decbcbc954a1175dc76"
},
{
"caseId": "rc87-ce29f729c5b6ac32",
@@ -300,18 +300,19 @@
"digest": "d3e6830e3c6022e1d1d24eb297159eae4d437c9a5341840468445532ef932026"
}
],
- "digest": "65bce5983f2a05fea6fe10339768d726eb6ac655fe6e9a1bd52eec8b8cbad640"
+ "digest": "7e78c57bad6eb9692720f5580d92b62703f7a88445614b90781d1ab9774cdfa6"
},
"invariants": [
"modulepreload as=\"json\" HTML bytes remain unchanged.",
- "Node and universal server branches continue to use JSON imports.",
- "Published APIs, package exports, virtual module IDs, rendering options, and dependencies remain unchanged."
+ "The shared browser facade retains its construction-SyntaxError fetch fallback; runtime hydration is a separate direct JSON-module path without that fallback.",
+ "Next manifest modules use standard ESM data and the bundler owns asset delivery; the shared universal server facade imports the supplied asset URL.",
+ "This decision covers only the reviewed eight files and 21 cases; it does not close other Rust-refactor migration differences or authorize package publication."
],
"approval": {
- "approvedBy": "Aron ",
- "approvedAt": "2026-08-01T12:46:46Z",
- "reviewRef": "codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c",
- "scopeDigest": "004cf73c481819fb9bea3064499b04789bfd8d96c9c3514d6b71809957d032f0"
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md#manifest-file-supplement",
+ "scopeDigest": "c7765daa6db59019ae6949287a5c64b36975a3a15d5ff310b2e6e0bbfe2be4f5"
}
}
]
diff --git a/parity/rust-refactor-contract-evidence.json b/parity/rust-refactor-contract-evidence.json
index 9711018f1..6e610d94c 100644
--- a/parity/rust-refactor-contract-evidence.json
+++ b/parity/rust-refactor-contract-evidence.json
@@ -9,41 +9,41 @@
{
"sourceId": "rc87-886095b27074cf6c",
"sourceDigest": "0f6195379a6491d260f50a4f15cc0b6e3332db3f207c664a0bd906b1089bd9dd",
- "targetDigest": "b60e9a27b00a83c49c1a21084931aec7144f19b40615321ce78bfbb90a3e62de",
+ "targetDigest": "ebd65a3374a0f2e63acc87c5d2121af5ac7003c34023fa54830e284ea6e829d2",
"proof": "approved-contract-change",
- "reason": "Packaged Wasm loading, initial empty snapshot, one block mutation, exact layered CSS and disposal remain covered. The approved inspection contract replaces valid:true with matchStatus:matched and requires languageVersion:2 in this committed target; a separate native declaration case verifies explicit var() resource emission without host support filtering.",
+ "reason": "Reviewed at implementation HEAD 2079d665a: Node file-URL Wasm loading, matched inspection, empty snapshot, exactly one block mutation, layered CSS and disposal are asserted. Explicit var(--stripe) resource generation remains covered. The manifest fixture now uses the approved languageVersion:3 contract.",
"approval": {
"approvedBy": "Aron (explicit implementation plan in this task)",
- "approvedAt": "2026-09-25T08:47:41.469Z",
- "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
- "scopeDigest": "6b337d1f4fc40279db3e464bee872cb79fc6d334c03683d23f2f1966de7a5c5a"
+ "approvedAt": "2026-09-25T15:06:47.464Z",
+ "reviewRef": "parity/sizing-resolution-validation.md#historical-evidence-review",
+ "scopeDigest": "e2c98b255fc1599b6daea47926740dd6349781e6a6b4b7ce71a835ec78da062b"
}
},
{
"sourceId": "rc87-534a5dbe18105a92",
"sourceDigest": "3f0364bd9b6a1fa7c2bd51793132299992be25b488b311bd2ee5899a59d0295a",
- "targetDigest": "af80b3b3547d7f2aee9195f71ab1a1325d4510321f306b37f0237bedd170b51d",
+ "targetDigest": "2a0102f5595d849144e6e0642eac0acdc0ca276ecf50b4851e975d828e653f84",
"proof": "approved-contract-change",
- "reason": "The approved preserve-and-diagnose policy removes the browser support handshake from generation. The replacement asserts identical native declaration preservation without host filtering; it intentionally reverses the old support-dependent contract.",
+ "reason": "Reviewed at implementation HEAD 2079d665a: the renamed preservation test stubs CSS.supports to reject made-up:nope but still asserts both rules and exact CSS; RenderSession also preserves accent-color:transparent. This implements the approved removal of host-support filtering, with languageVersion:3.",
"targetId": "rc87-01b18af25a7b490a",
"approval": {
"approvedBy": "Aron (explicit implementation plan in this task)",
- "approvedAt": "2026-09-25T09:09:01.430Z",
- "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
- "scopeDigest": "9a7f1f058f5e67f9ba8f6495612ec23144d742399985261a27e40f6dc2e9ee77"
+ "approvedAt": "2026-09-25T15:06:47.464Z",
+ "reviewRef": "parity/sizing-resolution-validation.md#historical-evidence-review",
+ "scopeDigest": "851e32bb775bf29a232b98d81a5401c5797282108c4dc786488bd08098f9da4e"
}
},
{
"sourceId": "rc87-97379238aa6e9c52",
"sourceDigest": "5bbd8c3b2443030c35c33062316c8a8e5e4e967d6895f171e073691476f38a1d",
- "targetDigest": "6c800b552186f626fe9f53d862ea20308393c418a57b8a7cc17990938f540508",
+ "targetDigest": "fa84688920c14eeda4852d17e786d653d5b88e225d2dc8aa65c85ed821b93155",
"proof": "approved-contract-change",
- "reason": "Original normalized engine-operation failure and idempotent disposal assertions remain. Added native declaration coverage checks the explicit var(--stripe) resource and background shorthand; the shared fixture now declares the approved language version. This is not evidence that colon token inference remains supported.",
+ "reason": "Reviewed at implementation HEAD 2079d665a: double disposal remains safe and later snapshot throws structured SESSION_DISPOSED in the engine domain. The explicit var(--stripe) resource and background shorthand assertions remain; manifest fixtures now use languageVersion:3.",
"approval": {
"approvedBy": "Aron (explicit implementation plan in this task)",
- "approvedAt": "2026-09-25T08:47:41.470Z",
- "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
- "scopeDigest": "559da5b0560d2a1fedf4044bdd638ca47642da62c9ba840fa68d7f0c90effb05"
+ "approvedAt": "2026-09-25T15:06:47.465Z",
+ "reviewRef": "parity/sizing-resolution-validation.md#historical-evidence-review",
+ "scopeDigest": "352d057c88c3e07f89aef5c905c14865f2f7ba1453696badf08d442abc2150a6"
}
},
{
@@ -84,14 +84,14 @@
{
"sourceId": "rc87-c6f234a37661be00",
"sourceDigest": "234eb3d4b27a4bd80066a07a403be6afa0b6be8aa51a268c7720301f8a530a07",
- "targetDigest": "461c6a81710f78dac0d37c5969508b9d5a12e33324051fb772825eabbe5beafe",
+ "targetDigest": "18466eeec0c81b7e8e3f595f9b75f6593264bcdb8731aad877676e02eedb828f",
"proof": "approved-contract-change",
- "reason": "The approved Next manifest ESM plan removes direct writes to .next/static/media and external JSON URL assembly. The replacement checks standard ESM output and absence of loader asset writes.",
+ "reason": "Reviewed at implementation HEAD 2079d665a: the renamed ESM test imports emitted data, asserts languageVersion:3 and theme content, rejects fetch and /_next URL assembly, and confirms no .next output directory. This preserves the approved bundler-owned delivery change rather than the removed external JSON behavior.",
"approval": {
"approvedBy": "Aron (explicit implementation plan in this task)",
- "approvedAt": "2026-09-25T09:09:01.430Z",
- "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
- "scopeDigest": "b9856d5f427e8e0628dd26e6e562862061d950a0a3fd1dedcec13f587848e7f1"
+ "approvedAt": "2026-09-25T15:06:47.465Z",
+ "reviewRef": "parity/sizing-resolution-validation.md#historical-evidence-review",
+ "scopeDigest": "83cdd2abfd107576a9590f945f18320b17eb68bbdaf0589dc98c9918bac94b65"
},
"targetId": "rc87-a9210afde2b25995"
},
@@ -209,9 +209,15 @@
{
"sourceId": "rc87-f3a51f991c07da68",
"sourceDigest": "87c4cc5f64bbc47012f4ddae1788eb544fce9de856542b26f5e0d5b7180efbce",
- "targetDigest": "999028c048d0793e5b6979d2efc0cbc7507e4e313db5910e0cc0f8ce509dc0e7",
- "proof": "verified-superset",
- "reason": "The Next build-state compose, native CSS, and disposal assertions remain and the target adds emitted-global variable coverage."
+ "targetDigest": "c1ac4752d14ba983e1e1862ccfbcac48fe93d173ae4e55ebb96dbd7917f044f0",
+ "proof": "approved-contract-change",
+ "reason": "The Next build-state compose, native CSS, and disposal assertions remain and the target adds emitted-global variable coverage. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "81f2b7cc7ec9d5a0fe204d76139731aa79d6060d90f31f26478879e7a1a0ad59"
+ }
},
{
"sourceId": "rc87-64695981843c3c3f",
@@ -229,14 +235,14 @@
{
"sourceId": "rc87-bc7adf7569796dc8",
"sourceDigest": "9fe3dfa54a4f08cfcd77745c1601c9077b3a554ed8b2be8460e83c62c356fcdd",
- "targetDigest": "0e0cf5c13e9ac0afff4be07f5b12d1d2855e65f9b04f52d26900fbdf3ab6c89c",
+ "targetDigest": "6acfe4d189cfa974bcecaf2ad5713cb1d83eae6da099757699f4f6f2c8e9cf4d",
"proof": "approved-contract-change",
- "reason": "Next Turbopack manifest testing explicitly selects progressive mode and retains user JS rules and manifest conditions. The approved ESM delivery removes external:true and redundant as rewrites, adds emitted-globals loading, and excludes CSS Modules from the ordinary Master stylesheet route.",
+ "reason": "The reviewed Next progressive-mode case preserves user JS rules and ESM manifest delivery. Ordinary CSS/SCSS/Sass files enter the stylesheet loader without requiring Master directive content; the ordinary rule excludes CSS Modules, generated output paths, and manifest queries. CSS Modules enter project context through a separate module rule. Explicit QA approval covers the exact case digest in the freeze review.",
"approval": {
- "approvedBy": "Aron (explicit implementation plan in this task)",
- "approvedAt": "2026-09-25T08:47:41.470Z",
- "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
- "scopeDigest": "c963c95f820f728cd4d361dc34a9ac763c7c583bfa3e849108a56a4559967a27"
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:12:20Z",
+ "reviewRef": "parity/freeze-migration-approval.md#three-contract-records",
+ "scopeDigest": "57b497573ed8e2a850c8dd5a6f8c833946fbcbb334b5885082736981a98794a1"
}
},
{
@@ -333,42 +339,6915 @@
{
"sourceId": "rc87-48ff4814761d1c90",
"sourceDigest": "c62fd9d5353d8b511ad24233e46b4cf160e758ea23c413735a73c3c1c911a7fe",
- "targetDigest": "3a6d0130956c5c52141ffa81fd7b511cbbfc7beb1f085ede3d0ae87b2f3032ab",
+ "targetDigest": "652c915163351d4fa0a4fe4e70d83e14eea0a4293a4bcbb21bf1115673212f55",
"proof": "approved-contract-change",
- "reason": "Vite failed-style handling still rejects invalid composition and registers the original absolute source dependency. The fixture now uses @utilities and a definitely missing named token, and expects the new utility diagnostic wording; this avoids relying on removed colon-token inference to create an error.",
+ "reason": "Vite failed-style handling still rejects invalid composition and registers the original absolute source dependency. The fixture now uses @utilities and a definitely missing named token, and expects the new utility diagnostic wording; this avoids relying on removed colon-token inference to create an error. Supplemental exact QA preserves every assertion while using Vite-normalized watcher paths on Windows; see parity/vite-portable-freeze-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
"approval": {
- "approvedBy": "Aron (explicit implementation plan in this task)",
- "approvedAt": "2026-09-25T08:47:41.470Z",
- "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
- "scopeDigest": "6aa033e3f208bda722c151d0d334688d2c29b446f2064b8be01bf2e95800422a"
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "1a43c97de59724e8ebda646ef7ab03c269d01d9330096a5925c58a654e37245a"
}
- }
- ],
- "surfaces": [
+ },
{
- "surfaceId": "public-api-contract",
- "baselineDigest": "b3b0acf8161aae00605cd11228b77129eb1b12e37079fd6681dead85e23a5deb",
- "targetDigest": "d27ade80cd1b9f0da22b891083ae8668b1a4ab338fbbfc21a7023d4725f4e058",
+ "sourceId": "rc87-d7b316a093146b78",
+ "sourceDigest": "b339ad763f79ddbbea1b0ab36e93cf19f90ac537ade13dc3b448601b0f150e7c",
+ "targetDigest": "eee2f7011e955f58257d789f9d1b8a01e8a1df8cc7a6fe3f44feff6bae63233c",
+ "proof": "verified-superset",
+ "reason": "The unsupported lint request still uses version 0 with the same class list and asserts INVALID_LINT_REQUEST, with disposal in finally unchanged. Only the otherwise empty session fixture selects the current languageVersion:3; no syntax, generated CSS or lint request expectation changes."
+ },
+ {
+ "sourceId": "rc87-4879634b7dc86bc0",
+ "sourceDigest": "afb6dc83b3513e1e43ccf0dfababd2f149ebf0b9e09af6c3a96b153c3cb4e12f",
+ "targetDigest": "8e6ffd20ff973b22350fda30df45d007934e6aab989eb9dca0b90f4736f3a39a",
+ "proof": "verified-superset",
+ "reason": "All original package/CSS workspace fixtures and the exact returned-directory assertion remain. Added a generated .master/stylesheets tree containing both an entry marker and a dependent package.json, proving that generated outputs do not appear as new workspaces."
+ },
+ {
+ "sourceId": "rc87-e4168bcf06ac6da0",
+ "sourceDigest": "b65f2704e23810480ecd6b959006f675cffcd610e1562147389f37cf24f0df12",
+ "targetDigest": "49dc5fcf8270a53a732154295972babf34bf78d184f27f15ce82e9728aa1cf09",
+ "proof": "verified-superset",
+ "reason": "All original progressive component CSSOM, rule order, text, selectors and media-rule assertions remain unchanged. The target additionally asserts that hydration actually selected progressive mode before examining those rules."
+ },
+ {
+ "sourceId": "rc87-d07375d346c8325d",
+ "sourceDigest": "e1f651997d508585f03f8bbdaefd72923e730db67dc098e49f4fcce0727efb13",
+ "targetDigest": "19b246f6e3c0ff6b57de0de44c41649d2c2e3f4eec7f5cf1b09fc61399c37dbf",
+ "proof": "verified-superset",
+ "reason": "All original comprehensive progressive layer names and native rule-count assertions remain unchanged. The target additionally asserts that hydration actually selected progressive mode before examining those layers."
+ },
+ {
+ "sourceId": "rc87-fcb1f769e9b365f4",
+ "sourceDigest": "cc1e1a92a609dce11a9319464ec8590edfde4a1cc450287e77ce29cef4a15446",
+ "targetDigest": "520d6b3901024cd825995e0229695d73cff870ae9c77b88736f8ac8c8a84f78f",
+ "proof": "verified-superset",
+ "reason": "The original progressive theme token-count assertion remains unchanged. The target additionally asserts that hydration actually selected progressive mode before examining those token counts."
+ },
+ {
+ "sourceId": "rc87-bbc24f6f24c20fec",
+ "sourceDigest": "4d0436e05fc9a6b7a23660484ddc5767ea0b9d9f8073ca0c6f05d580ab4872f3",
+ "targetDigest": "f496bc0e5e13f0f8508ffac2b948cd96e66b26c2a2c21f81b6b6d26f0b727412",
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete before/after public stylesheet lifecycle case at 8f48b10a1. All immutable snapshot, composition, disposal and exact source-identity assertions remain. The only case-body change resolves /project/app.css with the native Node path helper, preserving the identical POSIX expectation and extending the same absolute-file identity assertion to Windows drive paths. The existing host source resolver already applies resolve(file); no CSS, source lifecycle or production API behavior changes. All 56 focused compiler cases, including this case, pass."
+ },
+ {
+ "sourceId": "rc87-8a97d21e81e27c3a",
+ "sourceDigest": "f08cfb70abc681348a867c666ff8919aec1d9b594eb69957b733737ef4b7440d",
+ "targetDigest": "81ada7e3042c201d1d9ac5f5535ce056b3e833bcc6d511a7132d30a818b3938b",
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete facade case before and after the migration. Only the input manifest gains the required languageVersion: 3 field; the exact native binding and empty CSS snapshot assertions and disposal call remain. This retains the Rust-backed async facade contract under the current manifest input envelope. Both facade tests pass."
+ },
+ {
+ "sourceId": "rc87-7c76d636d09bcaf2",
+ "sourceDigest": "e6dfe03cc981f48de4fbdf58e6b64124fd17b366ce2615d3e161f97820c8e680",
+ "targetDigest": "9c58b6de1900c824833d8a9c8226786fb8322efd4e7538c6b5c65ab109fee179",
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete runtime compile-only smoke source before and after the migration. Only the input manifest gains the required languageVersion: 3 field. Both decorator calls, custom-element refresh, ShadowRoot selection, emitted globals and type contracts remain unchanged. The runtime type-check includes this file and passes."
+ },
+ {
+ "sourceId": "rc87-0bcff8d19b2e7836",
+ "sourceDigest": "d038ebf7074c48d0c2d4b63e6d249c57b5cf365c329399cb6c5921f0fb5157b1",
+ "targetDigest": "35aab610c992d91b41d2754480d31e1fb7db1be3ff0fd526b29395f9a7ac9ac2",
"proof": "approved-contract-change",
- "reason": "Reviewed the public API and census changes through 704996ec: named token registry, separate match/syntax/value/browser diagnostics, source ownership and occurrence data, migration profiles, stylesheet graphs/composition traces, strict validation, explicit modes, and static/pruning options replace the previous RC contracts. Function completions and color-expression types remain. These changes implement the explicitly approved language, scanner, native CSS and rendering plans.",
+ "reason": "Explicit QA approval of the exact named-token migration for \"keeps middleware page output isolated across responses\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
"approval": {
- "approvedBy": "Aron (explicit implementation plan in this task)",
- "approvedAt": "2026-09-25T09:11:22.488Z",
- "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
- "scopeDigest": "27e56be87f8536e6ad434b45056287cc5236ac95a5c1dc82a49a6a746cdb9390"
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "8491767494da51d031dc79f056a918f760ba7309dbe97f176c5688dcd35dbb29"
}
},
{
- "surfaceId": "binding-version-contract",
- "baselineDigest": "a647d5bdf4761c7b9ce77609df36cfedb1bb4385e5d5572830b75f28fd165389",
- "targetDigest": "04b30b6687b0dfba938b8b7ae0ea01a41c355b855c22b838b3ffbc13927c939f",
+ "sourceId": "rc87-9e148d7296283e73",
+ "sourceDigest": "2531bd2b090295f603060aff288660434a85bb9669f83aa968dd6b7e77e66a58",
+ "targetDigest": "34536d2ffed03c8d5c5f89a6b4a36e680337edb93ebcadc7cd43be7f103ef274",
"proof": "approved-contract-change",
- "reason": "The committed target coordinates ABI 11, languageVersion 2, validator/diagnostics 3, language batch 4 and source batch 2. Manifest/hydration envelopes, transition, lexer and lint remain version 1. This records the approved earlier RC changes; the current utility work separately advances ABI 12 and languageVersion 3 and must be audited after commit.",
+ "reason": "Explicit QA approval of the exact named-token migration for \"generates CSS only through the explicit generate command\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
"approval": {
- "approvedBy": "Aron (explicit implementation plan in this task)",
- "approvedAt": "2026-09-25T09:11:22.490Z",
- "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
- "scopeDigest": "086e95bc7ec8285051cd243c492fc038982ade9ae2762e379e8dd6bf0e60a2fb"
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "610240999cf7346be8509f619d289d5ff0e0c100f43de2ccc95b14e4d5469aa6"
+ }
+ },
+ {
+ "sourceId": "rc87-8e935adce73acbb6",
+ "sourceDigest": "8d1f3d6c33a0b033f482f264dd0ea503df3e083bb5e149ae90f61734b8602737",
+ "targetDigest": "313458146cedf4cf4d9246b22b56b18d5597effcd9721b4d4e828362643f6543",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"loads scanner directives from a managed CSS entry graph\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "6cafc53ce21988da3d78a02172250393fadddf2b0c4e88c15164a1244ef785b0"
+ }
+ },
+ {
+ "sourceId": "rc87-7312b1740c4885fb",
+ "sourceDigest": "3c91779d5e77f7143e552e55c99b99d7bc1e0c30e394d83c18f072692e851fd3",
+ "targetDigest": "03d8b8bb103c7d8a4924714a14dd21e20640501368fc293cb044f43dbe65be86",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"loads source directives from server template extensions\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "99d9fdda9781e61929072761f5336ef7e7c9d6f6b68ca19c965b98d347e839be"
+ }
+ },
+ {
+ "sourceId": "rc87-52c9eb78b1e18775",
+ "sourceDigest": "ecede6cd401bc24e2af70e0a0f06391f6a9b043f09cba09abaab5d890bd40a3e",
+ "targetDigest": "fdd94cb0c0e8061a1637895982520c6bc713fcb320bf2a08fc6bf983d0ec8eac",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"unions source directives and subtracts source not directives\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "540a8460996a2c76cb39afbd66aaf8a61b23c7c885d13c0f654cdf4be2390594"
+ }
+ },
+ {
+ "sourceId": "rc87-51abb4c0cc50234d",
+ "sourceDigest": "9caaede90b1fe4698a846bb3ce2d0628ec64355d9b05ce27745837b83be8dda9",
+ "targetDigest": "c119620eb6185f2d4e2dde52a150712461169c277318ee623b27df58c3b2de09",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"emits default preset variables used by local styles referencing a globals entry\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "162f2ad645d1019ec48a7b22a08c74f1c0bf430e2e3e1f721ef1d354c77d62cf"
+ }
+ },
+ {
+ "sourceId": "rc87-16dec65c866ce93c",
+ "sourceDigest": "a65877913d3abe5b5cb94a777f1614be38322f9cc4988900ef1d469682956b0e",
+ "targetDigest": "4cf37c324a3ac5bcec20a4e915d29d5ecfa947082780c00f358b7a9e1174d9f6",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"dedupes default preset variables already emitted by a globals entry snapshot\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "8a25a59d6fed7312b6f134865e50850f947634545109b90ebae50b72900a800c"
+ }
+ },
+ {
+ "sourceId": "rc87-d2ff63b2ee65d620",
+ "sourceDigest": "51649484e9f5872bdacbe26c29eea61c9068956acaae649aed7ee36f1f8715a9",
+ "targetDigest": "127226f9ffb455e596eb379368f7a044de253381f1dde2ef5a98d75ac159d866",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"renders representative default-manifest classes without a TypeScript oracle\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "61ef537f4657b4a019ddc649eb801858574a241bb6ce8dc999172f4efd3b538c"
+ }
+ },
+ {
+ "sourceId": "rc87-a0c4813d727c5342",
+ "sourceDigest": "c061a046509c196bcef2bc1b89396ea337628cbe911d98c66a108f45987d8d96",
+ "targetDigest": "9611c10cd0447afb56d481ddb8e2c810f06ba1c3d6c0d17a477bbdc073ecc18f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"resolves inline dependencies in emitted mode variables in native and Wasm\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "c8901666970371fbd4ceb4bd0bfa573b1fb7644ea90d55bb61515147c894bc70"
+ }
+ },
+ {
+ "sourceId": "rc87-aff0c5687d375213",
+ "sourceDigest": "3243b7d4c0aaae184bc121b7a180deeecd50f72b6b74fcd71795554bddf57e29",
+ "targetDigest": "eb914f139414d777665294bae2dda12eaaecae44b7cd47854a6918cbf7300cd8",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"returns range formatting edits for CSS directives\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "3db8e841e355d9024800d6837ecc70eeb54742eda8dc72ee512fc3b7f64671d0"
+ }
+ },
+ {
+ "sourceId": "rc87-3fac9efeebd10f88",
+ "sourceDigest": "0aacab8e23c2fbc940b60350a10b800be95886226e8e671436ebf04c697f1164",
+ "targetDigest": "8822b648be61077962a077bc2bacb49462ef36ca216b031028aa680317c04608",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"uses Rust for document contexts and hover inspection\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "ff0d261336f1dc054a80069fb075e0b578a3827b233241fb08483711b151b0c1"
+ }
+ },
+ {
+ "sourceId": "rc87-87a49eee126da67d",
+ "sourceDigest": "6ca790e1075125d57887e4821355c9d727ee5d2267c40b093f0f6ac568f50b3e",
+ "targetDigest": "21baaaa52852fe0fe31cb42ff9aaaa33ce3150b8169f600919596fd04afa63e6",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"handles caller Shiki decorations around host class attribute value wrappers\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "ca3cf5af0833b3c184964ee098955a1eb046be36327e976e3aaa18bda67fb1c7"
+ }
+ },
+ {
+ "sourceId": "rc87-11e7d929b66310fd",
+ "sourceDigest": "941f3ace18a98df984b80d5aeb5c8f0d5a8e7b50edf0b93b7104dbfc7ae25d6a",
+ "targetDigest": "17ea44caae96a5b7da2593c21f2a27bec4833841a6527e8bb7d834f515dd12c3",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"does not create host wrappers for raw class-list highlighting\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "77f1a8e03d027dbe821ff699b1a05180926374e2bd598053614a153272e2df0a"
+ }
+ },
+ {
+ "sourceId": "rc87-340707601e1b0a28",
+ "sourceDigest": "55a84fdc0e5d2d489bf7eb26e3a1ed01ce33a431f80df9dcb5c5b3366b9b2536",
+ "targetDigest": "051fba9ce10a8375b9ec2bf0719d9e571d27b67558bda67c474e95c6b69b16af",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"disposes the build renderer after materializing its output\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "e20e43bc314d8a2ed25b8ce91f0bc7a251dcb1fb943feebb7c76c7a0ec4c365e"
+ }
+ },
+ {
+ "sourceId": "rc87-0ab81b21d1f50161",
+ "sourceDigest": "a66514e27f51015d3673a958491086b54c51838a5e072868941157c3b6633559",
+ "targetDigest": "01efa6f04b79c289a466be4a9e8c57fc76d7fdc2809d335907550f5e4c5871c4",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"emits referenced default theme variables for page-level CSS\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "764f9ff3f6bdeda74aa5cbc1fc75b0adf6ed321223f23ff2207848b39c69f5b3"
+ }
+ },
+ {
+ "sourceId": "rc87-e26ee2198e53ea9b",
+ "sourceDigest": "630589ccff44fb22e5cfb26b2cdfed05135e31f9f5a1598320cf96709a4b72a6",
+ "targetDigest": "82a14152ac10253e7f08dafe737b26b0be760386084af95eb41076f6fa7c13f1",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"renders representative classes through the native Rust engine\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "d39c782b0531f38a2587dbd11028de1a69eaa0198ccddc2305c0ba0bef4af1be"
+ }
+ },
+ {
+ "sourceId": "rc87-f9c577219c15b646",
+ "sourceDigest": "117bfa4f0f85db1045132416dd9616d2418727855dc43244b7f4ae673861cd67",
+ "targetDigest": "c6474730cc899821b19fb943eb94fc584b0941b4909c7a2fcdbc3b5388acbd92",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"complex\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "39a5a4b0280789a24da090501fcd29d08992f3eb9bf607ba3b6b82b86aec0b49"
+ }
+ },
+ {
+ "sourceId": "rc87-d8846c51fa3e2af2",
+ "sourceDigest": "1436a4d3c57c13288b19581f1ac0185fdcf424eeaae1414e9d45226c16e0b6ef",
+ "targetDigest": "7e0c4f0263b69d766b925974acfaa57458d36db837e37285cf18f0b72a8cf985",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"mutation removals keep counts immediate and retain CSSOM rules after settle\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "78dd449e13e2fb2580561fb3fdc9c8b4af47d846f2431600034e5543bd158894"
+ }
+ },
+ {
+ "sourceId": "rc87-48a1ad4e356801ba",
+ "sourceDigest": "42b26757ad454928e6f02bf55a98a275bffaf8714621c37d5b6e3be682bd1f2a",
+ "targetDigest": "fcd7e548c794be0e8ef59302c03b7a318fc9a6fa15620f4c9b75c304df34df90",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"mutation removal flush keeps remaining native CSSOM references valid\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "762eb5f20d8f9a2658e30936008eb2e3844d8e7bedaaf4b3ab2f08202092ea11"
+ }
+ },
+ {
+ "sourceId": "rc87-234d591dd8aabd90",
+ "sourceDigest": "d914ef996bf6561932c02d8342328f1ca604fd4bef2046996b715509dc66523a",
+ "targetDigest": "9056290f7ae9da6f5199867aefa5b2ba9a43b51410b260ef82d696373e580312",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"re-adding a retained class cancels retained cleanup\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "0a9b539af4e710dea6c4e38e7bebdb3aadc46883ebe052ad4e825ad6560e1ff0"
+ }
+ },
+ {
+ "sourceId": "rc87-9533b10158c80bd7",
+ "sourceDigest": "712658b2709068f140555a4f3c333c7fef732bb6ae287068e0f89c76d309d9df",
+ "targetDigest": "ead180946126478e8b6b2235310892a3c8714add15d735ffc19e61a92912f979",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"direct remove deletes retained CSSOM rules synchronously\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "163485dada9571d6365dfcc7c200ae6e94427535d8d5e497663e4955dcb14d5e"
+ }
+ },
+ {
+ "sourceId": "rc87-5e8982a988021b9c",
+ "sourceDigest": "9e7cf59eec42b38d73be1e51e734d2968ff2775d395a21403d5be716eb709acd",
+ "targetDigest": "1e415886a2ff31004e0992793794b658d328c758bcb54182a07448f86ecadb88",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"retained hard-limit cleanup returns to soft target and preserves active classes\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "8d63d7e2270cdfe8f0d8c6a1d851ba2dcd1028288eb5babd4e8208ace43dbd1a"
+ }
+ },
+ {
+ "sourceId": "rc87-ce04b418651dfdbb",
+ "sourceDigest": "8b3c26c19442e2a4dd425b18f86ecd19cf93a330e25b66b7b86d70fe286d704c",
+ "targetDigest": "dba7ce6b3bff1470f445f6ab154bdda5218beda944f490afa35be0f71996b442",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"mutation removals are canceled when a class returns before flush\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "b4174b0c3f2d51357b021cefc61b655c78810cb7c4741f9fc235864a24c8c687"
+ }
+ },
+ {
+ "sourceId": "rc87-044d450087fe9f83",
+ "sourceDigest": "b6054757145e919e41442b1b9ef6725478201c7ecdc4f9031d00716fcb402e3f",
+ "targetDigest": "072e48139f49eaba5089660c3ba016c134c97aef053456a6b98f9b31391fd2ec",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"direct ensureClassRules and deleteClassRules stay synchronous\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "3c9826d6bdb104a25f17dc28e59a6ae52c9642e61dc9153a50ba5b6a38a309e7"
+ }
+ },
+ {
+ "sourceId": "rc87-20031249c83720ea",
+ "sourceDigest": "f21d4199cac9b506451cb5350b1cd0646caba86cac241b77ae54e51fb6e382e3",
+ "targetDigest": "82b7c86a60c4c324f060e611724c224e7db449432fdfa758ce8c9f7f9b6d7c0b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"observer-added cold classes update counts immediately and flush rules before paint\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "be06e24ce7ebd5103ab271a223fe34e38f401088b200b76dc7adce80e5cd0e76"
+ }
+ },
+ {
+ "sourceId": "rc87-aa64f308290aae54",
+ "sourceDigest": "7131df434c8d476797f6c3a14f7a20d344b3cec79bb2f59aee9d5109bcbac12c",
+ "targetDigest": "335e02c9ae35b3af16ed2e5087de8ae9e43214f9958662c43113d9e2c1a1949b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"observer-added retained classes are reused immediately\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "a68f253025d1cb73b3c47c73f100f4fb3d644db359537429f2e41d84e3188802"
+ }
+ },
+ {
+ "sourceId": "rc87-007b3ff1d80bab7f",
+ "sourceDigest": "62fbb0e23662318005f0cb45f1dbfd0f0cbf8331b14e34adff2865f3dcbed051",
+ "targetDigest": "bc36f4a9c40f5ab6669f951b62d54c924129c94c0c166a98f3fcfe1fad82d9e4",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"disconnect and dispose clear pending mutation additions and removals\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "f14db8894e5396ee17d15ad6f3187c4a8049441c324030957c1f8fe5ded52362"
+ }
+ },
+ {
+ "sourceId": "rc87-e6459f3d31cfae86",
+ "sourceDigest": "b1fdbf8531dc33d5b233b681dda94e11b22ff63a17e5254e02c7804a317e1f7b",
+ "targetDigest": "53db942036f8dfa6d8ce4e67a8f3eeea7614cbfff041241ef46b799e33b72bac",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"uses split bundled preset manifest\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "1943e57eb05ff2e4e0328544bdf029f216b4d5b87808be50fbdcf535a43a0eee"
+ }
+ },
+ {
+ "sourceId": "rc87-aa9f904b5b77da78",
+ "sourceDigest": "643039c2daca54077274de8373a51156df566bfd9a933a9ca0cfdd99feca098a",
+ "targetDigest": "5a3fee48182a3fde9d4b85a99be9b5849d2b33576be1d069d15703abb9040a1b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"uses modulepreloaded default manifest\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "a684c950b4c203553ce02532414f66ea97aa5fe1ce403296886ec821c35f4569"
+ }
+ },
+ {
+ "sourceId": "rc87-4866e126c81aecc5",
+ "sourceDigest": "3de0a8111c78155734b3c2cdda940af53f5201e678f621a5dcaaa80a1720179a",
+ "targetDigest": "e794b3353b951a079b8b592e41d6144b7b7c56c4967caa9127f7c10e216ead79",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"ignores global manifest override\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "acfda0719d8ce500a3e5c81036f24d2536ee4818f22041449a51f885a44feadf"
+ }
+ },
+ {
+ "sourceId": "rc87-c90242da5283c6bd",
+ "sourceDigest": "839a03cf67e6fe8e335719f45e4344d52eab718b4945c944682bbf29cf6a5e2a",
+ "targetDigest": "4acb45eb87094c4d8cea24d6d6c012ee64409ec55be4d775467d20d68cb06db5",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"expects the animate token output\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "1c4646e79e3e79e725358d249da995658b905627ca2eba49f51efadf83dd9de3"
+ }
+ },
+ {
+ "sourceId": "rc87-15f40a5319465c15",
+ "sourceDigest": "54068fe8602f8692419359d643e396bda6f7f67d8b62a2f54c4bccae589aedce",
+ "targetDigest": "52e33d19d6c9b402a73d2bbf5597ad5f863e57f52f7e7cbc625dfa26c1f927b3",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"dispose on progressive\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "83e67a94f89b2e17083d4800ccae3ffe6e8169601a5a589ebd3130912c3c06fb"
+ }
+ },
+ {
+ "sourceId": "rc87-4e74f806433ac2c5",
+ "sourceDigest": "a20ea463ebdd351ee290277782ab3ebac605f0744b41fc21d0d1380f5e796e7f",
+ "targetDigest": "1b849475984dd5c1e22b9d432d3729c14458851a3e00a3ed1ae090dfa122ce74",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"383\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "5e6764e0ded8c042a9034b641a2e1f6f653a9bd1ec89daadf4fc07ae9cd6c977"
+ }
+ },
+ {
+ "sourceId": "rc87-8a9c1985a1f50938",
+ "sourceDigest": "1a7d21d519784d5725bdf63bac28c542d491e70c389365fe4d8256d0df15b4ae",
+ "targetDigest": "9715b69871d64d371c123619efea55b4f60467c0b98f78d12615dd937a12ee02",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"renders a complete immutable HTML result\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "c9550a40496da9e554284204de5f2ad37503a0c36f25289686436a9b7a79e534"
+ }
+ },
+ {
+ "sourceId": "rc87-b7af484045f903f6",
+ "sourceDigest": "6c9d9bed9bd7801bdca99060e30eb8c8e8611e372655ef693341208f7b316e3c",
+ "targetDigest": "9161f61c4a158d05fcdf375691f0d4eb428dd3afd17378e4ba582552bb1c48d2",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"render elements\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "535ca2d17485f72e1c5fc3f6c99c63d8a2cc58102126dcdad873ff771e22646d"
+ }
+ },
+ {
+ "sourceId": "rc87-8740682ae4139966",
+ "sourceDigest": "58ab6c01a9b52e73b405e3d8982ce03d059712e4f43542e866d48d14f80ef4da",
+ "targetDigest": "54c484fa6b6cc9db3f8210d2eb4f9ed25143f8e045e3c819b8caefff170de6a7",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"injects generated CSS into documents with or without a head\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "c5a6d388a20fded6a09e6ec2deceb1bd6b1f60760e388a7f78999bcfe98ec23c"
+ }
+ },
+ {
+ "sourceId": "rc87-4ea9659443aa1918",
+ "sourceDigest": "d4f14f2c615f3c87d7cc820cde449b74e3fda7dc412d70117737fc14f6e404c7",
+ "targetDigest": "ba770083266fe8e84b24040525514bce20954b4eb42f16f3fd6e975815d78c22",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"updates an existing master style without duplicating it\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "2c024bd9b74f91105e54d9109e07a04ab661b5a1525346aff7530f13de26e952"
+ }
+ },
+ {
+ "sourceId": "rc87-2a82e3387d1c954b",
+ "sourceDigest": "aba697fc601b0ed143d0ecc0051b7cc6dc170884981de5af49825d5be228d36b",
+ "targetDigest": "26b32fe9ca6a980ac874b86da1413a3d94ed51200ccb631eb92adeee75909468",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"matches the core render owner and native render protocol\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "ea8b627d7414fe022f43967b731493101846e364760384547adcb1c8dc1b9698"
+ }
+ },
+ {
+ "sourceId": "rc87-989b124c0f6e9a46",
+ "sourceDigest": "530c9fc4b578cc26ae901cd633dfb87929567d5966f4a75b9b6c19fcaca6fa99",
+ "targetDigest": "7bae902001ef5edcc8bb573a551cabfd3da8396070d358c807e589a62077d5cb",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"reuses a renderer without leaking rules between documents\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "83b3fea7cb2e67c4e092892224c0a9d8ef7dac576abc9a94cdba6657f0ff8cf9"
+ }
+ },
+ {
+ "sourceId": "rc87-b9dfe7e0dd133d3c",
+ "sourceDigest": "35231d5b7ebf857aad899c8539b3c0b35dead498a8121027616894b1751a569d",
+ "targetDigest": "626a56fb46147339a494a9d4988e17188fcab6d493cd79f1a94fb0d4f369d121",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"rebuilds bounded cache generations without changing output\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "3ff6422937469b31f45253ccffd5cc4abb91cc169542ee420d5a9c5131c6de0f"
+ }
+ },
+ {
+ "sourceId": "rc87-9e310fd655a40e23",
+ "sourceDigest": "4383190b9b9b08f6ffc7bb6b8438767cd3acc165c967c37eb81c4430886e61d3",
+ "targetDigest": "b882b7151d6a692c09a52dd068b0ba5141fe32b58266c5dc3a18a150cb4f101d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"renders oversized pages outside the bounded cache\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "ea4af70a90a09d7a0fb9d57b6f9083dc6124aeaae28fef117f51370c2fe248a6"
+ }
+ },
+ {
+ "sourceId": "rc87-935e4fcec1473d25",
+ "sourceDigest": "536a2ff5149f253feefb7de1904b929f43ecaf52ce1d9644ef0e97acd3bfbced",
+ "targetDigest": "0df2587a37e8ee56b8b2d0cca79d5007433ecfb804e1b232c6bef3759b3e5f05",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"validates cache bounds and preserves immutable results after disposal\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "ce0e1b2bb6155ad4f18e05cb56977694ff5d01092697ab2992ebf8a8916f9ded"
+ }
+ },
+ {
+ "sourceId": "rc87-aba2deb3341faee6",
+ "sourceDigest": "5318cfa69fbf65cc01fc5b5f4657ace33dba6caf1a20c05c5309fcfc063e132e",
+ "targetDigest": "adb696c90a3a30bc289954c2c32be73433fbff60f0e2bfb4accb4ef7e53790b5",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"renders a complete response across arbitrary chunks\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "0ebac03636b1dc67d3d1812f2a3e9031b4b69374bc80b54af451f38c7c418e15"
+ }
+ },
+ {
+ "sourceId": "rc87-9890adf43c5e0dfb",
+ "sourceDigest": "61145016ea7eb05209c88595d455fc8dd6c3ec531b7615e4c93534172725d80a",
+ "targetDigest": "4f488e861ba1f8e8d556ce20da9b7bdeed0fd26dbf4666cde9cc17e6fa1797b9",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"isolates render state between responses\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "4e084a9f7c7ba0f5522d66f93dfac0c6c7742db2157cda10d5ac05740c5bfccc"
+ }
+ },
+ {
+ "sourceId": "rc87-9fb06cb439f3854e",
+ "sourceDigest": "697a1f416e2bd87d0abc3d32b4d6ce86351a25d9047fe7e2f42da492146dd896",
+ "targetDigest": "b97427677fe1abc9708d979e0be56a11ca29551dfd9ee779430a0872306898b9",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"honors emitted globals and disabled hydration\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "701f6ede2f5972f216e1e4234078930080e9123d39d66a1eaf76d9c4a08e44f3"
+ }
+ },
+ {
+ "sourceId": "rc87-2b946a760e1253bc",
+ "sourceDigest": "a6069e1837cfd4ffa47c22b0d9bbfbd6b19131b1584e6aa5ce99c4abab500db4",
+ "targetDigest": "bce9907c6f150b0714f4b2d18f2b606f47fd21fdb48ab2106490d4cb1120e0cf",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"ignores directives inside comments and strings\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "72d49fc19cfcecbe4457ba8699bb0079c2d154086e69da9488c3cc645d6fcf11"
+ }
+ },
+ {
+ "sourceId": "rc87-a0e40cebddb38394",
+ "sourceDigest": "09e0865ea6a199708131fcea551f5608e9229961b70bc03077fe14ca4607e85b",
+ "targetDigest": "ab6d66b3bc5a95adbcbb870218c1cd93764cf175ed25f612f39ef0305683e9ff",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"can limit edits to a source range\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "38c0095dd9f9d1cea54252fbe20779689c1e1d95b58f321c18ad5fb62a5b5736"
+ }
+ },
+ {
+ "sourceId": "rc87-6f3145ee8c7d46b5",
+ "sourceDigest": "6862dc7bcab7ad519273b6b4f53996a521e49fbabec3bb81dc1dcfbdf2a7d475",
+ "targetDigest": "26cfc0299cdd25dedfa751a027fe4657616bf1508deeac34d6bf7466a044fb6c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"discovers UTF-16 class contexts for markup, script, and CSS\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "e26c77f13881807d0607de3d2180634718d0fda4b03fe7dd99479f7b59642604"
+ }
+ },
+ {
+ "sourceId": "rc87-0c3b4f53433ec72f",
+ "sourceDigest": "c6d377146c1d516d9b06528b873b00c0abda2c3b06acb7d24603ef15da7ce438",
+ "targetDigest": "48b9eee5e9ad2639c2cfda03dd6614e614e170b37c809ace6662a0cb8527be00",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"owns sort, conflict, validation, and edit policy\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "f0f564ea0faed437d7be789d2f00f8e4581f4e3465672475f22ad640575a1f77"
+ }
+ },
+ {
+ "sourceId": "rc87-10c2c919df81e395",
+ "sourceDigest": "cb868fed3193fd9077457430a068596b60bbfcda9dfacd0dac8c634f8e17ac7a",
+ "targetDigest": "a8e4471ccf26f9f4b3ab0d1d7539fc8469e2dfe02a42dc2c22891cb164d93700",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"lints and fixes source files without a TypeScript engine\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "344f53a2d1b2e15346d33196f5da470b346ab5cbcbf23565ba6d3bbbed221bdb"
+ }
+ },
+ {
+ "sourceId": "rc87-3c28c41d2c671162",
+ "sourceDigest": "3a06b992e3ddeaa6c41c7aaa6b621c1b8e3d1f8e7860fce9fd587290fc70549c",
+ "targetDigest": "9fddebb136566cfe390b02e3e019971cf50843ca555a959359f5d7ac14d0e813",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"uses the built-in source extraction pipeline by default\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "9eafc64e61bbab7c4fc2ec7e8af46af1040be61fe41d6b0f9dbe3f4aad332be4"
+ }
+ },
+ {
+ "sourceId": "rc87-73c31dcdb81fde33",
+ "sourceDigest": "9a71f863048ceabd329af82bb91e50be33dc7c6efa053ee0b044caabf1d1e41e",
+ "targetDigest": "4759cd7bbee8374426f79478db2df88fd2cb5c30bfbd2e2f5fd5278a790605a3",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"inserts safelist during init and reset\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "93e68d4a2fa9dc19aacbc60269498c6e244278c509f1ca52adf959b30d92b3cd"
+ }
+ },
+ {
+ "sourceId": "rc87-3c486db7d89c53f8",
+ "sourceDigest": "0185e51f802418e6b5bc216ecc148f88dfe62c25c84603f129b23c2aafcb77ba",
+ "targetDigest": "c74c177a8447e0fbae5406002c7eb6782c2768a93831bdf846042f4c43446b6d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"cache invalidates on content change\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "c27d734b02f7f115d9ccdce84a2439438e1ea700495e8e413d97783d2f33dc8b"
+ }
+ },
+ {
+ "sourceId": "rc87-4e98d09d5fbd24d7",
+ "sourceDigest": "5663d721a67a569b3fc52f62158e8bb9de781fe08493296a25cede481b572171",
+ "targetDigest": "2a91f55e2dc8eba856cf00e5bafc76d5d0d3f8c8c75bcb0c58170eb290b05c95",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"same class across many files remains a single generated rule\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "87e3344e3f77958c53f2d1392b177cbaa7c342b66027b5bd9ba483697f26f485"
+ }
+ },
+ {
+ "sourceId": "rc87-b68640e106b42fb8",
+ "sourceDigest": "4751462a1623456e3c7b70543c33a7c33d978f589e083d3ad97c36b2ca34a0aa",
+ "targetDigest": "965a971602a3401397f54a084b2671cd1996751eab80e2261138789f62842e2e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"resets stateful regular expressions while filtering repeated classes\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "5ca583d526822ae5baec9bbbb3db0ecd41d19d71958f824f51d73db18a7521d2"
+ }
+ },
+ {
+ "sourceId": "rc87-4fef17fa41b4a953",
+ "sourceDigest": "96ec5045d3f3950f805c3063dc255d07bd5eb46800dd67dc48da87b265a4a2a6",
+ "targetDigest": "826c69c2c987959edbb3ef707ab67eeb8a91b5bbcf1d3ee46449d7764907b7d7",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"rebuilds when blocklist is reassigned\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "8b1762e83514f9eb781ae35d1105e6658c4bc2602639edccd9f7e2c997df0f40"
+ }
+ },
+ {
+ "sourceId": "rc87-adfe1f2fcb029ef8",
+ "sourceDigest": "7a1872f27e9b059827b1c8ba7fa40215df7b6e05b81aed462867c2222a7af2a6",
+ "targetDigest": "3ee81e9d74a25da9de1b3468acb7f38f81a9b5eaf5ca56bea12954d4865378e1",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"scanModule() scans source-like allowed modules only\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "c12ec19e5f659a5727e1e15b3947c24cbb8a85816bb33657ba11307d12b85bc5"
+ }
+ },
+ {
+ "sourceId": "rc87-ead0c852e550915b",
+ "sourceDigest": "dbeb5d859f4a1bc9a6cfc43586cbcec089e1411ba8ec7b1d4098981d788231db",
+ "targetDigest": "d27488a4e861468d3fed2a83c591851161b86a7007d264d66a4afa531ac7cfbf",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"issue #337: extracts --name:var(--custom-var) class from source\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "611e08ab7d2a4495130c4ead6b25cd97addb1c7fdd35bc2128fbbd4a77a6c56b"
+ }
+ },
+ {
+ "sourceId": "rc87-8c2559572a593020",
+ "sourceDigest": "cd9637cba9c86a545c6d8e1cfdd7aa060d219bc2aa9ab280a1cef3e06f581f2e",
+ "targetDigest": "d8e3f255854ed4e2dbf2589339ace0955aa6cd91736a728bf8f21d1994a4a760",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"Rust scanner cache/state matches the TypeScript scanner oracle slice\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "91700bf9508efa18a216ee443c1c6f5b0292428ed2b7732ca54cc5e6372e82c8"
+ }
+ },
+ {
+ "sourceId": "rc87-1036d5b7cf8ed78f",
+ "sourceDigest": "aad81071bc040643e4a2bdc6504bbfa641ceeac2c614e2ef37712ca0fce1f922",
+ "targetDigest": "c41a0a25b569c2fa03d0b15ab9cbb2921f93aaaec95e3468ff40a7f39ee8f6a1",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"extracts built-in source formats through the native Rust session\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "add7116d36126ad7f2202a32eb7e52f05c2a0657e23b91d8cab11455dd922448"
+ }
+ },
+ {
+ "sourceId": "rc87-e151716687bd682a",
+ "sourceDigest": "df0b0a4be712ae665a1034e8ddfc6c1425083eedf4ecfe7e7302408aad522967",
+ "targetDigest": "d7c00a711c889f6eff947ed2dc5932ff2a04e78260c06c798b644a44ad2090d9",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"serve load inlines current extracted CSS and tracks the virtual CSS module for HMR\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "838909712e20fb0931bd9f7526decfcc1beb2d81c927b3f61498dab46cc3027e"
+ }
+ },
+ {
+ "sourceId": "rc87-58ddaa9d830cec33",
+ "sourceDigest": "8acdce155d8e361c894dfaca9a4a474e63f6b9799f7d9c81e199a8ff559b4763",
+ "targetDigest": "fc3e0eb9024c8b8512215d34782f97d6eaa55ca292a8278f46ded5bfbefb33f0",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"serve transform emits current CSS and reloads the managed stylesheet for HMR\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "431b6a151aedc917a006cf4b44e02a600d8d7468a3724a416c694aa1fde1b727"
+ }
+ },
+ {
+ "sourceId": "rc87-dc58165adfc83f37",
+ "sourceDigest": "9002eee0c1d49c66489b3a7b41a182a966965d658252dc06f6f223cddbd8651a",
+ "targetDigest": "dea2b8f3f53442915bc60760b589f3e499b2236db99483b835213e2f4380e8d4",
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete bundled-output assertion against the baseline. The AST check retains one Master CSS output-channel construction and requires the LanguageClient identity masterCSS plus display name Master CSS, preserving both constructor arguments checked by the old regex. It additionally proves that the client options reference that same channel instance across bundled variable declarations or assignments, rather than merely containing an outputChannel key. All 27 staged-bundle and TextMate tests and VSCode lint pass."
+ },
+ {
+ "sourceId": "rc87-37e35a8768a9d50b",
+ "sourceDigest": "b856ce7fdd73b5f39ddb92f09169bc91e2ac375f51f699aff0c05a959b908cc3",
+ "targetDigest": "68451a2ca62056a4a565ff99633f52f0a295896dda36d434435271d2722a47ab",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"universal compileManifest lowers directives with a base manifest\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "2c9ff316fd997acfbbda6cba16ebfca77e55e562c128f1d16aee7c5ea0aa7368"
+ }
+ },
+ {
+ "sourceId": "rc87-5e7f87aa19abfb63",
+ "sourceDigest": "cfc51000cd41a77b504897cea1b4e583af3fedcde22d670440a1e3652e1c90ed",
+ "targetDigest": "84e991d660d9bb2741cb4ba25a9d45ad8a3662923934fbd58782869b377f2e50",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"rejects legacy at-prefixed and selector variant directive syntax\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "97715a594dfe2b839d1a5dc452437e3874425800e6011bed8fd760688cc80dc9"
+ }
+ },
+ {
+ "sourceId": "rc87-7393f7c77328795c",
+ "sourceDigest": "f98e7fc63c9517ee9fc45f8372916f10b6e3cc2b8b14ae503b9784ae3f24644d",
+ "targetDigest": "5e67a191b8dfe742049e79e98865435d3b297a75092670336421dd74a550a4a0",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"compiles explicit CSS project entries\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "eeac3e957f7e5c4433300529267b12698455764cccf968203b9449efd3b969b0"
+ }
+ },
+ {
+ "sourceId": "rc87-e7f1f864cac62727",
+ "sourceDigest": "60d85a0209d7a42fb50746a31733aca8750b1a11fc82e4ff255f65d7344d010c",
+ "targetDigest": "fc0350a3426a80b4b37e44302ecd44f0913efd70624b65a2d13ba519dc7b1ca2",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"loads package entry preset manifest from CSS imports\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "20abc07398fa8cb995292b915bd26d775e10c849421aa91712d4cb20da2c847e"
+ }
+ },
+ {
+ "sourceId": "rc87-df2379cc46e6cb8f",
+ "sourceDigest": "e61d16ee5554b9010aaa1b383be755ec781d84e00a9524ab39aaa24ea049992b",
+ "targetDigest": "85dac0f7c895aea65043b1d5c430dfe360ee85650c0edd1e344ae4190c37cd94",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"lets current definitions override referenced definitions\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "cf6c3613fa5aef146ed28ed85312ba6aad6f9ef1bac452284a681d6d56110c49"
+ }
+ },
+ {
+ "sourceId": "rc87-06eb46320f280e80",
+ "sourceDigest": "584ba19cec07112a7220a24f39664ee39c426ae8d3df81485da80dd22bdbdb9f",
+ "targetDigest": "df6d1d86dd9ef184ab5edb75b78d4aa312e4ad86043b11600cfd7ad92f3693f4",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"reports references from project manifest entries and rejects circular references\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "7244b8fbb3d8c0e666ae896f93eac5dd69c6b82a35c02096a902083e304a3e19"
+ }
+ },
+ {
+ "sourceId": "rc87-6ef0dd365e7230a1",
+ "sourceDigest": "a68e534c3a51da9e6e60833aa1dccdea9884b940b6415808d079ffc63aac2c93",
+ "targetDigest": "f046a50be8d4c2ab5bf86a895fd782d6c1a1db216375f84c8c948b7d1afa7581",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"renders class names with the compiled manifest\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "a8deaef5da8cfc87e57b593b446024a8c0a6461a73b453fbf89876102b8fd181"
+ }
+ },
+ {
+ "sourceId": "rc87-32df64bdd39d50d5",
+ "sourceDigest": "96c84fb146aa8d3e1e7dce37dad9cc357820a1c4c33764ebe58c3549fc43ecfb",
+ "targetDigest": "5b803743d962edd51b280c9ab81fe140c4bd79980340c6f53f52905dc42ea94e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"renders native CSS and keyframes from expanded Master CSS entry graphs\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "5ab2baa4471d9c5ac4e536ce5cdb7f60666d7b672f19c835e1bb4cf160f96fe1"
+ }
+ },
+ {
+ "sourceId": "rc87-18d63467f01b574f",
+ "sourceDigest": "7f5bc7996e61b89d7cf70d03acf7ff5f752059513b1b0fc2abcbc5384f0f2a3e",
+ "targetDigest": "72fb1d3072d9523e12f70f49b095bdac664249c05883491c9cee3973dbabb312",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"collects best-effort style dependencies from local import graphs\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "74be23694639d5d201236c516e07f148c01616e5363479330bfd5dd37488b1d7"
+ }
+ },
+ {
+ "sourceId": "rc87-09a63ebd1fb0c985",
+ "sourceDigest": "46e7233b6fce53227abfda3a531079d17572bef5889c293d620a695b276267e4",
+ "targetDigest": "41bd114a37213868cf38781c4ca1c6fee8c18a1aef609533ea3db85516d66529",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"locally lowers explicit @reference styles without emitting referenced CSS\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "9e6805c275f49e6c1b1a195ae6aa7dd936adc36361a1032216db046c24e78fd1"
+ }
+ },
+ {
+ "sourceId": "rc87-3fbd82ad3f8411c4",
+ "sourceDigest": "70034ad7fef18ecef8f8205371580730e545a75991aae66de3c9045ff02a54a0",
+ "targetDigest": "30202f73e2cbd3ab6c5cf6a322c911819b264a4cb41187bb4433b9aa4e202e7b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"emits referenced theme variables and keyframes used by local styles\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "e9af6ffff97e3aa7d2bc5ea6d4a7124209bc9461427e5cc202616d730f4709ed"
+ }
+ },
+ {
+ "sourceId": "rc87-d1fd372c5f354ee2",
+ "sourceDigest": "5029e7d6a75833c8f44009775f291c3629387e60ad597bc290320c247bc751cb",
+ "targetDigest": "58303a1eb48462c78cf4a4704665c23103672a0df3a21bdfa646f6804133ed59",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"skips referenced theme variables and keyframes already emitted by global CSS\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "8f8113719c7af888fcd093658974f7d82bae6abb089af9cf1c1698f5dc808b51"
+ }
+ },
+ {
+ "sourceId": "rc87-fdb9f87a3f066b49",
+ "sourceDigest": "4e677cbf667246f9b10909792b6fda605d66096b7b17b7ecc53bf59193973652",
+ "targetDigest": "c8a3d9287b9f52dd80cb615999121923fb540141a8fd9f58221c7ce51f2c89b4",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"strips reference-only local styles and still reports dependencies\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "9f31919a3c0f6581562cb3c3e87fe90297ed3f52610bc5c8c72acdfc7eaa5ce6"
+ }
+ },
+ {
+ "sourceId": "rc87-ac2cdaec143ddda4",
+ "sourceDigest": "29bbe49e452c6661dea769245cd5394b5e351b62eb6d6e790739a22948106d25",
+ "targetDigest": "ddb8588e741821e7ebde1eba836a2efe2f6a98e44c64a004887ca0a3d759f980",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"uses explicit Master CSS manifest objects from ESLint settings\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "b055d4e3fdfc2da1284d80c74494c785f9a93a5b3fb46d1422a63e9bba64a886"
+ }
+ },
+ {
+ "sourceId": "rc87-7c42e4a2078e5f09",
+ "sourceDigest": "3f57038d29e56e867ceb598478ce08cb638f9976c43fcc6f2b1883db6bff6812",
+ "targetDigest": "49766a97d2498108429f2ff8cf41068ff05c2ff82eb19ce3667a39df0ad471b2",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"uses project-level CSS manifest entries from the ESLint workspace\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "34ee3bce72cc8f865ff39f2404a545cc2bbb30fd417678c2acb1f02bc2ac7831"
+ }
+ },
+ {
+ "sourceId": "rc87-36ad6d860a2a4cc3",
+ "sourceDigest": "740d87cc2120be23a27a4f18ddaab0f0171ecbcbd1a4f6900b78f3adc3e35c93",
+ "targetDigest": "f77fe7edd22cf7ea4b7498e243a584ad0b66fe2a64cb25308905666021b9663e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"loads managed CSS entry manifest before language features run\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "148f17427992413cd13fa7a1a9b3a91b0a967a4878b50c8c0fa01b11181b7cd1"
+ }
+ },
+ {
+ "sourceId": "rc87-3dbeb88b8f407cb0",
+ "sourceDigest": "c4d59db907cccd641f421f2092264fa941eb9ba42fb397ba35fad4439f0b0f96",
+ "targetDigest": "f60183bbd3c4019a5601d4967b83fa4e7f475ae7094d14475af389be09705099",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"returns CSS directive class-list semantic tokens when highlighting is off\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "d44ff5806bcad03f15f2f0f0d1f4871ddd09f7755210c8403e3e1ccfbe1b844f"
+ }
+ },
+ {
+ "sourceId": "rc87-e5d343ae48cff114",
+ "sourceDigest": "6d323e4fae2ea145f270a4c7ecbef9d695f237e4fe427e8ee391428b0b0d374c",
+ "targetDigest": "4812bbfa89cdae1e274fe4d3de6b750498a0c2a7e64037a652377474a2efb28e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"loads CSS when the loader resource includes ?master-css-manifest\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "cedb9f415168b9931909e261eb019ecdbc293f11c66c2f9dad7c28af7b1cde77"
+ }
+ },
+ {
+ "sourceId": "rc87-dcfcbfe417ea201d",
+ "sourceDigest": "0f0f0b15669e17910a91dcb35e67c6c81c8cb62420ca80f85ef28c7605741189",
+ "targetDigest": "d8497b6e1c7d66f240da75ee2257060e5b4f340aaf8a3b083cb5cc6ff819692e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"loads the default virtual manifest from CSS entry files only\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "111938efc0b24bf17c23f9479dbd70a309cd7078ace9c9d839f3636e81ba37bf"
+ }
+ },
+ {
+ "sourceId": "rc87-f9c0eb4b3b8f2fbb",
+ "sourceDigest": "1f8b4e975fc9fec86ec18df93a2b9c9b0f6ec4f85f5ffba45275f104cae85f05",
+ "targetDigest": "1721cb02a5023b7b4cabf34feef0b50d803fa4b58b68b2866cd60e320ca9a14a",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"preserves native CSS and keyframes from imported Master entry graphs\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "9d1e903a4119747ae0be84558d9a92d5142e529572a3b13b609ad17e6a70286d"
+ }
+ },
+ {
+ "sourceId": "rc87-55b73f1c832fdb61",
+ "sourceDigest": "3915fa8671163eb0cc144b406cdf4fd368996e749601cf822536cfe51ccf988a",
+ "targetDigest": "f0a8299334e547956fc0913129b34ec48982648af8daaecff44a983c19d8a28b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"locally lowers @compose in CSS Modules without importing package CSS\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "48c4d561bd627c52e1aedfae9727fc5c93932ca4b1a34779ea35c1971860c49f"
+ }
+ },
+ {
+ "sourceId": "rc87-72b32e8d8e81f786",
+ "sourceDigest": "d5f6cabf8dc7d096ec2a65806ed8d3a2bbae3a70d6055307d22157d3925faa2f",
+ "targetDigest": "5554aa18cf2bb182eef13a015e70b874c7f6c32d8e63708ca24cf710f4ffe118",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"locally lowers explicit @reference CSS Modules without importing package CSS\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "3652437f2d7330c95c2a923a236840a8e288cf7e54f98b25ef14220dcf51301f"
+ }
+ },
+ {
+ "sourceId": "rc87-054c879ed15dfa40",
+ "sourceDigest": "15d2a61f201c3b8f30ea44d3381803209e8ed5dd9f9953d45648c0c8fc2482c5",
+ "targetId": "rc87-eecad1a7a2b1e039",
+ "targetDigest": "4b7245428c0bcdc48304ea307cc2a4a3c460bdd10b9fd4e6613a8dc8d7762a14",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"lowers explicit @reference styles and watches the reference file\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Supplemental exact QA preserves every assertion while using Vite-normalized watcher paths on Windows; see parity/vite-portable-freeze-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "6f5c09e9dbefd9088a77bc1065d0234de3ec2602405c68017f33dce1d7fb8279"
+ }
+ },
+ {
+ "sourceId": "rc87-41097ea300e09962",
+ "sourceDigest": "226c5a78758a6a22ae86848604e962780871200bef0442494153d1688e4860c2",
+ "targetDigest": "bf1d0f61bc562d04dde4dd9d5c02bb1fe05e726c14eb83595c260367a25ad80c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"locally lowers @compose in CSS Modules without rewriting to the virtual CSS import\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "a5211e5bb8a8f1846c59fd20caba9aca19df398b162d387d7dc49861749f13fc"
+ }
+ },
+ {
+ "sourceId": "rc87-f7398622b00a5e61",
+ "sourceDigest": "a314a55031d9dc4e6119f15b2761a7126fe07856ee676c95a761db3bc5549d43",
+ "targetDigest": "45acd6b1343d3af2e8f57254ce4bf84dbd43f90c778477c9d43c7378da836875",
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete case body for \"writes extracted CSS from source files including imported modules\". Only the output inspection changes from reading the entry alone to readStaticCSS, which reads that entry plus reachable relative imports in its current immutable stylesheet graph with cycle protection. It does not scan stale assets. Existing fixture, scan/loader actions, and all CSS inclusion/exclusion and pass-through assertions are retained; exclusions now cover the reachable graph. This preserves effective delivered-CSS coverage, without asserting historical single-file layout or byte identity. The complete Next static suite passes 11/11."
+ },
+ {
+ "sourceId": "rc87-881bb85795ca4198",
+ "sourceDigest": "e16e26ef166354bc3883c4952500bf0537e1bafe80c06ee1e71b927cb35bb6c0",
+ "targetDigest": "5fbf819ae98ced88633d04d0c9ae3815de861a50fb446e51a6d336e045cd0bb4",
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete case body for \"ignores app stylesheets with @theme when they do not import @master/css\". Only the output inspection changes from reading the entry alone to readStaticCSS, which reads that entry plus reachable relative imports in its current immutable stylesheet graph with cycle protection. It does not scan stale assets. Existing fixture, scan/loader actions, and all CSS inclusion/exclusion and pass-through assertions are retained; exclusions now cover the reachable graph. This preserves effective delivered-CSS coverage, without asserting historical single-file layout or byte identity. The complete Next static suite passes 11/11."
+ },
+ {
+ "sourceId": "rc87-ae34a7e7d60def44",
+ "sourceDigest": "a2b314e4ee518e27843489347f3fb1be3adf44ed96b5aa0557be145e106e7acb",
+ "targetDigest": "60d61e68a5a25453c110baa2c758ab61329b9e515ae17367dfebdd1a532fec8b",
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete case body for \"does not scan excluded node_modules modules from the static loader\". Only the output inspection changes from reading the entry alone to readStaticCSS, which reads that entry plus reachable relative imports in its current immutable stylesheet graph with cycle protection. It does not scan stale assets. Existing fixture, scan/loader actions, and all CSS inclusion/exclusion and pass-through assertions are retained; exclusions now cover the reachable graph. This preserves effective delivered-CSS coverage, without asserting historical single-file layout or byte identity. The complete Next static suite passes 11/11."
+ },
+ {
+ "sourceId": "rc87-8f00b4e0b7f55c97",
+ "sourceDigest": "11110a8e5cca741f0118c1d26c6388a996174d172d78030aa498e4b8af2c7e16",
+ "targetDigest": "27ecf33db5d374cba310f61dddc72b989ae2e7730c0b62ead641a59f7fb05496",
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete case body for \"updates static CSS when Turbopack reruns the CSS loader\". Only the output inspection changes from reading the entry alone to readStaticCSS, which reads that entry plus reachable relative imports in its current immutable stylesheet graph with cycle protection. It does not scan stale assets. Existing fixture, scan/loader actions, and all CSS inclusion/exclusion and pass-through assertions are retained; exclusions now cover the reachable graph. This preserves effective delivered-CSS coverage, without asserting historical single-file layout or byte identity. The complete Next static suite passes 11/11."
+ },
+ {
+ "sourceId": "rc87-f718aaba7ab8bda6",
+ "sourceDigest": "8e871bf3492c47cf8d5fba102066995eff6a19feabeed5d3b811ba237c5202d2",
+ "targetDigest": "dde5e0fc486a55b73e4528956490b6ad0b216c54bda5168a9ca4cfaab4f14f92",
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete workspace package-resolution case. Its only change renames an empty export in a synthetic index.js fixture from builtinNativeValueNamespaces to builtinTokenNamespaces to match the current package contract. The test still checks all three resolved package directories and an empty error list, and adds no compatibility path or production export. The owning Compiler suite passes 491/491; this is preserved resolution coverage, not approval of an additional public API change."
+ },
+ {
+ "sourceId": "rc87-e28158711048da1b",
+ "sourceDigest": "740ea6453b399bdf9c9ed41442c7e5df5aa8edabccd6fdf743007004d19b7c92",
+ "targetDigest": "9953fdeb374ec1b6fc180e232b1dfee49ee1dbccd428a542de919aa8472a6bc0",
+ "proof": "verified-superset",
+ "reason": "Retained the historical test identity after reviewing the complete staged-server case. All initialization capabilities, isolated workspace without node_modules, shutdown and zero exit-status assertions remain verbatim. The only added block sends initialized/didOpen and checks a real LSP completion maps :first to :first-child. The focused staged test and VSCode lint pass locally with the unchanged request deadline; cross-platform completion timing remains subject to the active Windows run."
+ },
+ {
+ "sourceId": "rc87-eb4fb7083521fe9d",
+ "sourceDigest": "0b7678286c5670ed0ec412316e5e3555cc5be58c57d8efe75db113b68e89f12a",
+ "targetDigest": "c40d1ceb99c1be8784aa0db23217e003c7399397b8433df46989f4021826ed65",
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete Next CSS-chunk replacement case. Only four file reads change to readStaticCSS, which inspects the entry and reachable relative imports in its current immutable graph. The exact replacement import, absence of .main from the replaced chunk, and .main/display/color/theme-variable assertions remain unchanged. The full static suite passes 11/11. This preserves delivered-CSS assertions without claiming historical single-file layout."
+ },
+ {
+ "sourceId": "rc87-0d2143fc5ddcd155",
+ "sourceDigest": "87d39c1954106158bc0eb7948c2c8d6a57ab14a98561140e8732203ae6caacfa",
+ "targetDigest": "71edf48132fff9cd1529255a58042718e495c90c05b443151455c706bb14830e",
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete Nuxt stylesheet case and fetchDeliveredStylesheet helper. The linked entry and its reachable fixture imports are fetched from the running Nuxt server with cycle protection; no stale asset-directory scan is used. Every original link, type, .box, display:flex and font-size:1em assertion remains. Additional assertions cover scoped .probe selectors, both mode variables and removal of compiler-only reference/scratch markers. The static suite passes 2/2, including real-browser computed colors for both modes. This preserves delivered-CSS coverage without claiming a single-file layout."
+ },
+ {
+ "sourceId": "rc87-2944b251d4f939aa",
+ "sourceDigest": "06eaaf64975216762e7ea1e54a5779b3de4c49bbde3c40dc1c33f44413f39daa",
+ "targetDigest": "728c17b3b3bc10f75030905005603902ced7c56038bcb6d6cf3b046db1f295e2",
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete Webpack production-browser case and asset producers. Production HTML minification removes optional attribute quotes, so the raw HTML substring checks are represented by browser DOM checks with the same rel/as/href, defer, empty crossorigin and last-body-element requirements. The missing exact Manifest href prefix and empty crossorigin checks were restored, and singleton counts strengthen duplicate-injection coverage. CSS display/layer placement assertions remain. The rebuilt published bundle passes the browser case, lint passes, and the unchanged shared manifest-preload unit test still pins exact serializer bytes. This verifies preserved injection semantics, not parity of the bundler's optional quote formatting."
+ },
+ {
+ "sourceId": "rc87-0384f3b3b701342c",
+ "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "targetId": "rc87-7b41a862e4030c96",
+ "targetDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "61616648c91ae6cbca847ece6f1cccf31327539c3230b7b75083ee896bf6ca77"
+ }
+ },
+ {
+ "sourceId": "rc87-73cad9690d62dfda",
+ "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "targetId": "rc87-f94e4c6a9ddbfb45",
+ "targetDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "4db01d92071b6c30131c576f40453dc8e30a35a2d3f0a02c160bf809b580dddc"
+ }
+ },
+ {
+ "sourceId": "rc87-121eca8ae4a12480",
+ "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "targetId": "rc87-7c72c4500f513930",
+ "targetDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "62450961eb0a30e28671087100d56d6ceb6d0767659aa03d65cca933c1231862"
+ }
+ },
+ {
+ "sourceId": "rc87-2739de51bb0b9064",
+ "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "targetId": "rc87-f4999ec65aab202d",
+ "targetDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "b96f776333809029c6814cd106c6ceeb95ec12b49979787b5e721303a7e9e953"
+ }
+ },
+ {
+ "sourceId": "rc87-69c7d819588308ea",
+ "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "targetId": "rc87-0f7bacd8fe32d976",
+ "targetDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "f39dbbe146dbf509630ad57fe33d7c1fe28dfabbadd60df69b468afbc83ab419"
+ }
+ },
+ {
+ "sourceId": "rc87-d80e44996d737a35",
+ "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "targetId": "rc87-9fc97507f8b09f85",
+ "targetDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "95f5fbc44df966bcd3f4186e50cf297908f2894e594c24e353a35b504e08d994"
+ }
+ },
+ {
+ "sourceId": "rc87-74150fed0ee9ede3",
+ "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "targetId": "rc87-1335a251c9ba8d6b",
+ "targetDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "51627670beb08f4a4609d1030fd258b968d3a7713fe01e59d6d635076d7a047f"
+ }
+ },
+ {
+ "sourceId": "rc87-71c26cbe571802ce",
+ "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "targetId": "rc87-5efba643d454eb30",
+ "targetDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "dc9e356560c25eb3428536ccb081a29315bdafdabdc1e2e9c5313756bdace038"
+ }
+ },
+ {
+ "sourceId": "rc87-04b5f1fa22234454",
+ "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "targetId": "rc87-aff3fc9a69b5e01e",
+ "targetDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "95e44874fc23af5e74fcc31c0859691cf688841a1696557564794ff55c35e8cf"
+ }
+ },
+ {
+ "sourceId": "rc87-ada382187e7b929d",
+ "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "targetId": "rc87-8ab761db962a9935",
+ "targetDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "a3f305cb4e30afd4bfc44185b806b8a3f30cae8c92f07ebeb8479765c95fcf2b"
+ }
+ },
+ {
+ "sourceId": "rc87-932b42c5a9d001d0",
+ "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "targetId": "rc87-fb4a0bf3ce677611",
+ "targetDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "8a9c7e095310f56bc0c1b56253ce14ea336f1b1fa84c63746fcde184c68962dc"
+ }
+ },
+ {
+ "sourceId": "rc87-c3ef6c69e66d8156",
+ "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "targetId": "rc87-15ea415dd78cf756",
+ "targetDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "9e64ea470f9cd6e4d170f1bdae694cd80bf3afbe6276544ea1d66122b8b09776"
+ }
+ },
+ {
+ "sourceId": "rc87-9bd2764ee78a0a8d",
+ "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "targetId": "rc87-166b861322362d7c",
+ "targetDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "03c95c8746b913591f52e1006ff22f15c0d4742fe7c786aac4cdaced6cd68add"
+ }
+ },
+ {
+ "sourceId": "rc87-07634e28f7afb0ef",
+ "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "targetId": "rc87-5300e9ab6e70ceab",
+ "targetDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "d927c4977ba0af218deedfaa312cbf65e522ea00b19328f7809b45bba587c463"
+ }
+ },
+ {
+ "sourceId": "rc87-3a4a38c90f7e0fd1",
+ "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "targetId": "rc87-69930928c51df76c",
+ "targetDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "727caa52b14e118c30a18592dc64e817b7595fc927054a5831a2c2bd58d16f46"
+ }
+ },
+ {
+ "sourceId": "rc87-55e07b6010f30b04",
+ "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "targetId": "rc87-0a53cf8bf804ed4c",
+ "targetDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "d6bd6ee25c45eb648e3ff3a28fcb0444dd22482431aa4961ead8ca1b76057051"
+ }
+ },
+ {
+ "sourceId": "rc87-9238938224cfbe8c",
+ "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "targetId": "rc87-37b0618d5110cb62",
+ "targetDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "37c3eb875dee0e414e4ecd16deec6f40f6e1abb85082709b89d6af042fe015ad"
+ }
+ },
+ {
+ "sourceId": "rc87-ae3e1cd935fb3624",
+ "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "targetId": "rc87-c906589cd19e545c",
+ "targetDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "6c20cea20c32343aabd3e3626b7dcafcceef0ebd90e81e6877ba52b83d838e0d"
+ }
+ },
+ {
+ "sourceId": "rc87-72347d9fca0cf282",
+ "sourceDigest": "98cad66954adc9b7d4caf27f5a22c09859e80bafb752c99d5ae50f78ea762c7c",
+ "targetId": "rc87-dd1ce40b312553c1",
+ "targetDigest": "2a4d108b6d1b7cdeffbe332d99edf5676e9590b1205d7220f05e973a7c2aa44f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "e2b97d8eb34d511e47667afa916a4eba87670f64afa9351aa1c58293a94004c5"
+ }
+ },
+ {
+ "sourceId": "rc87-3731770b03cf8842",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-d1773083de9a4af0",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "7ec6bc943c0586646b7568415c639654f1b64ca519f1bd009953f17b5508082c"
+ }
+ },
+ {
+ "sourceId": "rc87-d81e62746a996449",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-cdce0c007b32e07a",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "48260a505aea77ca1d4992e4e915953200438d17f11ce072743b28e690913fef"
+ }
+ },
+ {
+ "sourceId": "rc87-b21e7002eaaae11e",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-6e65a5879d544d60",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "d8ac05ee039c38b8fe61e7d4735c0c0bdbcd11e4564115e7b98e7c222f76b6b1"
+ }
+ },
+ {
+ "sourceId": "rc87-790a18d44de49783",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-d59c1c2155c52b0b",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "18af55ef8bfe4334f64ff564ee19e6fe0f1b7e2601acb60cee8473deaed80063"
+ }
+ },
+ {
+ "sourceId": "rc87-78879dee5e5a5fd4",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-3704e501abdb4d91",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "7457b850460b0d1ebc79e48abcf5b236226c91ce1622f7e29af3005d309ef896"
+ }
+ },
+ {
+ "sourceId": "rc87-4f4284d37cfcf2d7",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-45f9ef373c06372b",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "3c488e5d0fef53373d928fdea1ea84cc386c7592dda8dcfef30ee981df5f4add"
+ }
+ },
+ {
+ "sourceId": "rc87-d564debe5f3e3c88",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-65664ec8f76a3f7c",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "53423271bcc627814fca17aa4d1ab5790ec74d0389f709a73b560443d5af830a"
+ }
+ },
+ {
+ "sourceId": "rc87-0fac4681b1286a01",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-f8391c8017764f4f",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "3c78acded38a896bea2e03ff1fc68073abdd4a3d49d204daa0521329c6b7e2e6"
+ }
+ },
+ {
+ "sourceId": "rc87-b5bdd47f07eb28e9",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-dc14ba6611e91773",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "21bdb963a1ce53cfa9f534d9ec9d7f81149f2b76277ff16a705080376343b8e4"
+ }
+ },
+ {
+ "sourceId": "rc87-2552e1586dbd4b0f",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-27a27252cf30b61a",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "d02465ad054f2a5788db264d43a9355931c30a49b9f15eca6ac57757de3707fe"
+ }
+ },
+ {
+ "sourceId": "rc87-db89d2874d8adb56",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-727af0bc6be3c76f",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "74887de3789edd253bf994474b5ad86b41b8612315989e1aaef609d10e4313e5"
+ }
+ },
+ {
+ "sourceId": "rc87-0d9740de7a0666e6",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-f99b48a9f28c56fc",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "07da014d254e0cba7ecab29f7931ace240ace3ea1b5e6794306b24237c400ee1"
+ }
+ },
+ {
+ "sourceId": "rc87-659aeeb89028f2e4",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-53a0bdbb67a2ec50",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "842a03a8740c2990d80a0233a8eceb0ea5769f6f4cd9410f730b5d781fec9e25"
+ }
+ },
+ {
+ "sourceId": "rc87-c27d05524b6a0623",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-08db82e6ef93a313",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "092fcdfea97c61697583c378b5b76ef973a58e62feb06835d38c4e0c57251123"
+ }
+ },
+ {
+ "sourceId": "rc87-250dbbcdb7658b07",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "5cef8c77f1c27a7ade387df5d5703ae6d1c3ff9dfdf785ca81f0a9bdac5a3561"
+ }
+ },
+ {
+ "sourceId": "rc87-6dfa4eb1e9b2b6ff",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-8f5d923bb01e21e7",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "09da2937a620bfcbc1e3768aec0a5d2aa5a327c1e701d5c7f253b2f4c97d3466"
+ }
+ },
+ {
+ "sourceId": "rc87-26de8cb0c49c380d",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-7afd9024c0cc27d4",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "833c567786650f69e7a1c90b3013a80a4d376a9e94145d5fec253579278113cb"
+ }
+ },
+ {
+ "sourceId": "rc87-a022507eafb16cc8",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-70c24af48c2966fb",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "2c1a3a184d9e7cea5dad7509e6300d4973f08a4975976b1cd229155b4856cd1f"
+ }
+ },
+ {
+ "sourceId": "rc87-dc2fd359c8fd686d",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-5a51d3aa7b9247c4",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "18ed5c8fc01973564aa18986805fd2683c55554c73996dd188ff989a71b2b2be"
+ }
+ },
+ {
+ "sourceId": "rc87-869f9913c6d75f24",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-585c3502503e1e8c",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "c2e173405afe8fb0c9bdedc0d5da9fb63fc016d30d6dea2810c1e0e789c2bf6e"
+ }
+ },
+ {
+ "sourceId": "rc87-3434d9506ad2d965",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-0f5fb5f3574992ea",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "cd5b279a07293b79a9beae60b1640ca6f338c176154be1abd35242af32fdc328"
+ }
+ },
+ {
+ "sourceId": "rc87-75f0511fd2777494",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-d8f1fc00ebe433de",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "ee21af19e4f67b54d4c8938b250d18a7987845c83871f3ca1ef192bd22b1bfab"
+ }
+ },
+ {
+ "sourceId": "rc87-06f2b00f300934e2",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-c384666d35b37f86",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "6b3756b55e8cfe03e0f6cfd2aaddc03535db750444a6894286851eae055f43c7"
+ }
+ },
+ {
+ "sourceId": "rc87-4605c33f442beac7",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-a9bacade145befc0",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "e25c4376c4405be17799557c6ac074126a9d71f25698f1c1f57453ea4f9990ed"
+ }
+ },
+ {
+ "sourceId": "rc87-148c7e18a476afc3",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-409f3aad30fc1e1a",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "cd76c1e7d1c489be3f686339c57d67c469e1b040a4c6ce6f9cd9d2e6dee9dd52"
+ }
+ },
+ {
+ "sourceId": "rc87-735e4bc260161106",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-765605c07843abe5",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "cf9eaa919e4277b04a2409cf2974702e6082300284e3670e036b215dd7601433"
+ }
+ },
+ {
+ "sourceId": "rc87-c6ce617cbc168890",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-f533fe78acf682cf",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "a05d5399445cf22bf04399f60e8abb4c86a9114f333d4473734808117efc7e62"
+ }
+ },
+ {
+ "sourceId": "rc87-21fa966e71ae460a",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-64635132e789b699",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "c052b7fd41b10f1aebcbcd67d4c881cfcc51634eb71dcf7b0471c84e1c457388"
+ }
+ },
+ {
+ "sourceId": "rc87-242a467e7ab109f4",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-54e265d55921f80e",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "7b0723c558cfb67eba4b4186ca48860934d8ea1fd5300114e7f9d8a3bb0adee3"
+ }
+ },
+ {
+ "sourceId": "rc87-375fa31d769740e8",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-b9a3e5d892b0df36",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "6c4d585674bcc21e82e20949aff413c6cac4078169084cb0ef2ef3b89320d1e6"
+ }
+ },
+ {
+ "sourceId": "rc87-874d84a062e94ed6",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "1f70d61038d7ed83bbdb7e9aba6a141e056a75e4ac9dbb4d1321a8807271bd2d"
+ }
+ },
+ {
+ "sourceId": "rc87-3a57b3dfd2fd37aa",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-af5f947eacf06c29",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "032d29ec418e0615577d7acde15f6ba98695557bac6c862676320efa5f951780"
+ }
+ },
+ {
+ "sourceId": "rc87-463a53011dbf42f6",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-99b29058f308e11f",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "9c64df8cd089125d6000d2de8aac5ff103b2fa9efe01a9d697ff79572387c0da"
+ }
+ },
+ {
+ "sourceId": "rc87-55b09a827503f2d3",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-6fa94790fc2e4baa",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "8e2f94242732782e7fe9a110bb7a84dbec3ac597625c824eaeb1b0d2a5628139"
+ }
+ },
+ {
+ "sourceId": "rc87-8e07710996dc6e5f",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-318fa4a994829b9b",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "59293a967806d732dd42942ff068bceeafa6763d1c392e3b7d2c666a4d92dcdb"
+ }
+ },
+ {
+ "sourceId": "rc87-e29cabd5414dc31f",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-5319c47c7bc03af0",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "6c3334238704e6ab06c0d6ced27a66b4883681e4957a62323519cac2f753b61c"
+ }
+ },
+ {
+ "sourceId": "rc87-67d3d5a79018c9bb",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-f9421a12697e06c4",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "a798570572fd959f2ae848d8204d110ab860baffebba9bcf917af483887eef91"
+ }
+ },
+ {
+ "sourceId": "rc87-33d4b201b52f02df",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-f9e3634c67f832b0",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "3ddf85a4cfe14e02e65519d6825391428cf7143cf29bfd40f2fe0c0341830fa0"
+ }
+ },
+ {
+ "sourceId": "rc87-e67ac62b73502ce3",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-f9b74c17a9e18a5b",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "bba3f7fd8fb3fedbf2cbd343b00cc25a51521c0d278098d4ac4c3647d785b5ff"
+ }
+ },
+ {
+ "sourceId": "rc87-c16f4f7672b8f35a",
+ "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "targetId": "rc87-55ce86259e161e9c",
+ "targetDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "8badd0676f42f8c0b97bd311f3396f72cea5a7c08cceb5bd0b0d8aed964b42d7"
+ }
+ },
+ {
+ "sourceId": "rc87-e4085fd7350e8b1d",
+ "sourceDigest": "5f97a5fd0b4214bd3096cc1e5c9ce7acd2f9d0ef359e4554da1e6512e17103c3",
+ "targetId": "rc87-0e05853b8eace42a",
+ "targetDigest": "1bb2627dd67cf9cbdd9faba0c809a3e217332ae883d55bb96734a5301036430e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "9959fd45ac630685ebdf633621319ff23f9245832b5d06b238681220c7a9a524"
+ }
+ },
+ {
+ "sourceId": "rc87-c23710bf7c0a928e",
+ "sourceDigest": "5f97a5fd0b4214bd3096cc1e5c9ce7acd2f9d0ef359e4554da1e6512e17103c3",
+ "targetId": "rc87-17def6a582f8d400",
+ "targetDigest": "1bb2627dd67cf9cbdd9faba0c809a3e217332ae883d55bb96734a5301036430e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "7305c6b27828ecf6c0c53634877d4243f704d6ca30f52f911879303728970f10"
+ }
+ },
+ {
+ "sourceId": "rc87-779d01df6dc7ccf4",
+ "sourceDigest": "b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7",
+ "targetId": "rc87-15dc035f90801671",
+ "targetDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "143f2254ab1c70ceb24e9bbcc322b59c77c81ac7fd93bd014d70e30faaeb0188"
+ }
+ },
+ {
+ "sourceId": "rc87-bab408a404989821",
+ "sourceDigest": "b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7",
+ "targetId": "rc87-ad09939d0a2e97ca",
+ "targetDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "ee2906957e19b5f66c9f876596b07f7cf0fdbb034233572436f170cb574b8315"
+ }
+ },
+ {
+ "sourceId": "rc87-b63f6a6103298c55",
+ "sourceDigest": "b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7",
+ "targetId": "rc87-378e215d42f03e2c",
+ "targetDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "28b80c75559b0867efb7b2c9b16330fd55fd25b08403281df6e235e3af0f9856"
+ }
+ },
+ {
+ "sourceId": "rc87-02a57e263bf20d18",
+ "sourceDigest": "b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7",
+ "targetId": "rc87-f53abef897ff3ae3",
+ "targetDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "6de816bd6e809880a8128554ae256392820166d9355607810f6cfbb3c8378ba4"
+ }
+ },
+ {
+ "sourceId": "rc87-c0618ad6b8fe85c4",
+ "sourceDigest": "b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7",
+ "targetId": "rc87-506e50a060048290",
+ "targetDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "18f5ef6113f40d030d0d7deb4c2291cb1601234fe6d04ca534898affb7f506a4"
+ }
+ },
+ {
+ "sourceId": "rc87-574a8c3fadc1e7eb",
+ "sourceDigest": "b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7",
+ "targetId": "rc87-3aa3863e09304ff6",
+ "targetDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "a837c3504aa3f9156764fbc2fbb2ef2eee0074be6cb465c4c4c7c9bfc8074615"
+ }
+ },
+ {
+ "sourceId": "rc87-98a0718183701f81",
+ "sourceDigest": "b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7",
+ "targetId": "rc87-9faa6671e9da1d5b",
+ "targetDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "4ec472ffaee10e1d5d353cc4acf9799160f36f183ce5b4a8a0f11892b34e9c13"
+ }
+ },
+ {
+ "sourceId": "rc87-4aca934f26dc6c47",
+ "sourceDigest": "b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7",
+ "targetId": "rc87-1b9dd5b2e97b57ae",
+ "targetDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "6226464fdcb2229c31e2bb1af196871ec02a0084d4dcd446ea12b83151674b95"
+ }
+ },
+ {
+ "sourceId": "rc87-4ecbf4d220120558",
+ "sourceDigest": "b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7",
+ "targetId": "rc87-af629033059af3d5",
+ "targetDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "4e43339c3ed9e8502038b28b6ce227c2d29e3fc20821f5a4dc13610e47bc0589"
+ }
+ },
+ {
+ "sourceId": "rc87-73a56558ce38481b",
+ "sourceDigest": "b4e9d0fb7555de9eb8f852b71e7efba7b86350cc64830216e4b17e263b4322f7",
+ "targetId": "rc87-e97542b1e64f5287",
+ "targetDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "5f2b1c2dadfc365573d6116fe348bd2e307448698c255cedc3cc970da1b74073"
+ }
+ },
+ {
+ "sourceId": "rc87-391567b61761e5b3",
+ "sourceDigest": "bf8b86b2f7ef0252f13f44104ebea418d41b656601dee199e2350537dc968df5",
+ "targetId": "rc87-be1c3a90118aff29",
+ "targetDigest": "b6e4e7a2a2ede3157de9905cdc5de01cc9ad3c23dc2b9d3ab7c6170aabd2c367",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The known-invalid fixture is text-decoration:1 instead of an unknown function. Standard and -webkit declarations each report invalid CSS at the same mapped range; the shortened token changes endColumn 43 to 39.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "7a7c2b3bb70c361d2f67a2617b17d2ae97e7abc5096c9443d08bff828df45b3d"
+ }
+ },
+ {
+ "sourceId": "rc87-2d7ed4cfbec0f561",
+ "sourceDigest": "3b0286e3200f10df07d50c78f6854cf9718b0cf92eac31e111ba665f9bfdaa52",
+ "targetId": "rc87-6383321bfb3c21af",
+ "targetDigest": "ebf5f750e2a1c65fcd4ffb089889c32298f3569ad4533e3389d887547dcb8424",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "7d78245d60565db09b189c95d19f62bf1f7c5a91f74992961391b120b36ffc4c"
+ }
+ },
+ {
+ "sourceId": "rc87-cce4c18aae1d74d5",
+ "sourceDigest": "3b0286e3200f10df07d50c78f6854cf9718b0cf92eac31e111ba665f9bfdaa52",
+ "targetId": "rc87-4d774e08644297a7",
+ "targetDigest": "ebf5f750e2a1c65fcd4ffb089889c32298f3569ad4533e3389d887547dcb8424",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "b9b1dd89c4f145930ff3546892ea745de1c72b9367dcab52f1042eee99db4fff"
+ }
+ },
+ {
+ "sourceId": "rc87-da07c18cc490324c",
+ "sourceDigest": "3b0286e3200f10df07d50c78f6854cf9718b0cf92eac31e111ba665f9bfdaa52",
+ "targetId": "rc87-d9547ed9b9f5e4ad",
+ "targetDigest": "ebf5f750e2a1c65fcd4ffb089889c32298f3569ad4533e3389d887547dcb8424",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "4cb5a1b2d748873dea3fffd741f837ff3ea607548004551e31dd0a346c334a2d"
+ }
+ },
+ {
+ "sourceId": "rc87-fdcd1d9f64063f54",
+ "sourceDigest": "24b82a32934f19aac0b3bece621cde17deb288f182cfe2e7b37e9ab037486f59",
+ "targetId": "rc87-1baec11fe5f76f86",
+ "targetDigest": "f5e6905506dc5c8b5f9840dad099b632182f9fd1518ca5e4f4b9abc03d63524d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "47e9f3357358486da1dbd0afc8be6027172b11f21355396ab5ff0927b638f37f"
+ }
+ },
+ {
+ "sourceId": "rc87-1999ea10b3b32750",
+ "sourceDigest": "864577c33d862f45a708c531250e1f49c86e000f3d96e26029df9fa52b69d567",
+ "targetId": "rc87-0a5baa22a14dd5cb",
+ "targetDigest": "46eaae5defb4eac7814715e03a2208f4a360cd44964a0b451b65daea69134acf",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "b84d44c9516f8fadaf76e81403db6d862e2cab8551d5b1c4d958dde5666ace0d"
+ }
+ },
+ {
+ "sourceId": "rc87-c89312d3d30db393",
+ "sourceDigest": "7255c746c48fec245700be281b1fd2747e7dec5691c2bed1b7d9669e12af1d4c",
+ "targetId": "rc87-071ff7a856a4137f",
+ "targetDigest": "929bdb0145c47ba268b5e031f176bebf5c8956bc9e482ad1b678902577651b48",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "63e7c1a866f40ae7722fdaa0eca4fbbbf872c481933afacd6ee585b5238cad5d"
+ }
+ },
+ {
+ "sourceId": "rc87-42c671c588ddda84",
+ "sourceDigest": "7255c746c48fec245700be281b1fd2747e7dec5691c2bed1b7d9669e12af1d4c",
+ "targetId": "rc87-e9c2fc9e05a3e41e",
+ "targetDigest": "929bdb0145c47ba268b5e031f176bebf5c8956bc9e482ad1b678902577651b48",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "c2953a9566c30cef4c10ec8e9dd25675d1b8fb92e94e166afa2a0f1058ff78d7"
+ }
+ },
+ {
+ "sourceId": "rc87-5691111c39a50ab2",
+ "sourceDigest": "6435423f8c6cd500ebc0a1698877926e00664fabd565ce4118896a9052da3878",
+ "targetId": "rc87-0b929c832971243a",
+ "targetDigest": "22daff76a797be052844d6dec05f02e1d62da115a479d57f831b8a9f1cd8b695",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "18d05b2039efdd044dd31eeee7b9ea178556f359d900fa3483588c5a1140ab15"
+ }
+ },
+ {
+ "sourceId": "rc87-bbac92e3c825c448",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "5663699bf5b91baf510d53bf5c4db9dae1774fd21d6a6eb26f584fd97255a4af"
+ }
+ },
+ {
+ "sourceId": "rc87-ff05bdc57df805bf",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-e57971266b9e3aff",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "d7c1917a13ecdfa784d4cdda86666d056147aa98200cab7d18f5b6b71c438291"
+ }
+ },
+ {
+ "sourceId": "rc87-90b9b3ef00379f80",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-7b78be465a791af4",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "a9ba8309fb93c303feb24599c2481830f4d91f0d01486dd12cc4d7e10a5801e3"
+ }
+ },
+ {
+ "sourceId": "rc87-f60a866d8509f22e",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-7e2e3c70cb3772eb",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "a5acfe23bcd68972c14e824055aab76549e85988d52d2f7ffccac2aa2b932bd4"
+ }
+ },
+ {
+ "sourceId": "rc87-534873fc29c8093d",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-3c7785c329b8d250",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "c5dd7a1fdfd6f957b254fd8af9ef7f85fe52163b18a26a7632565afb22506d1f"
+ }
+ },
+ {
+ "sourceId": "rc87-03ad82b0ba2fb87c",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-4e1d70b27818db36",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "6007eb5e89cdbdb29f30fb9329163b275596c9538ae7985ee5c9cc1485da9092"
+ }
+ },
+ {
+ "sourceId": "rc87-10141c3b5bc8a95f",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-543493831b71d616",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "45b537ab92548905c37b82f84b4010a79b54d753ab8a13a3025c3d1fbbc7451b"
+ }
+ },
+ {
+ "sourceId": "rc87-4c45cd11db6e7a62",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-595773f312c886f1",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "2558d5a77c555b9c3fd015e3f26f4a8e650f24f3af63d6e92feb4ab782c5249a"
+ }
+ },
+ {
+ "sourceId": "rc87-77da2091521b42f1",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-3be524758ae661d5",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "de2cfe39e72b71e2ee882e5fb0255a62f0eee781b6b6774f32575f83822dcca4"
+ }
+ },
+ {
+ "sourceId": "rc87-387dcd6370375c79",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-1cfbfc78d5723e1f",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "46fc9511f9c788d3ef3cee3929f7ae9bb3ffec9a35d3aa91c79aa45bfc9bdc1c"
+ }
+ },
+ {
+ "sourceId": "rc87-8b18d2adf383ded1",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-96d1689239293854",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "92df414e6f4b38406b8adcaafdbcf765364e6829e26c385fe4e8e158de454ba5"
+ }
+ },
+ {
+ "sourceId": "rc87-7cdff47024dc4a96",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-d3cec04c77616113",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "d1aff408b2855d1c361ed981073f7558196e97496a004e8bb1cc3e40df21699a"
+ }
+ },
+ {
+ "sourceId": "rc87-34145c99b79f0625",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-6af48924f405a79d",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "745b4014b80fd6251cebc4063207afec8204bf0ccc11ae041ccdb102133f9e7f"
+ }
+ },
+ {
+ "sourceId": "rc87-a9677a7014d6ed1f",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-183b76f2c83eae45",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "7f2564b5705431a98928946476d826791899b0eac0167bc43de167ce62fde0b1"
+ }
+ },
+ {
+ "sourceId": "rc87-819b33f560336415",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-e4bb0a60d69454a5",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "72cf88ff5ef85d277b93802d3d2ba052d6727871c1031ab427f37ae5aa7f1e3a"
+ }
+ },
+ {
+ "sourceId": "rc87-7c20aa3cb230decb",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-8b68744e7c707eff",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "62ef1df1b56886eee889e8db8c6ee16f4316bc9f4969adf8bb9a5a2d8b787c85"
+ }
+ },
+ {
+ "sourceId": "rc87-75e692740899ee0b",
+ "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "targetId": "rc87-e4ec4443388c5560",
+ "targetDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "9793c25f616d69c31743e59d3f6545eb0fb6b172b74e4f387311bfd2a316a87a"
+ }
+ },
+ {
+ "sourceId": "rc87-e1bc74276f9fda7f",
+ "sourceDigest": "94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c",
+ "targetId": "rc87-37b3faeec0991f4a",
+ "targetDigest": "b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "cb4d8ca43f6b87b3e44e4a74203b139f620d7e05f0226ae4383b0b8dcddebeaa"
+ }
+ },
+ {
+ "sourceId": "rc87-b90edd25bc89df60",
+ "sourceDigest": "94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c",
+ "targetId": "rc87-b762ef59d79b3a5a",
+ "targetDigest": "b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "d39d7f0a7fda501b231b7391ba0a8e9ceeb0931d355b80c1a1076ab325e6303f"
+ }
+ },
+ {
+ "sourceId": "rc87-1ec2176be61624b0",
+ "sourceDigest": "94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c",
+ "targetId": "rc87-8ad7f469e0459c2d",
+ "targetDigest": "b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "9cab5e5b29a003fffbf12a31ca894e60978f8d7ec7ba35811d7c747faa08ad88"
+ }
+ },
+ {
+ "sourceId": "rc87-2b12ab30706efde4",
+ "sourceDigest": "94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c",
+ "targetId": "rc87-486d568b650ce608",
+ "targetDigest": "b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "435f06515a65807d4146065914f3cb3ecf17981152dbdab2567c375abbdfc4d4"
+ }
+ },
+ {
+ "sourceId": "rc87-edae79ffa999de71",
+ "sourceDigest": "94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c",
+ "targetId": "rc87-6a44520f6a131ad1",
+ "targetDigest": "b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "06c93c11aac038c4ab2086cb7976eb7c0ce34eac2502f181e49733d7fb602705"
+ }
+ },
+ {
+ "sourceId": "rc87-be74e9a8bebf4924",
+ "sourceDigest": "78df1b65f3abb0913f31507f9643c26d14b8ad0793c92b44b5c7786d11d4b8e1",
+ "targetId": "rc87-258f645b01db598a",
+ "targetDigest": "66d3c1f8434c9788fbc66a5cbe98ebf0de1dde77e69a34346daaee3c13b193b5",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "00acac79fc7111b8c38812440e4e3205ad3b56fa49b0ebd020bbe8620e0d0b8c"
+ }
+ },
+ {
+ "sourceId": "rc87-33d661ebbaf4fa9d",
+ "sourceDigest": "78df1b65f3abb0913f31507f9643c26d14b8ad0793c92b44b5c7786d11d4b8e1",
+ "targetId": "rc87-1631cd89141b7072",
+ "targetDigest": "66d3c1f8434c9788fbc66a5cbe98ebf0de1dde77e69a34346daaee3c13b193b5",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "09e9f8813b97179db81dfc65decc588831edf042a3bf370e23df022907b25387"
+ }
+ },
+ {
+ "sourceId": "rc87-29148015e682db52",
+ "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "targetId": "rc87-24a83639da3db69e",
+ "targetDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "a091760793b6f3fb9dd1040c756e45c4176424ad596213a2198580e45370cb43"
+ }
+ },
+ {
+ "sourceId": "rc87-a383fec7a7a366eb",
+ "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "targetId": "rc87-4cba8c4e54a925a9",
+ "targetDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "5ddcb58efb0401750faafb5633a6ba91ce02b5865a2daf9f27466e8b21a025e5"
+ }
+ },
+ {
+ "sourceId": "rc87-92eabf6d0c8890a9",
+ "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "targetId": "rc87-11602bc2e0d1e20b",
+ "targetDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "6ea9f4c8acf26470791c689136b220ed5a675bfc3e9434692bdf461d4d606a85"
+ }
+ },
+ {
+ "sourceId": "rc87-f668461dc72c77dc",
+ "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "targetId": "rc87-878c2a729c95e6ba",
+ "targetDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "70871153c97ed73ee027de92f556688d5b9d923be155afc6a4a149b36cbaa3ae"
+ }
+ },
+ {
+ "sourceId": "rc87-861cdb723d388428",
+ "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "targetId": "rc87-fe62af08ed4c2e64",
+ "targetDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "ca2a012a70289666c03c8a4cba878fe41be63b0adf7b33e20c68a61aab5c4643"
+ }
+ },
+ {
+ "sourceId": "rc87-cac6a0fcc5cd90b6",
+ "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "targetId": "rc87-dad95b3c8d66f94f",
+ "targetDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "e3a0fe80bcf9c9ce288fc857bdf5222a54664a00393c8e9fac1187b7bb9a823c"
+ }
+ },
+ {
+ "sourceId": "rc87-b880302edee3495d",
+ "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "targetId": "rc87-d088287a7400a9c0",
+ "targetDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "732215474927db26329944d912a8a7828f7f436a24738da426c929940fe4daa2"
+ }
+ },
+ {
+ "sourceId": "rc87-3e9b6b68f9ff714e",
+ "sourceDigest": "33b5d7fdba1f6b13ee8b53ce108116613375207740d6479b12ac056240686cfe",
+ "targetId": "rc87-f793976db04c4e18",
+ "targetDigest": "f4ef82a563e53cba1d5ab49098c6ff01fa5eae3c08a9663d363934fe36689eef",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "445ed923f29f2fa518abe2e3525b6d7d860911acd9cecf7c02b5a82235ad700e"
+ }
+ },
+ {
+ "sourceId": "rc87-60ba5ca3998b5d79",
+ "sourceDigest": "dc7050f7779ceddd9d7894b8727c6ec8a4ce7f03dbcf1d666de83aef4f36d3cb",
+ "targetId": "rc87-e90c7280e31b1551",
+ "targetDigest": "27b4ee00f2cd01b9235c352803f284531bb421c658685bea032db59ab545b763",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "98ffd04d025a4785969c3a1cdc14602b8a07fd89142fec20a13ed4f9ab95e27b"
+ }
+ },
+ {
+ "sourceId": "rc87-485132b1bfbaf0d5",
+ "sourceDigest": "dc7050f7779ceddd9d7894b8727c6ec8a4ce7f03dbcf1d666de83aef4f36d3cb",
+ "targetId": "rc87-5097538bd9cc32e9",
+ "targetDigest": "27b4ee00f2cd01b9235c352803f284531bb421c658685bea032db59ab545b763",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "1f26f55eee6566602cfeb0c7aeb77d445dc814ee74ae23be8836d3b72e102b00"
+ }
+ },
+ {
+ "sourceId": "rc87-06717a8f6562faf5",
+ "sourceDigest": "dc7050f7779ceddd9d7894b8727c6ec8a4ce7f03dbcf1d666de83aef4f36d3cb",
+ "targetId": "rc87-7b944dca2fb78d58",
+ "targetDigest": "27b4ee00f2cd01b9235c352803f284531bb421c658685bea032db59ab545b763",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "bd0d126123ca971ff5466f3430840de766ba3914570567c8a1f1525a7f032ab0"
+ }
+ },
+ {
+ "sourceId": "rc87-79fdc091ba87d1c3",
+ "sourceDigest": "dc7050f7779ceddd9d7894b8727c6ec8a4ce7f03dbcf1d666de83aef4f36d3cb",
+ "targetId": "rc87-b9e6a67127fb99e8",
+ "targetDigest": "27b4ee00f2cd01b9235c352803f284531bb421c658685bea032db59ab545b763",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "55ce1599e1ed95803d48d04d4a718a3a65cf258ffc98eaa7ad34cc5f2201cc25"
+ }
+ },
+ {
+ "sourceId": "rc87-4791de9bd3ce10ba",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-ad6aeef7c1209a80",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "36a70be429885253fcc07b256eb974942b62af5b8365245db1c36925d9e6e897"
+ }
+ },
+ {
+ "sourceId": "rc87-45c544d8e94ae20e",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-b570a066868eddaf",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "a96f7f41dadfb537279f699b6a9d7902ef8f119b12ebfe53340716e7a33b18dd"
+ }
+ },
+ {
+ "sourceId": "rc87-60ea934649e2f3b4",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-f3d003739808f76b",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "c9e3192d427c2beda9578385cffbe335424d20f9b5a53a37e1cd3c8a1a9ceb2b"
+ }
+ },
+ {
+ "sourceId": "rc87-c8370e92b0ea52b1",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-d8c6c9e2fa60d788",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "cded9c81c982e70558435c0f94ab7b3df71909c8b6a5ec5267f5aa21cbc9afcc"
+ }
+ },
+ {
+ "sourceId": "rc87-79f505548ab25dc0",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-8ffc1598b9dc80d0",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "625beb623b0eaf5ef94366d5cdd516affa889c2361407808a9606a269aabc11a"
+ }
+ },
+ {
+ "sourceId": "rc87-a5d83c832ae37878",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-3313f3be1ef98186",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "0c2549c6c21d16600e0e67ce77f103a6e97630a3105c1fc3be5a301c93587fe8"
+ }
+ },
+ {
+ "sourceId": "rc87-e8df67bb4446fc40",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-fd89c460702b2b1e",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "ac53c90333d9a0eb6fe4fd8c3cca92cee82f9e8c33c330de8d1a7409f0a4c917"
+ }
+ },
+ {
+ "sourceId": "rc87-50fb5138fb1e143b",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-3dba7f33ca7a1375",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "a34a21494065188cb0b46f8fd3c3628f9ee4168116d592cfe6afb2f28a8f5e07"
+ }
+ },
+ {
+ "sourceId": "rc87-51e1ae4fab780db7",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-5f63e70d73b95553",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "e94359547338297b86777d74ef78ed283da28aaef21b2f6233663d01cfda4f5b"
+ }
+ },
+ {
+ "sourceId": "rc87-2e4381707f8ba68c",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-d3ad3c8b00566fa8",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "9a7a3d82092bfeca8926abcdd4fe0603cd2350a65703e73b5da697ef099732be"
+ }
+ },
+ {
+ "sourceId": "rc87-9d33dd88f22d116f",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-bb6092b776f5dd75",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "80579dbbb6ffaf6aa9929cb495c9f7335fbf942b9724e6e30f2def0ea6dab296"
+ }
+ },
+ {
+ "sourceId": "rc87-173901b039dba06c",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-f73b7e35f57d3523",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "06d25c4500edb6fdfef94f2c5065d7712417e9c0dd0b254802b6ac6f6f826efb"
+ }
+ },
+ {
+ "sourceId": "rc87-1cf4a441a12eba30",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-3c0d4a2731017ab8",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "0bfb9738df9edd47ce550421671d954651ca5dceb856f93bcddd1f1699a37bb3"
+ }
+ },
+ {
+ "sourceId": "rc87-5220ea8868363aac",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-643ca11a57fc1d78",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "8b8a1ef898ec54dbaf6be91ddec1fdbe1e105609201ee34ae44bd7e3bbf9039e"
+ }
+ },
+ {
+ "sourceId": "rc87-0fbea12cbc344812",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-ae45226ad14cab35",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "68795a06f846a7192453b527909eaf9e643cc690513e24651d45bd63047dde96"
+ }
+ },
+ {
+ "sourceId": "rc87-c15b6b254db828d6",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-9339668b01062296",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "3c067226a3a1f5b54d261a1ba4b3ed2dbda84b3c2e8c2159e4fe8986386e83c4"
+ }
+ },
+ {
+ "sourceId": "rc87-7e8a2aa57fd614a5",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-cea0ef3a37d02e26",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "155017dd112eb9b5f1b0df667ca9c3ed80ee5592b5e2f044251859d0d083a0a4"
+ }
+ },
+ {
+ "sourceId": "rc87-7931f166ae9c26b4",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-a0e83696b4af425f",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "19037ef40c39525e218ce0f3fb2ba93fe43fc3e31d365fdc946bfce064a29c40"
+ }
+ },
+ {
+ "sourceId": "rc87-a1b42b0ae4f35da5",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-4f9aa6e22fad7159",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "c994922b96e52cb5715d27accf9ac0608694cd330ab8dbc1c88a598a5f8dca20"
+ }
+ },
+ {
+ "sourceId": "rc87-61552abd57dcc78f",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-f7a7a2067fb5abfa",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "6feb623240aeac287712f2b593c1fea254aaf67df0253e779d58d101d8273dbc"
+ }
+ },
+ {
+ "sourceId": "rc87-24a4759cef2ebf86",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-02669c9330744b98",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "61128b6e44379f6aea03e384c9f4438dbfec203f081e499f191cd16b84339a58"
+ }
+ },
+ {
+ "sourceId": "rc87-c74944578664b6a3",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-226dd738eab13d14",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "0b5548df8732a2fb246d1776bc2e8409ae285a488bc328164d76033935ccb796"
+ }
+ },
+ {
+ "sourceId": "rc87-8f20942924f27cfe",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-8a173ee62aca252e",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "d2fba204e2f2a193dcaf86b70f37028f8b64b08ea41895c6e1521f7bb8799f2b"
+ }
+ },
+ {
+ "sourceId": "rc87-d90f6cf28023ebba",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-4efd7aaf1d9a8bc1",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "9fb8f13209d4143ac81e8f8b4d4cd99a04c6bd204764e12f8ab7cf9070fbbefa"
+ }
+ },
+ {
+ "sourceId": "rc87-c183ed2405f120ce",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-26c5688398c60dc7",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "4a5b488ec395019d334307e4ffee465f421d2e7f25b1e19b0299225ffe19700c"
+ }
+ },
+ {
+ "sourceId": "rc87-20e7d0283a684a74",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-7d6dc8b43d19d6b8",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "08d62dea5ed5673529bbf8e7e21ee070d06bbaa984189f7c3aaf44bae9a599c5"
+ }
+ },
+ {
+ "sourceId": "rc87-f569221ff687383b",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-484523ab64fd28f6",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "1707cfd563c76c753e991c82cae0b3f20df95093f75d23059257c89accfffa28"
+ }
+ },
+ {
+ "sourceId": "rc87-927cd4e360482a28",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-04a5ff1a14ac391e",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "6dff32a96d8b920a3b5aeab363376f41aaca2d9da5f3e1f540495bb417269eae"
+ }
+ },
+ {
+ "sourceId": "rc87-7989689229005312",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-f635a0600e7a4e8b",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "7381af7a236e1dd16b3c0bdae935f3f28c54b30cfdc531dc6e29380b9cd32e0c"
+ }
+ },
+ {
+ "sourceId": "rc87-c6420e672fd9b493",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-e33fa1ec98f13fda",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "9762978bf9458e34a111017b79e140c5e05e1d50a159ab44c6e933cc2d1b3fbf"
+ }
+ },
+ {
+ "sourceId": "rc87-af050a3e3399a5e3",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-9aeb5d039b18dbfc",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "02a22d8b154e9be6d6c16d73033460292a4aa16e7c2a7fe6e4b71c2540910183"
+ }
+ },
+ {
+ "sourceId": "rc87-290c76660baf3210",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-f1821005802355bb",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "fc600bfe00920b01e956b68770251e042f7f6df56f2645f931f234d697963e34"
+ }
+ },
+ {
+ "sourceId": "rc87-3a9e07cc4a862b5d",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-05944ffacbb5e721",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "356130c8ab4d9bbeb5a84df60f193ad2bf5879163a38cfcdbf456bb07bf4bdbb"
+ }
+ },
+ {
+ "sourceId": "rc87-fc59a066e51fba4b",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-339a747bf2a86a96",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "37503f87c7820ab4a848d9284ba96912543702cbd66efacf5589b647b893eac6"
+ }
+ },
+ {
+ "sourceId": "rc87-431ae057ef257d7d",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-4bed6a1f03ad954b",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "2dbf3d795776dce847f7a5d9ebe69ea5f939acefd1140ae3f063182cc61a8705"
+ }
+ },
+ {
+ "sourceId": "rc87-e7cbef34c3653ad7",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-793f9d121e337eb8",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "92a7c12d5978b9908fb0f42acfd8b0b9dbf378000424a796307f9684eab2dccf"
+ }
+ },
+ {
+ "sourceId": "rc87-903249b8eb142324",
+ "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "targetId": "rc87-b36719969853c597",
+ "targetDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "99dc92de1ad1021b7c958e3435f44b0c736c74aa55d36cdb09e4ad67718ed030"
+ }
+ },
+ {
+ "sourceId": "rc87-7e2eb27a73d2ceca",
+ "sourceDigest": "1228341c6c043be83b8121ea56f3bd19207f4eb4df889f0dd9f51c817051dffb",
+ "targetId": "rc87-a43613ddb550e64e",
+ "targetDigest": "13a9f6b37151454d6d955669cb342540980817150b5e237a0684ddb4762e3c23",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "129f0f3aa70b8152b2a0ba0edffba60779d02dddbf0d9ee26fefaa42380b2db3"
+ }
+ },
+ {
+ "sourceId": "rc87-76b7f7f11b0d43d8",
+ "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "targetId": "rc87-ebf2d9bb17d4dd05",
+ "targetDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "2f0b84ed89ce6ad7c46198ef37da3995bbf5c230cbf5ad2c9fa1bb25affcf4b8"
+ }
+ },
+ {
+ "sourceId": "rc87-90185aed40a54c8f",
+ "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "targetId": "rc87-f8f36e867e6ee492",
+ "targetDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "b4994198d078437c655b4515c012e549611cd428e2cfad5f76cd7fa6806ed350"
+ }
+ },
+ {
+ "sourceId": "rc87-65dad9b1586a51c4",
+ "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "targetId": "rc87-84b1d82884710190",
+ "targetDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "a86ccf2f901e743889bcf0e7509ce68569c07f78c21716cd30316de4e3cefc0b"
+ }
+ },
+ {
+ "sourceId": "rc87-8e6548f7b2da966b",
+ "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "targetId": "rc87-7db22740288005e7",
+ "targetDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "5f0ca3fd329dd1587a1775693b8707006b1cd4fa127de0cc841f15e5508fef95"
+ }
+ },
+ {
+ "sourceId": "rc87-382f83ef3864438b",
+ "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "targetId": "rc87-e519d40edf542cc8",
+ "targetDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "01eb6a3929f45b2a2bf56cf30d650216c7f3873e9643373570fecfadb9ad1686"
+ }
+ },
+ {
+ "sourceId": "rc87-89945b41afd045da",
+ "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "targetId": "rc87-39702b3475593a76",
+ "targetDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "095d5feff5e43d76a92fb42e4bce4bdc7d0b250c17d2a8748093a818b0ce2a35"
+ }
+ },
+ {
+ "sourceId": "rc87-bc1db7b003c91340",
+ "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "targetId": "rc87-26ca6c44a09ea006",
+ "targetDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "cc792bb2675fa0e30d56dede90fb9d23fe4bad2390ce6fc0d604645de27125ba"
+ }
+ },
+ {
+ "sourceId": "rc87-7f8e60d953565a77",
+ "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "targetId": "rc87-b3d64cd51950dff3",
+ "targetDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "90355df755272b34c2eedb2b9172de1eb7bb970be39ecb12d06335eb745d6b19"
+ }
+ },
+ {
+ "sourceId": "rc87-8f5974e01fbb69e1",
+ "sourceDigest": "d64eaca39e37bf8e5fa5f3c59b4bd1006dbf5a6d00df45b714a0f99c93f8813a",
+ "targetId": "rc87-8f5974e01fbb69e1",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "5658195354fcfe9af3b8a0b10156aafca7c2a2cdcdefd4dafaaf7df135c86225"
+ }
+ },
+ {
+ "sourceId": "rc87-317d63ee42e0b4a8",
+ "sourceDigest": "d64eaca39e37bf8e5fa5f3c59b4bd1006dbf5a6d00df45b714a0f99c93f8813a",
+ "targetId": "rc87-27585f3bb7451fa2",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "1bc0b5cbdc1317c3afb16059b038d2f4c83140a9ee99b3a1589624fd510ba135"
+ }
+ },
+ {
+ "sourceId": "rc87-e4c50f8d1daf8371",
+ "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
+ "targetId": "rc87-663b44c939d8366b",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "b73285882e4ff97e5648d3bc02ae0210f6025268872ce909c9ce1b0d86261b1d"
+ }
+ },
+ {
+ "sourceId": "rc87-e44a27b12a65edc0",
+ "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
+ "targetId": "rc87-89ff89a1d9931034",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "7842fcdf91d105d8478e3ebabc7831bd141e0e06c970a4504d3f5492bb734e9a"
+ }
+ },
+ {
+ "sourceId": "rc87-8fb40499263db668",
+ "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
+ "targetId": "rc87-0045c55ac923aadd",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "b12888b6dee1849db939b9edc699c49de622665232bc2658e9d42e515f7aef30"
+ }
+ },
+ {
+ "sourceId": "rc87-1de48ca5936adff8",
+ "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
+ "targetId": "rc87-aaf2d6fea90b7d2c",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "43ba9c734d29c5bb439764d0dda3dee89c90f6bc8b478b541eb25f5fb05a6199"
+ }
+ },
+ {
+ "sourceId": "rc87-bf90ee70a9fdc07f",
+ "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
+ "targetId": "rc87-bbb04171a9c858fc",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "10d82955b4ee6c2aa50e9eb3346f31118c52a475bf7bf0c41560397010ec1fd7"
+ }
+ },
+ {
+ "sourceId": "rc87-c8992b1d2cb069c0",
+ "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
+ "targetId": "rc87-412b1ba3107a0ec3",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "cfa101b2ffaed61c5c2c1763c21ab6b6dbb6fbc88e16bf245b5df69ff52df84c"
+ }
+ },
+ {
+ "sourceId": "rc87-9c498b75f794b066",
+ "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
+ "targetId": "rc87-4da48330a0cb81b7",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "4a4395a065b4296dc3054feeb0724763221c58172e0bbfa9c54ace9e7845513a"
+ }
+ },
+ {
+ "sourceId": "rc87-7bfafd80ccb12306",
+ "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
+ "targetId": "rc87-9fc25e01696467d1",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "1a17a623bfd119a1e1d6a10df35b688dd60130ce079320607bf7572a67e695f1"
+ }
+ },
+ {
+ "sourceId": "rc87-a9089141c66a0123",
+ "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
+ "targetId": "rc87-3859acb15543b980",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "26824c99eaee81bd00dc5aa31d56bb1dd426a1b7702d24c4f4d8f664a19b56cd"
+ }
+ },
+ {
+ "sourceId": "rc87-a93cde17bde04a07",
+ "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
+ "targetId": "rc87-bd41a23cea075da6",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "1cd96a74c019d296aaa742385064459d5f1530c996b2050793a8e4eb2ae98d43"
+ }
+ },
+ {
+ "sourceId": "rc87-4e00d48fec9dd39c",
+ "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
+ "targetId": "rc87-eea13400378d81a7",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "04d9b6ebb227fbb017b32b574814b45ae9a24f81405f88ffe67a73db5d7df40d"
+ }
+ },
+ {
+ "sourceId": "rc87-7d09d3eaa22afadf",
+ "sourceDigest": "1ad284f2a792a61f0a3847fe0780bc14b943ed34a9c1653c846103e1933a21a2",
+ "targetId": "rc87-307a7f6b77748dd0",
+ "targetDigest": "c841407a37b104cf2cbb716ffdb5a7286c98391c767890efea3274687e3959bb",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The JSX/styled fixtures use known-invalid text-decoration:1 and report both emitted vendor and standard property failures. The valid fixture uses the named token bg-black.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "98a0bd9fec2b0e8e7e94e95c3ccf7317e1456833773bf4afdb04b1872d44286a"
+ }
+ },
+ {
+ "sourceId": "rc87-0d0340035f5817b7",
+ "sourceDigest": "1ad284f2a792a61f0a3847fe0780bc14b943ed34a9c1653c846103e1933a21a2",
+ "targetId": "rc87-538ba311c3382ba3",
+ "targetDigest": "c841407a37b104cf2cbb716ffdb5a7286c98391c767890efea3274687e3959bb",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The JSX/styled fixtures use known-invalid text-decoration:1 and report both emitted vendor and standard property failures. The valid fixture uses the named token bg-black.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "0520cbe507a2004c3be220deda6744ac96e13cfd82cbf14da33874a2e2ed79dc"
+ }
+ },
+ {
+ "sourceId": "rc87-2370a06cc7a679fb",
+ "sourceDigest": "1ad284f2a792a61f0a3847fe0780bc14b943ed34a9c1653c846103e1933a21a2",
+ "targetId": "rc87-64cf8a912f74145f",
+ "targetDigest": "c841407a37b104cf2cbb716ffdb5a7286c98391c767890efea3274687e3959bb",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The JSX/styled fixtures use known-invalid text-decoration:1 and report both emitted vendor and standard property failures. The valid fixture uses the named token bg-black.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "8401bd87246bdcf1290de0b6e2c669d5a765974a78ccaa5091cdcf14ae64efd2"
+ }
+ },
+ {
+ "sourceId": "rc87-4bcefb994f63ae52",
+ "sourceDigest": "1ad284f2a792a61f0a3847fe0780bc14b943ed34a9c1653c846103e1933a21a2",
+ "targetId": "rc87-2c09fda07095a6b3",
+ "targetDigest": "c841407a37b104cf2cbb716ffdb5a7286c98391c767890efea3274687e3959bb",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The JSX/styled fixtures use known-invalid text-decoration:1 and report both emitted vendor and standard property failures. The valid fixture uses the named token bg-black.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "d5ccf4561fa235c2b04204e0dc0247e38e123788096b0db806ea43b464baee8d"
+ }
+ },
+ {
+ "sourceId": "rc87-d1902226d6ba1a66",
+ "sourceDigest": "c70fc1fafe42788b8dabd0e60b5429a3f9bc25e2f41391c66c6d8f437a79351f",
+ "targetDigest": "6fb884af637ce9c7575a6185dca6d9d2ea303b062263b418193543793ff1e321",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Cross-rule fix stability now uses property alias padding-md -> p-md followed by the actual generated-CSS winner p:8px. MDX fenced display examples are preserved without diagnostics; ESLint disable/enable still surrounds executable JSX.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "7e7dc7d6e1742bba0198ec8894aad451edea98924e7f95ff60b7abd5feb0f73e"
+ }
+ },
+ {
+ "sourceId": "rc87-ff2d555affd59529",
+ "sourceDigest": "9fd81305b5110aa606eaa6d7fe85538c9d8e11938b9072522e32edd4238363e1",
+ "targetId": "rc87-33c3c06b092c97ed",
+ "targetDigest": "f3936b3d746e751709b51eafe45a37cd3a180bc44c5ee9d2e7d7041fba0fb23b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Cross-rule fix stability now uses property alias padding-md -> p-md followed by the actual generated-CSS winner p:8px. MDX fenced display examples are preserved without diagnostics; ESLint disable/enable still surrounds executable JSX.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "ef187b2850bb384b534fe8a35ed5bd04a1880188434cb312851b586136f2841a"
+ }
+ },
+ {
+ "sourceId": "rc87-30f5dd4a175fce37",
+ "sourceDigest": "fbd581bd73b9c2e01fcd8f5517023d1d13782556d0d3133ba15ede8dcc069f72",
+ "targetId": "rc87-118cf688556d2488",
+ "targetDigest": "f3dfb6a7dfb7dcd2b4d1bb9577e38996423d7ce6ad612ad9f3b792ad602d0f04",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The configured class variable and nested class object retain mapped error coverage using text-decoration:1, with one diagnostic for each emitted vendor/standard declaration.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "7037eea8e09683216afe0ce52044cfb537e650697e7c34037406d264856d4e17"
+ }
+ },
+ {
+ "sourceId": "rc87-ba03d9ed18eba206",
+ "sourceDigest": "fbd581bd73b9c2e01fcd8f5517023d1d13782556d0d3133ba15ede8dcc069f72",
+ "targetId": "rc87-b8465a63460df029",
+ "targetDigest": "f3dfb6a7dfb7dcd2b4d1bb9577e38996423d7ce6ad612ad9f3b792ad602d0f04",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The configured class variable and nested class object retain mapped error coverage using text-decoration:1, with one diagnostic for each emitted vendor/standard declaration.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "2767c29bfc41d6a99b1fbce714f9ed198793e1c6f7cc136957fe18e1e05dfb0b"
+ }
+ },
+ {
+ "sourceId": "rc87-1cc1d0090085ed33",
+ "sourceDigest": "0298511f7df9b9e243ecb772980b25550acb1ed5a6acc2a6c2d41fc937a1d4bf",
+ "targetDigest": "aae3dcbf38ee3943874e7deffa034379fadeb9d66153bb8aac1e40cefcb11839",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: fg-red is one named token; the active token span no longer reports a declaration property.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "b16b61137514cb790f7db8608a2db4be3090b6c9c449e0b8aff389f36a24347c"
+ }
+ },
+ {
+ "sourceId": "rc87-dc7591a4ae298a44",
+ "sourceDigest": "6759722b51ad501fa7d1aa0dd30f81f5fd028162c9dab15d9eecd994fb3093e7",
+ "targetDigest": "c2d01f313263da035fec7b65cf62fb7ab7ab22e2bc3669bd3868aee48efddaaa",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: @utilities replaces @components and fg-red is an enumMember; active mode excludes directive keywords and declaration properties. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "d847bf55e273b0396d57e7b5a07914fd890d6028d97574b139621a6d8e9a0948"
+ }
+ },
+ {
+ "sourceId": "rc87-e39e3553acb8ff50",
+ "sourceDigest": "369e6e9202cb4433d85012aa8b90d378a0e35d1a2e456c47f3efa069e6184012",
+ "targetDigest": "1a3a3f1554dbcae46a7a0c82b50b43c3f917d279623580d01da360e7863517e4",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The grouped named token fg-red loses its old declaration-property split while enumMember and selector/query coverage remains.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "714525c744f85747d9f86e3983f188bc6ded735929c87df24d704fa884950b32"
+ }
+ },
+ {
+ "sourceId": "rc87-2c5a5b24e801cfff",
+ "sourceDigest": "d3eaea3bbbcff8731825bf214123f891dc44e6e1f4c8d0decfa8bee3508a9849",
+ "targetDigest": "3db1b85f0eaa0bb3ff8672b2d0494d954d944f3285b4057dae84a0aec9b35460",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: fg-brand is one enumMember. The fixture btn is a utility, so all three occurrences use utility.semantic role without component/declaration modifiers.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "5e6494e081ae0faf6fba6deff208218ef2e7e93c7833e6a4ac71f47aa3a9973a"
+ }
+ },
+ {
+ "sourceId": "rc87-12186aa5abf43d09",
+ "sourceDigest": "495258ab526e870f3f031ee20752c85bbd5e0262245774d14bfb8973e9cd0b6d",
+ "targetDigest": "18ca5a9cff56d761acb43883f730888fe83d399101306c910df4770d33fbca1b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named token spans and utility registration change; pattern fixture syntax uses font-<~font-size> and raw grid-cols:<*> rather than the removed typed raw form. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "510226c9bc47cf0d2d3e644a90f7b3548af6b98d1264122a97819b9ae6ab6baa"
+ }
+ },
+ {
+ "sourceId": "rc87-dd8bb950e0e1689f",
+ "sourceDigest": "23618e63a338083833f901301ff8bb462a1bf048ba3610152fe992f6730f5ead",
+ "targetDigest": "6df3d5ffaa6542cd8f7b0b22a3962ec356537714066e23d11c3e4a3a2a3c9908",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Raw class-list named tokens become complete enumMember spans; modifier and query spans remain.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "d84e9f5ef4d96607b6313abb178cd3a639d5ea7d004eda4c9186cadc382c3428"
+ }
+ },
+ {
+ "sourceId": "rc87-048c5fec4032b5c6",
+ "sourceDigest": "7bd31e18c36c85efcfd5834854c1613fefe53f59d57997a6c031dd9f20ce05a3",
+ "targetDigest": "6eee4673eb1dfbfbb5429575816cd15779ec61d6b1c8983148ca61e634f94a36",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Comment exclusion is retained with complete fg-blue/fg-red spans replacing old split value tokens.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "67db1bf0ad1c4edbb170bc3e17eaebba563863ff005aa0e9cd864b34d4bca995"
+ }
+ },
+ {
+ "sourceId": "rc87-a5e7df0a818329f3",
+ "sourceDigest": "796b91a605afcaa326e393c89a33a741b8475db8b948486b385f11bae3ce325e",
+ "targetDigest": "25b0bb634553e33d76c5336ecd4f0ef0080a3f9ad13a9fd1f0478e58dbf833d9",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The utility btn uses the enumMember value color and loses component-only font-weight 600; existing block styling stays.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "ad73e72f4949c39b4dff4262f1063404092d8b13356b195ec51e8fbcde3fdb75"
+ }
+ },
+ {
+ "sourceId": "rc87-b1ef4609b9c3a1a7",
+ "sourceDigest": "6f7bf9ee8de1c8d2091515661eeb1bada31990906a454f9617be114be4578a6e",
+ "targetDigest": "dd24bb47ce5fb3e35759b42738fd5d1ee58b346a78f99b0eda3cdb9a360a690f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The host attribute wrapper retains source text, host role and original style, and contains one semantic-utility span rather than property/separator/value spans.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "23cbcaa9e36d06272f05da550497697fc2fb89a0f52806dd5484ec18059a01f7"
+ }
+ },
+ {
+ "sourceId": "rc87-35f63a5af0e4a031",
+ "sourceDigest": "2d5d95474435bd62c4b77c3d26c455dbe72316b2d19a9a5061d47ef08120b16d",
+ "targetDigest": "9272450eaa2d3290d9e5c4bca84e86a45eb432d47840eff16f1a549182e0a745",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Disabling host wrappers still produces no wrapper and exactly one named-token utility.semantic span.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "2aa49134c72edd4992996fdac3653c48a4d9f197250f88d20bb8735ef7040f81"
+ }
+ },
+ {
+ "sourceId": "rc87-b65ebde91c14e95b",
+ "sourceDigest": "7f181eed07de7eebb5e8acec7db516a62373df2bdf61dc061bd41f90dd8a8fc8",
+ "targetDigest": "70512485e9a74b393a4fa0a83816bd9fbcb256dff987d559503a507f8de5efcf",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The Shiki tokens hook emits enumMember/utility.semantic classes for btn and no component-only font-weight style.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "f8c238e710d87e06d97713b1c483267052238a506791198c808a9c77d2f25d50"
+ }
+ },
+ {
+ "sourceId": "rc87-45de05367dfbdb24",
+ "sourceDigest": "31518d64a8b7020b90db1956b106bcf004d3faaefcde762251e955e72234ec8e",
+ "targetDigest": "dbd90dff6f48b274b163a3b0e2f8c14cf9a79585226091342930a342dc8dba32",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: HTML and CSS directive documentation tokens use complete named-token value styling; @utilities replaces @components. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "88c921d2ccfc46cffa712e254f1f30ec634dee13ab94847448acc1e7aaa3e76b"
+ }
+ },
+ {
+ "sourceId": "rc87-49294136507486df",
+ "sourceDigest": "5252878a3d8ab8c74835d088e3204acdad15889c1a632e42c1690a47bbad121c",
+ "targetDigest": "8b583f7a42a0e2fad7cc7eebc9e782e97b4b2978cd813d4886cf813fe137c4f7",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: p-md and r-xl each receive one value-colored utility.semantic span while remaining directive/query token checks stay. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "351db59897ba177b274de71abba4c39a114ac6d16be0fdc640bdb599c628e14f"
+ }
+ },
+ {
+ "sourceId": "rc87-69b24f0ff70fd33c",
+ "sourceDigest": "95c367ee084d6559d985269d1fee310390d8507eca6ceaf3fbf2c6cdafe7f8fd",
+ "targetDigest": "12645ef688592a2ef9c96d88708d4b63ca3da0f6d6cea7f31cdcc128c0a007ed",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Removed @defaults/@components are excluded from the supported keyword list; directive spans include @ and must not split it into the old punctuation scope. Compose-removal integration of 9d9817241: Use supported safelist class-list highlighting and native declarations in selector/variant fixtures; exclude Compose from supported directive keywords, and verify removed Compose receives exactly native CSS highlighting in an additional case.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "4485a28a373ef924356d4c2a06943661ebf67471907c1d7a4c9963b5811b294f"
+ }
+ },
+ {
+ "sourceId": "rc87-5b8cc29aa8a94cb9",
+ "sourceDigest": "35aade9d2c0c386992964071759c5214c6ac350805b003b5a839c9f27634be2f",
+ "targetDigest": "f618a028705a4f002cabc9c7f9ca14b7a929e90be1f80b72cc90ae74a401c2e8",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named utility and token-pattern syntax changes; query scopes include @. The duplicate fg-primary assertion was replaced by an explicit native background-color property assertion. Compose-removal integration of 9d9817241: Use supported safelist class-list highlighting and native declarations in selector/variant fixtures; exclude Compose from supported directive keywords, and verify removed Compose receives exactly native CSS highlighting in an additional case.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "0f760bcd0ef9d8f825758f960ad2e1fa96efe73851fa8c7053d1d66d822bba92"
+ }
+ },
+ {
+ "sourceId": "rc87-a6cb1f63877dcff7",
+ "sourceDigest": "4d6d31a2ec74ae42c8d3376ecba9355f8d129c4a29bb86ed876a13c4fb6aa662",
+ "targetDigest": "161f82b215b02c2f3db4ebed9afa34317d801b91f48c7421741b79117ba198d7",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The injected CSS grammar leaves native @media with the native grammar scope; Master @custom-variant/@slot spans include @; selector/value checks remain. Compose-removal integration of 9d9817241: Use supported safelist class-list highlighting and native declarations in selector/variant fixtures; exclude Compose from supported directive keywords, and verify removed Compose receives exactly native CSS highlighting in an additional case.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "94da571c953a9e936c238292ce3359013efc5534cfe5af396436ee2bfde146f7"
+ }
+ },
+ {
+ "sourceId": "rc87-5a3a055267fe6e03",
+ "sourceDigest": "6d766679256afc405847fd9c2fafbefc669cc3b5c10a54d0e8e51401cf4d3b49",
+ "targetDigest": "4fd16e059938da8cdf902849ed38ae9a0a2237003661b1662b9a39dadde16efe",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The injected grammar preserves native --alpha() syntax instead of assigning a Master function scope, uses explicit var(--size), named tokens and token namespace patterns; native comment/number/unit checks remain. Compose-removal integration of 9d9817241: Use supported safelist class-list highlighting and native declarations in selector/variant fixtures; exclude Compose from supported directive keywords, and verify removed Compose receives exactly native CSS highlighting in an additional case.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "f4040e5607bd1d6c0056ffddd4c2178ec35c1fd776d761837a95fd6a32a91c3c"
+ }
+ },
+ {
+ "sourceId": "rc87-d6f1e639b422f215",
+ "sourceDigest": "0254de95692502a2a4798f3f7f6b5c99289a91caff2c6390261a1553773cd462",
+ "targetDigest": "12a0a3e4942a597e0bee57bea54d92cc0aa6a35dca0aa1b3531af8cdcc6e2fa4",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Comment/string exclusion remains; the only real directive token now includes the complete @theme text.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "018691a235e8bd20080a9473f8e20ecf63ae95345454aed8e3d673dfeb6267e6"
+ }
+ },
+ {
+ "sourceId": "rc87-c611fc1e092ab84c",
+ "sourceDigest": "d04e0d6e07fb4a3cf18927d9603b76f4019f5df295d10167f0c219861c7eeb99",
+ "targetDigest": "cbc55fd84cd5ae2040e32e85713dbc394a983a2e97b36f1d2528278e441baa42",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named-token classification is token instead of declaration, inspection uses matchStatus=matched instead of valid=true; completion and color checks remain.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "052b98b2deff72c125106544afa627023c5739e3776d744a0082dcc8e21f4ad7"
+ }
+ },
+ {
+ "sourceId": "rc87-4830c5bbe833a934",
+ "sourceDigest": "c4bda323b0ebcba47e52d8096bcb930484734de181cae614dff7ac6b41872bad",
+ "targetId": "rc87-bc885bad6849fc41",
+ "targetDigest": "d3712ff1f2315a709e0d53a29d5fb52f0b9cd5af1f31fc2244b5ed545ebe8d56",
+ "proof": "approved-contract-change",
+ "reason": "Reviewed portable watcher/path adaptation; every rc.87 assertion and fixture remains after removing only Vite normalizePath wrappers. An independent AST comparison proves the remaining case body is identical. Windows inputs and expected paths now use Vite host conventions. See parity/vite-portable-freeze-approval.md#assertion-preserving-cases. Full Vite 678/678 and focused cases pass. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "4f7d1be5c622f060c83c52d7b21fa40a0f5f609fa4b8c5580b2decf541b53368"
+ }
+ },
+ {
+ "sourceId": "rc87-426ea0afb5a08621",
+ "sourceDigest": "0ff5d9a5651036e3a10ccbff343a04266d4952e0a83e7842562751ca7ffa8025",
+ "targetDigest": "ba98d64264baa0de84f7fe1475d69482371488c670a5a779e71a59dd16985172",
+ "proof": "verified-superset",
+ "reason": "Reviewed portable watcher/path adaptation; every rc.87 assertion and fixture remains after removing only Vite normalizePath wrappers. An independent AST comparison proves the remaining case body is identical. Windows inputs and expected paths now use Vite host conventions. See parity/vite-portable-freeze-approval.md#assertion-preserving-cases. Full Vite 678/678 and focused cases pass."
+ },
+ {
+ "sourceId": "rc87-f31ee191a59a71b4",
+ "sourceDigest": "de314b914139026a38055903d8ab7f5abe48fef3db61dd1d20cf8641dfae5bb2",
+ "targetDigest": "e9d23b1895335f151e320c3af8a2de6b8623e7a7e9533c7ba7d821cfbb771c6f",
+ "proof": "verified-superset",
+ "reason": "Reviewed portable watcher/path adaptation; every rc.87 assertion and fixture remains after removing only Vite normalizePath wrappers. An independent AST comparison proves the remaining case body is identical. Windows inputs and expected paths now use Vite host conventions. See parity/vite-portable-freeze-approval.md#assertion-preserving-cases. Full Vite 678/678 and focused cases pass."
+ },
+ {
+ "sourceId": "rc87-f44b976958b10bfc",
+ "sourceDigest": "13c72238b508259b29dd166ce373bfecce396f0f5398e8c83dc7e5d14607d6c4",
+ "targetDigest": "5ff340a5182adcdfeb5776d2d53fff1aec6449e14dc57541233d799805e13e5e",
+ "proof": "verified-superset",
+ "reason": "Reviewed portable watcher/path adaptation; every rc.87 assertion and fixture remains after removing only Vite normalizePath wrappers. An independent AST comparison proves the remaining case body is identical. Windows inputs and expected paths now use Vite host conventions. See parity/vite-portable-freeze-approval.md#assertion-preserving-cases. Full Vite 678/678 and focused cases pass."
+ },
+ {
+ "sourceId": "rc87-d4518d189871ff5e",
+ "sourceDigest": "7b1c90684a03f4bd22b3a69aaa6cb6cebb7257cb5020471f56e3fe6e9d73321e",
+ "targetId": "rc87-483e149697dc82dc",
+ "targetDigest": "cb829edd46a5989a08a8d9613d138d2df5fd4b2fca1bf9b31a590cda710bdd8d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: keeps nested selectors aligned with native CSS descendant and compound behavior -> packages/compiler/tests/css-first-core-execution.test.ts :: keeps nested selectors aligned with native CSS descendant and compound behavior. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "8623e497871976e0a77babd4bd9ecc21f337f14f87888f05f6b91ee7ebe65c64"
+ }
+ },
+ {
+ "sourceId": "rc87-72a6e40c6d1db474",
+ "sourceDigest": "dae7408fe6df6e0b680e5a4070fae57cfe187c6bb8043114ce8b888681acdb38",
+ "targetId": "rc87-e8e3813db2ec4ad2",
+ "targetDigest": "868a49f93958ef4ecaee050a9cdd8be539dc9daa3ab859783b2a022bcb004d2f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: replaces old JS merging intent with ordered CSS imports through baseManifest lowering -> packages/compiler/tests/css-first-core-execution.test.ts :: replaces old JS merging intent with ordered CSS imports through baseManifest lowering. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "8bed920099d646abc84a2d771018b8d8ac55671d3c44f6e0aeaabb0bdc46a6ca"
+ }
+ },
+ {
+ "sourceId": "rc87-92eb0b6c5a192baa",
+ "sourceDigest": "42600805fed50d7238605b44eab8be1db372d406312b97b84b7d9dd3a8b58d09",
+ "targetId": "rc87-02d08fe1bc65b74f",
+ "targetDigest": "55f6c27aff7e486808c9b98912606fc67d48eb6685d1e2f2761cf65bed594997",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers managed animations and removes them when no class references remain -> packages/compiler/tests/css-first-core-execution.test.ts :: lowers managed animations and removes them when no class references remain. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "306f088189e9ed98a927a5e272a1b82aa2bccb9b7f32a26dd74cf0b39f5103a3"
+ }
+ },
+ {
+ "sourceId": "rc87-73bc4a85932a4a25",
+ "sourceDigest": "f25aed4b10be7bc32a45cd3d9c2a5555d6185afa74e4a276f3dabf2548e4edea",
+ "targetId": "rc87-86ca35133d982e44",
+ "targetDigest": "a0bef2421ebf8aaa1b877f429552019639fe396af752775fb246af6b31f6cb8f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers color variables, mode values, aliases, and alpha references -> packages/compiler/tests/css-first-core-execution.test.ts :: lowers color variables, mode values, aliases, and alpha references. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "11c56da81c899d6f4e6108e4bac5de1534c8de9c585c4693d044e60711426423"
+ }
+ },
+ {
+ "sourceId": "rc87-e0381c6da6c8dc76",
+ "sourceDigest": "ec8c378826a08cc4f20c57fa34aa29c16fba277e60c9ca321b9ff0b6f35a9497",
+ "targetId": "rc87-61f5ceb3b7b3873f",
+ "targetDigest": "4d179783e4b01d8d049dbf0f991ccd5e38fa1b8f817c72f9ef72c486a0ea4943",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: resolves built-in and utility-owned theme namespaces before lowering composed definitions -> packages/compiler/tests/css-first-core-execution.test.ts :: resolves built-in and utility-owned theme namespaces before lowering composed definitions. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "de86e83f318b22234aa079d9d004fc133f577ca0bf8cda7b4bedf70f65e034fc"
+ }
+ },
+ {
+ "sourceId": "rc87-9095f2fd8e3e5c57",
+ "sourceDigest": "1c038e0a1c9209d8e3f612e1e525dff989c10e7c07557c37183d732cedc6ec92",
+ "targetId": "rc87-47269d16db9c434b",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers unquoted compose class lists from raw source -> packages/compiler/tests/css-first-core-execution.test.ts :: lowers unquoted compose class lists from raw source. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire Compose lowering/expansion-order or refresh-count behavior with the removed lowering implementation; native ordering and removed-directive diagnostics have separate Rust and native/Wasm coverage.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "1534f4271f7489d8861e38c391bb8cfc83d317eb98aca1487fdecd220cce0b3c"
+ }
+ },
+ {
+ "sourceId": "rc87-de39e31d6ce721f6",
+ "sourceDigest": "3689c5b048f51ca6cbfc3e8b47813dc1b86f7639ec9197da7e0850aaf9e6b8c8",
+ "targetId": "rc87-508a868dcc7d87d3",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: refreshes once before a managed compose dependency -> packages/compiler/tests/css-first-core-execution.test.ts :: refreshes once before a managed compose dependency. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire Compose lowering/expansion-order or refresh-count behavior with the removed lowering implementation; native ordering and removed-directive diagnostics have separate Rust and native/Wasm coverage.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "06138c8aa7a371ca5e280a815cdcfe809b067289db0e8bf088172389f73f192b"
+ }
+ },
+ {
+ "sourceId": "rc87-4a2b41936f34b21c",
+ "sourceDigest": "f35486b415d9ea7e567a8d27db7e3f77ddce1452333003832e90ec7df3472dd0",
+ "targetId": "rc87-6ad281259cdea335",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: refreshes once for a multi-dependency managed compose group -> packages/compiler/tests/css-first-core-execution.test.ts :: refreshes once for a multi-dependency managed compose group. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire Compose lowering/expansion-order or refresh-count behavior with the removed lowering implementation; native ordering and removed-directive diagnostics have separate Rust and native/Wasm coverage.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "2bd0119baa70839a1a613a42eb641485750f78896778aef752e3534f9abede68"
+ }
+ },
+ {
+ "sourceId": "rc87-10ee6d1ffa4e2ae5",
+ "sourceDigest": "33557b4ced3d08cdbcb8c703a56b624b7d7b773b14cbe94fec4f81066109a325",
+ "targetId": "rc87-1c89d39168c10bb5",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: refreshes pending managed definitions before native compose -> packages/compiler/tests/css-first-core-execution.test.ts :: refreshes pending managed definitions before native compose. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire Compose lowering/expansion-order or refresh-count behavior with the removed lowering implementation; native ordering and removed-directive diagnostics have separate Rust and native/Wasm coverage.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "57a72fee034db3ce36b4a66f7e186da6641afaf9c0b30d7bf4e762ca47b3ea7d"
+ }
+ },
+ {
+ "sourceId": "rc87-97a879e4593a9505",
+ "sourceDigest": "1df44c37ae32a2bc325e26d00afa3b6a81b4d120835755cc299c0c1d229be445",
+ "targetId": "rc87-49bff4bc61b57aea",
+ "targetDigest": "8629795c14caf4272d14f01b7be7cda5899373392ded25288f647787439b62f8",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: rejects quoted and grouped compose class lists -> packages/compiler/tests/css-first-core-execution.test.ts :: rejects quoted and grouped compose class lists. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "80c26653b69b8d8cd38f69321277fb36025a5af2515f38b89581e23da645e080"
+ }
+ },
+ {
+ "sourceId": "rc87-e5b18e5b1e1d7ea8",
+ "sourceDigest": "b248e0901b0414035e52e9182b6d894db84d3d342a3c5a99b6f3066d367f98cb",
+ "targetId": "rc87-c3ff2e816462e101",
+ "targetDigest": "4e83a0739f37df18cc7df76933925a302d36d353130294743a3846c71f1f6509",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: executes CSS-first number variables and native value functions through engine semantics -> packages/compiler/tests/css-first-core-execution.test.ts :: executes CSS-first number variables and native value functions through engine semantics. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "cd4b6a59846bd10d3fa4a92988600e9022d2dcde1e486ef22e662dd8734a5b4f"
+ }
+ },
+ {
+ "sourceId": "rc87-6e9b0547f7b98e4a",
+ "sourceDigest": "ceb68e6d3c75032d58b903fa3fa8edb2ccf755a5bd1218da88aeee8336090386",
+ "targetId": "rc87-9d104e2894cff55d",
+ "targetDigest": "88e8f14f0fe41b1ac25b70bf59d6aa34a4524068f2a5d48d723d23dc8364cc92",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: executes CSS-first unitful numeric variables without double conversion -> packages/compiler/tests/css-first-core-execution.test.ts :: executes CSS-first unitful numeric variables without double conversion. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "5ae76c99ef1b25e7f6436139d74c278470f79bc22b0bd128f12dbe2f080493d5"
+ }
+ },
+ {
+ "sourceId": "rc87-0aba2efeb424c147",
+ "sourceDigest": "a05db3c282d72bfdee4ffa6f0cff432e99accb149f570acecc292dd95c10db88",
+ "targetId": "rc87-54a31f8abe5359f4",
+ "targetDigest": "220aa4ba6c14227f77caa072fc85a36d41eb0e69baf3fc2db6715402d669908b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers inline theme variables without emitting their own theme rules -> packages/compiler/tests/css-first-core-execution.test.ts :: lowers inline theme variables without emitting their own theme rules. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "528adf56b594f9663bf577057b1a8cfce921b7e94994fe8b55440a6c99f4d2c7"
+ }
+ },
+ {
+ "sourceId": "rc87-60b1f716859ca953",
+ "sourceDigest": "c0f565703887a390f36a50042ea256719bf39406c6d8ad6317ef872081bea6ac",
+ "targetId": "rc87-c998ae2b052bfa29",
+ "targetDigest": "2f784486fdef3f30fadbf4f91a93923da412394b5cc7986f2ea36971acf7ed79",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers static theme variables and keyframes into initial resources -> packages/compiler/tests/css-first-core-execution.test.ts :: lowers static theme variables and keyframes into initial resources. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "5a60bb95a594c0cad54b954cc416cb6e2eae70d32895696f9c1deac549ec81cc"
+ }
+ },
+ {
+ "sourceId": "rc87-a479c2cb69cb5caf",
+ "sourceDigest": "1a5f95a62d2e54bdeb6a31a75216345e91e81b864e7a2485feb2f5d9782d7426",
+ "targetId": "rc87-d315621d52fcfe2c",
+ "targetDigest": "78b91e1678db33a7e333bfdf179100cbfe1768aa2556b82899764a27fcfd9e3d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: normalizes CSS color functions and preserves alpha alias dependencies through CSS-first lowering -> packages/compiler/tests/css-first-core-execution.test.ts :: normalizes CSS color functions and preserves alpha alias dependencies through CSS-first lowering. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "08d4e9e1e53798caa0b301fe5d7e14ace5215a6427c5e44e2b6579d195c74bba"
+ }
+ },
+ {
+ "sourceId": "rc87-68e5ef2fb20016d4",
+ "sourceDigest": "1e2b33500e55816e3d78c2b4e068d25d80f51dcb699522039b721294520add34",
+ "targetId": "rc87-a38ee56f287029ee",
+ "targetDigest": "c5dfd7d2271f755c47e3f1c44d038b860fa24b559d5e02f17a8cec581ae7e90a",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/stylesheet/style.test.ts :: uses the managed CSS entry config and native CSS sources -> packages/compiler/tests/stylesheet/style-output.test.ts :: uses the managed CSS entry config and native CSS sources. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "7836f99539ad65fbe7872c73d6bd4d55e4a1a5be874fa6d466c65e84a4c4a67e"
+ }
+ },
+ {
+ "sourceId": "rc87-541c5b0c6e0b47d9",
+ "sourceDigest": "512225e8a6b957154714863b9fcf26e71ff370ec8e600b61cf4f20393dd7dde7",
+ "targetId": "rc87-93d062d388ddf5bf",
+ "targetDigest": "eca94a2d7b311b7871d8fbc3e75cf384f61c2b30fd01a8ff13f55007e6984b71",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/stylesheet/style.test.ts :: does not preload inline theme tokens -> packages/compiler/tests/stylesheet/style-output.test.ts :: does not preload inline theme tokens. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "967df7d4430f249614ea3c438eda68e46e16b462951f9b40a9d5d2e37a24ee4c"
+ }
+ },
+ {
+ "sourceId": "rc87-f14125a6e96736c0",
+ "sourceDigest": "c431b4b389d66c7b3c4056fc224b7400a6b7b76f685c5fd20759e813498db1ad",
+ "targetId": "rc87-414bd30d2442b401",
+ "targetDigest": "81eefeae8a2ac840ffdc9025668622baf7a864170a2c60d0ff36fee38588687d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/stylesheet/style.test.ts :: preserves native CSS when a Master CSS import root opts out of pruning -> packages/compiler/tests/stylesheet/style-output.test.ts :: preserves native CSS when a Master CSS import root opts out of pruning. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f99e15fdd3c86c2e74f4b3633dfc73a82d465966f6189274cd0c7295fc315650"
+ }
+ },
+ {
+ "sourceId": "rc87-c709d394d3355b26",
+ "sourceDigest": "4fcf14196209baeb82e7cc42a6f689af45d4359647c1bc4813ff01dfa92b161f",
+ "targetId": "rc87-ac395974dce68384",
+ "targetDigest": "3f4f76eb7d1c4087a6b3d6a9914a3b08f240ea0988981a83d935e76bcb69ac84",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/stylesheet/style.test.ts :: preserves imported native CSS when a root graph opts out of pruning -> packages/compiler/tests/stylesheet/style-output.test.ts :: preserves imported native CSS when a root graph opts out of pruning. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "04b8312a7003e7f0d6595123680fde125fe8d3b422e57a87005e08ebbd2acbbb"
+ }
+ },
+ {
+ "sourceId": "rc87-f411802a6c7a48b8",
+ "sourceDigest": "f3b5a27854985a602a278394fa7b6375c6d41f86537a6731359702066dbba5bb",
+ "targetId": "rc87-99ba8f3f22781fc9",
+ "targetDigest": "b7114ab8381cff7ba1b6481dad561ca93ff91fd9712de706a3a4dd63bb054068",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/create/tests/setup.test.ts :: plans TanStack Start Vite projects before generic React -> packages/create/tests/setup-frameworks.test.ts :: plans TanStack Start Vite projects before generic React. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "41dc10c3a8d44b3e43ef5a76c728c6c25291cf26d1a3a2ac605d0e50d4261150"
+ }
+ },
+ {
+ "sourceId": "rc87-c74ec73a3a553803",
+ "sourceDigest": "487ac9ed6033ebc835fe2746ab4d65493c90cc5d00fb7772d9cade9c0bad3aa4",
+ "targetId": "rc87-9079ec8a716cd977",
+ "targetDigest": "90bc8c28245b7837787e8ba94a979bffdb531b6b0ff96763fb9e5fe2bec49503",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/create/tests/setup.test.ts :: plans Angular projects with runtime setup -> packages/create/tests/setup-frameworks.test.ts :: plans Angular projects with runtime setup. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "0f20218b560941d78081a39be38868c436959586fd56a48eb63ba04323554bdd"
+ }
+ },
+ {
+ "sourceId": "rc87-12e7c854b56d72b1",
+ "sourceDigest": "7f35e07e299dd9e2205d9ef8e953da3d4da6054812033dcf2291eccb22b5dba5",
+ "targetId": "rc87-e2ed974b1ddd5b9e",
+ "targetDigest": "098fcd5bbc5bade10fbce1838c07b2b4f26f53d468c6dd3a33f7b2e9920c3d4c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/create/tests/setup.test.ts :: updates existing Next.js config wrappers -> packages/create/tests/setup-frameworks.test.ts :: updates existing Next.js config wrappers. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "783a2a5f907d03a0668fc7cbb89160ca9d8c223a1e1def7cdb2291797c91bcb3"
+ }
+ },
+ {
+ "sourceId": "rc87-45a00cfd1a5d7148",
+ "sourceDigest": "72892b67e97140b070ccbcf5b67c90a762e1b37fb93f4f2e5fe1151de6a1ed70",
+ "targetId": "rc87-da509ee82b6d38f5",
+ "targetDigest": "01274e90d3f1a8320edeb3782ac2dc8089d72e8506a2ae4ec8321738f1e84093",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/create/tests/setup.test.ts :: rejects rendering mode for unsupported setup targets -> packages/create/tests/setup-frameworks.test.ts :: rejects rendering mode for unsupported setup targets. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "23ef244e1c0b8b925b4adde3a627144a59b510e09a45e7f6cb85fa54d6bf5a68"
+ }
+ },
+ {
+ "sourceId": "rc87-e411ffd69b91ac22",
+ "sourceDigest": "1e56b74b934b3410027ef789da4a1a736b987ce40243391f2df2a7a22fa79fef",
+ "targetId": "rc87-93af2958154d0d1f",
+ "targetDigest": "9d23d2fdf0fc4b0200c2b419eb001011d4108293ff9267d510b345925230c5b2",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: progressive hydration with a mismatched manifest rebuilds with runtime CSS -> packages/runtime/e2e/hydration-edge-cases.test.ts :: progressive hydration with a mismatched manifest rebuilds with runtime CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "e99b5fe8148f4b5bf55bb413efb2f1bad645bb59665fe5bca079169709ba55c6"
+ }
+ },
+ {
+ "sourceId": "rc87-2696f0fa56a7c5d4",
+ "sourceDigest": "42b30fdb924eb54de1976ee5ca38cbf62d684927ad6ca3980d6c45b4d518b9b3",
+ "targetId": "rc87-99f67a67e5155f1a",
+ "targetDigest": "5f70f0d7e0fa3ce5a1554398311ddb90a08f11da1303785acc33b0b01b1afa96",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: progressive hydration with an empty manifest rebuilds with runtime CSS -> packages/runtime/e2e/hydration-edge-cases.test.ts :: progressive hydration with an empty manifest rebuilds with runtime CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "b15699cc1f0bc9c66776f25772a1cb4f82161cbc4ae35557317ac0e539f749f6"
+ }
+ },
+ {
+ "sourceId": "rc87-732d95da653fd58b",
+ "sourceDigest": "664dde1f200bdb4682a352f2eaf577bae6e8e9d3c7e557c200864d1893e085b5",
+ "targetId": "rc87-4146e1c67cb5ed87",
+ "targetDigest": "3cb1c7a1bb0929c99db76960bb9ca81400ee6948ba9f3dc2bfcf7c1365723a30",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: progressive hydration uses hydration manifest and retains removed hydrated classes -> packages/runtime/e2e/hydration-edge-cases.test.ts :: progressive hydration uses hydration manifest and retains removed hydrated classes. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "cb65590fbf149adfba87cb53d487eedbce645dfcc891efdfdc3ee01210a3a4c1"
+ }
+ },
+ {
+ "sourceId": "rc87-430cf2445a3a99ba",
+ "sourceDigest": "40c713c41d230220cf249eb8b1d6786b4f33b8579871ce716ed4406a042f1e76",
+ "targetId": "rc87-dd785f5a00080d1c",
+ "targetDigest": "98d4af3e15e524882d0eb43fbccb41329ce9a1b38522bb845a71041ccc3aa9fb",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: progressive hydration imports an external style hydration manifest -> packages/runtime/e2e/hydration-edge-cases.test.ts :: progressive hydration imports an external style hydration manifest. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "ce87737d9f84536f8bae8ef1a8cacf2154c631ccce2800c80c69e7edd017155b"
+ }
+ },
+ {
+ "sourceId": "rc87-e9921559bcdcc602",
+ "sourceDigest": "50e104544dfebccc46dfd26184113b054908e813d9eb62ed9066cffd7fd76776",
+ "targetId": "rc87-5bd3bd774f2c4703",
+ "targetDigest": "e1bd52902099bc5ef432080bb1766ec2f56fbed98188b9891a8c82af54a3f5cf",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: explicit hydration manifest wins over external DOM discovery -> packages/runtime/e2e/hydration-edge-cases.test.ts :: explicit hydration manifest wins over external DOM discovery. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "aa229d29eafd90e8cce5ba00e826841ae82e07d4bf1eb56a3dfbfa329ec55055"
+ }
+ },
+ {
+ "sourceId": "rc87-3f337089de44b759",
+ "sourceDigest": "7787a60a62733e6195291720952f34d8ee0bdd09f09d05a958950c2ef3454d95",
+ "targetId": "rc87-820ed52581c5186c",
+ "targetDigest": "548bf45a2068af0ed45bf5947fd429277516fee60df26dbc4ccb1cbb2585b8b2",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: progressive hydration matches bucketed theme variables -> packages/runtime/e2e/hydration-edge-cases.test.ts :: progressive hydration matches bucketed theme variables. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "384267ac3d3c68d032bb639d7d08685e7b3701863e7849f58d63a39749fe0452"
+ }
+ },
+ {
+ "sourceId": "rc87-2ae476ee747fc6d7",
+ "sourceDigest": "f7b9e2e8bdee7f72709954dcd90c58e5405cd406f5f775eb827072c01875da56",
+ "targetId": "rc87-56ba13b0f3001a60",
+ "targetDigest": "90d6b1890baa6753cea33909b550c96b79ec0b61015f2cf17146201c6d29f15c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: removes shared alias variable dependencies when classes disappear -> packages/runtime/e2e/hydration-edge-cases.test.ts :: removes shared alias variable dependencies when classes disappear. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "c79227b715d4857cbab684ee21f13a70cdfcba0720a55b0e99cf36c0b7b53fed"
+ }
+ },
+ {
+ "sourceId": "rc87-6224a90501ed606d",
+ "sourceDigest": "853607bc97d2402f3d9641b535f1e15dbe54a62454903512b6b55c1052ce0453",
+ "targetId": "rc87-57df4f677d5a9520",
+ "targetDigest": "ae6cc5e65a9fd208e8c3919f14c8a5936432b461131cd19e85d17cb2be868111",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: inlines variables without runtime theme counts -> packages/runtime/e2e/hydration-edge-cases.test.ts :: inlines variables without runtime theme counts. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "69dd55386402b7fc97770cf27cbfb821d5520192cc1a16631484b9447f8c9d4b"
+ }
+ },
+ {
+ "sourceId": "rc87-b04c04131bf97f5f",
+ "sourceDigest": "076552e3785dfc1f28b17f665792e04a100dfa32901899d39bb08046fddaa79e",
+ "targetId": "rc87-b0d4a6a4453fb277",
+ "targetDigest": "706a50c63c5694da42d93b39ba1959eb32cabb7c91cb3c7521cba6a3aa9ade28",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/webpack/tests/plugin.test.ts :: adds managed CSS import graph as virtual manifest dependencies -> packages/webpack/tests/plugin-runtime.test.ts :: adds managed CSS import graph as virtual manifest dependencies. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "4061950ae36f82f4406f3906b7f9d1b634bed38253a396f58994c25cdd3053d0"
+ }
+ },
+ {
+ "sourceId": "rc87-59fa6e066daa5b41",
+ "sourceDigest": "5d351cddc52f9c442504b29e8ffa05627bbb93ac480d88fc5d3ccebfe30091db",
+ "targetId": "rc87-dc35f7170131e48f",
+ "targetDigest": "59118a7359f28f2db016bac7b037da05c485d347c555db1d34b20d2e7ed54ee1",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/webpack/tests/plugin.test.ts :: includes package base CSS for managed package imports -> packages/webpack/tests/plugin-runtime.test.ts :: includes package base CSS for managed package imports. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "d59ac6995ea65114f5f702409ed8523a0a18a937cef9ba898e4c67896cf7d15e"
+ }
+ },
+ {
+ "sourceId": "rc87-4eaffae5c3984d01",
+ "sourceDigest": "1da3187b3f8f63477a2c0d1871276e1e8e3da0d34edb560e27f5822137221e8d",
+ "targetId": "rc87-e7d134890a94e6d9",
+ "targetDigest": "a491a165eba005ec99a62a7f48a237e6bb33961f8afd9876e120e8f3e5b9f3bf",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/webpack/tests/plugin.test.ts :: keeps managed CSS fallback reset dependencies after failed style registration -> packages/webpack/tests/plugin-runtime.test.ts :: keeps managed CSS fallback reset dependencies after failed style registration. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "429ad5cd1c84587a8f3f178b061fe7b2fcf079ddae5f304631ba03d21a441fa5"
+ }
+ },
+ {
+ "sourceId": "rc87-b5c5944a3a9610da",
+ "sourceDigest": "0782ced5abc27d2041e0e169cf7d508561b50b56aa2cb786e01606e238c28ab0",
+ "targetId": "rc87-9b20bf9cb7a80c61",
+ "targetDigest": "740393df87f6f2c65d5c03abf2bd1930e926676d2147e3b2b2c499e9cc3a0759",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/webpack/tests/plugin.test.ts :: resets scanner when a managed CSS import dependency changes in watch mode -> packages/webpack/tests/plugin-runtime.test.ts :: resets scanner when a managed CSS import dependency changes in watch mode. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a48fe43f9a619cf94b57189267b9b9e685375099a2b31c3a54250734265ccae7"
+ }
+ },
+ {
+ "sourceId": "rc87-2ecb3e7e15dd3029",
+ "sourceDigest": "b1effb786b4dc7ea737e4ed3cedeae80e7f9f2c75f9964981ec10da9b95c63c3",
+ "targetId": "rc87-61248027460947bf",
+ "targetDigest": "e671c07f4df0c0d4176f7bb624684d03a4c5c8f334f5cc3b8bf76bdd84279208",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/webpack/tests/plugin.test.ts :: registers reset dependencies with the active compilation -> packages/webpack/tests/plugin-runtime.test.ts :: registers reset dependencies with the active compilation. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "d996bb6b707dc1184dd1ec35097b1c03787e0b6389acbfbc76ded9b7a18449b8"
+ }
+ },
+ {
+ "sourceId": "rc87-50dcf376e94a9488",
+ "sourceDigest": "a60aee202e24ccd3e183f79dab3247726c6f421a12b8d178687e1b7b4f6c9469",
+ "targetId": "rc87-c20408a4ef84b2ca",
+ "targetDigest": "d54350752a96e296354b2674634535133213c23e5de8a9d4c68f9aa9d90b1a37",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/webpack/tests/plugin.test.ts :: finishModules.tapPromise awaits all scanner.scanModule() calls before resolving -> packages/webpack/tests/plugin-runtime.test.ts :: finishModules.tapPromise awaits all scanner.scanModule() calls before resolving. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "72cea9a98cae01939a0f25735a17e8be5041d8fb35622635e372565f2b452673"
+ }
+ },
+ {
+ "sourceId": "rc87-1a9fdd25ef07d349",
+ "sourceDigest": "effe9377a3b16b9f126db73ca94806b8eac215d3594a87f2752ea3dfd1e838a2",
+ "targetId": "rc87-2195cea925037a1a",
+ "targetDigest": "12f2e7d049265a7521fdb064f19b8df0cf0a05cda2e13765d2513624010359ee",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/astro/tests/core.test.ts :: defaults to progressive mode -> packages/astro/tests/core.test.ts :: defaults to static mode. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "0e466bca431e3d23f4c0a1b0f83e57890a23c5eef733d6e27a5b36dc3ac106b3"
+ }
+ },
+ {
+ "sourceId": "rc87-40029968737ebd2f",
+ "sourceDigest": "b8b9a8503444741ff61bc99e091a026d966c12b1dbcea70299ab713a552846ea",
+ "targetId": "rc87-78177b9621c7bdd8",
+ "targetDigest": "0c9843f30360d95ffcd6fdbaa8a00b9ea0dd6cea1a8dfa8e5715043ae233bb53",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/astro/tests/core.test.ts :: honors runtime=false in progressive mode -> packages/astro/tests/core.test.ts :: rejects an explicit runtime option that contradicts its mode. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "8765830ba25f5706e35646abbae8446ac7dbaee9f86787bb3112fb00e2f4fe38"
+ }
+ },
+ {
+ "sourceId": "rc87-a0fbed40746be454",
+ "sourceDigest": "df85aa3ef403399b8c217124fd00d377973818f78d023d2525c87670883717e6",
+ "targetId": "rc87-9b7ccec53a85e8c4",
+ "targetDigest": "3d3cfe7c8d6affd572f5fe04262dd72159e885c494042ea8371e409b3397bb2e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/cli/tests/core.test.ts :: reports stylesheet entry errors without hiding scanner diagnostics -> packages/cli/tests/core.test.ts :: reports entry errors without inspecting against a fallback manifest. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "2c700e45e0f0645ea1264480f349e4524b91e0e39e9b042632904dae2de28f38"
+ }
+ },
+ {
+ "sourceId": "rc87-e313a21fe3a417c3",
+ "sourceDigest": "1d13dcbd75e5d4395681c580c43dea32a13cd65812c656eacf5ea467fc4fe0a2",
+ "targetId": "rc87-2c4b5d9e404c2f65",
+ "targetDigest": "805b741dd5736ac396981b7f96efec60c2a2e6e4b6188a9bbfd85ab02fa809e8",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers managed dynamic colon entries without restoring fixed keyword aliases -> packages/compiler/tests/css-first-core-migration.test.ts :: lowers separate named token and raw parameter entries. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "9b0ee6db0c5e9e8e0f70b497f9b4cf78fe41a789a0e916ade02346b3f2b7aaea"
+ }
+ },
+ {
+ "sourceId": "rc87-e350ddb11d14db44",
+ "sourceDigest": "be8a72dcfeea39814dec91b5807a8f6f3ba3fbe32f5e6f274daf31eacc377ce2",
+ "targetId": "rc87-c780431640b60780",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: keeps compose canonicalization rewrites output-equivalent -> packages/compiler/tests/css-first-core-migration.test.ts :: keeps rewritten compose blocks in their authored condition order. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire Compose lowering/expansion-order or refresh-count behavior with the removed lowering implementation; native ordering and removed-directive diagnostics have separate Rust and native/Wasm coverage.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "8b1d4895047e9cb2461f064bd0b3a4925270dca0540fd3621d5c308c18e63789"
+ }
+ },
+ {
+ "sourceId": "rc87-67f9d6a7675a0bf8",
+ "sourceDigest": "82c85b1f358d3b5eac3aa53f3d79fe436b71bee6ee73388eea4ddab3e7a3d43e",
+ "targetId": "rc87-3ff3d5483ac3d7d8",
+ "targetDigest": "df2bb1525e1123b90025153822aed01ce99a89337d787b8519a238a7787eb061",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: keeps base declarations before matching responsive declarations -> packages/compiler/tests/css-first-core-migration.test.ts :: keeps authored responsive declarations before later base declarations. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "7f0dbd170dc1a4a372ba6318cbeb6f353c06162b2319d8d37008fbf9e4887dbe"
+ }
+ },
+ {
+ "sourceId": "rc87-3f8dd60040b3044b",
+ "sourceDigest": "dc3ecd2a209d3e4614e1e0819399a4063907767558ae06d3e779945c19953c47",
+ "targetId": "rc87-0c53862b26319af2",
+ "targetDigest": "6424504fa7b6b3e15381ac10b00866e94a7ef7ca8d4424a7337595c7f238f7f5",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers class mode defaults without the old JS Config API -> packages/compiler/tests/css-first-core-execution.test.ts :: uses explicit base values and mode activation without implicit defaults. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "804936fd9bbb3b6ef418d30088abf34e94422b39b4c5bf9f0070c224b94cf54f"
+ }
+ },
+ {
+ "sourceId": "rc87-aae0aea5b22c6c94",
+ "sourceDigest": "10c85eae5d8d3a63f2ca26960d97f5069f446ce750f51d1d02be04d561f81397",
+ "targetId": "rc87-95bd401346e17973",
+ "targetDigest": "74673840449e561df6a0a9cd43959780fe7ea2d83a3bd140561beda2eeba484e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers stylesheet --alpha() in theme, managed declarations, and native CSS -> packages/compiler/tests/css-first-core-execution.test.ts :: preserves native --alpha() in theme, managed declarations, and native CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "87edf19b453525ec489300029a10078b024b0b4b83bde9b084642764503bdff6"
+ }
+ },
+ {
+ "sourceId": "rc87-17e43f06166d1338",
+ "sourceDigest": "4ed40ea15f1fc70534c96ef746dc6dc36f57c217e329b32991f9dd3b37b2ba1e",
+ "targetId": "rc87-6a37ead5bfec5da7",
+ "targetDigest": "473784a149976289cafee6a4e480c44dd1f4aeffd73f592e73941d04356e095e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: rejects stylesheet token alias syntax and invalid --alpha() alpha values -> packages/compiler/tests/css-first-core-execution.test.ts :: preserves arbitrary native function arguments and custom-property data. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "301fd4f27eeca02de7af202002629a854d94b9563c3dbe8b1fb7b35c743d1c28"
+ }
+ },
+ {
+ "sourceId": "rc87-1e6aecd4b86c8315",
+ "sourceDigest": "f8346de9359f85eb5438cec2939affcab25014bb7ca2278b204e7497fd2c127e",
+ "targetId": "rc87-fe6a24b7a29edc35",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: batches independent managed style refreshes before native compose -> packages/compiler/tests/css-first-core-execution.test.ts :: reuses native declaration seeds before composing independent utilities. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire Compose lowering/expansion-order or refresh-count behavior with the removed lowering implementation; native ordering and removed-directive diagnostics have separate Rust and native/Wasm coverage.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "74a6a74a7a9caec35e1f9a2027a92f158b07fa570cae861192a9b2497a8d039a"
+ }
+ },
+ {
+ "sourceId": "rc87-6e81d63acffb4178",
+ "sourceDigest": "5efa36bf57511763088a265c0a53af2c9cb078c3d4cf95585796bc406ea92324",
+ "targetId": "rc87-974acf676a480923",
+ "targetDigest": "9ef50940cf8caef486ef9109576a23038ed6c83513e0f8dabaf76d63bdaf6bd3",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/diagnostics/index.test.ts :: reports stylesheet entry errors without hiding scanner diagnostics -> packages/compiler/tests/diagnostics/index.test.ts :: reports entry errors without inspecting against a fallback manifest. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "1f98023ae1fbb8fdb475fae1a7559472e1a920b444ed75dfc1e35e9da56d02ca"
+ }
+ },
+ {
+ "sourceId": "rc87-680872391aab0c97",
+ "sourceDigest": "bbae016feca0c506f32c584c5511e8a8730ac77c4fac86df6b023bd8c90d6d06",
+ "targetId": "rc87-0378ac978a15ae59",
+ "targetDigest": "67d68bc6c46d23a2d0969a24313c5e6d5d73726a4db093831daa909c8df4324b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/stylesheet/browser.test.ts :: propagates directive warnings -> packages/compiler/tests/stylesheet/browser.test.ts :: rejects undefined theme modes with a structured diagnostic. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "09323f9df3fd27b7882e688abada5e93dc3a7fe77f4fc4470bd7e32f21f99ddb"
+ }
+ },
+ {
+ "sourceId": "rc87-fd3760b78ae36986",
+ "sourceDigest": "fea1388c83e7bf61c41f1cd354d6f52da799adec4307d98542bcc09b4debb4f3",
+ "targetId": "rc87-472e99bf07315db8",
+ "targetDigest": "95d455d90d5162a1c050632287ce28fa98a1e1bcd1d60836dc89d4c90c2022a6",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/stylesheet/style.test.ts :: emits theme variables referenced by compiled stylesheet --alpha() values -> packages/compiler/tests/stylesheet/style.test.ts :: emits theme variables referenced by native stylesheet function values. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "8473f9df82d5cabbdc98913c1a90669f6211400367e12be6d653b4a84c426538"
+ }
+ },
+ {
+ "sourceId": "rc87-866deceef803b573",
+ "sourceDigest": "d719e6bebc23dcfd8ccf2078208cd65ef07c9c6f36494903228f027d8160d90d",
+ "targetId": "rc87-be28ac921969baea",
+ "targetDigest": "62d04ce3db8fcb2a6ea20441279cb70f4f2f01928c9a98df472abbc2cce02f5f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/stylesheet/style.test.ts :: prunes local CSS imports from Master CSS import roots by default -> packages/compiler/tests/stylesheet/style-output.test.ts :: prunes local CSS imports from Master CSS import roots when explicitly enabled. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "76579c1972d8a291790bdf6ce340ad768331923048dfdfcdf569c628f16c34c9"
+ }
+ },
+ {
+ "sourceId": "rc87-557cc8c6feafdaec",
+ "sourceDigest": "b100d8561bdf8f16f335d4c69dacd8476f87cad807b5f4356aacfe020657bcb0",
+ "targetId": "rc87-56d44cf30066e05e",
+ "targetDigest": "4b7b274c025365429c64ade57a006f91e25a2dd116178f3ae33bfa4e56f8aec8",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/create/tests/setup.test.ts :: plans Lit projects with runtime client types and shadow-root setup -> packages/create/tests/setup-frameworks.test.ts :: plans Lit projects with static shadow styles and no runtime dependency. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "96e352199bd1157adac28a9012d9c4d66eee818a73897442ab03103390e9066b"
+ }
+ },
+ {
+ "sourceId": "rc87-2fa1682486ebcf8c",
+ "sourceDigest": "e7187843a68de3bad508bda887d786c23559a288711c97587ff1fdf2f700b18e",
+ "targetId": "rc87-26a0fc70a4fe84a2",
+ "targetDigest": "0c81536fd07fe53affba02b91eacb6101b910de445b6767c34b6119edc3e5393",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/language-service/tests/shiki.test.ts :: defines deterministic TextMate grammar scopes for CSS directives -> packages/language-service/tests/rc87-shiki.test.ts :: defines deterministic TextMate grammar scopes for CSS directives. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "9c36e3f9cb11bc6c987d310d56256a5b060be9d16371582b4c7a52ac8cf96b69"
+ }
+ },
+ {
+ "sourceId": "rc87-50a6d8ef235beb32",
+ "sourceDigest": "4b7b0d0733dcf636f9e7d33646649a0d0ddb2abe549652b5428104a9dccb962b",
+ "targetId": "rc87-75bb3596f5f148b0",
+ "targetDigest": "354b739b9da65931bafc2e0b9100dffa14e82bf0038efc797fde28b0d449aa8c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/language-service/tests/shiki.test.ts :: registers a real Shiki TextMate injection grammar for CSS directives -> packages/language-service/tests/rc87-shiki.test.ts :: registers a real Shiki TextMate injection grammar for CSS directives. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "acd894ca034467216ff955d491a150e55f418e88114a1892bdd979cfa00c5372"
+ }
+ },
+ {
+ "sourceId": "rc87-829a1d4894486dd0",
+ "sourceDigest": "c2394a7d1b0af643094e28ff052d68c3850b977bd1df67bae2875be820fb64b8",
+ "targetId": "rc87-f1211f7319125596",
+ "targetDigest": "fda02e7fe62b04cf782009d7331fd772511b2b1699794f1d1131ec3b6a559626",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/dev-hmr-e2e.test.ts :: updates Master CSS without a full reload -> packages/next/tests/dev-hmr-e2e.test.ts :: updates Master CSS without a full reload (turbo). The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "5763c58349d63739c36aae24b32710b8db27b54b725d8f197219f2cf9ae80a8e"
+ }
+ },
+ {
+ "sourceId": "rc87-4c05d082c3d2b807",
+ "sourceDigest": "a546eec2a2bba89f1012b6c37f2e4fe1c8f7c43aeae0e0c7c8709f4a19498165",
+ "targetId": "rc87-5a257d5426586008",
+ "targetDigest": "8a1fe1b1006da9ba2b8abd218b1543cd9133bc7d5e10ab9ccbd4e0c6c43d1b10",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/next-config.test.ts :: sets up static mode with Turbopack rules without adding a webpack callback -> packages/next/tests/next-config.test.ts :: defaults to static mode with Turbopack rules without a runtime bootstrap. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f8a05689c3b40bdbe5af81eaeebd9d1fbe39d3969d1a8de7a91b72151f5c93a5"
+ }
+ },
+ {
+ "sourceId": "rc87-34f37c5dee8956d6",
+ "sourceDigest": "8039b43dda2a1e5694c892b718e4ecdc10621672e924a8b82c41adcc91f7b655",
+ "targetId": "rc87-58466113d7ef359d",
+ "targetDigest": "635d148b8503594cfeba08bc758b270b8afcef8013d830e772159fe2e3a46677",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/playground.test.ts :: imports the global CSS entry as a Next config module -> packages/next/tests/playground.test.ts :: defaults to static CSS without browser runtime assets in turbopack. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "307215c642bee09405b6c39c84aeeed9faefc7500444788224dd273d5fe3cefc"
+ }
+ },
+ {
+ "sourceId": "rc87-eacaf42de80ce6ab",
+ "sourceDigest": "e2f039bb9bb458e4656ccd9a8ab00e09d3f63f41430ef62ec049aec1ec7bc131",
+ "targetId": "rc87-94ae65a723c0cb67",
+ "targetDigest": "930dc6b227f4c7c2982933e868a9237b935cb4a966a6d4f190624c6b76e7c7f4",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/static-export-e2e.test.ts :: emits every referenced hydration manifest directly into the export output -> packages/next/tests/static-export-e2e.test.ts :: exports hydration assets and adopts them in the browser before dynamic updates. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "8f0354a852a3a98a209ada82061168d4e3c0262022b79bd9d06802e8771b86f1"
+ }
+ },
+ {
+ "sourceId": "rc87-7124a1251a981322",
+ "sourceDigest": "689c901d2937b01494067398ba7acfb96bd5cf932c3f0caa18a49e6e9e452669",
+ "targetId": "rc87-bef21052a908494f",
+ "targetDigest": "727b1c146bcd589a616ea93ee1f2c18fb03e7391afd7c638bae68c5d4cddcfaa",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/static.test.ts :: adds output and managed CSS entry files as CSS loader dependencies for dev updates -> packages/next/tests/static.test.ts :: tracks original inputs without adding generated outputs as watcher dependencies. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f5c55f9c2e71786b126b23bade3844abd37458e83612b58a871962a6caad6c9d"
+ }
+ },
+ {
+ "sourceId": "rc87-f647fa76fa45bb93",
+ "sourceDigest": "5298e7c41a13d65202cf331f67991bf7e30f0fc14a37fa28b2a4d90ed60e2076",
+ "targetId": "rc87-9fbde6cb16daf403",
+ "targetDigest": "077a45c29b8b2252440f9e50994c4097d868b211dd52a9b01815c0e8772e2117",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/static.test.ts :: lets the scanner loader feed an imported module into the scanner incrementally -> packages/next/tests/static.test.ts :: lets the source loader publish an imported module while the CSS loader owns complete watches. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "63181488bb6540dfd1531f23d0c011804629385201545c7067e290372eee1e04"
+ }
+ },
+ {
+ "sourceId": "rc87-c936ed3d3cebc78c",
+ "sourceDigest": "81fd4e71b0f4ccb5ac5db14c843408b6537c6c096243344ab048951bf3aac1c6",
+ "targetId": "rc87-89d8170051967c64",
+ "targetDigest": "f0e0417ad659f7564b7207d906168a3902ce8633a64926843a49bfcf87e6d9d8",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/static.test.ts :: updates static CSS when Turbopack reruns the source loader -> packages/next/tests/static.test.ts :: updates static CSS when Webpack reruns the source loader. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "250ce6c29f8b2c5f1bc87e8ab2610b22f838703f4173b33eede49c97fed442f7"
+ }
+ },
+ {
+ "sourceId": "rc87-9028ebc1995bef78",
+ "sourceDigest": "a85f202cb3ba81862ba1b14f926c865e9c76777ea2b514bf21960b63c293cc5d",
+ "targetId": "rc87-d27f05ed9cd53a65",
+ "targetDigest": "79619598e3ec464ac1e1a016de3b8866f70fb5fe6714f2a9944b4ec03bd36f33",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/stylesheet-loader.test.ts :: derives native CSS from @master entry directives -> packages/next/tests/stylesheet-loader.test.ts :: keeps @master entry lightweight without importing package CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "ec1ef89beeb080939ac78b46b5e84a67ee1a2795d7790c09311d1ab14fc617d6"
+ }
+ },
+ {
+ "sourceId": "rc87-bdad67c1e43d1886",
+ "sourceDigest": "56c42de527875f8b76054bbe2bbef9a0d4e5eaee7a41890cb7f7541403f887dc",
+ "targetId": "rc87-0edd975cbfed3450",
+ "targetDigest": "21ff69ee9a48b1c808ba857d182dbd4844e19057186f6d7128c43cb51054da76",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/stylesheet-loader.test.ts :: dedupes referenced default theme variables already emitted by global CSS for page-level CSS -> packages/next/tests/stylesheet-loader.test.ts :: retains local resources when a discovered global entry is not guaranteed loaded. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "c3a08e411db44a92dccef8d5ac0bc3582ea7e36c463b5bd49786740b6e8eeb43"
+ }
+ },
+ {
+ "sourceId": "rc87-069973df7e52b6a3",
+ "sourceDigest": "553c5b10bed5644764116787a5deb4a95015872e42f9676744716d2598f39e30",
+ "targetId": "rc87-a8de2822faa035a1",
+ "targetDigest": "e0512488ee4f76a8b8877cb9647e54bb3241078f500255a63ac5c0fb615fdd61",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/runtime/e2e/edge-cases.test.ts :: progressive hydration matches theme variable buckets by key -> packages/runtime/e2e/hydration-edge-cases.test.ts :: progressive hydration rejects reordered theme variable buckets. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f5000cb9b15167774cae81c90e761dd1c922b2ac39b9da6761ee6714293c2926"
+ }
+ },
+ {
+ "sourceId": "rc87-24d1ba25ea426f17",
+ "sourceDigest": "ea31e9c9f578b759317605f1506b9fe200757b09a2a1be2fb241ac8f262355f3",
+ "targetId": "rc87-2aa23782268a878a",
+ "targetDigest": "0ebddf6a3ebf4f957e83da9b0ba317d5f1d7966cdd22158017b133c500753524",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/runtime/e2e/lifecycle.test.ts :: generates browser native declarations through CSS.supports fallback -> packages/runtime/e2e/lifecycle.test.ts :: preserves native declarations independently of browser support. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "80fad8659c416814a17674303b852478910bc483ec84c853ba111922bfe25caa"
+ }
+ },
+ {
+ "sourceId": "rc87-43ff1e405dc3ffac",
+ "sourceDigest": "b8c63034c67bbbf1ee22d53d24d15aa5252566eb8066ecbe737b1bca893c8f7e",
+ "targetId": "rc87-64997ee47e90cc48",
+ "targetDigest": "faea9e27f4626293d5900580917475319d5b439575c89f3ccb474718edb5dd80",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/runtime/e2e/variables.test.ts :: async ({ page }) => { await init(page, '', { variables, modes, modeTrigger: 'class' }) } -> packages/runtime/e2e/variables.test.ts :: async ({ page }) => { await init(page, '', { variables, modes }) }. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "39850a198a912540eda701f827a0ecdc9a0a0230d6ec83668e651cc6489133d1"
+ }
+ },
+ {
+ "sourceId": "rc87-3b5381fe7ffcfeed",
+ "sourceDigest": "c0c31660dfba9d9cf213172574f30f63f198c411ae76f82c5feb5cefb79793b2",
+ "targetId": "rc87-88346a45355ab2e1",
+ "targetDigest": "f8a424a36e68a81f5c7e0cd7ce3e45dd69d8f3b857c063971e26664008f44882",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/runtime/e2e/variables.test.ts :: sets native color-scheme on local class-triggered mode islands -> packages/runtime/e2e/variables.test.ts :: inherits explicit native color-scheme without an engine mode side effect. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "139d4db6a11ed2952f1e9cc77eea8e691fe15959fb89b494b3c9654471a32bb3"
+ }
+ },
+ {
+ "sourceId": "rc87-ef0bb430a248a76d",
+ "sourceDigest": "cf288e22c897ca82341ca61fe16338787bbec647e9538ce9a703a5274534e8c3",
+ "targetId": "rc87-40e3b0c260f5f759",
+ "targetDigest": "ec1d9f2fe2051712ff1580938847cfaf701c7e18180758a500154c338e7552fb",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/server/tests/test.ts :: renders native CSS declarations through css-tree fallback -> packages/server/tests/test.ts :: preserves structurally valid native CSS without a host support filter. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "05cdefae0d160c48de14daf8a606ebc056f0fc833bee11823de5fc13ec3f043a"
+ }
+ },
+ {
+ "sourceId": "rc87-4b87d4e154724d16",
+ "sourceDigest": "04b59723cc34da3e2f14b67305147b689a7489c705c1d3ed3a0cb9f3d618b8df",
+ "targetId": "rc87-b7f91194506bc386",
+ "targetDigest": "e0c321af4060b33842a41cbfb4df25dc444b221771394c7eb11fac83cfa74f67",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/tooling/tests/scanner/syntax.test.ts :: keeps CSS grammar validation in the host batch handshake -> packages/tooling/tests/scanner/syntax.test.ts :: preserves declarations whose CSS capability is unknown. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "b3787ba5011ba139a64f05437f27fd9f9a4926e2f65cf19e811b7d0e13af3887"
+ }
+ },
+ {
+ "sourceId": "rc87-47da29b9f3ee6f32",
+ "sourceDigest": "8c085a83cc6912c5e8144b8b0ea48d2feed63fa13dcae89769bf8bb1564931dd",
+ "targetId": "rc87-bdca23b6ed84c4b5",
+ "targetDigest": "735d4201f9d7f86cf2c70321843517f2a612d89f84be6a22b237d73a04bce3e7",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/tooling/tests/validator/test.ts :: validates classes through a Rust session and host CSS oracle -> packages/tooling/tests/validator/test.ts :: validates classes through a Rust session with independent CSS value checks. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "3c4c023f792179be2e6b4143e85258e97317950654c406640ceba9b4d510e8b5"
+ }
+ },
+ {
+ "sourceId": "rc87-92b7db2e09b4732c",
+ "sourceDigest": "3268c3102bae321068eebdadd20b597642b00d868cdd225fb980fe642f5c35fb",
+ "targetId": "rc87-fa2ad20a085f3178",
+ "targetDigest": "54f0adfe8b6fd78c604c9edaa7a894e6a46803269e44f0fd70f310b84ab118f1",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/tooling/tests/validator/test.ts :: keeps native declarations behind host support checks -> packages/tooling/tests/validator/test.ts :: preserves native declarations while reporting invalid CSS values. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "b2439bb77fd1849e99ed49e9bf6571f38ac7374929e1905fa7dbec6679ce9922"
+ }
+ },
+ {
+ "sourceId": "rc87-556cc73a1877ed47",
+ "sourceDigest": "fa906f1b647e4ea50cd12d7bc68f402a66413195e94df6324244ef16ee01f1b7",
+ "targetId": "rc87-31e4216d48a92883",
+ "targetDigest": "bf7280f2a78b4c604fb93fadeb467ede9747cb77be475c5e5fdc7a524364dfd7",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/modes/scanner.test.ts :: does not wait for Vite request idle during dev server setup -> packages/vite/tests/modes/scanner.test.ts :: watches policy files without adding dev import edges or waiting for request idle. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "89b37b73baca7db41322b5fd60092b3e8b1f3f5bbeedd11a7676562184cc8a9f"
+ }
+ },
+ {
+ "sourceId": "rc87-979c4a4224515564",
+ "sourceDigest": "e8304cfbe92e7dbce244f2364d0659086b9e73fb972dfa5e72473473bd5f6119",
+ "targetId": "rc87-6cf452021b9b88ee",
+ "targetDigest": "818586f8408fa9fb11595dc40c57acb3ff80e8ab001496c427b71dfa972a8a00",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/local-compose.test.ts :: dedupes theme variables already emitted by global style entries -> packages/vite/tests/plugins/local-compose.test.ts :: retains local resources when discovered entries are not guaranteed loaded. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "03a240c45ddd64e58697fdddb5e4b6df1ce71fe0cbe6a0ba796c2ed59095dd6b"
+ }
+ },
+ {
+ "sourceId": "rc87-1e6ed1519c10683b",
+ "sourceDigest": "4c282f8804c4e9dea0b5764bf4904c346aaf79d36cfc020fbfc84314f90765fe",
+ "targetId": "rc87-c2233a4dcb41b846",
+ "targetDigest": "2341f4556c56c6e0e754eb58641ad6911c5148c842d4edd82dea6c43eb8a34f3",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/pre-render.test.ts :: renders HTML classes with the managed CSS manifest entry -> packages/vite/tests/plugins/pre-render.test.ts :: renders HTML classes in pre-render with the managed CSS manifest entry. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "658e6a6c2bfae47ad54116ab5f3463a4db180180412e70c27f6e960140a98248"
+ }
+ },
+ {
+ "sourceId": "rc87-23ebb60ebffe120e",
+ "sourceDigest": "855fad9700bdff0c318f33a8dc38d5c4ebca3fd0091a4941081d36ac944804e9",
+ "targetId": "rc87-8436c9142c110082",
+ "targetDigest": "547a5a560ebba1fbb9ce9b4bc5a9b48365c43c7a8ea74a0aa1f45dab6a992581",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/style-entry-vite-build.test.ts :: default runtime mode emits preset base CSS for the root Master CSS import -> packages/vite/tests/plugins/style-entry-vite-build.test.ts :: explicit runtime mode emits preset base CSS for the root Master CSS import. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "e9b4b88bd2507fb500a5fad9d2129046674bbf0bf9faeb7391eb581af9fdb4f9"
+ }
+ },
+ {
+ "sourceId": "rc87-2d4455c6d2301761",
+ "sourceDigest": "3e78f4bd7740faa1ea6ccb71d5cffcca5acff58ce52e15a4251393397325a280",
+ "targetId": "rc87-b2ef88c31a82efa1",
+ "targetDigest": "a3309e16c5a40c50d773243878cf8e5bba5695e37de9c8c62a0a398901a5810f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/style-entry-vite-build.test.ts :: default runtime mode lets Vite expand the explicit base.css subpath import -> packages/vite/tests/plugins/style-entry-vite-build.test.ts :: default static mode lets Vite expand the explicit base.css subpath import. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "7c3b4be9d4f67ad9abaa70016fff75604908645cb416615118ea71e973b6fa8a"
+ }
+ },
+ {
+ "sourceId": "rc87-409a7df8ce71c205",
+ "sourceDigest": "8700f021b9caf7724c4e927be75c89ae3dec005e80956c252e61d1ec36bbed82",
+ "targetId": "rc87-475a451024126740",
+ "targetDigest": "0cacd035bfd137a4b16ee3c374a3dc5ea655af9a7a4f438b173c4940215a896c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/style-entry.test.ts :: treats @master/css import stylesheets as managed native CSS pruning entries -> packages/vite/tests/plugins/style-entry.test.ts :: treats @master/css import stylesheets as managed entries preserving native CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "9dcf9b67d10e0216a83c7c6d1e519a58128b4d3f8d7f1d72cd9fd684bcdd6b01"
+ }
+ },
+ {
+ "sourceId": "rc87-7ace699066028665",
+ "sourceDigest": "612f2797b082f632caefc18f24e2b5da2f5651aad7ec570eff8586ab3b31381b",
+ "targetId": "rc87-f37c934ad7a06426",
+ "targetDigest": "40d7fde8ad493ee5315a1005b7761bc3aba5a3d253d906bf8b4f08e9dbb9bb0b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/style-entry.test.ts :: build transform keeps native imports before the slot when @master/css comes first -> packages/vite/tests/plugins/style-entry.test.ts :: build transform retains native imports in the source graph when @master/css comes first. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "4f0df2ccc8dca3b3567e7822f878940b58d514878d14225346eece072d7f0eac"
+ }
+ },
+ {
+ "sourceId": "rc87-45d9aa7a252223a7",
+ "sourceDigest": "6c94e3b178bbe01e0e57d181162aeb777ae40bae42087ad23765824aa09993bd",
+ "targetId": "rc87-b4ead2e37b45fcfe",
+ "targetDigest": "e1470dd3f12aa3d74dd6c1bcb535dfcf7229b1e265628c8b0f8f9626d65bd683",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/style-entry.test.ts :: treats @master stylesheets as managed native CSS pruning entries -> packages/vite/tests/plugins/style-entry.test.ts :: treats @master stylesheets as managed entries preserving native CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "096772b826f7c1e045fc9d7486cbdce502632a0f1b1e2afab186bb66ff4f7d3c"
+ }
+ },
+ {
+ "sourceId": "rc87-b4ff936f0bef3660",
+ "sourceDigest": "2330b2e08e2fd2ee041c5e94716d9508b700237aedb5e9243d00a6f8b264ed50",
+ "targetId": "rc87-bc3220b00a9e8560",
+ "targetDigest": "70e4a509a9a9983922619f170f9deb0bfdd7fe0c99eca644284372b71b84e0ff",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/webpack/tests/plugin.test.ts :: dedupes local theme variables already emitted by global style entries -> packages/webpack/tests/plugin.test.ts :: retains local resources separately when discovered entries are not guaranteed loaded. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "4583189065c6da7067b60e7decbda244c192cc01219373e885183bb327ae7ba6"
+ }
+ },
+ {
+ "sourceId": "rc87-dc72ae033f5d4677",
+ "sourceDigest": "fa8e911c8399f4fd2e457ae7f4688239d4d3c5eab14ee8507751751abca4408a",
+ "targetId": "rc87-33bf64a0000c0693",
+ "targetDigest": "060c984aec5910fd0a67376c16b1d9ddb23a1d0023d9f6078d4fd47d345e1229",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/webpack/tests/plugin.test.ts :: prunes managed CSS entry native CSS and uses its config -> packages/webpack/tests/plugin-runtime.test.ts :: explicitly prunes managed CSS entry native CSS and uses its config. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "0d01012ccde011f86180a3561de7de8c4f8174617712869362caa2315643a567"
+ }
+ },
+ {
+ "sourceId": "rc87-f14ff44beeca899e",
+ "sourceDigest": "2235006ca674396bf2635b61e2fefb4c5bb18b6e3eb9e6f7884df590cfbf104c",
+ "targetId": "rc87-9998c26f558f3cfd",
+ "targetDigest": "3ef8af062d32082439cbdd02e2a920d3cd7a27ab6b1a4c9d083ab583381fc871",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/webpack/tests/plugin.test.ts :: does not duplicate runtime script or preload tags -> packages/webpack/tests/plugin-runtime.test.ts :: does not duplicate runtime script or preload tags with \" quotes. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "dfad43d91174e36f66c404d59f5649cca3c24d534390d77b59ad89de872b3e34"
+ }
+ },
+ {
+ "sourceId": "rc87-54cb03c4c412f3ba",
+ "sourceDigest": "139e960c79540dba75eb7e8d9fce97f0d5afd7973833b6395d001d8ff2490f16",
+ "targetDigest": "ea8e1212eceaf020af3ce965d391c61a3ffc142207f0238c6b54918bf8ccb3bb",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/astro/tests/core.test.ts :: does not preload the runtime manifest outside runtime injection static builds -> packages/astro/tests/core.test.ts :: does not preload the runtime manifest outside runtime injection static builds. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "4ad39b403d86a7f1e9a5ead2b9f75e8386c1ef021762f15a06365eefb1e2cbb2"
+ }
+ },
+ {
+ "sourceId": "rc87-77861ecb988baaac",
+ "sourceDigest": "f1f1bc7be61bd62471737f24d6711c287bbc13b27f677754c22749da8a2c382b",
+ "targetDigest": "7ffd0c78a9158a0f7994f00e9b4a583cf38e8aac9b14dc97c10dc960c3277242",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/binding-wasm-compiler/tests/compiler.test.ts :: loads the isolated compiler Wasm surface -> packages/binding-wasm-compiler/tests/compiler.test.ts :: loads the isolated compiler Wasm surface. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "3ce6842ad4254bf5c99f8cf708d10d7bffc603fe07a2f73a7b262639d8b06036"
+ }
+ },
+ {
+ "sourceId": "rc87-d1faf9e76f9fc0fa",
+ "sourceDigest": "6c0090b466ba8a936b1da1c6c5839744a3ac98a5de0536b11ecc9d297c24468a",
+ "targetDigest": "add9324076be02e07caf3fbfc5863d26eaa2ca62df97b8f88f8786c5eff3ef03",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/binding-wasm-engine/tests/session.test.ts :: passes emitted globals to the Wasm-owned session -> packages/binding-wasm-engine/tests/session.test.ts :: passes emitted globals to the Wasm-owned session. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "fa6a1c745c14ad205200f2251f566144b0daa5861b290a1144b994958c1c6006"
+ }
+ },
+ {
+ "sourceId": "rc87-37cea833d014908d",
+ "sourceDigest": "e802d35ba945a50229321d8f7d1c0db67cd0e78dd41de70a558286d52934b7c1",
+ "targetDigest": "5a620fea6f24247ec6e269f93bad6aab1ee07b29c379199a260781d0d220e326",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/binding-wasm-tooling/tests/source.test.ts :: loads the isolated source tooling Wasm surface -> packages/binding-wasm-tooling/tests/source.test.ts :: loads the isolated source tooling Wasm surface. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove canonicalComposeDirective assertions; advance all nine lint input/output version fields from 1 to 2 and both inspection-report version fields from 3 to 4, preserving other response assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "dc2f9ada43a5418d4ad62407e28bc6e8f00b17887754afbc5d0578e82b3c7e92"
+ }
+ },
+ {
+ "sourceId": "rc87-076ced27803a6943",
+ "sourceDigest": "d6c00439f89a9faf63be1dc86bfc3ff6414240eb556163388e543c1eff387ab8",
+ "targetDigest": "6c1bbc674c9699d8b9bac063969e7a891822381702c1d1a856b8e7967257f2b0",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/binding/tests/loader.test.ts :: loads raw value policy candidates and diagnostics -> packages/binding/tests/loader.test.ts :: loads raw value policy candidates and diagnostics. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance native lint request/result versions from 1 to 2; candidate, suggestion and diagnostic assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "f73237eb02e6bbf25aabf48b9653c383f0c3d9e1ee61d24a41202c4bfae357e8"
+ }
+ },
+ {
+ "sourceId": "rc87-6d625141262f1f5b",
+ "sourceDigest": "4a19a7240e226a4d6b91227372b3241fcd71cf63bf2227fd5d23ff623f9c48df",
+ "targetDigest": "dea7a005ec0f78642b1ef1cdfa22d63003dfb7e8af892473a5fbf2ce5081d6ad",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/binding/tests/loader.test.ts :: loads the manifest-driven language session -> packages/binding/tests/loader.test.ts :: loads the manifest-driven language session. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "07e8234222f13ed15095a696376afdcca0e291c3ac880e540317f6395c374039"
+ }
+ },
+ {
+ "sourceId": "rc87-86d9f2b60f6413f0",
+ "sourceDigest": "9001f8b0225dc5b4cfd56f892b9e44a06bbbfaff1f6dd804efd19cd80b79fddb",
+ "targetDigest": "0614e5d2563bb33188fc0502c1b1258870a7bc90013f784e8495075c55f32c44",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/binding/tests/scanner-state.test.ts :: keeps source cache and valid/invalid class state behind an opaque handle -> packages/binding/tests/scanner-state.test.ts :: keeps source cache and valid/invalid class state behind an opaque handle. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "65bc48e56671176124afd372d73097dbe446ed6ac613d8804edcf21dc5907a86"
+ }
+ },
+ {
+ "sourceId": "rc87-7f3c754a921a8dcf",
+ "sourceDigest": "83398cb4df095d39b708dc08dcbdf1085023453b38cee0b6a8c85d83a1534b73",
+ "targetDigest": "6fb8884a6ea479e0ec518629c98254b4657e51a50653cb2fe1058eb656da7083",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/core.test.ts :: prints scanner state and missing CSS diagnostics as json -> packages/cli/tests/core.test.ts :: prints scanner state and missing CSS diagnostics as json. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance the diagnostics report expectation from version 3 to 4; scanner, lint and missing-CSS assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "eff7c641d4cd86404d9cb70aadad1351948c73346ecb9b09c44ce1240ca67323"
+ }
+ },
+ {
+ "sourceId": "rc87-a42d3dbfa54e969a",
+ "sourceDigest": "c7dc47628a7eb3b3b994786a499254ebbac9902fc46ae09d68f5de477012c9ae",
+ "targetDigest": "4d774534d227f83ead562f94660b5ad35723dfad17c275e3e7299cff203ba878",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/core.test.ts :: can include generated CSS and stylesheet entry metadata without failing -> packages/cli/tests/core.test.ts :: can include generated CSS and stylesheet entry metadata without failing. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "ab141853d4c9bfe29351caf7007fe125f9468445a8b4436a42c5cdea6363bb8f"
+ }
+ },
+ {
+ "sourceId": "rc87-91a008ff477415bc",
+ "sourceDigest": "88fe70a8e8ea705314e811f60faa5b28e7f1beb7898125f4b8f87801656143ad",
+ "targetDigest": "744e4981753fdc204d54be0fdd5f9b68afa9ffe6e19f805471ef9f6bcbea907d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/core.test.ts :: prints machine-readable diagnostics as json -> packages/cli/tests/core.test.ts :: prints machine-readable diagnostics as json. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance the diagnostics report expectation from version 3 to 4; scanner, lint and missing-CSS assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "5510ca0d1da7aa1a583f1b61676bf2ded5c0ba2d1201a2364c65063ea38a77b5"
+ }
+ },
+ {
+ "sourceId": "rc87-d695e1cbe3d61773",
+ "sourceDigest": "3b040bfe36070fa9ea467858738c06aad248420794fa2babc1a55152c113894b",
+ "targetDigest": "07b2bfedbe69adcbda613dc968105dafde3b52491e5ba660683b1480d9462200",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/core.test.ts :: lints stdin buffers without requiring ESLint parser configuration -> packages/cli/tests/core.test.ts :: lints stdin buffers without requiring ESLint parser configuration. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "9da3f802191297824fd4ae1b3afc12cbbbafcd5f0637beb24558cc7b1d79fe9f"
+ }
+ },
+ {
+ "sourceId": "rc87-49471ac2b718f0fc",
+ "sourceDigest": "a0aa8dda2fe828d5513906ff8fd54b586cd44a1270355971e1e62fcee8cbd4e5",
+ "targetId": "rc87-49471ac2b718f0fc",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/core.test.ts :: includes stylesheet compose diagnostics in the default source set -> packages/cli/tests/core.test.ts :: includes stylesheet compose diagnostics in the default source set. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire the Compose stylesheet lint/structural-fix command case with removal of directive linting and --fix-directives; class-list lint/fix remains supported.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "baa178e5ed094052627c5267fbfa4f29dd711b87573f330838ce1957fabf144a"
+ }
+ },
+ {
+ "sourceId": "rc87-8dcba64252750664",
+ "sourceDigest": "63196bf8684f782c3a4a105e5f2c8a04d43655b5ddb607df98d5af8b6e04c1b6",
+ "targetDigest": "84a6271554b13a848aa9bec45f1b374ef47eccfde968d2566104ea29a3cc1679",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/core.test.ts :: fixes class-list diagnostics -> packages/cli/tests/core.test.ts :: fixes class-list diagnostics. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f361206bed1230668e06de805272f2420ae619d79f0755f7e1ceaed462a1711a"
+ }
+ },
+ {
+ "sourceId": "rc87-09e2f62fb4ee5891",
+ "sourceDigest": "972bcddf2e19b9dd209c3a18f2afd9da3cd63fd940f349487afaa21cb8c5935b",
+ "targetDigest": "967acdb3b7770a50bad60b2e1a0793158e4ece9a95fcf559c9706a32d80e6054",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/extract/test.ts :: basic extract -> packages/cli/tests/extract/test.ts :: basic extract. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a78ce4a673afb0211fd641f2bab61ddedca4fb480a3eba6dbbf7f0519eb978dc"
+ }
+ },
+ {
+ "sourceId": "rc87-338f505049a4542b",
+ "sourceDigest": "5e644f166e36eadb1dcfdc25176cc9ca8623c1ad57cb7d22e402daaf8b4e02be",
+ "targetDigest": "159dcf9e5521f3724435f0e1a9183dc035d90582c190acb683e9feef92ce2a1f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/extract/watch/test.ts :: start watch process -> packages/cli/tests/extract/watch/test.ts :: start watch process. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "1f4040b1bcf344ac7cfb92779c57862764d2624765375e1d27ce36a5ce1ff437"
+ }
+ },
+ {
+ "sourceId": "rc87-96e4080672dc65a9",
+ "sourceDigest": "5872c81ea795bd4636e2dab6e56f331a0d9045f5e97853a4ccf39e270b94c87d",
+ "targetDigest": "5fd68aaf54bba14bd292d5f3b2134f36b4f6fd781d0a333281034852d53af639",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers theme variables, modes, semantic components, utilities, and variants into one manifest -> packages/compiler/tests/css-first-core-migration.test.ts :: lowers theme variables, modes, semantic components, utilities, and variants into one manifest. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "bf1f4fc69464a3237bbff3a6361752342328df30ec8dc777de302241f6235518"
+ }
+ },
+ {
+ "sourceId": "rc87-78e8c7d3c16908ec",
+ "sourceDigest": "e7498f9e70054f2788174c084db84a16f0bf4667662e98692d810cc8f7b0baaa",
+ "targetDigest": "692b8cafe4416dcce3a213babbb282a1f668a36191e60ec15d1ca4b6e9a1f29a",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers managed enum patterns as semantic utilities without replacing exact utility precedence -> packages/compiler/tests/css-first-core-migration.test.ts :: lowers managed enum patterns as semantic utilities without replacing exact utility precedence. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "8e6ddc395d9c3efe1f6506c2d9f5e7816a0cca2d9a69671bebe7c712e2a1002d"
+ }
+ },
+ {
+ "sourceId": "rc87-0a84fe0c03239a4f",
+ "sourceDigest": "c664b9c7f1f424358e0c3593aef794487566a760c1b5a4389e0af6eee7bff69f",
+ "targetDigest": "5512ff854a90cb344c44886c0a8b7ca475fc28079b67ae4a8d74b064f056b529",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/css-first-core-migration.test.ts :: rejects unsupported managed enum pattern syntax -> packages/compiler/tests/css-first-core-migration.test.ts :: rejects unsupported managed enum pattern syntax. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a2007c419f1a1b844201d4f80111d140a837965c91f03c8dfe24edc097255a30"
+ }
+ },
+ {
+ "sourceId": "rc87-6c6698375612d791",
+ "sourceDigest": "f4b272a55e298d45e59992d7f9c57e7c416fa71412ce4de130f8d0d90ec99d00",
+ "targetDigest": "eff8c083fcc9cc2902696268d6b4df758c5584dd8b13773cfb8cab56b4b39862",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/css-first-core-migration.test.ts :: rejects unsupported managed dynamic colon syntax -> packages/compiler/tests/css-first-core-migration.test.ts :: rejects unsupported managed dynamic colon syntax. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "2dc73935fa825b0bcb027492305083114e550cac169c06e7d295c9af9b0c69c6"
+ }
+ },
+ {
+ "sourceId": "rc87-77a4ffb0adb8514d",
+ "sourceDigest": "fb2e0939ef6088969ece84609f013ce3c29d3f8805d7c2583bc5196e5de55ef8",
+ "targetDigest": "b2b0b1cf16010bc040c9300deec0fdee229fc6b3fb48f69a441397a5bcfcec13",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers dark and light shorthand variant blocks like explicit variant blocks -> packages/compiler/tests/css-first-core-migration.test.ts :: lowers dark and light shorthand variant blocks like explicit variant blocks. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "25d38b42dc1e0ab17b8cae1dc29f5ce5c9ba31a97e36212b3db5ccd04845d951"
+ }
+ },
+ {
+ "sourceId": "rc87-8daa6e7865747a18",
+ "sourceDigest": "609f72ea36026034b91e6a411bb27768f579955b5f5c14b7fbd95eab9c6a1a37",
+ "targetDigest": "80f6bb97c7a28041af4de27c8ae419b82805f4c5c04cb9e9fe5ceba869a2431b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/css-first-core-migration.test.ts :: keeps custom modes explicit behind @variant -> packages/compiler/tests/css-first-core-migration.test.ts :: keeps custom modes explicit behind @variant. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "25d089ba9b5a7c5a1479cc98274d1b647f73f86e9e0cc37647bac440f2b2e124"
+ }
+ },
+ {
+ "sourceId": "rc87-8e2904c1ab58a0dc",
+ "sourceDigest": "06ce23c4763d25a1e9aa51483b38bdb3d6e94d5d01e5381410921c497607abe1",
+ "targetDigest": "ce5217fe1a9067a0a3a62d6cd82267804030fd1454952e7d9fefda3fc4007a82",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/diagnostics/index.test.ts :: reports scanner state, per-file discoveries, and missing CSS diagnostics -> packages/compiler/tests/diagnostics/index.test.ts :: reports scanner state, per-file discoveries, and missing CSS diagnostics. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance the diagnostics report expectation from version 3 to 4; scanner, lint and missing-CSS assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "0ec4c583cbc637ab51498665e8cd2bc1079ebda10d314b283efa3aeadfd29611"
+ }
+ },
+ {
+ "sourceId": "rc87-3516c9bb81d10ca0",
+ "sourceDigest": "46c59a9a55806bdd3df4c2c0c538abbe92fcae8ea12479d1c575a4032b56b0df",
+ "targetDigest": "31e4dbb034f9c11bad22c4d3b2f8629428023e482b654c7fb00805116b7887df",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/diagnostics/index.test.ts :: includes generated CSS and stylesheet entry metadata -> packages/compiler/tests/diagnostics/index.test.ts :: includes generated CSS and stylesheet entry metadata. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "30b557b0890269aaabc43aa20f26f0833ea6f39f727157810def0e33e9a7b978"
+ }
+ },
+ {
+ "sourceId": "rc87-8457f11ca701faac",
+ "sourceDigest": "2e83cb40b6d665f5fc376ebc79f8c3159ac1d4f6b8816fd9e2e6ca740c0465ed",
+ "targetDigest": "80212aed30f635666498e99b5fc566497a64e0cf4a654bae595e878436f2d830",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/reference.test.ts :: uses referenced CSS as compose and variant context without outputting it -> packages/compiler/tests/reference.test.ts :: uses referenced CSS as compose and variant context without outputting it. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "00a1a65f177db155abd17f05d2cfd77a2f0ca5004e0adb5071bfbe91c7e89743"
+ }
+ },
+ {
+ "sourceId": "rc87-d0359cd0342f8ae5",
+ "sourceDigest": "6eaea612e7c0d822a37b8def8411045d48f0af77130adc3d52f6161204a10d3d",
+ "targetDigest": "a709b95f2dcd3ea29cf17e3c505705236c460e761ba8dfaf3b58f5b4e4e9b2d7",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/reference.test.ts :: keeps ordinary package imports before expanded Master CSS entries -> packages/compiler/tests/reference.test.ts :: keeps ordinary package imports before expanded Master CSS entries. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "0fa7f251433a7bba59a4d4b39d33f401d529717559116a6b4d1fef0820f19da1"
+ }
+ },
+ {
+ "sourceId": "rc87-814905e211a00e2f",
+ "sourceDigest": "6ec7a20dbe9a778e56bd20f8bc52a457fb3159014955b88cc3d8bd4df11cdefb",
+ "targetDigest": "13b7d2cbcc803d4121a4b7defa6464a31dc20611ef457d48eb4b08aed715a411",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/stylesheet/directives.test.ts :: does not collect non-entry @master at-rules as extraction directives -> packages/compiler/tests/stylesheet/directives.test.ts :: does not collect non-entry @master at-rules as extraction directives. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a885836ad74ef8eed5c05c12e84c398147075ec31d88ca7273fb1d1839e56a78"
+ }
+ },
+ {
+ "sourceId": "rc87-a21238bfb7a88fe8",
+ "sourceDigest": "277a070519866825dbff7c48164fcea8da9953017ae1ae67e7d4250188402b21",
+ "targetDigest": "40cdc939154bc14684b4859446fb8b4ff5ea0bb6ff20ecfdea4cf89fb8221169",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/stylesheet/directives.test.ts :: uses stylesheet-local source directives for a pruned CSS root -> packages/compiler/tests/stylesheet/directives.test.ts :: uses stylesheet-local source directives for a pruned CSS root. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "3c1b60e704132108bc7f223ff8e44149ee3ab674494f9f68184f002ba03727ae"
+ }
+ },
+ {
+ "sourceId": "rc87-c1e2ea9bda038754",
+ "sourceDigest": "a20c415416bfa59c5061f4a67f9fbdfbded8cbb756896dcb8ee1c6dad18bddcf",
+ "targetDigest": "68c62f5be4a0345a9099668887f8f44fa188e62048c5023f121c1fe642d1bc87",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/stylesheet/directives.test.ts :: merges imported stylesheet class directives into the parent root scope -> packages/compiler/tests/stylesheet/directives.test.ts :: merges imported stylesheet class directives into the parent root scope. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "01ce3407192b5aea6c1fefbe968a422d9b83239daa9d8d80c48a302232cfd75e"
+ }
+ },
+ {
+ "sourceId": "rc87-55dedf1d632d31fd",
+ "sourceDigest": "7f26efccac526859ba0078f6b33868da60c28cd24f67f06cd47568d9f8851903",
+ "targetDigest": "9d59305b9b21748f625cfee349ff5b32540e14db9d820152d916d7bd6880b312",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/create/tests/setup.test.ts :: prints a concise CLI error for unsupported rendering mode targets -> packages/create/tests/setup.test.ts :: prints a concise CLI error for unsupported rendering mode targets. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a178ea10b9982b677effa00723e9b649b8a34abac9492240aa925e202de165ea"
+ }
+ },
+ {
+ "sourceId": "rc87-7e1a673cdba4ccda",
+ "sourceDigest": "4ca2057b55dae5dc4d8b2bf07fe4b427d3dc337faca187c12eee73d05e8bb00f",
+ "targetDigest": "3fb13203f769a737cb61ea1e47590edb3b423e72b6fa599c29c0bb5156550ad9",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/css/tests/engine/rust-engine.test.ts :: inspects without mutating state and rejects use after disposal -> packages/css/tests/engine/rust-engine.test.ts :: inspects without mutating state and rejects use after disposal. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "7269f7e3ad964900e08c5dd89eb742eff376b9c519a443fdff8af579c41133dc"
+ }
+ },
+ {
+ "sourceId": "rc87-6f459da1798e8a99",
+ "sourceDigest": "b88100e238160a22097dd2320a75541577c26141ba3820123667a6e691c6a29f",
+ "targetDigest": "df93bd321952688502425dbac74cfb62ac5e235cc6a6b7a13a12917c3ac1c02f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/css/tests/engine/rust-engine.test.ts :: preserves descendant selectors across condition-only variants in native and Wasm -> packages/css/tests/engine/rust-engine.test.ts :: preserves descendant selectors across condition-only variants in native and Wasm. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "791c885f654edaab1c06826cfc9b0b0491675d7d80c1bd6946690047df1d26b8"
+ }
+ },
+ {
+ "sourceId": "rc87-4a63c9e7dbdc43a7",
+ "sourceDigest": "55e0d6676cd2e5ba7292b6bd5929e1314c08f66d3d886db37deaa6d77e4d05b4",
+ "targetId": "rc87-300afa1a7a34d01c",
+ "targetDigest": "10fbf492299a35439dd98ec7193eacc614ea4ce7ed6ba8a1b79ef205e0866b79",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/eslint-config/tests/test.ts :: lints markup and standalone stylesheets -> packages/eslint-config/tests/test.ts :: lints markup and standalone stylesheets. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove automatic stylesheet lint/fix configuration; keep markup linting and explicitly leave CSS to CSS tooling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "611eb85020df5e3c76fb2d0b5b2881a530970ead9cb4c0d93c2a2866ef7c7434"
+ }
+ },
+ {
+ "sourceId": "rc87-db46c376e47a7d7f",
+ "sourceDigest": "1f62739dd2f8e252c35bebb60e72b730f16c8e929cc4b9c6621d9462572b0e63",
+ "targetDigest": "cc54916beaa4325daaf324463270b8b72e25999d1c828be96800455bdee9f4e0",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/internal/tests/module.test.ts :: serializes manifest and emittedGlobals modules -> packages/internal/tests/module.test.ts :: serializes manifest and emittedGlobals modules. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "ed5c4d8772d8d89b40bdd1c192b0225cd2a9d4fc5e28d4970e793b13f84bfdf1"
+ }
+ },
+ {
+ "sourceId": "rc87-e87cb64b936fab83",
+ "sourceDigest": "1c35e298054b801336c4c95a667bc7838dd1f2dca8f9296836bc35a1eee5adc5",
+ "targetDigest": "e31f9f87223c5961a7b8ce6eff7aa2ccd2f821599451b02ee50c7642f1270893",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/language-server/tests/diagnostics.test.ts :: publishes manifest loading diagnostics -> packages/language-server/tests/diagnostics.test.ts :: publishes manifest loading diagnostics. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "9dffd30eb7e29c34f08f9d36e795384649ad5b99be5fecd7b5ae2f18d07c2e0c"
+ }
+ },
+ {
+ "sourceId": "rc87-2ca28a8fee7427df",
+ "sourceDigest": "a84dfe8888f5efbc069d3c115d475986ae2221bbb3f3bbe11a868c61eafcee60",
+ "targetDigest": "0133441fdb6e4dcf464955b79bb68b47be3ce8b9bd40af2aaebde816559c5308",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/language-server/tests/formatting.test.ts :: returns document formatting edits for CSS directives -> packages/language-server/tests/formatting.test.ts :: returns document formatting edits for CSS directives. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "fc41f0be118ddad1fc2aa0e7b5244121de470fe72617af37453d07b108f8f66a"
+ }
+ },
+ {
+ "sourceId": "rc87-ed144a8c64653ef0",
+ "sourceDigest": "ca0df59d5ca5b9575c1ea03b990326af7f0f08837355e04709a94e520905b603",
+ "targetDigest": "eda80b486a1d0d4e2bf1677d77872b20d1c65468cf8b29523b7943408bf559da",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/language-server/tests/formatting.test.ts :: returns no formatting edits when disabled -> packages/language-server/tests/formatting.test.ts :: returns no formatting edits when disabled. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "76383e4c437add89ef611d002e733d89a53b9b9b9bb0e06358e8de39bd39f9b5"
+ }
+ },
+ {
+ "sourceId": "rc87-8f864fb0ea35d7ce",
+ "sourceDigest": "8f9861cd4e3caeafe27980503717a433cc12a1e531266810d338f9c077ae5c44",
+ "targetDigest": "8eb06e080b0a324d74be7bb39d33ea1224b4dcc97564abaadbb837c577d40500",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: registers tools, resources, prompts, and renders CSS through MCP -> packages/mcp/tests/core.test.ts :: registers tools, resources, prompts, and renders CSS through MCP. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "86b67a328967cea2e82f6e1207570c2a396f162f6e97e38b9f81f6a0ae204db4"
+ }
+ },
+ {
+ "sourceId": "rc87-70467a45db659966",
+ "sourceDigest": "914ea051ddf78805466bfad3a89e9da758e3b9a19862e42d4f77001f20d04807",
+ "targetDigest": "44813697951688c7a5d07bed3a5b292f512feef6d598e9e684022419a8cb0d89",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: audits setup and inspects CSS-first directives through MCP -> packages/mcp/tests/core.test.ts :: audits setup and inspects CSS-first directives through MCP. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance MCP directive inspection to version 2 after removing composition traces; preserve directive inventory and setup assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "ba6b3b2b816ffcdd3a817c181dab31858e989a1450d66476d5328d4514de14e8"
+ }
+ },
+ {
+ "sourceId": "rc87-5ee3dd7b8dcf6086",
+ "sourceDigest": "c7c4369973523018c30e6ccc36b0749c9bbb6bdd9fb85ea33714009d504f7bca",
+ "targetDigest": "6ad89c8e799b3a3b48edc27475be3bfa70b74d648e5d9fadf03b86345709dd7f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: traces, extracts, queries, and compares Master CSS classes through MCP -> packages/mcp/tests/core.test.ts :: traces, extracts, queries, and compares Master CSS classes through MCP. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a88ecc1e7d98cc00db4b76191a018d89fbf2b3ec7b389573895ba990243fb74b"
+ }
+ },
+ {
+ "sourceId": "rc87-d58e50c2a10ef009",
+ "sourceDigest": "be9d47f17ef638c5d93ba7a911fdceef27bd3b15c1a0615579ed989c37132ce8",
+ "targetDigest": "516ebeade7dc639994e49b5b265fd83c7ae8a11b2008a4115119a1b87f507a46",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: previews directive formatting without writing until the preview is applied -> packages/mcp/tests/core.test.ts :: previews directive formatting without writing until the preview is applied. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Use safelist formatting in content and file previews while preserving confirmation-token, no-write-before-apply and applied-output checks.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "248621f6a6986cfe0a21d7b4db46f5411442513fdaec2414168fc452ad71f475"
+ }
+ },
+ {
+ "sourceId": "rc87-37a716cccf338a1d",
+ "sourceDigest": "6395e055805b961e3b8abbf648905fa91b765b157d5492862469b6830dcc4b72",
+ "targetDigest": "07cd50824f157336fde88cb10de5c998c41372ab1d20b295b5666180eff0976d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: previews and applies lint fixes only with a confirmation token -> packages/mcp/tests/core.test.ts :: previews and applies lint fixes only with a confirmation token. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "3570a2cefdf3cbaa0672c773967c8d4d310dcd4b159ae618bc97aac1a81eb9df"
+ }
+ },
+ {
+ "sourceId": "rc87-6a15248469d8ce76",
+ "sourceDigest": "2eca7aae8fe216061489274591eb273a6e8f428ac6884ed66a10ff56719c8d6a",
+ "targetDigest": "7258b15e92745d66a66325b485a73a35bc1ae5ba731de13cb28edbc49bb3297e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: lints cjs files with the shared script language mapping -> packages/mcp/tests/core.test.ts :: lints cjs files with the shared script language mapping. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "7a9b7ab1479c6978e487a92a577c7dda4131ff0abc27553ea7dcd7406b628aff"
+ }
+ },
+ {
+ "sourceId": "rc87-bda5260bf5403fa5",
+ "sourceDigest": "3022a67f57969e21cc64cb77710322247730777a0bc4f342594cb3ddf0e5761d",
+ "targetDigest": "2cf3007f88ae0c20dfdf22a7b91775b63d4557e980db95b94c0f499c91d1336b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: scans project sources with missing CSS classification -> packages/mcp/tests/core.test.ts :: scans project sources with missing CSS classification. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance the diagnostics report expectation from version 3 to 4; scanner, lint and missing-CSS assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "660d17b188b14238e9f517dbc87313b121290302de5d5943303daa0c2fe3ebf4"
+ }
+ },
+ {
+ "sourceId": "rc87-6c45d1556603cf91",
+ "sourceDigest": "290a7c54010649eb030770bdb7cd1e1389f1325770a8dfe0ad475f75f3dd9252",
+ "targetDigest": "69082146b1a90a7bb702dfa0a951f33bf0302be7b7ba1e965c66f901db25a771",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: lints in-memory content without requiring a file on disk -> packages/mcp/tests/core.test.ts :: lints in-memory content without requiring a file on disk. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance the diagnostics report expectation from version 3 to 4; scanner, lint and missing-CSS assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "d9bf1fadbe439dda7744d107c7a184b277166fa7de74df3ef39e81d01cb6512e"
+ }
+ },
+ {
+ "sourceId": "rc87-5c0737810dccaf5c",
+ "sourceDigest": "92c26e5761c8952f44d2b95e84a25611dc27dc010ec16496a5ae30cf3fb65acf",
+ "targetDigest": "6b1c09cea65b506b8936deb111574e6c106f09a273717659c646ae42b977a957",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/adapter.test.ts :: shares one build renderer without leaking rules between HTML outputs -> packages/next/tests/adapter.test.ts :: shares one build renderer without leaking rules between HTML outputs. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "c5b411254ea0f05742be6a233a701f7e2f58e45f8e17df02b71c4c54819ad733"
+ }
+ },
+ {
+ "sourceId": "rc87-e74315879f5ad97a",
+ "sourceDigest": "d35441b7a582491febb582ccb5b7c47571a7529d3b9ae4d8a5c8eab49c397c9b",
+ "targetDigest": "f9fb94577fcfb7414ce9f2e194ab86d4abb5ef1727828b6e77856fff2d36d2a0",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/adapter.test.ts :: renders Master CSS into static HTML outputs once -> packages/next/tests/adapter.test.ts :: renders Master CSS into static HTML outputs once. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "4590d8f5b6e457bb90b1fd1a0ddbc2a01e08484a49bdfd37b2f2d11543071acf"
+ }
+ },
+ {
+ "sourceId": "rc87-d79c47a9c3f2b39e",
+ "sourceDigest": "21cf6d741837551b7a30ce17251d53e6bf74a3689c9540b75a96e3fa1e803fe6",
+ "targetDigest": "6e2d786add6a89f0d9c5aa01cef641aee3c175b0f0ed0a30399ec9e17f8f116a",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/adapter.test.ts :: writes static export hydration manifests into the default export root -> packages/next/tests/adapter.test.ts :: writes static export hydration manifests into the default export root. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "b6a0f2d8209ed26331a0ab0ecf673fe335fdaee903a6548246943fdd126b7bc3"
+ }
+ },
+ {
+ "sourceId": "rc87-0c8501d038901aac",
+ "sourceDigest": "0c3d120074d4de76d7832b950d33503e866e352da02c0874f2c882f6d077659d",
+ "targetDigest": "77d172ec601a9dcd4cb4b5f08ece5e3e14bd275cfb4a6f9762250a82cb160658",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/adapter.test.ts :: derives a custom static export root from nested output metadata -> packages/next/tests/adapter.test.ts :: derives a custom static export root from nested output metadata. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a34fd85ba1ad40d0dd9be0c849b6dbdd6e962400684cac1331832d222531103e"
+ }
+ },
+ {
+ "sourceId": "rc87-c6efccfb5323a963",
+ "sourceDigest": "a1fc6d1dbf6e76e71a6e1aa258b6f6e67b1721a31e60c5fb2f612aafb5a3496e",
+ "targetDigest": "739b1f3d45a4d27681e18b76bd43ecc0b15ddfc014964a38639e76941381ab37",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/adapter.test.ts :: fails when static export output metadata cannot identify the export root -> packages/next/tests/adapter.test.ts :: fails when static export output metadata cannot identify the export root. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "b719d63dcdfe25567ba672ba84657ee4252553482df0f76b9315b4a0117579b6"
+ }
+ },
+ {
+ "sourceId": "rc87-dcd91d977e32457a",
+ "sourceDigest": "61de6dbe9304dc01bf8b1c0997eebe9be0b7e53485e5cd2786a83ac5087e39e6",
+ "targetDigest": "dae4949c59043a8a8a1f3832b8d29d78cd103ab480d97b4c468503b628616a1d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/adapter.test.ts :: keeps only generated CSS in style#master-css when native CSS is also present -> packages/next/tests/adapter.test.ts :: keeps only generated CSS in style#master-css when native CSS is also present. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "2e9a946a9f739628ae34fab21e438787ffbd6e987eb6d556d1ca565208afe42f"
+ }
+ },
+ {
+ "sourceId": "rc87-78ebee2f1e48562c",
+ "sourceDigest": "7cb57df7d1821ad836b02eac5a4d734228487e31af15bdcf612d03572afb5f64",
+ "targetDigest": "465d9a008fa8c01671fdc78ef5f363097084bc5f8cbd8a9eb0d8b28b5b7e2192",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/css-manifest-import-loader.test.ts :: rewrites relative CSS manifest query imports from TypeScript modules to generated JS manifest modules -> packages/next/tests/css-manifest-import-loader.test.ts :: rewrites relative CSS manifest query imports from TypeScript modules to generated JS manifest modules. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "71f4ba9ff95210117d0011065601efc4a08ef814ae5cb84404cdf5bc1dc78364"
+ }
+ },
+ {
+ "sourceId": "rc87-cc64a4ef8922d47c",
+ "sourceDigest": "fbcf0df7513913114cf9a03aea8d1d0c71ae9f5c47290a50b0df713784939d5a",
+ "targetDigest": "06d42dae5c99211bf9e60051684af1bbf438c3ea47d7ef0af3ecc94619393435",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/css-manifest-import-loader.test.ts :: resolves package CSS manifest query imports without package-specific rules -> packages/next/tests/css-manifest-import-loader.test.ts :: resolves package CSS manifest query imports without package-specific rules. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "2a16876be43d48de07ddb4c18ec5e43e4baeaf9e3029f94bee84ddb0b0b12a3d"
+ }
+ },
+ {
+ "sourceId": "rc87-bdb21071a6a1472c",
+ "sourceDigest": "6561b80aafc67a162d38174be0871d5f0a1f4715acf2de9d116132577a1e1124",
+ "targetDigest": "308bd54b08c225d6d0a2a326acb2ab4f06e4373bb33b453d67942cbb63600774",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/css-manifest-loader.test.ts :: inlines manifest modules in development for HMR -> packages/next/tests/css-manifest-loader.test.ts :: inlines manifest modules in development for HMR. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "69be29b61f80e8143181941331b5766cd5478522b7f70be0c263b355e9c50c1b"
+ }
+ },
+ {
+ "sourceId": "rc87-9320973372113ac9",
+ "sourceDigest": "4a6bbd0862e2e1283fea873c35fc4c3542944684e649443710afc5ba16e93c6d",
+ "targetDigest": "c0a24776c7042e71a562534258eb8ebb5403ca83f02bf20a14a0066b15cc684f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/css-manifest-loader.test.ts :: keeps virtual manifest dependencies registered after invalid CSS and recovers on the next run -> packages/next/tests/css-manifest-loader.test.ts :: keeps virtual manifest dependencies registered after invalid CSS and recovers on the next run. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "e281266af266f6cc3bfd5d502a6fd6f1919182b533de1fdd0ec8f038993f65c1"
+ }
+ },
+ {
+ "sourceId": "rc87-aff116ec4161fc64",
+ "sourceDigest": "787c9c35e103208182994e6534677168938687d4e17e762dbdcfc7b99a917482",
+ "targetDigest": "32480936fb691017ec6e80d70d46f1c0611a5a4c752bed439559f63247506943",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/css-manifest-query-e2e.test.ts :: builds a clean Next project that imports an explicit CSS manifest resource -> packages/next/tests/css-manifest-query-e2e.test.ts :: builds a clean Next project that imports an explicit CSS manifest resource. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "86925b096435d4c999da636d07ce9b8687fc2913195f4bd0fb70dca7231b9a69"
+ }
+ },
+ {
+ "sourceId": "rc87-680bf632928ceace",
+ "sourceDigest": "398d3906212c6f0eca8375918d93f478bd24e17f3af6094324bb1bf55e149a34",
+ "targetDigest": "beb52b30267579861497d5a8deb29b15062d785582f5a089768d47d81245b797",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/next-config.test.ts :: sets the Next adapter path and registers options -> packages/next/tests/next-config.test.ts :: sets the Next adapter path and registers options. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "7d3ff035f5c267be275d5c3a32cb0aceaff1baf8254dfaf9738ece7f9083b84f"
+ }
+ },
+ {
+ "sourceId": "rc87-91f24e279275cde6",
+ "sourceDigest": "8889140f1c7907e77f928045733e1172bef13a804aa215afbf57206657833bae",
+ "targetDigest": "93c8946aa2b3f6e9d25dda96a145617b53aa69ca223cb13b67c3658d9876653e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/next-config.test.ts :: preserves an existing user instrumentation-client file behind the Master CSS runtime wrapper -> packages/next/tests/next-config.test.ts :: preserves an existing user instrumentation-client file behind the Master CSS runtime wrapper. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "5c3c28476457215cd30b30b9b716d6daec7708d712813ae4127132683856a6a0"
+ }
+ },
+ {
+ "sourceId": "rc87-fe8901f174085d14",
+ "sourceDigest": "f2ee2cd64b314d361aca30a604db06fb0ec08b000cc683aa38a4a40f410a52e1",
+ "targetDigest": "a44c731c0a841218fcdce5faa31582d391e2c550132d7f262c942b6efeaf5335",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/next-config.test.ts :: composes an existing Next adapter path with the Master CSS adapter -> packages/next/tests/next-config.test.ts :: composes an existing Next adapter path with the Master CSS adapter. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "3cb581fb351bd84a011f147c06fa4e28d2fc5bf3d6c869e4cd8f971c1ac70b09"
+ }
+ },
+ {
+ "sourceId": "rc87-5dc31ee125b79ae2",
+ "sourceDigest": "f9c154bd7222a6954480644cfb88e83a840c7425aac8d6bd14004e194cb996e1",
+ "targetDigest": "8bb84edc113e5ddec6cae4b1f3fee814de7099db631056d402885683b84a845d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/next-config.test.ts :: composes NEXT_ADAPTER_PATH when no adapter path is configured -> packages/next/tests/next-config.test.ts :: composes NEXT_ADAPTER_PATH when no adapter path is configured. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "aba4b9d346633f0d38d976a1811994bec2fa62933e0c1b7c96e7663f792f3012"
+ }
+ },
+ {
+ "sourceId": "rc87-b0de955f29213cf0",
+ "sourceDigest": "9741aeab74c3aa111640bcd9c0ee4d9ea02dcc3153aae33b9376a70e65b8276e",
+ "targetDigest": "f9cef11a6de923a034fca6cd40e077c10031984f36b991c359f41c025dffdbbd",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/static.test.ts :: prunes dev CSS chunks that import @master/css -> packages/next/tests/static.test.ts :: prunes dev CSS chunks that import @master/css. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "cc1fa0eb33e9c1910d34d1a082465cf0fd8168c556c08a8cbcb47dbb3c8e539d"
+ }
+ },
+ {
+ "sourceId": "rc87-fb72a22f3bdde978",
+ "sourceDigest": "2ae98ed79517b2ef58abec7e5f14a9fdf3c4b0d70cfe044426681f25929234d7",
+ "targetDigest": "f785e2ced3e33bcc71332fd4a058f117f25ef6631c836110ccf33c573d1ffe99",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/stylesheet-loader.test.ts :: keeps local style dependencies registered after invalid @compose and recovers on the next run -> packages/next/tests/stylesheet-loader.test.ts :: keeps local style dependencies registered after invalid @compose and recovers on the next run. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "69b3db7e4a2a3323c3714f50311b37924b91be5470667751b4600c1bed9653a7"
+ }
+ },
+ {
+ "sourceId": "rc87-446b3234ab1cf237",
+ "sourceDigest": "b2dac8681206673cd08701736c42c63a8cb69bc706526855686640ca75f402cf",
+ "targetDigest": "1a4cf72881bdf0db91d706e13a9dde04b1f6508c3c7ca550917384264e3dc11d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/edge-cases.test.ts :: disconnect clears counts and observe rescans the current DOM -> packages/runtime/e2e/edge-cases.test.ts :: disconnect clears counts and observe rescans the current DOM. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "28f824e399b2686bedc58dd1ae1b4e1f5495a7171944e4fb99e38f0220a52e6e"
+ }
+ },
+ {
+ "sourceId": "rc87-1d16d45477ca8574",
+ "sourceDigest": "f9723023ec1728039814883e25bd804f15ff04e3d37898ca6b3fec8a12abf6cb",
+ "targetDigest": "51a937cf74965cf747812aa7321a4011925817ce737e39b3896d917576ee23f8",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/lifecycle.test.ts :: inserts functional pseudo-class selector aliases into native CSSOM -> packages/runtime/e2e/lifecycle.test.ts :: inserts functional pseudo-class selector aliases into native CSSOM. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "70fc928207b57033bc0f4b361598dcef2c824cd556170ffd63b5ac2ca7b92488"
+ }
+ },
+ {
+ "sourceId": "rc87-926f3f474304ded0",
+ "sourceDigest": "5fc6c8a8ae7d84c16a631e5d526c5d13519ab46c8ad100556d857f74a8e34d2b",
+ "targetDigest": "50fc27e1ff2b694b00896a724085d375e588a524d81ca4f5118da8cbc810e46b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/lifecycle.test.ts :: hydrates progressive static theme variables and keyframes -> packages/runtime/e2e/lifecycle.test.ts :: hydrates progressive static theme variables and keyframes. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "e94b7c9da1d892370e1ee6018ef24e7931544461a2ee4b6ff7b2eb3e1506198c"
+ }
+ },
+ {
+ "sourceId": "rc87-0440c9b8a8beccac",
+ "sourceDigest": "6cb0a210343555de62691f62afab0175e87fc0e8f52b06e9c9c232dcb3d3aea6",
+ "targetDigest": "dac79565dffe4a58a21ec251e25af43d3f3454c6b020f94310a6c485cbc844da",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/progressive/default-mode.test.ts :: prerender -> packages/runtime/e2e/progressive/default-mode.test.ts :: prerender. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "e9a4feff802a9f45180ea43dca40da0a8f396c0a062031bee0188bfab4a5ba6d"
+ }
+ },
+ {
+ "sourceId": "rc87-797e835ca45531f0",
+ "sourceDigest": "33ab393cf4d4c2b9e7a5ce1785420c3cb753d990975080a5dff99a91af094278",
+ "targetDigest": "635e97bc0cdccae649695a7378328f84b2ba6d33ac57b2cf85593ad71eb5b2d1",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/progressive/media-mode.test.ts :: prerender -> packages/runtime/e2e/progressive/media-mode.test.ts :: prerender. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "ef6bac0555dff524571fafb968bc32bbfe8e7cf04462ae01dba8220ae5e19904"
+ }
+ },
+ {
+ "sourceId": "rc87-408a34c01bcc8aaf",
+ "sourceDigest": "39043ed26a035969f53a7ffe283f208a311a4207dfe74a37fbb59e712219a88b",
+ "targetDigest": "b253389ed36195a6c5e3e68f5382ae9af6f668e8ae73813f0845ff53efdb3757",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/progressive/modes/index.test.ts :: selectors -> packages/runtime/e2e/progressive/modes/index.test.ts :: selectors. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "27e679a839ee42b07646416801d3653247fdfea1c7a40a83d20a773d49628009"
+ }
+ },
+ {
+ "sourceId": "rc87-7a7b9fa25c74a52e",
+ "sourceDigest": "4c9a5a254cbbe15ce463d6e506d53c5fbdae9517c341f9850841d67bfb8e3592",
+ "targetDigest": "b7e142f12351fc4306fd282604d49198536044182d29c387bb0a0cf0b30a8709",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/progressive/selectors/index.test.ts :: selectors -> packages/runtime/e2e/progressive/selectors/index.test.ts :: selectors. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "2d57f62aded4ae2d2a1f05c0d267abcc96024d5e1986cf1b14bc7dbc824e938e"
+ }
+ },
+ {
+ "sourceId": "rc87-d8f85d3df48bdcf5",
+ "sourceDigest": "040304fa50d7850f0fc3bbbebe2c882bf28fc46cc536ba5dce41fdc63c6e6789",
+ "targetDigest": "de0b1f6bf7be7f2a7d2bfd2150452ee7f228d18459e1b476a9e0c7c51610b254",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/theme-layer-order.test.ts :: keeps default variable buckets before mode buckets when CSSOM buckets are inserted later -> packages/runtime/e2e/theme-layer-order.test.ts :: keeps default variable buckets before mode buckets when CSSOM buckets are inserted later. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f15e2a461955cc8d5acc5cdb62d3bb040699874a7379d4aa483d76726306931b"
+ }
+ },
+ {
+ "sourceId": "rc87-bab35476046dc1a0",
+ "sourceDigest": "b522deecd7ed5b8b0c843448f7e48df5565ce71b900c6068910f0e8849120add",
+ "targetDigest": "ef3b48d4daaf76459cf9e3af917c99834b34c8a43cba4d2705025fe3fbb2ae50",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/variables.test.ts :: expects the variable output -> packages/runtime/e2e/variables.test.ts :: expects the variable output. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "131bd2b03f1ac943b25cea93a1fc04b64fd6d53fed8bd4a8805a624ea849eed8"
+ }
+ },
+ {
+ "sourceId": "rc87-d1e28f5ab29e6c3e",
+ "sourceDigest": "b029c2ed64c92c643305f5633fa2ea507a7c5f2fcd281706a4ab91cfe493f976",
+ "targetDigest": "b00eb9c2305cad2a02d69dbfd355d69be2ee39f28da28b028108b08ef432a5f1",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/schema/tests/manifest.test.ts :: normalizes derived manifest fields in JSON -> packages/schema/tests/manifest.test.ts :: normalizes derived manifest fields in JSON. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "36897a6708c22fe406240990a85facc6cd0d9c990982088509c67077ece7d9a1"
+ }
+ },
+ {
+ "sourceId": "rc87-4196983661cffb3d",
+ "sourceDigest": "e9a9bd2d6e8a0baa9e9f674f02b196a0a8174d477630bda329e7dfd8c6e655fb",
+ "targetDigest": "0a53d3089e3ba9f464be12f59813fdab23c3d1b3d6d35498d1e04c0b8ff5f626",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/server/e2e/beta.css.master.co/docs/installation/general/test.ts :: basic -> packages/server/e2e/beta.css.master.co/docs/installation/general/test.ts :: basic. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "86e31a9b83be63a36ac50a65646cb19749e64276147e57a2fe57556b90e74c3f"
+ }
+ },
+ {
+ "sourceId": "rc87-1462d9a6987da8a2",
+ "sourceDigest": "314d9378be70f6ebb105d72f98182d0379fe823e4504b683c8957e2e89c72533",
+ "targetDigest": "85b2b04ff8417f6ce0e0e56ed26caeb11c430d2d274a14a6b571840285111654",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/server/tests/server-renderer.test.ts :: preserves native aliases that share a declaration across cached pages -> packages/server/tests/server-renderer.test.ts :: preserves native aliases that share a declaration across cached pages. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "ae5299ce8f2a871fa0ec28c50e29009e960f36e0351842401f217a422b1b66a7"
+ }
+ },
+ {
+ "sourceId": "rc87-b161e2fcad643e62",
+ "sourceDigest": "b3687d2ae4f53502564dbfe1fd2a8e2cbd5c86c74e94a5ec0d36f8e77d785f6a",
+ "targetId": "rc87-3933ebb66361fdcd",
+ "targetDigest": "a1bddf4676161d1441aefa687090b7474ed7725df45466b2b844eda32b99cc3d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/language/format-directives.test.ts :: formats @compose class-list preludes -> packages/tooling/tests/language/format-directives.test.ts :: formats @compose class-list preludes. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "a02258d09c4b6b87dcb717647b11ec6d046e0d8be864f16570056bdfdd728b46"
+ }
+ },
+ {
+ "sourceId": "rc87-8af187233ba94d35",
+ "sourceDigest": "5514b1fac745e8eb079448ba66f86051670cc72e9eda08c5fc51024246554d15",
+ "targetId": "rc87-8af187233ba94d35",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/language/format-directives.test.ts :: leaves quoted and grouped @compose syntax unchanged -> packages/tooling/tests/language/format-directives.test.ts :: leaves quoted and grouped @compose syntax unchanged. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire this Compose-specific formatting fixture; removed directives remain untouched and safelist formatting retains dedicated executable cases.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "3ed3e90d4e50ba6a0a40cf70d4b44395901823a008e2199f16e08390d19691e4"
+ }
+ },
+ {
+ "sourceId": "rc87-0fab234554e87fd8",
+ "sourceDigest": "7e9f2e59ef4b6143d038cc2096fb0c221e63382e08cd574d5ea986609fd2224d",
+ "targetId": "rc87-299bf6931184b6b8",
+ "targetDigest": "e273ca528027a1af0d65bdc37d4f3d210dd67cf332ad9afe36007f5794ef93c8",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/language/format-directives.test.ts :: formats @safelist quoted class lists while preserving quote style -> packages/tooling/tests/language/format-directives.test.ts :: formats @safelist quoted class lists while preserving quote style. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "c3eef3f47f0732d18a67054c4dee04318a5a064011e0ec2b1482f1dc0af8b827"
+ }
+ },
+ {
+ "sourceId": "rc87-e825fd439c22cdf5",
+ "sourceDigest": "5eec81b3d1ae2c7ebf91b2ea1546ebd9eba4434e84af1d6258173dab48c20e8d",
+ "targetId": "rc87-e825fd439c22cdf5",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/language/format-directives.test.ts :: leaves internal styles dogfood directives unchanged -> packages/tooling/tests/language/format-directives.test.ts :: leaves internal styles dogfood directives unchanged. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire this Compose-specific formatting fixture; removed directives remain untouched and safelist formatting retains dedicated executable cases.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "023923e5f14478ee271ec69afbd02625b6879fb9be8a8baaef33ca768c27ba39"
+ }
+ },
+ {
+ "sourceId": "rc87-7a9e5c45ec0fc87e",
+ "sourceDigest": "592cfb2c6e481274a2f17d13e90da514609a9b763b9993ae25366fb8dd10c899",
+ "targetDigest": "4938061d7f0cfdc8206f5ba89a7d5c99e0902226fc334964f98e57d4f5af2b02",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/lint/index.test.ts :: owns canonical recommendations while the wrapper only maps host diagnostics -> packages/tooling/tests/lint/index.test.ts :: owns canonical recommendations while the wrapper only maps host diagnostics. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "025e703d7210121e83d736fa5402f962d8189d887abd2972e432cc24aa6b8bec"
+ }
+ },
+ {
+ "sourceId": "rc87-116f73ddf74ed32f",
+ "sourceDigest": "089267c9b01aa98d5fa8ea4153760b0cb38dc42f2ba7d3204101d042e152a739",
+ "targetDigest": "5c28576de4efde7d63ce6d85b13c8909bf66b419753d11811e0cedcae6e14547",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/adapters.test.ts :: auto extracts framework source files by extension -> packages/tooling/tests/scanner/adapters.test.ts :: auto extracts framework source files by extension. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "c276c5508932b91e242b567d7f3c97a0c13c70035f49fbd2a004a7d812f31e26"
+ }
+ },
+ {
+ "sourceId": "rc87-ae6254f7191c455a",
+ "sourceDigest": "4e19e2a2b759ee4f5abaa67eb7595362ac02189911ab338ba5b77852bf2ea283",
+ "targetDigest": "959837de365f1e8d3c388f1ee1c5227d869fb70bfe32b3c215f10e7a21c520ee",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract-html.test.ts :: extract latent classes from html -> packages/tooling/tests/scanner/extract-html.test.ts :: extract latent classes from html. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "e4c8cac7499e202add6d5179f38a92c980bcbb3621dce3e9e34bbd3150c220bf"
+ }
+ },
+ {
+ "sourceId": "rc87-68c6f0fc9e3e8a48",
+ "sourceDigest": "048193a99a0f5c594d997117506f6ff8dca3ade6f32e79aab62735e1260c4410",
+ "targetDigest": "0850e009f576e98c8e83d9408e699aaf5b7307c062f9754de99799340099e06e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: basic js object -> packages/tooling/tests/scanner/extract.test.ts :: basic js object. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "166a64efc291a61cf7cac29b510e18c220b7cc04703091a51fe2bfdd1dc609ae"
+ }
+ },
+ {
+ "sourceId": "rc87-2a7ddc50fae25bc9",
+ "sourceDigest": "aa0512fa8f33788e576bc94605a9a7f5da4b171f81815dee9c6e63a5acc6c0ff",
+ "targetDigest": "1d36b182ad2e5a05909c1200ad6892e5f8da9536a3717c33c1507de1b7b1e569",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: basic html -> packages/tooling/tests/scanner/extract.test.ts :: basic html. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "97830f4dd627287400b018dbd8fc437660d6ae34f853177c7e0d38cfd7f5a1a8"
+ }
+ },
+ {
+ "sourceId": "rc87-33c6c9451d628517",
+ "sourceDigest": "3bae7f2c2b9716671fb6c846fddf15b721aed11c89697a6cf6051cab941cae94",
+ "targetDigest": "ef242c6914a70ef2c43ab842bbab4a869ddd70f9f4ea2150ce6cc3c359b5f51e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: utility sign and symbol key syntax is not extracted -> packages/tooling/tests/scanner/extract.test.ts :: utility sign and symbol key syntax is not extracted. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "16aee21bc56468893537da29e5b9f39752ab8025e619b4e4bc44f05d5d29d8e1"
+ }
+ },
+ {
+ "sourceId": "rc87-0afc4bae825a62ef",
+ "sourceDigest": "7369856b6cea37dc5a2f821d768ed7187ebbc5fdb806c14b872839e4ac29caba",
+ "targetDigest": "b0629d9fb7c7956df7ce8786aaf9f9c5a11dccea4063409bb5907754512133f2",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: comment -> packages/tooling/tests/scanner/extract.test.ts :: comment. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "0be25f26e90ee1847b9d008c1ac3107cfd530e83af44fc976ef9bc19ea88f23c"
+ }
+ },
+ {
+ "sourceId": "rc87-940ef33e2f9e54a5",
+ "sourceDigest": "6875a1b146f943a29985f050d09dd793db36b0e84a3b9a59692e6dc44f1aaf61",
+ "targetDigest": "f1728df42884a8338d8671c41f56a288beedba68a9b64c5ad9c7e3664628a92e",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: media -> packages/tooling/tests/scanner/extract.test.ts :: media. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "2fbd3b7d16cc6489e9eb5dadb46037bd06ac32d9b487042f0e4e0aba455af34b"
+ }
+ },
+ {
+ "sourceId": "rc87-50f036526635cc73",
+ "sourceDigest": "b793ae0c0459b585e6ff46a99bedffebbd4a7b4466e50ef8d16656600f23844f",
+ "targetDigest": "097283f365da95c111f7a7e5f07c3694a73959b2bbb94f9e37456d8326bf2565",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: wxh -> packages/tooling/tests/scanner/extract.test.ts :: wxh. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "c106223e1b3d948ee7efc942120fa837bb2e3046d19b232b3b274b875d802540"
+ }
+ },
+ {
+ "sourceId": "rc87-75c9417d1ccb141a",
+ "sourceDigest": "c7ae5986b22ae6cd72a875bfaffa559f9318b5884c3703558941487b23374569",
+ "targetDigest": "f78ee3dc0a4e663ec646666604a4b8a7caa380d4113aafa2f81c8dbdb6f12890",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: group -> packages/tooling/tests/scanner/extract.test.ts :: group. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "b8a5a0ce9cba800d02ef5edc3b1164423c64dacde8ea17d0a6953936382cd008"
+ }
+ },
+ {
+ "sourceId": "rc87-1760dc737cb86f2a",
+ "sourceDigest": "78ea5258e9f3f578f710ad2e561a61535e67a47ae89ff7c3e0f7f37b4dfb2b0d",
+ "targetDigest": "f189a74b62e103a2c609a038756cf0f8f200502374de1fd8be9182092f655c41",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/manifest.test.ts :: uses explicit compiled manifests -> packages/tooling/tests/scanner/manifest.test.ts :: uses explicit compiled manifests. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f6259b3eac0a8e04f8854bc3efcb6e7ddb8ebae09cacc68f28f7362911bfe279"
+ }
+ },
+ {
+ "sourceId": "rc87-5c07a0ab3e427817",
+ "sourceDigest": "4960548e68084c4a6949be87b74d83f4db7ed82a291af230d3b4c8bbd9b6d767",
+ "targetDigest": "753e0040502f23de4ea0c4f16451c24d18757def0533669bcff0ce1d845b7bd1",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/syntax.test.ts :: syntax -> packages/tooling/tests/scanner/syntax.test.ts :: syntax. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "247b444e904c42790f3bd31f7712fb3b13c3f64d2a28b055072862497a12e70d"
+ }
+ },
+ {
+ "sourceId": "rc87-72d9ca61d7283e10",
+ "sourceDigest": "a8a6ba69643956857090ecd7c778c0ef45f422716b5ac9df6444359fc30323a1",
+ "targetDigest": "c97d1efb3f23dba803fcb9ba249ca9aff135a0f5277c9258d162b0aaa542ff39",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/core.test.ts :: runtime mode registers runtime preloads only with runtime injection -> packages/vite/tests/core.test.ts :: runtime mode registers runtime preloads only with runtime injection. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "c806fde03cb6fa9e1da158e36ecb3753773433b3e210050b45802d42ff9a8672"
+ }
+ },
+ {
+ "sourceId": "rc87-94b524d516938049",
+ "sourceDigest": "927c25009274e8ab864d42de635d13f0971359e444e5fd4642dc2f52993fe52a",
+ "targetDigest": "a677a36c9315a08651449a704a7eeb87f503ec2b4e4bb3f8faeba566e03ac457",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/modes/scanner.test.ts :: delegates non-virtual module ids to scanner module eligibility -> packages/vite/tests/modes/scanner.test.ts :: delegates non-virtual module ids to scanner module eligibility. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "15da6fbdc45d1a20c6dad4c7179b0ef09f912a823659ee804be7661916c61fc4"
+ }
+ },
+ {
+ "sourceId": "rc87-38a81a3aed064c0b",
+ "sourceDigest": "0c3189271e8600b9de9bf67c45c46762cc281885dbb071c0a7437065fb4c4012",
+ "targetId": "rc87-992add79cfd20c24",
+ "targetDigest": "6bc5648a4f2e5a7e5e57a87f267db89a47152678c03fda702dce74b9bfb16e1d",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/local-compose.test.ts :: keeps local style dependencies registered after invalid @compose and recovers on the next run -> packages/vite/tests/plugins/local-compose.test.ts :: keeps local style dependencies registered after invalid @compose and recovers on the next run. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "557f380f3a87b3b8744076d30c71ebaff2b2e18d93c0e3b5bcb22100e821fa07"
+ }
+ },
+ {
+ "sourceId": "rc87-7bd1070dec3c3eb5",
+ "sourceDigest": "25bcd55f915e6a9ae604011404e26ac8d4a5d62658c73078541454d6aba7d234",
+ "targetId": "rc87-7be859c17bbf2af1",
+ "targetDigest": "bf646e17edf3653a683172a790957b7bdbdecf077144fe393e342cdd40977479",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/local-compose.test.ts :: reloads local compose modules without forcing a full reload when project manifest dependencies change -> packages/vite/tests/plugins/local-compose.test.ts :: reloads local compose modules without forcing a full reload when project manifest dependencies change. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "6c7b22d214cf90f92b6c0d1c3ef624718391b8fe2e14837c945d405965059450"
+ }
+ },
+ {
+ "sourceId": "rc87-8c38f5f8d793e40e",
+ "sourceDigest": "9cb7ea75f848a8c565a64f5e5daa191a636a17180aa23928f1ffb5dac79fdd5c",
+ "targetDigest": "262f30cf7520a06c4ac952d00712e47f56a8ead5755cde069ff0c1b30bfb5a99",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/manifest-loader.test.ts :: keeps per-file manifest dependencies registered after invalid CSS and recovers on the next run -> packages/vite/tests/plugins/manifest-loader.test.ts :: keeps per-file manifest dependencies registered after invalid CSS and recovers on the next run. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "df127bacd23ecdd2b3b4a32727ccf474737c10a4b1951f275d9587491daa9479"
+ }
+ },
+ {
+ "sourceId": "rc87-011aece17a20bf7a",
+ "sourceDigest": "8d0024a31fbbde01386e16c5db23502542cf23685b4796010812af834b51cace",
+ "targetDigest": "dacd55188818471237f1f41e6531482f7ff30a3af216723ac0b19a0758f6897c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/manifest-virtual-module.test.ts :: keeps default manifest dependencies registered after invalid CSS and recovers on the next run -> packages/vite/tests/plugins/manifest-virtual-module.test.ts :: keeps default manifest dependencies registered after invalid CSS and recovers on the next run. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "176418c545f01523e4354c2d867581a5bdc56d54f2cf45e569339da9aefd5e28"
+ }
+ },
+ {
+ "sourceId": "rc87-0bc6d109d462febe",
+ "sourceDigest": "bac6f692049b40d34b2edc8fea9223168f7d694fc37952c9b4568a205af91d7c",
+ "targetDigest": "79e368e7e89f939015f198af5216232de767cdb811e130084822734a6f9450e5",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/pre-render.test.ts :: reloads CSS entry dependencies for pre-rendered HTML -> packages/vite/tests/plugins/pre-render.test.ts :: reloads CSS entry dependencies for pre-rendered HTML. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "7b0bf59945b88a273fa2264a5e0622bad035609c9df737b2eadf44286919dfc1"
+ }
+ },
+ {
+ "sourceId": "rc87-d59d9f282901a287",
+ "sourceDigest": "fef7570d0e4451f13bda8e80193d09e53aebe0f7f226d49e0fa5d3e43badcacd",
+ "targetDigest": "f001a805a90a4c6b574af82d0df544935a6475de8020f4e47915d254fdc3bb3f",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry-build.test.ts :: compiles managed CSS entry config rules and preserves used native CSS -> packages/vite/tests/plugins/style-entry-build.test.ts :: compiles managed CSS entry config rules and preserves used native CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "6ee59fd29128fdfa50ebbf11971a8ceddd995fc5c9ddb58504d70da6400c5bc6"
+ }
+ },
+ {
+ "sourceId": "rc87-9f2d8be151bb8f92",
+ "sourceDigest": "f0b53241bfde4e32f78dbf73d2c33929e84868d2c4569c4ed3ea2b1bfe76136c",
+ "targetDigest": "dfd38a4816d94dff5b6df21655d50d4d170fd2c492c9350bb0d3c736314e1e75",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry-build.test.ts :: uses the managed CSS entry for config and native CSS pruning -> packages/vite/tests/plugins/style-entry-build.test.ts :: uses the managed CSS entry for config and native CSS pruning. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "df2af7a936e96df31ebd0de205bf8c74ed42d84fceea2dad0dd873eeccbd5ef8"
+ }
+ },
+ {
+ "sourceId": "rc87-df7279821cd67e25",
+ "sourceDigest": "fc306517c0d170b9afad94b586e2e8f7041765409fe6a69009d6fbb39e575117",
+ "targetDigest": "112cbc03b968b5a3050ba9f1aca0812a574fcc0e252ccee72e6f2824f8dc953b",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry-hmr.test.ts :: C3: handleReset awaits index.html re-insert AND every module-graph re-insert -> packages/vite/tests/plugins/style-entry-hmr.test.ts :: C3: handleReset awaits index.html re-insert AND every module-graph re-insert. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "17ff8a224520328f0f899ace1818bddd19b6af9acf70ba12174dd09c32476813"
+ }
+ },
+ {
+ "sourceId": "rc87-08ebbddcb7e50d7f",
+ "sourceDigest": "0c85d275fb8fd44c146f1ffee295a98ab340a7182ecdefc33c9ca95b2ff72306",
+ "targetDigest": "ae9eb9459a81dfcb5a77d3f033101145d2ce16017ebe0ef4b7d69a1c89ed7d5c",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry-vite-build.test.ts :: keeps package imports legal when @master/css appears first in the import block -> packages/vite/tests/plugins/style-entry-vite-build.test.ts :: keeps package imports legal when @master/css appears first in the import block. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "15d8b363b49ee1ff0bd75f8ddb3aec2b303cea1370449acb23fa02ab1e3b6078"
+ }
+ },
+ {
+ "sourceId": "rc87-84acc9250ce6f4e8",
+ "sourceDigest": "bfe4f31034e46c7b048b69f97912282d401c2e0780c795e8767bb01b4df53ba1",
+ "targetDigest": "975d3f8ee561df1bbc9154fa876baf463de5a42a59dd1da68c58957a8edfc5ac",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry.test.ts :: serve transform keeps native imports before generated CSS when @master/css comes first -> packages/vite/tests/plugins/style-entry.test.ts :: serve transform keeps native imports before generated CSS when @master/css comes first. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "9b41b9b74de3e3702f4f92675fc458e47bad86a686168d67968cbb05700a587b"
+ }
+ },
+ {
+ "sourceId": "rc87-52307c22d15207f6",
+ "sourceDigest": "8e8b406a4ab3318df37c9c2155d957b1b4861ea10ca17a2b4e2152f34d1eac11",
+ "targetDigest": "6f6bc4bf8375de35332d1cc03b23bab31999090fc7c8258845d54da6d20996ee",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry.test.ts :: non-generated modes emit package base CSS for Master imports without generated utilities -> packages/vite/tests/plugins/style-entry.test.ts :: non-generated modes emit package base CSS for Master imports without generated utilities. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "535a2e9017bab1d926d890e60dc349a7585f846604305657e79adefd331e4251"
+ }
+ },
+ {
+ "sourceId": "rc87-1923fa0372b572de",
+ "sourceDigest": "570d701e4632725df4beaf5e4a59ce4e586503b31237fc2453cf303f68fed273",
+ "targetDigest": "e30574feca9610a60158152c6d4695afffe82f4b556f5dbf7ca4a8406b06f5b2",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry.test.ts :: non-generated modes preserve native imports when consuming empty Master entries -> packages/vite/tests/plugins/style-entry.test.ts :: non-generated modes preserve native imports when consuming empty Master entries. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "edcc24a5c24b3a35feb7f1946036ff2ed0fdf7d93d8116f1af1966c39d19b56e"
+ }
+ },
+ {
+ "sourceId": "rc87-c9d8806f571973d4",
+ "sourceDigest": "bef7d6eec609f4e97ce4962fc243a0743dcdaf764e5312684bda079ffb864f4b",
+ "targetDigest": "e78dd26c1c95bd03fd9c437bdce427ae6a46a0f9da36c2fd0fb8abe3eb30f299",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry.test.ts :: ignores standalone @master stylesheets without @master/css imports -> packages/vite/tests/plugins/style-entry.test.ts :: ignores standalone @master stylesheets without @master/css imports. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "4f89e7bafb00f040d44dcde93c74279727c21b0ae8f737575722193af30425a2"
+ }
+ },
+ {
+ "sourceId": "rc87-9b67d767485c6314",
+ "sourceDigest": "5f24fdedf1a5fc9732128c657b6d0d2bf77b57b9e9e22d396b8b86ab094156ae",
+ "targetDigest": "2b196dce6198516b35e39a5ac9c4bfb9ee06bed92562db7dcd3d5e03eee61a92",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vscode/tests/server-bundle.test.js :: server bundle embeds referenced MDN JSON modules -> packages/vscode/tests/server-bundle.test.js :: server bundle embeds referenced MDN JSON modules. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "30a55d824a9f7a56a27fc1607348e88e09834c8de26c7b5200ade5534685d412"
+ }
+ },
+ {
+ "sourceId": "rc87-fa92a6eb10d7d185",
+ "sourceDigest": "aa9c78d103562eac34166d1e850243658c89f65987015732452980bbea3f6561",
+ "targetDigest": "5846a220b3465da1f416f0002ce1be8b23c8b3c1953e81e1b51f90cc50edc476",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/webpack/tests/plugin.test.ts :: keeps imported native CSS and keyframes in the generated CSS virtual module -> packages/webpack/tests/plugin.test.ts :: keeps imported native CSS and keyframes in the generated CSS virtual module. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "cac5793a17e06c88d410946c5b7e0dbdc395dc10e69e554343d715838725478c"
+ }
+ },
+ {
+ "sourceId": "rc87-7b3f20f279ae6e88",
+ "sourceDigest": "5f54a0e92cfaa11da10f49e7dce8e6fd43089d99e19336d1b595d76dea4e6b57",
+ "targetDigest": "b6791a110c5ff6b58d3914a5c7f475c9e3198f2cb249e751515b0f4b61a437f3",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/webpack/tests/plugin.test.ts :: style loader keeps local style dependencies registered after invalid @compose -> packages/webpack/tests/plugin.test.ts :: style loader keeps local style dependencies registered after invalid @compose. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "9611836c35e22f730da163b1f745119e5970471e7129853431202cdb96dab6c7"
+ }
+ },
+ {
+ "sourceId": "rc87-7551338099ad9f97",
+ "sourceDigest": "3f0b1f051db7c8a407fa8c66018882987937abeec15fb902c2457a040cf2d620",
+ "targetDigest": "4f316caa734bbdeb338d95f713309505dcd07aecbebe1c69dd03546479dd20c5",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/webpack/tests/plugin.test.ts :: locally lowers explicit @reference CSS Modules and reports reference dependencies -> packages/webpack/tests/plugin.test.ts :: locally lowers explicit @reference CSS Modules and reports reference dependencies. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "fb1f83f1c6669fbf95186d2821b8ab4796a2949b806a1435d02dd0cf4d1b4374"
+ }
+ },
+ {
+ "sourceId": "rc87-1300f23ca2eac111",
+ "sourceDigest": "2f6ede7b16a00c1b552f104004284f274e11b02eea476cda267856356a9045e7",
+ "targetDigest": "d7bc84f5bde4c4581e6cdc6e79c0d4d184c82dcf3a2ac542be71601c7c439034",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/webpack/tests/plugin.test.ts :: keeps virtual manifest file dependencies after invalid CSS -> packages/webpack/tests/plugin.test.ts :: keeps virtual manifest file dependencies after invalid CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "a63d5c3745d1b159e4d91446e76ca14f2f314db8ed303795469fb8517486ae94"
+ }
+ },
+ {
+ "sourceId": "rc87-b8a6d8670385ca12",
+ "sourceDigest": "bf4e13f7244c82ccefc5817857f77b61514b64a4abe7ce52f57b55d61a3cd3bf",
+ "targetDigest": "19d3d8d7c2cb3538f1af87dbb4b8c6109fd2f4cba0a7d7dfdc6e93fac477f806",
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/webpack/tests/plugin.test.ts :: keeps ?master-css-manifest file dependencies after invalid CSS -> packages/webpack/tests/plugin.test.ts :: keeps ?master-css-manifest file dependencies after invalid CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "9fd1a009e69c3c9e317b8bcfaf3c07b795c81079b1a982c8546c76c0a6c74e06"
+ }
+ },
+ {
+ "sourceId": "rc87-34b360f01bdb969a",
+ "sourceDigest": "e10f0c9375b46f4854e4b3e6013f0fc144d719072dc0ff979dbf2e6472c9539d",
+ "targetId": "rc87-34b360f01bdb969a",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Compose-removal integration of 9d9817241: Retire the Compose stylesheet lint/structural-fix command case with removal of directive linting and --fix-directives; class-list lint/fix remains supported.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "bf91760e825e87e80cc8cf5e6d18921cc2ca3714051cd8b8cbc14164178c8933"
+ }
+ },
+ {
+ "sourceId": "rc87-df9664faca11e790",
+ "sourceDigest": "c0b683196261fc03e6230dd36adca5de2a4a717093d512998967d51a0f483e61",
+ "targetDigest": "54182d18d4d026ee00f2a93edd7283cc29bc8080b9e15c2021d83b19a30fe8e8",
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "afe5a1ec57d0a3bc71507773dbe8a34c9021566396cd799c35de3ff745a38b67"
+ }
+ },
+ {
+ "sourceId": "rc87-2a99b8b5109ece51",
+ "sourceDigest": "4d97440344558fbd004dcbdc62e3a1e3b71a1e57672dd3e037d0059f61eae39e",
+ "targetDigest": "07f2d94bf2b763b9e5337437dac1a4d0bb907db1a02c3a1a9b4e902e7dda628c",
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "681cc3420a7a5488be9255da813976f5890d36ad92182f530b18c6f508163f52"
+ }
+ },
+ {
+ "sourceId": "rc87-2ba6a6e063ae1357",
+ "sourceDigest": "ba2148e2cdd9f7b881268f99ce87f69a66bed4bcdc344983dc5f2943406b6db0",
+ "targetDigest": "6c042cc94d3df84ce513243d7672b0f6e14fc28a23b2df9ea9043952068dc07f",
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Remove automatic stylesheet lint/fix configuration; keep markup linting and explicitly leave CSS to CSS tooling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "b5df56da5ec08933c87f853f6a6610a72a935e02aaa21db5f8af491c2b38ac71"
+ }
+ },
+ {
+ "sourceId": "rc87-c7422ce75f6698ce",
+ "sourceDigest": "d64eaca39e37bf8e5fa5f3c59b4bd1006dbf5a6d00df45b714a0f99c93f8813a",
+ "targetId": "rc87-c7422ce75f6698ce",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "ce8c07b9bad2365d01aeccd3aadc086e53b9a91e0fb1359d303eb3d8e801f4c0"
+ }
+ },
+ {
+ "sourceId": "rc87-ddf1ea7c99ef3d20",
+ "sourceDigest": "d64eaca39e37bf8e5fa5f3c59b4bd1006dbf5a6d00df45b714a0f99c93f8813a",
+ "targetId": "rc87-ddf1ea7c99ef3d20",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "49ac7db562ce35e8f2c22639a16b9a22b675a9df735145a33f8b097c50a29f20"
+ }
+ },
+ {
+ "sourceId": "rc87-ce76b58a6a371473",
+ "sourceDigest": "d64eaca39e37bf8e5fa5f3c59b4bd1006dbf5a6d00df45b714a0f99c93f8813a",
+ "targetId": "rc87-ce76b58a6a371473",
+ "targetDigest": null,
+ "proof": "approved-contract-removal",
+ "reason": "Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "44b1b634eccfa41849613a1ed669b5d1010f7592d0706ed135ccbbf5c8e72896"
+ }
+ },
+ {
+ "sourceId": "rc87-8ad65d3ab79a1f48",
+ "sourceDigest": "c207ef39336748ae6323e8f9733d936e005fa0b7b117a8f32bb9aad774140b90",
+ "targetId": "rc87-27e60509430513e9",
+ "targetDigest": "ace904c0aa312ec6c9f931285c2e281bb05e9629df0f5614b5605a45f4f2a8a0",
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Assert the removed stylesheet config is absent and recommended config contains only source configuration.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "ebe09e5051e36d5588eae2cf9dda21644bb09026a5eefe2526e3bc7303eefc5d"
+ }
+ },
+ {
+ "sourceId": "rc87-cce0d208b209b2eb",
+ "sourceDigest": "df00fdae0eb774276257b8172dd9cec36a4223b3c8540bfe0c102708e11f31e9",
+ "targetDigest": "a25a264a47e0c764a97b5fe9147604ada2ee743170063354c2cd307d8f977ad0",
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "97d750adb88c9603c175bc111185839687d133b3cfa2b76e5420963f17cde1ef"
+ }
+ },
+ {
+ "sourceId": "rc87-057f64e6f899063a",
+ "sourceDigest": "24e1c8cebce31d502263084fd59eff6228173cdc825d5cf4a0a1d8c20f0a680e",
+ "targetDigest": "7e80c48215904c0af08dd5245190e121e40b4473452a35cda9a1b6b2a12bc2a5",
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "0941fa7a8ec9350cd08ac3cdd3a34c6a25ae9a07fad0b1ba49c13ce3b479f111"
+ }
+ },
+ {
+ "sourceId": "rc87-4d3a4318c7c80d47",
+ "sourceDigest": "614c61308e7c12dd8c2b8fdc206b3fce5b5b00c683ccb89f950215e0a253f32e",
+ "targetDigest": "d0e7ea203025f7f41728f56b22405fb88a5bd9e2d580993d1dafd25b2105bae4",
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "9bdc4bffde35e46409edfcc16c17c72ad172ac314af66de108ed93faf4565482"
+ }
+ },
+ {
+ "sourceId": "rc87-c9dc0a318d3d099c",
+ "sourceDigest": "38abe58d284e9ed5aa721551425c78d0e6f149541143a298697f35e59fde35af",
+ "targetDigest": "01f5374d1f6894d205ec956560806d4ac9dd402c5ea7308fbede8fba4e83c9d7",
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "1cfec4591051a9e00e1d34615b38f52647a6e0197bc07f6fd115f38718f51f50"
+ }
+ },
+ {
+ "sourceId": "rc87-7d4098ee94edaa69",
+ "sourceDigest": "7cebfebc33ef52e6d153b26d25398b8e67f8f8c9c963fabb8d50b5e410de804c",
+ "targetDigest": "476ae7af9a5187c589328eafb1c90426f2d348f9f86d33764e676d620476f9ba",
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "0e926fc12c38c10f2b943a40141f41f452ccaedf50386a3bff44056307ebd8b1"
+ }
+ },
+ {
+ "sourceId": "rc87-3c895256e4ada270",
+ "sourceDigest": "65a4141289437558edcd825e52cbcdee1c0c4797601f4513985bdc90d0f07862",
+ "targetId": "rc87-2296a08861e42312",
+ "targetDigest": "2e26db7f9b49c0ff9fdbbe2a21c00eb052edbddda693f086d13c057acf1f7f38",
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "139536a634d8679534a5fb2bb242bdb3a0a046af4370455e313fbf4d88c716f3"
+ }
+ },
+ {
+ "sourceId": "rc87-8f612ed6cfd8a913",
+ "sourceDigest": "f4b8ac676237fbd8ee9a1673668f0c4b0ca998d482addd225a8538487eae66a1",
+ "targetId": "rc87-af46134c2e32e600",
+ "targetDigest": "19afcb2cd1c36baecb1fd6cc224aa3e4340b5bf568b4c44b08691b71fc0e98c0",
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "5939ac25dd22d00442d487903e34880a7af257a9ae489b66e32fb829877fb211"
+ }
+ }
+ ],
+ "surfaces": [
+ {
+ "surfaceId": "public-api-contract",
+ "baselineDigest": "b3b0acf8161aae00605cd11228b77129eb1b12e37079fd6681dead85e23a5deb",
+ "targetDigest": "dc932f985895b73e74651d6c657a2855c78c3ffcfd22ee9e8cbe8b26ac7f3564",
+ "proof": "approved-contract-change",
+ "reason": "Retain the previously reviewed API and census changes through 704996ec. The separately reviewed freeze delta removes MasterCSSManifestUtilityKind and MasterCSSManifestUtilityMatcherValueSegments from @master/css-schema/manifest and records ABI 13 and languageVersion 3. It adds or removes no package entrypoint. Explicit QA approval covers this exact inventory digest. Compose-removal integration updates the census from ABI 13 to 14 and removes five retired Compose type exports from binding, schema and tooling; package subpaths remain unchanged.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "2bea184ca44377ee9156fc7bdbe3823c0194b924def36aa0dec91fb9bca29c2d"
+ }
+ },
+ {
+ "surfaceId": "binding-version-contract",
+ "baselineDigest": "a647d5bdf4761c7b9ce77609df36cfedb1bb4385e5d5572830b75f28fd165389",
+ "targetDigest": "34c602f88db14176975785917fb088331f4092ce7d2ca7c78c079ca14fc2fe40",
+ "proof": "approved-contract-change",
+ "reason": "The separately reviewed freeze delta advances ABI 11 to 13 and languageVersion 2 to 3. Manifest, hydration, transition, lexer and lint remain version 1; validator and diagnostic report remain 3, language batch remains 4, and source batch remains 2. Explicit QA approval covers this exact version surface digest. Complete Compose removal advances ABI 13 to 14, diagnostics report 3 to 4 and lint batch 1 to 2; Manifest 1 and language 3 remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "cb223eaf9ef3009bb9bd47f8caf88f585e279259916d80dca4d3b33173edcb87"
}
},
{
diff --git a/parity/rust-refactor-contract-ledger.json b/parity/rust-refactor-contract-ledger.json
index 9fb6a818d..c401ed8b1 100644
--- a/parity/rust-refactor-contract-ledger.json
+++ b/parity/rust-refactor-contract-ledger.json
@@ -13,26 +13,27 @@
},
"target": {
"ref": "latest-target-change",
- "commit": "f6d4fb9851fb4490afa241ee3bea4373287bb624",
- "cases": 1479
+ "commit": "658f46c8fbeded44811c283fe1a463cf1d03654c",
+ "cases": 2864
},
"evidence": {
"path": "parity/rust-refactor-contract-evidence.json",
"version": 1,
- "records": 28,
- "surfaces": 4
+ "records": 545,
+ "surfaces": 8
},
"summary": {
"byStatus": {
- "approved-contract-change": 13,
- "preserved-exact": 1005,
- "verified-superset": 15
+ "approved-contract-change": 494,
+ "approved-contract-removal": 26,
+ "preserved-exact": 488,
+ "verified-superset": 25
},
"surfaceByStatus": {
- "approved-contract-change": 4,
- "preserved-exact": 4
+ "approved-contract-change": 8,
+ "preserved-exact": 3
},
- "addedCases": 446
+ "addedCases": 1857
},
"surfaces": [
{
@@ -52,15 +53,15 @@
".ai/contracts/api-census.json"
],
"digest": "b3b0acf8161aae00605cd11228b77129eb1b12e37079fd6681dead85e23a5deb",
- "targetDigest": "71d3cf79e4fc73d15e08823e7cd73f89ed3c457ea7ca3e220d0b8c60107a148b",
+ "targetDigest": "dc932f985895b73e74651d6c657a2855c78c3ffcfd22ee9e8cbe8b26ac7f3564",
"status": "approved-contract-change",
"proof": "approved-contract-change",
- "reason": "The published-internal compiler binding intentionally adds createCompilerRenderBindingSession and its options type so compiler rendering can use the dedicated Rust session without changing package exports.",
+ "reason": "Retain the previously reviewed API and census changes through 704996ec. The separately reviewed freeze delta removes MasterCSSManifestUtilityKind and MasterCSSManifestUtilityMatcherValueSegments from @master/css-schema/manifest and records ABI 13 and languageVersion 3. It adds or removes no package entrypoint. Explicit QA approval covers this exact inventory digest. Compose-removal integration updates the census from ABI 13 to 14 and removes five retired Compose type exports from binding, schema and tooling; package subpaths remain unchanged.",
"approval": {
- "approvedBy": "Aron ",
- "approvedAt": "2026-08-01T12:55:21Z",
- "reviewRef": "codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c",
- "scopeDigest": "3b75d42c2c71d39855e342bf207cc5991e8ab76b4b30f46d94fc24e29f6c6fd3"
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "2bea184ca44377ee9156fc7bdbe3823c0194b924def36aa0dec91fb9bca29c2d"
}
},
{
@@ -80,15 +81,49 @@
"packages/binding/src/protocol.ts"
],
"digest": "a647d5bdf4761c7b9ce77609df36cfedb1bb4385e5d5572830b75f28fd165389",
- "targetDigest": "16cda28179e52dde2751c452a0ce4ee5cff1612ade85bb50c90caf258b1b89dd",
+ "targetDigest": "34c602f88db14176975785917fb088331f4092ce7d2ca7c78c079ca14fc2fe40",
"status": "approved-contract-change",
"proof": "approved-contract-change",
- "reason": "The native binding ABI version intentionally advances from 5 to 6 for the emittedGlobals session operation; Manifest, hydration, transition, and language protocol versions remain unchanged.",
+ "reason": "The separately reviewed freeze delta advances ABI 11 to 13 and languageVersion 2 to 3. Manifest, hydration, transition, lexer and lint remain version 1; validator and diagnostic report remain 3, language batch remains 4, and source batch remains 2. Explicit QA approval covers this exact version surface digest. Complete Compose removal advances ABI 13 to 14, diagnostics report 3 to 4 and lint batch 1 to 2; Manifest 1 and language 3 remain.",
"approval": {
- "approvedBy": "Aron ",
- "approvedAt": "2026-08-01T12:55:21Z",
- "reviewRef": "codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c",
- "scopeDigest": "be6e83be61df4f4a673dc2faa19853e668760c9cdf6e185e1413d98ffafd86d8"
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "cb223eaf9ef3009bb9bd47f8caf88f585e279259916d80dca4d3b33173edcb87"
+ }
+ },
+ {
+ "id": "native-compiler-raw-surface",
+ "files": [
+ "packages/binding/src/compiler-binding-contract.ts"
+ ],
+ "digest": "c6b7384f29a6bdae96a002b7827b9e2c7b3d7bb994e32adaee4a70abba4324d5",
+ "targetDigest": "c1cd47bbac3e82935d87c0b0561e71c5cb074a5ade5bbca5b9ef1d6bec7692a4",
+ "status": "approved-contract-change",
+ "proof": "approved-contract-change",
+ "reason": "The native compiler removes compileThemeCSS and host nativeSupport filtering, and adds migrateRC plus stylesheet graph preparation/rendering/compilation. Existing CSS-directive, manifest, dependency and inspection entry points remain. These are the approved migration, preserve-and-diagnose and native stylesheet delivery contracts.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T09:11:22.490Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "415fc1a363ad91bf38693c8fbc2aa4979df28dabc80b78354a3fb9d31695869d"
+ }
+ },
+ {
+ "id": "wasm-compiler-raw-surface",
+ "files": [
+ "packages/binding-wasm-compiler/src/index.ts"
+ ],
+ "digest": "7bb965109d8a7b8ebbb475dd67224b0b96493eb21700d553b49891ae4ee648bf",
+ "targetDigest": "507d877ae52f114dc9414b79f3559c13ad4f74886e6fddb1311cefa48f6a47f1",
+ "status": "approved-contract-change",
+ "proof": "approved-contract-change",
+ "reason": "The Wasm compiler mirrors native migrateRC and stylesheet graph preparation/rendering/compilation and removes compileThemeCSS and output-filtering support flags. This is the same approved Rust-owned compilation contract on both bindings.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T09:11:22.490Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "b65eaebed42a9b6050c9557ce935ffbc7971ec23cc860a5730687ee19e5e3472"
}
},
{
@@ -97,15 +132,15 @@
"packages/binding/src/native-loader.ts"
],
"digest": "ddcb6c249f568ae66a85713793ad1517b28466848414e7068bbb25ecf3102b9a",
- "targetDigest": "c0fe94acfe7dccfe5e71270fcfd5849e1418185a267640bab7a9a22c89e084ac",
+ "targetDigest": "5057b2da9d1de9e4cea516ddd361b7e05a4ea7ad996ff812f7300f4237263a31",
"status": "approved-contract-change",
"proof": "approved-contract-change",
- "reason": "The native engine-session raw surface intentionally adds registerEmittedGlobals to mirror the Rust engine operation used by runtime and scanner hosts; existing methods remain unchanged.",
+ "reason": "The native engine adds emitted-global registration and executionState for exact resource/rule hydration and removes ensureClassRulesWithNativeSupport. Native declaration discovery remains inspection-only; generation preserves declarations independent of host support.",
"approval": {
- "approvedBy": "Aron ",
- "approvedAt": "2026-08-01T12:55:21Z",
- "reviewRef": "codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c",
- "scopeDigest": "ad6fda408474c6d1576332ca4b340905689a1ac8cd1af1e4f4257ed7bc460636"
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T09:11:22.490Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "1525142eb2028b73c58dacf875415c3d02c5b6ddfaf433a1b2ec9b7696491528"
}
},
{
@@ -114,15 +149,15 @@
"packages/binding-wasm-engine/src/index.ts"
],
"digest": "da686c4f607ed538a4e61f3a15ed0bd559cf18e320f8c6a28b47d58eb187e012",
- "targetDigest": "6563b821480af814fefd211bd636c111eb9e361c83ea6ac467462df820ab4474",
+ "targetDigest": "ca033fbbf6a3e9cca84804d3d49d69485ea9a5085ce8c86cee64da0bd22cba06",
"status": "approved-contract-change",
"proof": "approved-contract-change",
- "reason": "The private generated Wasm render-session declaration matches wasm-bindgen's Vec JavaScript ABI. The engine-session raw surface now includes registerEmittedGlobals, and its wrapper intentionally exposes the operation so runtime and scanner hosts can coordinate emitted global reference counts. Package exports and existing session behavior remain unchanged; the new method is covered across Wasm binding, engine, runtime, and scanner tests.",
+ "reason": "The Wasm engine adds emitted-global registration and executionState. Its wrapper removes the CSS.supports generation handshake; the render-session private declaration uses the generated boolean-array ABI. The approved plan preserves CSS and verifies actual hydration/resource ownership.",
"approval": {
- "approvedBy": "Aron ",
- "approvedAt": "2026-08-01T12:40:43Z",
- "reviewRef": "codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c",
- "scopeDigest": "667e82c6b9260004f951d92075a9edc30c56825eb0674a208919b8298e75c9cc"
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T09:11:22.490Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "16bffebc84aabbd9712bc62ae76ea18c466fc6190f1496412ddd7cd34ce9450a"
}
},
{
@@ -136,6 +171,25 @@
"status": "preserved-exact",
"proof": "exact-source"
},
+ {
+ "id": "language-batch-contract",
+ "files": [
+ "packages/binding/src/protocol.ts",
+ "crates/mastercss-language/src/lib.rs",
+ "crates/mastercss-schema/src/lib.rs"
+ ],
+ "digest": "a77053bed4610a35ef92202e2385f1b6f626a45db097e55d658395f21e948545",
+ "targetDigest": "c883844892117362024847c0730cf7c8366e0e11a30b28e9d09973bc17ff4ed6",
+ "status": "approved-contract-change",
+ "proof": "approved-contract-change",
+ "reason": "The approved language contract adds named token classification, replaces valid booleans with separate match/syntax/value/browser statuses, includes complete diagnostics, and retains function completion and structured recursive color expressions. Batch version 4 binds this wire format.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T09:11:22.490Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "2c40adb427bc4b403c5c80c187aabe4980232494b250f6e8f575746ca0c1d376"
+ }
+ },
{
"id": "integration-rendering-options-contract",
"files": [
@@ -147,9 +201,16 @@
"packages/nuxt/src/options.ts"
],
"digest": "2a3221834490cd8fddc853aff2bb1bdea0c3f30fa9083512961c2ef3fb5e61ef",
- "targetDigest": "2a3221834490cd8fddc853aff2bb1bdea0c3f30fa9083512961c2ef3fb5e61ef",
- "status": "preserved-exact",
- "proof": "exact-source"
+ "targetDigest": "b01643013d47a686698b74c9fc6c6826e676fa89e9cce2f4e8645d6fb39fff45",
+ "status": "approved-contract-change",
+ "proof": "approved-contract-change",
+ "reason": "All six integration option surfaces now default to static and derive runtime enablement from the explicit mode. Contradictory runtime options are rejected by the shared resolver. Vite/Webpack/Next and the shared schema add pruneNativeCSS with false default. This is the explicitly approved static-first/pruning-opt-in change.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T09:11:22.490Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "2923dbfdb3cf0d572e37b4b8e7d4235abcf7e88d8c081a2d61a0b94af3a69d70"
+ }
}
],
"entries": [
@@ -174,18 +235,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-1a9fdd25ef07d349",
+ "id": "rc87-2195cea925037a1a",
"package": "astro",
"file": "packages/astro/tests/core.test.ts",
- "line": 48,
- "title": "defaults to progressive mode",
+ "line": 50,
+ "title": "defaults to static mode",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "effe9377a3b16b9f126db73ca94806b8eac215d3594a87f2752ea3dfd1e838a2"
+ "sourceDigest": "12f2e7d049265a7521fdb064f19b8df0cf0a05cda2e13765d2513624010359ee"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/astro/tests/core.test.ts :: defaults to progressive mode -> packages/astro/tests/core.test.ts :: defaults to static mode. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "0e466bca431e3d23f4c0a1b0f83e57890a23c5eef733d6e27a5b36dc3ac106b3"
+ }
},
{
"source": {
@@ -208,19 +276,25 @@
],
"priority": "P0"
},
- "status": "verified-superset",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-38e614a90e947c6e",
"package": "astro",
"file": "packages/astro/tests/core.test.ts",
- "line": 52,
+ "line": 54,
"title": "adds Astro middleware and runtime script in progressive mode",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e83c6a132c65f0e332d86e4d3474165c1d64f8fdac8551eb72551ff9e1d6473d"
+ "sourceDigest": "5edf2557b5083c9abf14bd528c0d7c19ea6191d19011831430178fed951f8978"
},
- "proof": "verified-superset",
- "reason": "The progressive Astro integration assertions remain and the target also verifies emitted-global plugin registration."
+ "proof": "approved-contract-change",
+ "reason": "Astro progressive middleware, runtime injection, manifest uniqueness and SSR externals remain tested with explicit mode:progressive after the approved static default. Scanner/style-entry plugins are now required, not excluded, to deliver owned native CSS and emitted globals consistently.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T08:47:41.470Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "c6c47d5fa562e1d6c1945cb4e6047382a019a8915d1bcbf1a48cdb010f82f1c4"
+ }
},
{
"source": {
@@ -243,19 +317,25 @@
],
"priority": "P0"
},
- "status": "verified-superset",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-c0aa293b8c818099",
"package": "astro",
"file": "packages/astro/tests/core.test.ts",
- "line": 70,
+ "line": 72,
"title": "uses Astro middleware without runtime script in pre-render mode",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "18a7fa906d36827b33bb1604278ced824c5d54279b1198b04d65a8427739dbb7"
+ "sourceDigest": "b149baca79749eb26c53857cb03407370e4a224dc21924c4ca4246849e3a7266"
},
- "proof": "verified-superset",
- "reason": "The pre-render Astro integration assertions remain and the target also verifies emitted-global plugin registration."
+ "proof": "approved-contract-change",
+ "reason": "Astro pre-render still registers middleware without runtime injection, keeps a single manifest plugin and omits the generic Vite pre-render plugin. The target adds emitted-globals registration; these assertions preserve the pre-render behavior while expanding resource ownership coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T08:47:41.470Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "99d80a4555e471df6ae15b0a77a959062eb2970a104e2d40598eab0a3af4b21e"
+ }
},
{
"source": {
@@ -283,7 +363,7 @@
"id": "rc87-c961f40d27c9f197",
"package": "astro",
"file": "packages/astro/tests/core.test.ts",
- "line": 83,
+ "line": 85,
"title": "injects runtime script without Astro middleware in runtime mode",
"runner": "vitest",
"kind": "test",
@@ -312,18 +392,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-40029968737ebd2f",
+ "id": "rc87-78177b9621c7bdd8",
"package": "astro",
"file": "packages/astro/tests/core.test.ts",
- "line": 92,
- "title": "honors runtime=false in progressive mode",
+ "line": 94,
+ "title": "rejects an explicit runtime option that contradicts its mode",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b8b9a8503444741ff61bc99e091a026d966c12b1dbcea70299ab713a552846ea"
+ "sourceDigest": "0c9843f30360d95ffcd6fdbaa8a00b9ea0dd6cea1a8dfa8e5715043ae233bb53"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/astro/tests/core.test.ts :: honors runtime=false in progressive mode -> packages/astro/tests/core.test.ts :: rejects an explicit runtime option that contradicts its mode. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "8765830ba25f5706e35646abbae8446ac7dbaee9f86787bb3112fb00e2f4fe38"
+ }
},
{
"source": {
@@ -352,7 +439,7 @@
"id": "rc87-398a9d17a486d9a5",
"package": "astro",
"file": "packages/astro/tests/core.test.ts",
- "line": 106,
+ "line": 107,
"title": "preloads the runtime manifest JSON in runtime static builds",
"runner": "vitest",
"kind": "test",
@@ -382,18 +469,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-54cb03c4c412f3ba",
"package": "astro",
"file": "packages/astro/tests/core.test.ts",
- "line": 141,
+ "line": 142,
"title": "does not preload the runtime manifest outside runtime injection static builds",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "139e960c79540dba75eb7e8d9fce97f0d5afd7973833b6395d001d8ff2490f16"
+ "sourceDigest": "ea8e1212eceaf020af3ce965d391c61a3ffc142207f0238c6b54918bf8ccb3bb"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/astro/tests/core.test.ts :: does not preload the runtime manifest outside runtime injection static builds -> packages/astro/tests/core.test.ts :: does not preload the runtime manifest outside runtime injection static builds. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "4ad39b403d86a7f1e9a5ead2b9f75e8386c1ef021762f15a06365eefb1e2cbb2"
+ }
},
{
"source": {
@@ -422,7 +516,7 @@
"id": "rc87-dd02f376a5d4a327",
"package": "astro",
"file": "packages/astro/tests/core.test.ts",
- "line": 171,
+ "line": 172,
"title": "externalizes static build hydration manifests",
"runner": "vitest",
"kind": "test",
@@ -485,7 +579,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-0bcff8d19b2e7836",
"package": "astro",
@@ -494,9 +588,16 @@
"title": "keeps middleware page output isolated across responses",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d038ebf7074c48d0c2d4b63e6d249c57b5cf365c329399cb6c5921f0fb5157b1"
+ "sourceDigest": "35aab610c992d91b41d2754480d31e1fb7db1be3ff0fd526b29395f9a7ac9ac2"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"keeps middleware page output isolated across responses\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "8491767494da51d031dc79f056a918f760ba7309dbe97f176c5688dcd35dbb29"
+ }
},
{
"source": {
@@ -646,7 +747,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-77861ecb988baaac",
"package": "binding-wasm-compiler",
@@ -655,9 +756,16 @@
"title": "loads the isolated compiler Wasm surface",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f1f1bc7be61bd62471737f24d6711c287bbc13b27f677754c22749da8a2c382b"
+ "sourceDigest": "7ffd0c78a9158a0f7994f00e9b4a583cf38e8aac9b14dc97c10dc960c3277242"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/binding-wasm-compiler/tests/compiler.test.ts :: loads the isolated compiler Wasm surface -> packages/binding-wasm-compiler/tests/compiler.test.ts :: loads the isolated compiler Wasm surface. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "3ce6842ad4254bf5c99f8cf708d10d7bffc603fe07a2f73a7b262639d8b06036"
+ }
},
{
"source": {
@@ -739,7 +847,7 @@
],
"priority": "P2"
},
- "status": "verified-superset",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-886095b27074cf6c",
"package": "binding-wasm-engine",
@@ -748,10 +856,16 @@
"title": "loads the packaged Wasm artifact in Node without fetch support for file URLs",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e0de264a272004f70c6996c83bd4fc8e99b6d98abf1d162750ea1d31707a12df"
+ "sourceDigest": "ebd65a3374a0f2e63acc87c5d2121af5ac7003c34023fa54830e284ea6e829d2"
},
- "proof": "verified-superset",
- "reason": "The original packaged Wasm artifact assertions remain and the target adds native-declaration coverage for Node hosts without CSS.supports."
+ "proof": "approved-contract-change",
+ "reason": "Reviewed at implementation HEAD 2079d665a: Node file-URL Wasm loading, matched inspection, empty snapshot, exactly one block mutation, layered CSS and disposal are asserted. Explicit var(--stripe) resource generation remains covered. The manifest fixture now uses the approved languageVersion:3 contract.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T15:06:47.464Z",
+ "reviewRef": "parity/sizing-resolution-validation.md#historical-evidence-review",
+ "scopeDigest": "e2c98b255fc1599b6daea47926740dd6349781e6a6b4b7ce71a835ec78da062b"
+ }
},
{
"source": {
@@ -771,7 +885,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d1faf9e76f9fc0fa",
"package": "binding-wasm-engine",
@@ -780,9 +894,16 @@
"title": "passes emitted globals to the Wasm-owned session",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6c0090b466ba8a936b1da1c6c5839744a3ac98a5de0536b11ecc9d297c24468a"
+ "sourceDigest": "add9324076be02e07caf3fbfc5863d26eaa2ca62df97b8f88f8786c5eff3ef03"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/binding-wasm-engine/tests/session.test.ts :: passes emitted globals to the Wasm-owned session -> packages/binding-wasm-engine/tests/session.test.ts :: passes emitted globals to the Wasm-owned session. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "fa6a1c745c14ad205200f2251f566144b0daa5861b290a1144b994958c1c6006"
+ }
},
{
"source": {
@@ -802,19 +923,25 @@
],
"priority": "P2"
},
- "status": "verified-superset",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-534a5dbe18105a92",
+ "id": "rc87-01b18af25a7b490a",
"package": "binding-wasm-engine",
"file": "packages/binding-wasm-engine/tests/session.test.ts",
"line": 129,
- "title": "uses a batched CSS.supports handshake for browser-native declarations",
+ "title": "preserves native declarations independently of browser CSS.supports",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "09261e359de7fc13b9b2f2dbe64062d54c49e295219d52a4e22d1e5d99c41ddf"
+ "sourceDigest": "2a0102f5595d849144e6e0642eac0acdc0ca276ecf50b4851e975d828e653f84"
},
- "proof": "verified-superset",
- "reason": "The existing browser CSS.supports handshake assertions remain and the target adds the equivalent Wasm render-session assertion."
+ "proof": "approved-contract-change",
+ "reason": "Reviewed at implementation HEAD 2079d665a: the renamed preservation test stubs CSS.supports to reject made-up:nope but still asserts both rules and exact CSS; RenderSession also preserves accent-color:transparent. This implements the approved removal of host-support filtering, with languageVersion:3.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T15:06:47.464Z",
+ "reviewRef": "parity/sizing-resolution-validation.md#historical-evidence-review",
+ "scopeDigest": "851e32bb775bf29a232b98d81a5401c5797282108c4dc786488bd08098f9da4e"
+ }
},
{
"source": {
@@ -896,7 +1023,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-37cea833d014908d",
"package": "binding-wasm-tooling",
@@ -905,9 +1032,16 @@
"title": "loads the isolated source tooling Wasm surface",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e802d35ba945a50229321d8f7d1c0db67cd0e78dd41de70a558286d52934b7c1"
+ "sourceDigest": "5a620fea6f24247ec6e269f93bad6aab1ee07b29c379199a260781d0d220e326"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/binding-wasm-tooling/tests/source.test.ts :: loads the isolated source tooling Wasm surface -> packages/binding-wasm-tooling/tests/source.test.ts :: loads the isolated source tooling Wasm surface. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove canonicalComposeDirective assertions; advance all nine lint input/output version fields from 1 to 2 and both inspection-report version fields from 3 to 4, preserving other response assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "dc2f9ada43a5418d4ad62407e28bc6e8f00b17887754afbc5d0578e82b3c7e92"
+ }
},
{
"source": {
@@ -929,7 +1063,7 @@
],
"priority": "P2"
},
- "status": "verified-superset",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-97379238aa6e9c52",
"package": "binding",
@@ -938,10 +1072,16 @@
"title": "normalizes operation failures and disposes engine sessions idempotently",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a13f11ecfd946a2fbe1e1fe86f78e132a4688175523e438963c1207f7ac13fe8"
+ "sourceDigest": "fa84688920c14eeda4852d17e786d653d5b88e225d2dc8aa65c85ed821b93155"
},
- "proof": "verified-superset",
- "reason": "The original error normalization and idempotent disposal assertions remain and the target adds native declaration rendering coverage."
+ "proof": "approved-contract-change",
+ "reason": "Reviewed at implementation HEAD 2079d665a: double disposal remains safe and later snapshot throws structured SESSION_DISPOSED in the engine domain. The explicit var(--stripe) resource and background shorthand assertions remain; manifest fixtures now use languageVersion:3.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T15:06:47.465Z",
+ "reviewRef": "parity/sizing-resolution-validation.md#historical-evidence-review",
+ "scopeDigest": "352d057c88c3e07f89aef5c905c14865f2f7ba1453696badf08d442abc2150a6"
+ }
},
{
"source": {
@@ -1326,7 +1466,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-d7b316a093146b78",
"package": "binding",
@@ -1335,9 +1475,10 @@
"title": "rejects unsupported lint request versions with a structured error",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b339ad763f79ddbbea1b0ab36e93cf19f90ac537ade13dc3b448601b0f150e7c"
+ "sourceDigest": "eee2f7011e955f58257d789f9d1b8a01e8a1df8cc7a6fe3f44feff6bae63233c"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "The unsupported lint request still uses version 0 with the same class list and asserts INVALID_LINT_REQUEST, with disposal in finally unchanged. Only the otherwise empty session fixture selects the current languageVersion:3; no syntax, generated CSS or lint request expectation changes."
},
{
"source": {
@@ -1359,7 +1500,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-076ced27803a6943",
"package": "binding",
@@ -1368,9 +1509,16 @@
"title": "loads raw value policy candidates and diagnostics",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d6c00439f89a9faf63be1dc86bfc3ff6414240eb556163388e543c1eff387ab8"
+ "sourceDigest": "6c1bbc674c9699d8b9bac063969e7a891822381702c1d1a856b8e7967257f2b0"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/binding/tests/loader.test.ts :: loads raw value policy candidates and diagnostics -> packages/binding/tests/loader.test.ts :: loads raw value policy candidates and diagnostics. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance native lint request/result versions from 1 to 2; candidate, suggestion and diagnostic assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "f73237eb02e6bbf25aabf48b9653c383f0c3d9e1ee61d24a41202c4bfae357e8"
+ }
},
{
"source": {
@@ -1392,7 +1540,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-6d625141262f1f5b",
"package": "binding",
@@ -1401,9 +1549,16 @@
"title": "loads the manifest-driven language session",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4a19a7240e226a4d6b91227372b3241fcd71cf63bf2227fd5d23ff623f9c48df"
+ "sourceDigest": "dea7a005ec0f78642b1ef1cdfa22d63003dfb7e8af892473a5fbf2ce5081d6ad"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/binding/tests/loader.test.ts :: loads the manifest-driven language session -> packages/binding/tests/loader.test.ts :: loads the manifest-driven language session. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "07e8234222f13ed15095a696376afdcca0e291c3ac880e540317f6395c374039"
+ }
},
{
"source": {
@@ -1425,7 +1580,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-86d9f2b60f6413f0",
"package": "binding",
@@ -1434,9 +1589,16 @@
"title": "keeps source cache and valid/invalid class state behind an opaque handle",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9001f8b0225dc5b4cfd56f892b9e44a06bbbfaff1f6dd804efd19cd80b79fddb"
+ "sourceDigest": "0614e5d2563bb33188fc0502c1b1258870a7bc90013f784e8495075c55f32c44"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/binding/tests/scanner-state.test.ts :: keeps source cache and valid/invalid class state behind an opaque handle -> packages/binding/tests/scanner-state.test.ts :: keeps source cache and valid/invalid class state behind an opaque handle. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "65bc48e56671176124afd372d73097dbe446ed6ac613d8804edcf21dc5907a86"
+ }
},
{
"source": {
@@ -1458,7 +1620,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-9e148d7296283e73",
"package": "cli",
@@ -1467,9 +1629,16 @@
"title": "generates CSS only through the explicit generate command",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2531bd2b090295f603060aff288660434a85bb9669f83aa968dd6b7e77e66a58"
+ "sourceDigest": "34536d2ffed03c8d5c5f89a6b4a36e680337edb93ebcadc7cd43be7f103ef274"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"generates CSS only through the explicit generate command\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "610240999cf7346be8509f619d289d5ff0e0c100f43de2ccc95b14e4d5469aa6"
+ }
},
{
"source": {
@@ -1686,7 +1855,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-7f3c754a921a8dcf",
"package": "cli",
@@ -1695,9 +1864,16 @@
"title": "prints scanner state and missing CSS diagnostics as json",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "83398cb4df095d39b708dc08dcbdf1085023453b38cee0b6a8c85d83a1534b73"
+ "sourceDigest": "6fb8884a6ea479e0ec518629c98254b4657e51a50653cb2fe1058eb656da7083"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/core.test.ts :: prints scanner state and missing CSS diagnostics as json -> packages/cli/tests/core.test.ts :: prints scanner state and missing CSS diagnostics as json. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance the diagnostics report expectation from version 3 to 4; scanner, lint and missing-CSS assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "eff7c641d4cd86404d9cb70aadad1351948c73346ecb9b09c44ce1240ca67323"
+ }
},
{
"source": {
@@ -1719,7 +1895,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-a42d3dbfa54e969a",
"package": "cli",
@@ -1728,9 +1904,16 @@
"title": "can include generated CSS and stylesheet entry metadata without failing",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c7dc47628a7eb3b3b994786a499254ebbac9902fc46ae09d68f5de477012c9ae"
+ "sourceDigest": "4d774534d227f83ead562f94660b5ad35723dfad17c275e3e7299cff203ba878"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/core.test.ts :: can include generated CSS and stylesheet entry metadata without failing -> packages/cli/tests/core.test.ts :: can include generated CSS and stylesheet entry metadata without failing. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "ab141853d4c9bfe29351caf7007fe125f9468445a8b4436a42c5cdea6363bb8f"
+ }
},
{
"source": {
@@ -1752,18 +1935,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-a0fbed40746be454",
+ "id": "rc87-9b7ccec53a85e8c4",
"package": "cli",
"file": "packages/cli/tests/core.test.ts",
"line": 159,
- "title": "reports stylesheet entry errors without hiding scanner diagnostics",
+ "title": "reports entry errors without inspecting against a fallback manifest",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "df85aa3ef403399b8c217124fd00d377973818f78d023d2525c87670883717e6"
+ "sourceDigest": "3d3cfe7c8d6affd572f5fe04262dd72159e885c494042ea8371e409b3397bb2e"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/cli/tests/core.test.ts :: reports stylesheet entry errors without hiding scanner diagnostics -> packages/cli/tests/core.test.ts :: reports entry errors without inspecting against a fallback manifest. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "2c700e45e0f0645ea1264480f349e4524b91e0e39e9b042632904dae2de28f38"
+ }
},
{
"source": {
@@ -1785,18 +1975,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-91a008ff477415bc",
"package": "cli",
"file": "packages/cli/tests/core.test.ts",
- "line": 187,
+ "line": 188,
"title": "prints machine-readable diagnostics as json",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "88fe70a8e8ea705314e811f60faa5b28e7f1beb7898125f4b8f87801656143ad"
+ "sourceDigest": "744e4981753fdc204d54be0fdd5f9b68afa9ffe6e19f805471ef9f6bcbea907d"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/core.test.ts :: prints machine-readable diagnostics as json -> packages/cli/tests/core.test.ts :: prints machine-readable diagnostics as json. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance the diagnostics report expectation from version 3 to 4; scanner, lint and missing-CSS assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "5510ca0d1da7aa1a583f1b61676bf2ded5c0ba2d1201a2364c65063ea38a77b5"
+ }
},
{
"source": {
@@ -1818,18 +2015,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d695e1cbe3d61773",
"package": "cli",
"file": "packages/cli/tests/core.test.ts",
- "line": 208,
+ "line": 209,
"title": "lints stdin buffers without requiring ESLint parser configuration",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3b040bfe36070fa9ea467858738c06aad248420794fa2babc1a55152c113894b"
+ "sourceDigest": "07b2bfedbe69adcbda613dc968105dafde3b52491e5ba660683b1480d9462200"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/core.test.ts :: lints stdin buffers without requiring ESLint parser configuration -> packages/cli/tests/core.test.ts :: lints stdin buffers without requiring ESLint parser configuration. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "9da3f802191297824fd4ae1b3afc12cbbbafcd5f0637beb24558cc7b1d79fe9f"
+ }
},
{
"source": {
@@ -1851,18 +2055,16 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-49471ac2b718f0fc",
- "package": "cli",
- "file": "packages/cli/tests/core.test.ts",
- "line": 231,
- "title": "includes stylesheet compose diagnostics in the default source set",
- "runner": "vitest",
- "kind": "test",
- "sourceDigest": "a0aa8dda2fe828d5513906ff8fd54b586cd44a1270355971e1e62fcee8cbd4e5"
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/core.test.ts :: includes stylesheet compose diagnostics in the default source set -> packages/cli/tests/core.test.ts :: includes stylesheet compose diagnostics in the default source set. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire the Compose stylesheet lint/structural-fix command case with removal of directive linting and --fix-directives; class-list lint/fix remains supported.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "baa178e5ed094052627c5267fbfa4f29dd711b87573f330838ce1957fabf144a"
+ }
},
{
"source": {
@@ -1889,7 +2091,7 @@
"id": "rc87-8748d625ec5f782d",
"package": "cli",
"file": "packages/cli/tests/core.test.ts",
- "line": 253,
+ "line": 232,
"title": "reports manifest preflight diagnostics",
"runner": "vitest",
"kind": "test",
@@ -1917,18 +2119,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-8dcba64252750664",
"package": "cli",
"file": "packages/cli/tests/core.test.ts",
- "line": 273,
+ "line": 252,
"title": "fixes class-list diagnostics",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "63196bf8684f782c3a4a105e5f2c8a04d43655b5ddb607df98d5af8b6e04c1b6"
+ "sourceDigest": "84a6271554b13a848aa9bec45f1b374ef47eccfde968d2566104ea29a3cc1679"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/core.test.ts :: fixes class-list diagnostics -> packages/cli/tests/core.test.ts :: fixes class-list diagnostics. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f361206bed1230668e06de805272f2420ae619d79f0755f7e1ceaed462a1711a"
+ }
},
{
"source": {
@@ -1950,18 +2159,16 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-34b360f01bdb969a",
- "package": "cli",
- "file": "packages/cli/tests/core.test.ts",
- "line": 285,
- "title": "does not write structural directive fixes unless explicitly allowed",
- "runner": "vitest",
- "kind": "test",
- "sourceDigest": "e10f0c9375b46f4854e4b3e6013f0fc144d719072dc0ff979dbf2e6472c9539d"
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Compose-removal integration of 9d9817241: Retire the Compose stylesheet lint/structural-fix command case with removal of directive linting and --fix-directives; class-list lint/fix remains supported.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "bf91760e825e87e80cc8cf5e6d18921cc2ca3714051cd8b8cbc14164178c8933"
+ }
},
{
"source": {
@@ -1981,7 +2188,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-09e2f62fb4ee5891",
"package": "cli",
@@ -1990,9 +2197,16 @@
"title": "basic extract",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "972bcddf2e19b9dd209c3a18f2afd9da3cd63fd940f349487afaa21cb8c5935b"
+ "sourceDigest": "967acdb3b7770a50bad60b2e1a0793158e4ece9a95fcf559c9706a32d80e6054"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/extract/test.ts :: basic extract -> packages/cli/tests/extract/test.ts :: basic extract. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a78ce4a673afb0211fd641f2bab61ddedca4fb480a3eba6dbbf7f0519eb978dc"
+ }
},
{
"source": {
@@ -2043,7 +2257,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-338f505049a4542b",
"package": "cli",
@@ -2052,9 +2266,16 @@
"title": "start watch process",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5e644f166e36eadb1dcfdc25176cc9ca8623c1ad57cb7d22e402daaf8b4e02be"
+ "sourceDigest": "159dcf9e5521f3724435f0e1a9183dc035d90582c190acb683e9feef92ce2a1f"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/cli/tests/extract/watch/test.ts :: start watch process -> packages/cli/tests/extract/watch/test.ts :: start watch process. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "1f4040b1bcf344ac7cfb92779c57862764d2624765375e1d27ce36a5ce1ff437"
+ }
},
{
"source": {
@@ -2137,7 +2358,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-37e35a8768a9d50b",
"package": "compiler",
@@ -2146,9 +2367,16 @@
"title": "universal compileManifest lowers directives with a base manifest",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b856ce7fdd73b5f39ddb92f09169bc91e2ac375f51f699aff0c05a959b908cc3"
+ "sourceDigest": "68451a2ca62056a4a565ff99633f52f0a295896dda36d434435271d2722a47ab"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"universal compileManifest lowers directives with a base manifest\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "2c9ff316fd997acfbbda6cba16ebfca77e55e562c128f1d16aee7c5ea0aa7368"
+ }
},
{
"source": {
@@ -2174,7 +2402,7 @@
"id": "rc87-c50de2912619cae5",
"package": "compiler",
"file": "packages/compiler/tests/browser.test.ts",
- "line": 32,
+ "line": 25,
"title": "universal compileManifest rejects @reference directives",
"runner": "vitest",
"kind": "test",
@@ -2204,7 +2432,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-96e4080672dc65a9",
"package": "compiler",
@@ -2213,9 +2441,16 @@
"title": "lowers theme variables, modes, semantic components, utilities, and variants into one manifest",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5872c81ea795bd4636e2dab6e56f331a0d9045f5e97853a4ccf39e270b94c87d"
+ "sourceDigest": "5fd68aaf54bba14bd292d5f3b2134f36b4f6fd781d0a333281034852d53af639"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers theme variables, modes, semantic components, utilities, and variants into one manifest -> packages/compiler/tests/css-first-core-migration.test.ts :: lowers theme variables, modes, semantic components, utilities, and variants into one manifest. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "bf1f4fc69464a3237bbff3a6361752342328df30ec8dc777de302241f6235518"
+ }
},
{
"source": {
@@ -2239,18 +2474,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-78e8c7d3c16908ec",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-migration.test.ts",
- "line": 130,
+ "line": 128,
"title": "lowers managed enum patterns as semantic utilities without replacing exact utility precedence",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e7498f9e70054f2788174c084db84a16f0bf4667662e98692d810cc8f7b0baaa"
+ "sourceDigest": "692b8cafe4416dcce3a213babbb282a1f668a36191e60ec15d1ca4b6e9a1f29a"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers managed enum patterns as semantic utilities without replacing exact utility precedence -> packages/compiler/tests/css-first-core-migration.test.ts :: lowers managed enum patterns as semantic utilities without replacing exact utility precedence. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "8e6ddc395d9c3efe1f6506c2d9f5e7816a0cca2d9a69671bebe7c712e2a1002d"
+ }
},
{
"source": {
@@ -2273,18 +2515,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-e313a21fe3a417c3",
+ "id": "rc87-2c4b5d9e404c2f65",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-migration.test.ts",
- "line": 197,
- "title": "lowers managed dynamic colon entries without restoring fixed keyword aliases",
+ "line": 195,
+ "title": "lowers separate named token and raw parameter entries",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1d13dcbd75e5d4395681c580c43dea32a13cd65812c656eacf5ea467fc4fe0a2"
+ "sourceDigest": "805b741dd5736ac396981b7f96efec60c2a2e6e4b6188a9bbfd85ab02fa809e8"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers managed dynamic colon entries without restoring fixed keyword aliases -> packages/compiler/tests/css-first-core-migration.test.ts :: lowers separate named token and raw parameter entries. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "9b0ee6db0c5e9e8e0f70b497f9b4cf78fe41a789a0e916ade02346b3f2b7aaea"
+ }
},
{
"source": {
@@ -2308,18 +2557,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-0a84fe0c03239a4f",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-migration.test.ts",
- "line": 399,
+ "line": 312,
"title": "rejects unsupported managed enum pattern syntax",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c664b9c7f1f424358e0c3593aef794487566a760c1b5a4389e0af6eee7bff69f"
+ "sourceDigest": "5512ff854a90cb344c44886c0a8b7ca475fc28079b67ae4a8d74b064f056b529"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/css-first-core-migration.test.ts :: rejects unsupported managed enum pattern syntax -> packages/compiler/tests/css-first-core-migration.test.ts :: rejects unsupported managed enum pattern syntax. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a2007c419f1a1b844201d4f80111d140a837965c91f03c8dfe24edc097255a30"
+ }
},
{
"source": {
@@ -2343,18 +2599,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-6c6698375612d791",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-migration.test.ts",
- "line": 489,
+ "line": 401,
"title": "rejects unsupported managed dynamic colon syntax",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f4b272a55e298d45e59992d7f9c57e7c416fa71412ce4de130f8d0d90ec99d00"
+ "sourceDigest": "eff8c083fcc9cc2902696268d6b4df758c5584dd8b13773cfb8cab56b4b39862"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/css-first-core-migration.test.ts :: rejects unsupported managed dynamic colon syntax -> packages/compiler/tests/css-first-core-migration.test.ts :: rejects unsupported managed dynamic colon syntax. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "2dc73935fa825b0bcb027492305083114e550cac169c06e7d295c9af9b0c69c6"
+ }
},
{
"source": {
@@ -2383,7 +2646,7 @@
"id": "rc87-62cdbac5c00e0baa",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-migration.test.ts",
- "line": 571,
+ "line": 483,
"title": "does not consume @utility as a Master CSS directive",
"runner": "vitest",
"kind": "test",
@@ -2412,18 +2675,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-77a4ffb0adb8514d",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-migration.test.ts",
- "line": 583,
+ "line": 495,
"title": "lowers dark and light shorthand variant blocks like explicit variant blocks",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "fb2e0939ef6088969ece84609f013ce3c29d3f8805d7c2583bc5196e5de55ef8"
+ "sourceDigest": "b2b0b1cf16010bc040c9300deec0fdee229fc6b3fb48f69a441397a5bcfcec13"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers dark and light shorthand variant blocks like explicit variant blocks -> packages/compiler/tests/css-first-core-migration.test.ts :: lowers dark and light shorthand variant blocks like explicit variant blocks. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "25d38b42dc1e0ab17b8cae1dc29f5ce5c9ba31a97e36212b3db5ccd04845d951"
+ }
},
{
"source": {
@@ -2446,18 +2716,16 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-e350ddb11d14db44",
- "package": "compiler",
- "file": "packages/compiler/tests/css-first-core-migration.test.ts",
- "line": 658,
- "title": "keeps compose canonicalization rewrites output-equivalent",
- "runner": "vitest",
- "kind": "test",
- "sourceDigest": "be8a72dcfeea39814dec91b5807a8f6f3ba3fbe32f5e6f274daf31eacc377ce2"
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: keeps compose canonicalization rewrites output-equivalent -> packages/compiler/tests/css-first-core-migration.test.ts :: keeps rewritten compose blocks in their authored condition order. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire Compose lowering/expansion-order or refresh-count behavior with the removed lowering implementation; native ordering and removed-directive diagnostics have separate Rust and native/Wasm coverage.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "8b1d4895047e9cb2461f064bd0b3a4925270dca0540fd3621d5c308c18e63789"
+ }
},
{
"source": {
@@ -2480,18 +2748,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-67f9d6a7675a0bf8",
+ "id": "rc87-3ff3d5483ac3d7d8",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-migration.test.ts",
- "line": 717,
- "title": "keeps base declarations before matching responsive declarations",
+ "line": 569,
+ "title": "keeps authored responsive declarations before later base declarations",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "82c85b1f358d3b5eac3aa53f3d79fe436b71bee6ee73388eea4ddab3e7a3d43e"
+ "sourceDigest": "df2bb1525e1123b90025153822aed01ce99a89337d787b8519a238a7787eb061"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: keeps base declarations before matching responsive declarations -> packages/compiler/tests/css-first-core-migration.test.ts :: keeps authored responsive declarations before later base declarations. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "7f0dbd170dc1a4a372ba6318cbeb6f353c06162b2319d8d37008fbf9e4887dbe"
+ }
},
{
"source": {
@@ -2514,18 +2789,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-8daa6e7865747a18",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-migration.test.ts",
- "line": 741,
+ "line": 579,
"title": "keeps custom modes explicit behind @variant",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "609f72ea36026034b91e6a411bb27768f579955b5f5c14b7fbd95eab9c6a1a37"
+ "sourceDigest": "80f6bb97c7a28041af4de27c8ae419b82805f4c5c04cb9e9fe5ceba869a2431b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/css-first-core-migration.test.ts :: keeps custom modes explicit behind @variant -> packages/compiler/tests/css-first-core-migration.test.ts :: keeps custom modes explicit behind @variant. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "25d089ba9b5a7c5a1479cc98274d1b647f73f86e9e0cc37647bac440f2b2e124"
+ }
},
{
"source": {
@@ -2549,18 +2831,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-5e7f87aa19abfb63",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-migration.test.ts",
- "line": 773,
+ "line": 609,
"title": "rejects legacy at-prefixed and selector variant directive syntax",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cfc51000cd41a77b504897cea1b4e583af3fedcde22d670440a1e3652e1c90ed"
+ "sourceDigest": "84e991d660d9bb2741cb4ba25a9d45ad8a3662923934fbd58782869b377f2e50"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"rejects legacy at-prefixed and selector variant directive syntax\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "97715a594dfe2b839d1a5dc452437e3874425800e6011bed8fd760688cc80dc9"
+ }
},
{
"source": {
@@ -2584,19 +2873,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-483e149697dc82dc",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 49,
+ "line": 23,
"title": "keeps nested selectors aligned with native CSS descendant and compound behavior",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7b1c90684a03f4bd22b3a69aaa6cb6cebb7257cb5020471f56e3fe6e9d73321e"
+ "sourceDigest": "cb829edd46a5989a08a8d9613d138d2df5fd4b2fca1bf9b31a590cda710bdd8d"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: keeps nested selectors aligned with native CSS descendant and compound behavior -> packages/compiler/tests/css-first-core-execution.test.ts :: keeps nested selectors aligned with native CSS descendant and compound behavior. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "8623e497871976e0a77babd4bd9ecc21f337f14f87888f05f6b91ee7ebe65c64"
+ }
},
{
"source": {
@@ -2619,19 +2914,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-e8e3813db2ec4ad2",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 80,
+ "line": 54,
"title": "replaces old JS merging intent with ordered CSS imports through baseManifest lowering",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "dae7408fe6df6e0b680e5a4070fae57cfe187c6bb8043114ce8b888681acdb38"
+ "sourceDigest": "868a49f93958ef4ecaee050a9cdd8be539dc9daa3ab859783b2a022bcb004d2f"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: replaces old JS merging intent with ordered CSS imports through baseManifest lowering -> packages/compiler/tests/css-first-core-execution.test.ts :: replaces old JS merging intent with ordered CSS imports through baseManifest lowering. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "8bed920099d646abc84a2d771018b8d8ac55671d3c44f6e0aeaabb0bdc46a6ca"
+ }
},
{
"source": {
@@ -2655,19 +2956,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-02d08fe1bc65b74f",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 106,
+ "line": 80,
"title": "lowers managed animations and removes them when no class references remain",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "42600805fed50d7238605b44eab8be1db372d406312b97b84b7d9dd3a8b58d09"
+ "sourceDigest": "55f6c27aff7e486808c9b98912606fc67d48eb6685d1e2f2761cf65bed594997"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers managed animations and removes them when no class references remain -> packages/compiler/tests/css-first-core-execution.test.ts :: lowers managed animations and removes them when no class references remain. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "306f088189e9ed98a927a5e272a1b82aa2bccb9b7f32a26dd74cf0b39f5103a3"
+ }
},
{
"source": {
@@ -2691,19 +2998,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-b8890f0ef73504fa",
+ "id": "rc87-0c53862b26319af2",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 141,
- "title": "lowers class mode defaults without the old JS Config API",
+ "line": 115,
+ "title": "uses explicit base values and mode activation without implicit defaults",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "dc3ecd2a209d3e4614e1e0819399a4063907767558ae06d3e779945c19953c47"
+ "sourceDigest": "6424504fa7b6b3e15381ac10b00866e94a7ef7ca8d4424a7337595c7f238f7f5"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers class mode defaults without the old JS Config API -> packages/compiler/tests/css-first-core-execution.test.ts :: uses explicit base values and mode activation without implicit defaults. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "804936fd9bbb3b6ef418d30088abf34e94422b39b4c5bf9f0070c224b94cf54f"
+ }
},
{
"source": {
@@ -2727,19 +3040,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-86ca35133d982e44",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 178,
+ "line": 136,
"title": "lowers color variables, mode values, aliases, and alpha references",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f25aed4b10be7bc32a45cd3d9c2a5555d6185afa74e4a276f3dabf2548e4edea"
+ "sourceDigest": "a0bef2421ebf8aaa1b877f429552019639fe396af752775fb246af6b31f6cb8f"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers color variables, mode values, aliases, and alpha references -> packages/compiler/tests/css-first-core-execution.test.ts :: lowers color variables, mode values, aliases, and alpha references. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "11c56da81c899d6f4e6108e4bac5de1534c8de9c585c4693d044e60711426423"
+ }
},
{
"source": {
@@ -2762,19 +3081,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-4f1e602c12d3061e",
+ "id": "rc87-95bd401346e17973",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 214,
- "title": "lowers stylesheet --alpha() in theme, managed declarations, and native CSS",
+ "line": 171,
+ "title": "preserves native --alpha() in theme, managed declarations, and native CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "10c85eae5d8d3a63f2ca26960d97f5069f446ce750f51d1d02be04d561f81397"
+ "sourceDigest": "74673840449e561df6a0a9cd43959780fe7ea2d83a3bd140561beda2eeba484e"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers stylesheet --alpha() in theme, managed declarations, and native CSS -> packages/compiler/tests/css-first-core-execution.test.ts :: preserves native --alpha() in theme, managed declarations, and native CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "87edf19b453525ec489300029a10078b024b0b4b83bde9b084642764503bdff6"
+ }
},
{
"source": {
@@ -2798,19 +3123,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-b44d1570fe7e01b9",
+ "id": "rc87-6a37ead5bfec5da7",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 239,
- "title": "rejects stylesheet token alias syntax and invalid --alpha() alpha values",
+ "line": 196,
+ "title": "preserves arbitrary native function arguments and custom-property data",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4ed40ea15f1fc70534c96ef746dc6dc36f57c217e329b32991f9dd3b37b2ba1e"
+ "sourceDigest": "473784a149976289cafee6a4e480c44dd1f4aeffd73f592e73941d04356e095e"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: rejects stylesheet token alias syntax and invalid --alpha() alpha values -> packages/compiler/tests/css-first-core-execution.test.ts :: preserves arbitrary native function arguments and custom-property data. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "301fd4f27eeca02de7af202002629a854d94b9563c3dbe8b1fb7b35c743d1c28"
+ }
},
{
"source": {
@@ -2839,7 +3170,7 @@
"id": "rc87-cf08d4e3d8dd79c9",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 254,
+ "line": 218,
"title": "ignores quoted variable references while collecting theme dependencies",
"runner": "vitest",
"kind": "test",
@@ -2870,19 +3201,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-61f5ceb3b7b3873f",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 266,
+ "line": 230,
"title": "resolves built-in and utility-owned theme namespaces before lowering composed definitions",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ec8c378826a08cc4f20c57fa34aa29c16fba277e60c9ca321b9ff0b6f35a9497"
+ "sourceDigest": "4d179783e4b01d8d049dbf0f991ccd5e38fa1b8f817c72f9ef72c486a0ea4943"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: resolves built-in and utility-owned theme namespaces before lowering composed definitions -> packages/compiler/tests/css-first-core-execution.test.ts :: resolves built-in and utility-owned theme namespaces before lowering composed definitions. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "de86e83f318b22234aa079d9d004fc133f577ca0bf8cda7b4bedf70f65e034fc"
+ }
},
{
"source": {
@@ -2906,19 +3243,16 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-47269d16db9c434b",
- "package": "compiler",
- "file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 338,
- "title": "lowers unquoted compose class lists from raw source",
- "runner": "vitest",
- "kind": "test",
- "sourceDigest": "1c038e0a1c9209d8e3f612e1e525dff989c10e7c07557c37183d732cedc6ec92"
- },
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers unquoted compose class lists from raw source -> packages/compiler/tests/css-first-core-execution.test.ts :: lowers unquoted compose class lists from raw source. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire Compose lowering/expansion-order or refresh-count behavior with the removed lowering implementation; native ordering and removed-directive diagnostics have separate Rust and native/Wasm coverage.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "1534f4271f7489d8861e38c391bb8cfc83d317eb98aca1487fdecd220cce0b3c"
+ }
},
{
"source": {
@@ -2941,19 +3275,16 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-7ae01c8856b342ec",
- "package": "compiler",
- "file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 384,
- "title": "batches independent managed style refreshes before native compose",
- "runner": "vitest",
- "kind": "test",
- "sourceDigest": "f8346de9359f85eb5438cec2939affcab25014bb7ca2278b204e7497fd2c127e"
- },
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/css-first-core-migration.test.ts :: batches independent managed style refreshes before native compose -> packages/compiler/tests/css-first-core-execution.test.ts :: reuses native declaration seeds before composing independent utilities. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire Compose lowering/expansion-order or refresh-count behavior with the removed lowering implementation; native ordering and removed-directive diagnostics have separate Rust and native/Wasm coverage.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "74a6a74a7a9caec35e1f9a2027a92f158b07fa570cae861192a9b2497a8d039a"
+ }
},
{
"source": {
@@ -2976,19 +3307,16 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-508a868dcc7d87d3",
- "package": "compiler",
- "file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 405,
- "title": "refreshes once before a managed compose dependency",
- "runner": "vitest",
- "kind": "test",
- "sourceDigest": "3689c5b048f51ca6cbfc3e8b47813dc1b86f7639ec9197da7e0850aaf9e6b8c8"
- },
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: refreshes once before a managed compose dependency -> packages/compiler/tests/css-first-core-execution.test.ts :: refreshes once before a managed compose dependency. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire Compose lowering/expansion-order or refresh-count behavior with the removed lowering implementation; native ordering and removed-directive diagnostics have separate Rust and native/Wasm coverage.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "06138c8aa7a371ca5e280a815cdcfe809b067289db0e8bf088172389f73f192b"
+ }
},
{
"source": {
@@ -3011,19 +3339,16 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-6ad281259cdea335",
- "package": "compiler",
- "file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 425,
- "title": "refreshes once for a multi-dependency managed compose group",
- "runner": "vitest",
- "kind": "test",
- "sourceDigest": "f35486b415d9ea7e567a8d27db7e3f77ddce1452333003832e90ec7df3472dd0"
- },
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: refreshes once for a multi-dependency managed compose group -> packages/compiler/tests/css-first-core-execution.test.ts :: refreshes once for a multi-dependency managed compose group. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire Compose lowering/expansion-order or refresh-count behavior with the removed lowering implementation; native ordering and removed-directive diagnostics have separate Rust and native/Wasm coverage.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "2bd0119baa70839a1a613a42eb641485750f78896778aef752e3534f9abede68"
+ }
},
{
"source": {
@@ -3046,19 +3371,16 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-1c89d39168c10bb5",
- "package": "compiler",
- "file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 449,
- "title": "refreshes pending managed definitions before native compose",
- "runner": "vitest",
- "kind": "test",
- "sourceDigest": "33557b4ced3d08cdbcb8c703a56b624b7d7b773b14cbe94fec4f81066109a325"
- },
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: refreshes pending managed definitions before native compose -> packages/compiler/tests/css-first-core-execution.test.ts :: refreshes pending managed definitions before native compose. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire Compose lowering/expansion-order or refresh-count behavior with the removed lowering implementation; native ordering and removed-directive diagnostics have separate Rust and native/Wasm coverage.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "57a72fee034db3ce36b4a66f7e186da6641afaf9c0b30d7bf4e762ca47b3ea7d"
+ }
},
{
"source": {
@@ -3082,19 +3404,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-49bff4bc61b57aea",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 471,
+ "line": 285,
"title": "rejects quoted and grouped compose class lists",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1df44c37ae32a2bc325e26d00afa3b6a81b4d120835755cc299c0c1d229be445"
+ "sourceDigest": "8629795c14caf4272d14f01b7be7cda5899373392ded25288f647787439b62f8"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: rejects quoted and grouped compose class lists -> packages/compiler/tests/css-first-core-execution.test.ts :: rejects quoted and grouped compose class lists. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "80c26653b69b8d8cd38f69321277fb36025a5af2515f38b89581e23da645e080"
+ }
},
{
"source": {
@@ -3118,19 +3446,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-c3ff2e816462e101",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 499,
+ "line": 313,
"title": "executes CSS-first number variables and native value functions through engine semantics",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b248e0901b0414035e52e9182b6d894db84d3d342a3c5a99b6f3066d367f98cb"
+ "sourceDigest": "4e83a0739f37df18cc7df76933925a302d36d353130294743a3846c71f1f6509"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: executes CSS-first number variables and native value functions through engine semantics -> packages/compiler/tests/css-first-core-execution.test.ts :: executes CSS-first number variables and native value functions through engine semantics. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "cd4b6a59846bd10d3fa4a92988600e9022d2dcde1e486ef22e662dd8734a5b4f"
+ }
},
{
"source": {
@@ -3154,19 +3488,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-9d104e2894cff55d",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 541,
+ "line": 353,
"title": "executes CSS-first unitful numeric variables without double conversion",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ceb68e6d3c75032d58b903fa3fa8edb2ccf755a5bd1218da88aeee8336090386"
+ "sourceDigest": "88e8f14f0fe41b1ac25b70bf59d6aa34a4524068f2a5d48d723d23dc8364cc92"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: executes CSS-first unitful numeric variables without double conversion -> packages/compiler/tests/css-first-core-execution.test.ts :: executes CSS-first unitful numeric variables without double conversion. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "5ae76c99ef1b25e7f6436139d74c278470f79bc22b0bd128f12dbe2f080493d5"
+ }
},
{
"source": {
@@ -3190,19 +3530,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-54a31f8abe5359f4",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 577,
+ "line": 389,
"title": "lowers inline theme variables without emitting their own theme rules",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a05db3c282d72bfdee4ffa6f0cff432e99accb149f570acecc292dd95c10db88"
+ "sourceDigest": "220aa4ba6c14227f77caa072fc85a36d41eb0e69baf3fc2db6715402d669908b"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers inline theme variables without emitting their own theme rules -> packages/compiler/tests/css-first-core-execution.test.ts :: lowers inline theme variables without emitting their own theme rules. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "528adf56b594f9663bf577057b1a8cfce921b7e94994fe8b55440a6c99f4d2c7"
+ }
},
{
"source": {
@@ -3227,19 +3573,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-c998ae2b052bfa29",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 602,
+ "line": 414,
"title": "lowers static theme variables and keyframes into initial resources",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c0f565703887a390f36a50042ea256719bf39406c6d8ad6317ef872081bea6ac"
+ "sourceDigest": "2f784486fdef3f30fadbf4f91a93923da412394b5cc7986f2ea36971acf7ed79"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: lowers static theme variables and keyframes into initial resources -> packages/compiler/tests/css-first-core-execution.test.ts :: lowers static theme variables and keyframes into initial resources. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "5a60bb95a594c0cad54b954cc416cb6e2eae70d32895696f9c1deac549ec81cc"
+ }
},
{
"source": {
@@ -3268,7 +3620,7 @@
"id": "rc87-4c0846457d2db711",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 658,
+ "line": 468,
"title": "rejects invalid static theme modifier combinations",
"runner": "vitest",
"kind": "test",
@@ -3304,7 +3656,7 @@
"id": "rc87-292cf9d0723f2750",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 694,
+ "line": 504,
"title": "rejects mode-specific inline theme variables in CSS source",
"runner": "vitest",
"kind": "test",
@@ -3340,7 +3692,7 @@
"id": "rc87-b7f9235d06235a39",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 708,
+ "line": 518,
"title": "rejects mode-specific and inline managed keyframes in theme blocks",
"runner": "vitest",
"kind": "test",
@@ -3370,19 +3722,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d315621d52fcfe2c",
"package": "compiler",
"file": "packages/compiler/tests/css-first-core-execution.test.ts",
- "line": 730,
+ "line": 540,
"title": "normalizes CSS color functions and preserves alpha alias dependencies through CSS-first lowering",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1a5f95a62d2e54bdeb6a31a75216345e91e81b864e7a2485feb2f5d9782d7426"
+ "sourceDigest": "78b91e1678db33a7e333bfdf179100cbfe1768aa2556b82899764a27fcfd9e3d"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/css-first-core-migration.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/css-first-core-migration.test.ts :: normalizes CSS color functions and preserves alpha alias dependencies through CSS-first lowering -> packages/compiler/tests/css-first-core-execution.test.ts :: normalizes CSS color functions and preserves alpha alias dependencies through CSS-first lowering. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "08d4e9e1e53798caa0b301fe5d7e14ace5215a6427c5e44e2b6579d195c74bba"
+ }
},
{
"source": {
@@ -3405,18 +3763,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-8e2904c1ab58a0dc",
"package": "compiler",
"file": "packages/compiler/tests/diagnostics/index.test.ts",
- "line": 16,
+ "line": 26,
"title": "reports scanner state, per-file discoveries, and missing CSS diagnostics",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "06ce23c4763d25a1e9aa51483b38bdb3d6e94d5d01e5381410921c497607abe1"
+ "sourceDigest": "ce5217fe1a9067a0a3a62d6cd82267804030fd1454952e7d9fefda3fc4007a82"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/diagnostics/index.test.ts :: reports scanner state, per-file discoveries, and missing CSS diagnostics -> packages/compiler/tests/diagnostics/index.test.ts :: reports scanner state, per-file discoveries, and missing CSS diagnostics. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance the diagnostics report expectation from version 3 to 4; scanner, lint and missing-CSS assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "0ec4c583cbc637ab51498665e8cd2bc1079ebda10d314b283efa3aeadfd29611"
+ }
},
{
"source": {
@@ -3439,18 +3804,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-3516c9bb81d10ca0",
"package": "compiler",
"file": "packages/compiler/tests/diagnostics/index.test.ts",
- "line": 59,
+ "line": 88,
"title": "includes generated CSS and stylesheet entry metadata",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "46c59a9a55806bdd3df4c2c0c538abbe92fcae8ea12479d1c575a4032b56b0df"
+ "sourceDigest": "31e4dbb034f9c11bad22c4d3b2f8629428023e482b654c7fb00805116b7887df"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/diagnostics/index.test.ts :: includes generated CSS and stylesheet entry metadata -> packages/compiler/tests/diagnostics/index.test.ts :: includes generated CSS and stylesheet entry metadata. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "30b557b0890269aaabc43aa20f26f0833ea6f39f727157810def0e33e9a7b978"
+ }
},
{
"source": {
@@ -3473,18 +3845,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-6e81d63acffb4178",
+ "id": "rc87-974acf676a480923",
"package": "compiler",
"file": "packages/compiler/tests/diagnostics/index.test.ts",
- "line": 87,
- "title": "reports stylesheet entry errors without hiding scanner diagnostics",
+ "line": 116,
+ "title": "reports entry errors without inspecting against a fallback manifest",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5efa36bf57511763088a265c0a53af2c9cb078c3d4cf95585796bc406ea92324"
+ "sourceDigest": "9ef50940cf8caef486ef9109576a23038ed6c83513e0f8dabaf76d63bdaf6bd3"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/diagnostics/index.test.ts :: reports stylesheet entry errors without hiding scanner diagnostics -> packages/compiler/tests/diagnostics/index.test.ts :: reports entry errors without inspecting against a fallback manifest. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "1f98023ae1fbb8fdb475fae1a7559472e1a920b444ed75dfc1e35e9da56d02ca"
+ }
},
{
"source": {
@@ -3633,7 +4012,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-7393f7c77328795c",
"package": "compiler",
@@ -3642,9 +4021,16 @@
"title": "compiles explicit CSS project entries",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f98e7fc63c9517ee9fc45f8372916f10b6e3cc2b8b14ae503b9784ae3f24644d"
+ "sourceDigest": "5e67a191b8dfe742049e79e98865435d3b297a75092670336421dd74a550a4a0"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"compiles explicit CSS project entries\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "eeac3e957f7e5c4433300529267b12698455764cccf968203b9449efd3b969b0"
+ }
},
{
"source": {
@@ -3697,7 +4083,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-e7f1f864cac62727",
"package": "compiler",
@@ -3706,9 +4092,16 @@
"title": "loads package entry preset manifest from CSS imports",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "60d85a0209d7a42fb50746a31733aca8750b1a11fc82e4ff255f65d7344d010c"
+ "sourceDigest": "fc0350a3426a80b4b37e44302ecd44f0913efd70624b65a2d13ba519dc7b1ca2"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"loads package entry preset manifest from CSS imports\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "20abc07398fa8cb995292b915bd26d775e10c849421aa91712d4cb20da2c847e"
+ }
},
{
"source": {
@@ -3761,18 +4154,19 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-4879634b7dc86bc0",
"package": "compiler",
"file": "packages/compiler/tests/project/test.ts",
- "line": 342,
+ "line": 359,
"title": "finds Master CSS workspace directories from package and CSS entries",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "afb6dc83b3513e1e43ccf0dfababd2f149ebf0b9e09af6c3a96b153c3cb4e12f"
+ "sourceDigest": "8e6ffd20ff973b22350fda30df45d007934e6aab989eb9dca0b90f4736f3a39a"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "All original package/CSS workspace fixtures and the exact returned-directory assertion remain. Added a generated .master/stylesheets tree containing both an entry marker and a dependent package.json, proving that generated outputs do not appear as new workspaces."
},
{
"source": {
@@ -3798,7 +4192,7 @@
"id": "rc87-31e325e70bd35ebd",
"package": "compiler",
"file": "packages/compiler/tests/project/test.ts",
- "line": 365,
+ "line": 387,
"title": "does not match sibling workspace path prefixes",
"runner": "vitest",
"kind": "test",
@@ -3825,18 +4219,19 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-f718aaba7ab8bda6",
"package": "compiler",
"file": "packages/compiler/tests/project/test.ts",
- "line": 387,
+ "line": 409,
"title": "resolves Master CSS workspace packages and optional language server",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8e871bf3492c47cf8d5fba102066995eff6a19feabeed5d3b811ba237c5202d2"
+ "sourceDigest": "dde5e0fc486a55b73e4528956490b6ad0b216c54bda5168a9ca4cfaab4f14f92"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete workspace package-resolution case. Its only change renames an empty export in a synthetic index.js fixture from builtinNativeValueNamespaces to builtinTokenNamespaces to match the current package contract. The test still checks all three resolved package directories and an empty error list, and adds no compatibility path or production export. The owning Compiler suite passes 491/491; this is preserved resolution coverage, not approval of an additional public API change."
},
{
"source": {
@@ -3862,7 +4257,7 @@
"id": "rc87-36dae0525398e2ab",
"package": "compiler",
"file": "packages/compiler/tests/project/test.ts",
- "line": 429,
+ "line": 451,
"title": "reports a missing workspace preset without throwing",
"runner": "vitest",
"kind": "test",
@@ -3894,7 +4289,7 @@
"id": "rc87-1a650fce125851a7",
"package": "compiler",
"file": "packages/compiler/tests/project/test.ts",
- "line": 483,
+ "line": 505,
"title": "reports invalid package exports as resolution errors",
"runner": "vitest",
"kind": "test",
@@ -3926,7 +4321,7 @@
"id": "rc87-04b15b8fc94dc0c8",
"package": "compiler",
"file": "packages/compiler/tests/project/test.ts",
- "line": 508,
+ "line": 530,
"title": "checks compatible package majors when versions are known",
"runner": "vitest",
"kind": "test",
@@ -3958,7 +4353,7 @@
"id": "rc87-a5eb364cb52fffb4",
"package": "compiler",
"file": "packages/compiler/tests/project/test.ts",
- "line": 515,
+ "line": 537,
"title": "serializes project manifests through the schema codec",
"runner": "vitest",
"kind": "test",
@@ -3990,7 +4385,7 @@
"id": "rc87-b46d12dcb37b7648",
"package": "compiler",
"file": "packages/compiler/tests/project/test.ts",
- "line": 565,
+ "line": 587,
"title": "rejects script config paths",
"runner": "vitest",
"kind": "test",
@@ -4019,7 +4414,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-8457f11ca701faac",
"package": "compiler",
@@ -4028,9 +4423,16 @@
"title": "uses referenced CSS as compose and variant context without outputting it",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2e83cb40b6d665f5fc376ebc79f8c3159ac1d4f6b8816fd9e2e6ca740c0465ed"
+ "sourceDigest": "80212aed30f635666498e99b5fc566497a64e0cf4a654bae595e878436f2d830"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/reference.test.ts :: uses referenced CSS as compose and variant context without outputting it -> packages/compiler/tests/reference.test.ts :: uses referenced CSS as compose and variant context without outputting it. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "00a1a65f177db155abd17f05d2cfd77a2f0ca5004e0adb5071bfbe91c7e89743"
+ }
},
{
"source": {
@@ -4053,18 +4455,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-df2379cc46e6cb8f",
"package": "compiler",
"file": "packages/compiler/tests/reference.test.ts",
- "line": 67,
+ "line": 57,
"title": "lets current definitions override referenced definitions",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e61d16ee5554b9010aaa1b383be755ec781d84e00a9524ab39aaa24ea049992b"
+ "sourceDigest": "85dac0f7c895aea65043b1d5c430dfe360ee85650c0edd1e344ae4190c37cd94"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"lets current definitions override referenced definitions\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "cf6c3613fa5aef146ed28ed85312ba6aad6f9ef1bac452284a681d6d56110c49"
+ }
},
{
"source": {
@@ -4087,18 +4496,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-06eb46320f280e80",
"package": "compiler",
"file": "packages/compiler/tests/reference.test.ts",
- "line": 96,
+ "line": 74,
"title": "reports references from project manifest entries and rejects circular references",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "584ba19cec07112a7220a24f39664ee39c426ae8d3df81485da80dd22bdbdb9f"
+ "sourceDigest": "df6d1d86dd9ef184ab5edb75b78d4aa312e4ad86043b11600cfd7ad92f3693f4"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"reports references from project manifest entries and rejects circular references\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "7244b8fbb3d8c0e666ae896f93eac5dd69c6b82a35c02096a902083e304a3e19"
+ }
},
{
"source": {
@@ -4121,18 +4537,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d0359cd0342f8ae5",
"package": "compiler",
"file": "packages/compiler/tests/reference.test.ts",
- "line": 120,
+ "line": 98,
"title": "keeps ordinary package imports before expanded Master CSS entries",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6eaea612e7c0d822a37b8def8411045d48f0af77130adc3d52f6161204a10d3d"
+ "sourceDigest": "a709b95f2dcd3ea29cf17e3c505705236c460e761ba8dfaf3b58f5b4e4e9b2d7"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/reference.test.ts :: keeps ordinary package imports before expanded Master CSS entries -> packages/compiler/tests/reference.test.ts :: keeps ordinary package imports before expanded Master CSS entries. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "0fa7f251433a7bba59a4d4b39d33f401d529717559116a6b4d1fef0820f19da1"
+ }
},
{
"source": {
@@ -4188,7 +4611,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-6ef0dd365e7230a1",
"package": "compiler",
@@ -4197,9 +4620,16 @@
"title": "renders class names with the compiled manifest",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a68e534c3a51da9e6e60833aa1dccdea9884b940b6415808d079ffc63aac2c93"
+ "sourceDigest": "f046a50be8d4c2ab5bf86a895fd782d6c1a1db216375f84c8c948b7d1afa7581"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"renders class names with the compiled manifest\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "a8deaef5da8cfc87e57b593b446024a8c0a6461a73b453fbf89876102b8fd181"
+ }
},
{
"source": {
@@ -4228,7 +4658,7 @@
"id": "rc87-6dc2c7fadb203cce",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/browser.test.ts",
- "line": 44,
+ "line": 37,
"title": "preserves native CSS while rendering class names",
"runner": "vitest",
"kind": "test",
@@ -4263,7 +4693,7 @@
"id": "rc87-bf10b5ac342d02f2",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/browser.test.ts",
- "line": 63,
+ "line": 56,
"title": "emits variables referenced by native CSS without class names",
"runner": "vitest",
"kind": "test",
@@ -4298,7 +4728,7 @@
"id": "rc87-79cd566ead5ed222",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/browser.test.ts",
- "line": 83,
+ "line": 76,
"title": "emits generated keyframes referenced by native CSS",
"runner": "vitest",
"kind": "test",
@@ -4333,7 +4763,7 @@
"id": "rc87-b1d784692f1ad2d7",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/browser.test.ts",
- "line": 95,
+ "line": 88,
"title": "does not duplicate generated keyframes defined by native CSS",
"runner": "vitest",
"kind": "test",
@@ -4362,18 +4792,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-680872391aab0c97",
+ "id": "rc87-0378ac978a15ae59",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/browser.test.ts",
- "line": 108,
- "title": "propagates directive warnings",
+ "line": 101,
+ "title": "rejects undefined theme modes with a structured diagnostic",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "bbae016feca0c506f32c584c5511e8a8730ac77c4fac86df6b023bd8c90d6d06"
+ "sourceDigest": "67d68bc6c46d23a2d0969a24313c5e6d5d73726a4db093831daa909c8df4324b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/stylesheet/browser.test.ts :: propagates directive warnings -> packages/compiler/tests/stylesheet/browser.test.ts :: rejects undefined theme modes with a structured diagnostic. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "09323f9df3fd27b7882e688abada5e93dc3a7fe77f4fc4470bd7e32f21f99ddb"
+ }
},
{
"source": {
@@ -4430,7 +4867,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-814905e211a00e2f",
"package": "compiler",
@@ -4439,9 +4876,16 @@
"title": "does not collect non-entry @master at-rules as extraction directives",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6ec7a20dbe9a778e56bd20f8bc52a457fb3159014955b88cc3d8bd4df11cdefb"
+ "sourceDigest": "13b7d2cbcc803d4121a4b7defa6464a31dc20611ef457d48eb4b08aed715a411"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/stylesheet/directives.test.ts :: does not collect non-entry @master at-rules as extraction directives -> packages/compiler/tests/stylesheet/directives.test.ts :: does not collect non-entry @master at-rules as extraction directives. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a885836ad74ef8eed5c05c12e84c398147075ec31d88ca7273fb1d1839e56a78"
+ }
},
{
"source": {
@@ -4464,18 +4908,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-8e935adce73acbb6",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/directives.test.ts",
- "line": 63,
+ "line": 64,
"title": "loads scanner directives from a managed CSS entry graph",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8d1f3d6c33a0b033f482f264dd0ea503df3e083bb5e149ae90f61734b8602737"
+ "sourceDigest": "313458146cedf4cf4d9246b22b56b18d5597effcd9721b4d4e828362643f6543"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"loads scanner directives from a managed CSS entry graph\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "6cafc53ce21988da3d78a02172250393fadddf2b0c4e88c15164a1244ef785b0"
+ }
},
{
"source": {
@@ -4498,18 +4949,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-7312b1740c4885fb",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/directives.test.ts",
- "line": 93,
+ "line": 94,
"title": "loads source directives from server template extensions",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3c91779d5e77f7143e552e55c99b99d7bc1e0c30e394d83c18f072692e851fd3"
+ "sourceDigest": "03d8b8bb103c7d8a4924714a14dd21e20640501368fc293cb044f43dbe65be86"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"loads source directives from server template extensions\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "99d9fdda9781e61929072761f5336ef7e7c9d6f6b68ca19c965b98d347e839be"
+ }
},
{
"source": {
@@ -4532,18 +4990,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-52c9eb78b1e18775",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/directives.test.ts",
- "line": 119,
+ "line": 120,
"title": "unions source directives and subtracts source not directives",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ecede6cd401bc24e2af70e0a0f06391f6a9b043f09cba09abaab5d890bd40a3e"
+ "sourceDigest": "fdd94cb0c0e8061a1637895982520c6bc713fcb320bf2a08fc6bf983d0ec8eac"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"unions source directives and subtracts source not directives\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "540a8460996a2c76cb39afbd66aaf8a61b23c7c885d13c0f654cdf4be2390594"
+ }
},
{
"source": {
@@ -4566,18 +5031,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-a21238bfb7a88fe8",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/directives.test.ts",
- "line": 149,
+ "line": 150,
"title": "uses stylesheet-local source directives for a pruned CSS root",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "277a070519866825dbff7c48164fcea8da9953017ae1ae67e7d4250188402b21"
+ "sourceDigest": "40cdc939154bc14684b4859446fb8b4ff5ea0bb6ff20ecfdea4cf89fb8221169"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/stylesheet/directives.test.ts :: uses stylesheet-local source directives for a pruned CSS root -> packages/compiler/tests/stylesheet/directives.test.ts :: uses stylesheet-local source directives for a pruned CSS root. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "3c1b60e704132108bc7f223ff8e44149ee3ab674494f9f68184f002ba03727ae"
+ }
},
{
"source": {
@@ -4601,18 +5073,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-c1e2ea9bda038754",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/directives.test.ts",
- "line": 183,
+ "line": 185,
"title": "merges imported stylesheet class directives into the parent root scope",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a20c415416bfa59c5061f4a67f9fbdfbded8cbb756896dcb8ee1c6dad18bddcf"
+ "sourceDigest": "68c62f5be4a0345a9099668887f8f44fa188e62048c5023f121c1fe642d1bc87"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/compiler/tests/stylesheet/directives.test.ts :: merges imported stylesheet class directives into the parent root scope -> packages/compiler/tests/stylesheet/directives.test.ts :: merges imported stylesheet class directives into the parent root scope. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "01ce3407192b5aea6c1fefbe968a422d9b83239daa9d8d80c48a302232cfd75e"
+ }
},
{
"source": {
@@ -4640,7 +5119,7 @@
"id": "rc87-09bf497d2cd65614",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/public.test.ts",
- "line": 14,
+ "line": 15,
"title": "returns immutable high-level resolution and compilation values",
"runner": "vitest",
"kind": "test",
@@ -4669,18 +5148,19 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-bbc24f6f24c20fec",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/public.test.ts",
- "line": 33,
+ "line": 34,
"title": "encapsulates source state and disposes idempotently",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4d0436e05fc9a6b7a23660484ddc5767ea0b9d9f8073ca0c6f05d580ab4872f3"
+ "sourceDigest": "f496bc0e5e13f0f8508ffac2b948cd96e66b26c2a2c21f81b6b6d26f0b727412"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete before/after public stylesheet lifecycle case at 8f48b10a1. All immutable snapshot, composition, disposal and exact source-identity assertions remain. The only case-body change resolves /project/app.css with the native Node path helper, preserving the identical POSIX expectation and extending the same absolute-file identity assertion to Windows drive paths. The existing host source resolver already applies resolve(file); no CSS, source lifecycle or production API behavior changes. All 56 focused compiler cases, including this case, pass."
},
{
"source": {
@@ -4708,7 +5188,7 @@
"id": "rc87-1b062d7a8b47733a",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/public.test.ts",
- "line": 64,
+ "line": 65,
"title": "honors an aborted compile request before creating binding work",
"runner": "vitest",
"kind": "test",
@@ -4842,18 +5322,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-fd3760b78ae36986",
+ "id": "rc87-472e99bf07315db8",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style.test.ts",
"line": 100,
- "title": "emits theme variables referenced by compiled stylesheet --alpha() values",
+ "title": "emits theme variables referenced by native stylesheet function values",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "fea1388c83e7bf61c41f1cd354d6f52da799adec4307d98542bcc09b4debb4f3"
+ "sourceDigest": "95d455d90d5162a1c050632287ce28fa98a1e1bcd1d60836dc89d4c90c2022a6"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/stylesheet/style.test.ts :: emits theme variables referenced by compiled stylesheet --alpha() values -> packages/compiler/tests/stylesheet/style.test.ts :: emits theme variables referenced by native stylesheet function values. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "8473f9df82d5cabbdc98913c1a90669f6211400367e12be6d653b4a84c426538"
+ }
},
{
"source": {
@@ -4911,7 +5398,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-32df64bdd39d50d5",
"package": "compiler",
@@ -4920,9 +5407,16 @@
"title": "renders native CSS and keyframes from expanded Master CSS entry graphs",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "96c84fb146aa8d3e1e7dce37dad9cc357820a1c4c33764ebe58c3549fc43ecfb"
+ "sourceDigest": "5b803743d962edd51b280c9ab81fe140c4bd79980340c6f53f52905dc42ea94e"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"renders native CSS and keyframes from expanded Master CSS entry graphs\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "5ab2baa4471d9c5ac4e536ce5cdb7f60666d7b672f19c835e1bb4cf160f96fe1"
+ }
},
{
"source": {
@@ -4979,7 +5473,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-df9664faca11e790",
"package": "compiler",
@@ -4988,9 +5482,16 @@
"title": "detects local compose styles without treating them as Master entries",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c0b683196261fc03e6230dd36adca5de2a4a717093d512998967d51a0f483e61"
+ "sourceDigest": "54182d18d4d026ee00f2a93edd7283cc29bc8080b9e15c2021d83b19a30fe8e8"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "afe5a1ec57d0a3bc71507773dbe8a34c9021566396cd799c35de3ff745a38b67"
+ }
},
{
"source": {
@@ -5013,7 +5514,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-18d63467f01b574f",
"package": "compiler",
@@ -5022,9 +5523,16 @@
"title": "collects best-effort style dependencies from local import graphs",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7f5bc7996e61b89d7cf70d03acf7ff5f752059513b1b0fc2abcbc5384f0f2a3e"
+ "sourceDigest": "72fb1d3072d9523e12f70f49b095bdac664249c05883491c9cee3973dbabb312"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"collects best-effort style dependencies from local import graphs\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "74be23694639d5d201236c516e07f148c01616e5363479330bfd5dd37488b1d7"
+ }
},
{
"source": {
@@ -5081,7 +5589,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-2a99b8b5109ece51",
"package": "compiler",
@@ -5090,9 +5598,16 @@
"title": "locally lowers @compose using the provided project context",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4d97440344558fbd004dcbdc62e3a1e3b71a1e57672dd3e037d0059f61eae39e"
+ "sourceDigest": "07f2d94bf2b763b9e5337437dac1a4d0bb907db1a02c3a1a9b4e902e7dda628c"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "681cc3420a7a5488be9255da813976f5890d36ad92182f530b18c6f508163f52"
+ }
},
{
"source": {
@@ -5115,18 +5630,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-09a63ebd1fb0c985",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style.test.ts",
- "line": 272,
+ "line": 267,
"title": "locally lowers explicit @reference styles without emitting referenced CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "46e7233b6fce53227abfda3a531079d17572bef5889c293d620a695b276267e4"
+ "sourceDigest": "41bd114a37213868cf38781c4ca1c6fee8c18a1aef609533ea3db85516d66529"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"locally lowers explicit @reference styles without emitting referenced CSS\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "9e6805c275f49e6c1b1a195ae6aa7dd936adc36361a1032216db046c24e78fd1"
+ }
},
{
"source": {
@@ -5150,18 +5672,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-3fbd82ad3f8411c4",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style.test.ts",
- "line": 302,
+ "line": 297,
"title": "emits referenced theme variables and keyframes used by local styles",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "70034ad7fef18ecef8f8205371580730e545a75991aae66de3c9045ff02a54a0"
+ "sourceDigest": "30202f73e2cbd3ab6c5cf6a322c911819b264a4cb41187bb4433b9aa4e202e7b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"emits referenced theme variables and keyframes used by local styles\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "e9af6ffff97e3aa7d2bc5ea6d4a7124209bc9461427e5cc202616d730f4709ed"
+ }
},
{
"source": {
@@ -5185,18 +5714,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d1fd372c5f354ee2",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style.test.ts",
- "line": 344,
+ "line": 339,
"title": "skips referenced theme variables and keyframes already emitted by global CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5029e7d6a75833c8f44009775f291c3629387e60ad597bc290320c247bc751cb"
+ "sourceDigest": "58303a1eb48462c78cf4a4704665c23103672a0df3a21bdfa646f6804133ed59"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"skips referenced theme variables and keyframes already emitted by global CSS\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "8f8113719c7af888fcd093658974f7d82bae6abb089af9cf1c1698f5dc808b51"
+ }
},
{
"source": {
@@ -5220,18 +5756,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-51abb4c0cc50234d",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style.test.ts",
- "line": 386,
+ "line": 381,
"title": "emits default preset variables used by local styles referencing a globals entry",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9caaede90b1fe4698a846bb3ce2d0628ec64355d9b05ce27745837b83be8dda9"
+ "sourceDigest": "c119620eb6185f2d4e2dde52a150712461169c277318ee623b27df58c3b2de09"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"emits default preset variables used by local styles referencing a globals entry\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "162f2ad645d1019ec48a7b22a08c74f1c0bf430e2e3e1f721ef1d354c77d62cf"
+ }
},
{
"source": {
@@ -5255,18 +5798,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-16dec65c866ce93c",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style.test.ts",
- "line": 412,
+ "line": 401,
"title": "dedupes default preset variables already emitted by a globals entry snapshot",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a65877913d3abe5b5cb94a777f1614be38322f9cc4988900ef1d469682956b0e"
+ "sourceDigest": "4cf37c324a3ac5bcec20a4e915d29d5ecfa947082780c00f358b7a9e1174d9f6"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"dedupes default preset variables already emitted by a globals entry snapshot\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "8a25a59d6fed7312b6f134865e50850f947634545109b90ebae50b72900a800c"
+ }
},
{
"source": {
@@ -5289,18 +5839,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-fdb9f87a3f066b49",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style.test.ts",
- "line": 445,
+ "line": 428,
"title": "strips reference-only local styles and still reports dependencies",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4e677cbf667246f9b10909792b6fda605d66096b7b17b7ecc53bf59193973652"
+ "sourceDigest": "c8a3d9287b9f52dd80cb615999121923fb540141a8fd9f58221c7ce51f2c89b4"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"strips reference-only local styles and still reports dependencies\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "9f31919a3c0f6581562cb3c3e87fe90297ed3f52610bc5c8c72acdfc7eaa5ce6"
+ }
},
{
"source": {
@@ -5328,7 +5885,7 @@
"id": "rc87-e2556495ed427eed",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style.test.ts",
- "line": 462,
+ "line": 445,
"title": "leaves ordinary local CSS unchanged",
"runner": "vitest",
"kind": "test",
@@ -5362,7 +5919,7 @@
"id": "rc87-9a9d94c8649e8eda",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style.test.ts",
- "line": 472,
+ "line": 455,
"title": "resolves Master style sources through the stylesheet import graph",
"runner": "vitest",
"kind": "test",
@@ -5396,7 +5953,7 @@
"id": "rc87-e68780e7b790a7ea",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style.test.ts",
- "line": 506,
+ "line": 489,
"title": "derives package host CSS from the package entry graph",
"runner": "vitest",
"kind": "test",
@@ -5430,7 +5987,7 @@
"id": "rc87-670842fa6d910d56",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style.test.ts",
- "line": 540,
+ "line": 523,
"title": "does not load preset artifacts implicitly while registering stylesheets",
"runner": "vitest",
"kind": "test",
@@ -5599,7 +6156,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-a38ee56f287029ee",
"package": "compiler",
@@ -5608,10 +6165,16 @@
"title": "uses the managed CSS entry config and native CSS sources",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1e2b33500e55816e3d78c2b4e068d25d80f51dcb699522039b721294520add34"
+ "sourceDigest": "c5dfd7d2271f755c47e3f1c44d038b860fa24b559d5e02f17a8cec581ae7e90a"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/stylesheet/style.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/stylesheet/style.test.ts :: uses the managed CSS entry config and native CSS sources -> packages/compiler/tests/stylesheet/style-output.test.ts :: uses the managed CSS entry config and native CSS sources. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "7836f99539ad65fbe7872c73d6bd4d55e4a1a5be874fa6d466c65e84a4c4a67e"
+ }
},
{
"source": {
@@ -5706,7 +6269,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-93d062d388ddf5bf",
"package": "compiler",
@@ -5715,10 +6278,16 @@
"title": "does not preload inline theme tokens",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "512225e8a6b957154714863b9fcf26e71ff370ec8e600b61cf4f20393dd7dde7"
+ "sourceDigest": "eca94a2d7b311b7871d8fbc3e75cf384f61c2b30fd01a8ff13f55007e6984b71"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/stylesheet/style.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/stylesheet/style.test.ts :: does not preload inline theme tokens -> packages/compiler/tests/stylesheet/style-output.test.ts :: does not preload inline theme tokens. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "967df7d4430f249614ea3c438eda68e46e16b462951f9b40a9d5d2e37a24ee4c"
+ }
},
{
"source": {
@@ -5778,19 +6347,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-fb41fc1aeb7d60ab",
+ "id": "rc87-be28ac921969baea",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style-output.test.ts",
"line": 344,
- "title": "prunes local CSS imports from Master CSS import roots by default",
+ "title": "prunes local CSS imports from Master CSS import roots when explicitly enabled",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d719e6bebc23dcfd8ccf2078208cd65ef07c9c6f36494903228f027d8160d90d"
+ "sourceDigest": "62d04ce3db8fcb2a6ea20441279cb70f4f2f01928c9a98df472abbc2cce02f5f"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/stylesheet/style.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/compiler/tests/stylesheet/style.test.ts :: prunes local CSS imports from Master CSS import roots by default -> packages/compiler/tests/stylesheet/style-output.test.ts :: prunes local CSS imports from Master CSS import roots when explicitly enabled. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "76579c1972d8a291790bdf6ce340ad768331923048dfdfcdf569c628f16c34c9"
+ }
},
{
"source": {
@@ -5813,19 +6388,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-414bd30d2442b401",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style-output.test.ts",
- "line": 391,
+ "line": 392,
"title": "preserves native CSS when a Master CSS import root opts out of pruning",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c431b4b389d66c7b3c4056fc224b7400a6b7b76f685c5fd20759e813498db1ad"
+ "sourceDigest": "81eefeae8a2ac840ffdc9025668622baf7a864170a2c60d0ff36fee38588687d"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/stylesheet/style.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/stylesheet/style.test.ts :: preserves native CSS when a Master CSS import root opts out of pruning -> packages/compiler/tests/stylesheet/style-output.test.ts :: preserves native CSS when a Master CSS import root opts out of pruning. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f99e15fdd3c86c2e74f4b3633dfc73a82d465966f6189274cd0c7295fc315650"
+ }
},
{
"source": {
@@ -5848,19 +6429,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-ac395974dce68384",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style-output.test.ts",
- "line": 425,
+ "line": 426,
"title": "preserves imported native CSS when a root graph opts out of pruning",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4fcf14196209baeb82e7cc42a6f689af45d4359647c1bc4813ff01dfa92b161f"
+ "sourceDigest": "3f4f76eb7d1c4087a6b3d6a9914a3b08f240ea0988981a83d935e76bcb69ac84"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/compiler/tests/stylesheet/style.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/compiler/tests/stylesheet/style.test.ts :: preserves imported native CSS when a root graph opts out of pruning -> packages/compiler/tests/stylesheet/style-output.test.ts :: preserves imported native CSS when a root graph opts out of pruning. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "04b8312a7003e7f0d6595123680fde125fe8d3b422e57a87005e08ebbd2acbbb"
+ }
},
{
"source": {
@@ -5888,7 +6475,7 @@
"id": "rc87-6edfc17e86b30d1b",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style-output.test.ts",
- "line": 461,
+ "line": 462,
"title": "can emit pruned native CSS without generated Master CSS",
"runner": "vitest",
"kind": "test",
@@ -5923,7 +6510,7 @@
"id": "rc87-293ac09787929577",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style-output.test.ts",
- "line": 490,
+ "line": 491,
"title": "keeps package base CSS without generated utilities for Master CSS imports",
"runner": "vitest",
"kind": "test",
@@ -5958,7 +6545,7 @@
"id": "rc87-02cb76a4c411a561",
"package": "compiler",
"file": "packages/compiler/tests/stylesheet/style-output.test.ts",
- "line": 520,
+ "line": 521,
"title": "returns empty CSS when generated output is disabled without style sources",
"runner": "vitest",
"kind": "test",
@@ -6482,7 +7069,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-55dedf1d632d31fd",
"package": "create",
@@ -6491,9 +7078,16 @@
"title": "prints a concise CLI error for unsupported rendering mode targets",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7f26efccac526859ba0078f6b33868da60c28cd24f67f06cd47568d9f8851903"
+ "sourceDigest": "9d59305b9b21748f625cfee349ff5b32540e14db9d820152d916d7bd6880b312"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/create/tests/setup.test.ts :: prints a concise CLI error for unsupported rendering mode targets -> packages/create/tests/setup.test.ts :: prints a concise CLI error for unsupported rendering mode targets. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a178ea10b9982b677effa00723e9b649b8a34abac9492240aa925e202de165ea"
+ }
},
{
"source": {
@@ -6944,7 +7538,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-99ba8f3f22781fc9",
"package": "create",
@@ -6953,10 +7547,16 @@
"title": "plans TanStack Start Vite projects before generic React",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f3b5a27854985a602a278394fa7b6375c6d41f86537a6731359702066dbba5bb"
+ "sourceDigest": "b7114ab8381cff7ba1b6481dad561ca93ff91fd9712de706a3a4dd63bb054068"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/create/tests/setup.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/create/tests/setup.test.ts :: plans TanStack Start Vite projects before generic React -> packages/create/tests/setup-frameworks.test.ts :: plans TanStack Start Vite projects before generic React. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "41dc10c3a8d44b3e43ef5a76c728c6c25291cf26d1a3a2ac605d0e50d4261150"
+ }
},
{
"source": {
@@ -7352,19 +7952,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-80a5fa925564ac5d",
+ "id": "rc87-56d44cf30066e05e",
"package": "create",
"file": "packages/create/tests/setup-frameworks.test.ts",
"line": 520,
- "title": "plans Lit projects with runtime client types and shadow-root setup",
+ "title": "plans Lit projects with static shadow styles and no runtime dependency",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b100d8561bdf8f16f335d4c69dacd8476f87cad807b5f4356aacfe020657bcb0"
+ "sourceDigest": "4b7b274c025365429c64ade57a006f91e25a2dd116178f3ae33bfa4e56f8aec8"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/create/tests/setup.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/create/tests/setup.test.ts :: plans Lit projects with runtime client types and shadow-root setup -> packages/create/tests/setup-frameworks.test.ts :: plans Lit projects with static shadow styles and no runtime dependency. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "96e352199bd1157adac28a9012d9c4d66eee818a73897442ab03103390e9066b"
+ }
},
{
"source": {
@@ -7386,19 +7992,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-9079ec8a716cd977",
"package": "create",
"file": "packages/create/tests/setup-frameworks.test.ts",
- "line": 549,
+ "line": 550,
"title": "plans Angular projects with runtime setup",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "487ac9ed6033ebc835fe2746ab4d65493c90cc5d00fb7772d9cade9c0bad3aa4"
+ "sourceDigest": "90bc8c28245b7837787e8ba94a979bffdb531b6b0ff96763fb9e5fe2bec49503"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/create/tests/setup.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/create/tests/setup.test.ts :: plans Angular projects with runtime setup -> packages/create/tests/setup-frameworks.test.ts :: plans Angular projects with runtime setup. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "0f20218b560941d78081a39be38868c436959586fd56a48eb63ba04323554bdd"
+ }
},
{
"source": {
@@ -7420,19 +8032,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-e2ed974b1ddd5b9e",
"package": "create",
"file": "packages/create/tests/setup-frameworks.test.ts",
- "line": 582,
+ "line": 583,
"title": "updates existing Next.js config wrappers",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7f35e07e299dd9e2205d9ef8e953da3d4da6054812033dcf2291eccb22b5dba5"
+ "sourceDigest": "098fcd5bbc5bade10fbce1838c07b2b4f26f53d468c6dd3a33f7b2e9920c3d4c"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/create/tests/setup.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/create/tests/setup.test.ts :: updates existing Next.js config wrappers -> packages/create/tests/setup-frameworks.test.ts :: updates existing Next.js config wrappers. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "783a2a5f907d03a0668fc7cbb89160ca9d8c223a1e1def7cdb2291797c91bcb3"
+ }
},
{
"source": {
@@ -7459,7 +8077,7 @@
"id": "rc87-576a86b0fb39d418",
"package": "create",
"file": "packages/create/tests/setup-frameworks.test.ts",
- "line": 601,
+ "line": 602,
"title": "writes async Next.js config for static mode",
"runner": "vitest",
"kind": "test",
@@ -7493,7 +8111,7 @@
"id": "rc87-5ecc002d91c7b20e",
"package": "create",
"file": "packages/create/tests/setup-frameworks.test.ts",
- "line": 619,
+ "line": 620,
"title": "writes synchronous Next.js config for runtime mode",
"runner": "vitest",
"kind": "test",
@@ -7527,7 +8145,7 @@
"id": "rc87-136a2c966226911e",
"package": "create",
"file": "packages/create/tests/setup-frameworks.test.ts",
- "line": 639,
+ "line": 640,
"title": "writes requested modes into supported integration configs",
"runner": "vitest",
"kind": "test",
@@ -7556,19 +8174,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-da509ee82b6d38f5",
"package": "create",
"file": "packages/create/tests/setup-frameworks.test.ts",
- "line": 692,
+ "line": 693,
"title": "rejects rendering mode for unsupported setup targets",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "72892b67e97140b070ccbcf5b67c90a762e1b37fb93f4f2e5fe1151de6a1ed70"
+ "sourceDigest": "01274e90d3f1a8320edeb3782ac2dc8089d72e8506a2ae4ec8321738f1e84093"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/create/tests/setup.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/create/tests/setup.test.ts :: rejects rendering mode for unsupported setup targets -> packages/create/tests/setup-frameworks.test.ts :: rejects rendering mode for unsupported setup targets. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "23ef244e1c0b8b925b4adde3a627144a59b510e09a45e7f6cb85fa54d6bf5a68"
+ }
},
{
"source": {
@@ -7595,7 +8219,7 @@
"id": "rc87-05c69bf5ca99cb13",
"package": "create",
"file": "packages/create/tests/setup-frameworks.test.ts",
- "line": 705,
+ "line": 706,
"title": "delegates SvelteKit setup to @master/css-svelte-addon",
"runner": "vitest",
"kind": "test",
@@ -7891,7 +8515,7 @@
"id": "rc87-65a161883b6b8727",
"package": "css",
"file": "packages/css/tests/engine/rust-engine.test.ts",
- "line": 276,
+ "line": 279,
"title": "uses Wasm for auto binding when native addons are disabled",
"runner": "vitest",
"kind": "test",
@@ -7924,7 +8548,7 @@
"id": "rc87-63b01d98ef17fd32",
"package": "css",
"file": "packages/css/tests/engine/rust-engine.test.ts",
- "line": 292,
+ "line": 295,
"title": "does not hide an invalid native binding behind Wasm fallback",
"runner": "vitest",
"kind": "test",
@@ -7957,7 +8581,7 @@
"id": "rc87-c41eb8bf8d6c6dfc",
"package": "css",
"file": "packages/css/tests/engine/rust-engine.test.ts",
- "line": 306,
+ "line": 309,
"title": "keeps transitions synchronous after session creation",
"runner": "vitest",
"kind": "test",
@@ -7985,18 +8609,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-7e1a673cdba4ccda",
"package": "css",
"file": "packages/css/tests/engine/rust-engine.test.ts",
- "line": 316,
+ "line": 319,
"title": "inspects without mutating state and rejects use after disposal",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4ca2057b55dae5dc4d8b2bf07fe4b427d3dc337faca187c12eee73d05e8bb00f"
+ "sourceDigest": "3fb13203f769a737cb61ea1e47590edb3b423e72b6fa599c29c0bb5156550ad9"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/css/tests/engine/rust-engine.test.ts :: inspects without mutating state and rejects use after disposal -> packages/css/tests/engine/rust-engine.test.ts :: inspects without mutating state and rejects use after disposal. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "7269f7e3ad964900e08c5dd89eb742eff376b9c519a443fdff8af579c41133dc"
+ }
},
{
"source": {
@@ -8023,7 +8654,7 @@
"id": "rc87-dc778c644110a099",
"package": "css",
"file": "packages/css/tests/engine/rust-engine.test.ts",
- "line": 328,
+ "line": 333,
"title": "preserves structured Rust errors",
"runner": "vitest",
"kind": "test",
@@ -8056,7 +8687,7 @@
"id": "rc87-3e56037990b9825a",
"package": "css",
"file": "packages/css/tests/engine/rust-engine.test.ts",
- "line": 345,
+ "line": 350,
"title": "serializes manifests when refreshing a Wasm engine",
"runner": "vitest",
"kind": "test",
@@ -8085,18 +8716,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d2ff63b2ee65d620",
"package": "css",
"file": "packages/css/tests/engine/rust-engine.test.ts",
- "line": 392,
+ "line": 397,
"title": "renders representative default-manifest classes without a TypeScript oracle",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "51649484e9f5872bdacbe26c29eea61c9068956acaae649aed7ee36f1f8715a9"
+ "sourceDigest": "127226f9ffb455e596eb379368f7a044de253381f1dde2ef5a98d75ac159d866"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"renders representative default-manifest classes without a TypeScript oracle\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "61ef537f4657b4a019ddc649eb801858574a241bb6ce8dc999172f4efd3b538c"
+ }
},
{
"source": {
@@ -8119,18 +8757,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-6f459da1798e8a99",
"package": "css",
"file": "packages/css/tests/engine/rust-engine.test.ts",
- "line": 412,
+ "line": 417,
"title": "preserves descendant selectors across condition-only variants in native and Wasm",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b88100e238160a22097dd2320a75541577c26141ba3820123667a6e691c6a29f"
+ "sourceDigest": "df93bd321952688502425dbac74cfb62ac5e235cc6a6b7a13a12917c3ac1c02f"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/css/tests/engine/rust-engine.test.ts :: preserves descendant selectors across condition-only variants in native and Wasm -> packages/css/tests/engine/rust-engine.test.ts :: preserves descendant selectors across condition-only variants in native and Wasm. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "791c885f654edaab1c06826cfc9b0b0491675d7d80c1bd6946690047df1d26b8"
+ }
},
{
"source": {
@@ -8152,18 +8797,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-a0c4813d727c5342",
"package": "css",
"file": "packages/css/tests/engine/rust-engine.test.ts",
- "line": 445,
+ "line": 450,
"title": "resolves inline dependencies in emitted mode variables in native and Wasm",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c061a046509c196bcef2bc1b89396ea337628cbe911d98c66a108f45987d8d96"
+ "sourceDigest": "9611c10cd0447afb56d481ddb8e2c810f06ba1c3d6c0d17a477bbdc073ecc18f"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"resolves inline dependencies in emitted mode variables in native and Wasm\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "c8901666970371fbd4ceb4bd0bfa573b1fb7644ea90d55bb61515147c894bc70"
+ }
},
{
"source": {
@@ -8183,7 +8835,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-8a97d21e81e27c3a",
"package": "css",
@@ -8192,9 +8844,10 @@
"title": "@master/css exposes only the Rust-backed async engine facade",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f08cfb70abc681348a867c666ff8919aec1d9b594eb69957b733737ef4b7440d"
+ "sourceDigest": "81ada7e3042c201d1d9ac5f5535ce056b3e833bcc6d511a7132d30a818b3938b"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete facade case before and after the migration. Only the input manifest gains the required languageVersion: 3 field; the exact native binding and empty CSS snapshot assertions and disposal call remain. This retains the Rust-backed async facade contract under the current manifest input envelope. Both facade tests pass."
},
{
"source": {
@@ -8214,7 +8867,7 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-2ba6a6e063ae1357",
"package": "eslint-config",
@@ -8223,9 +8876,16 @@
"title": "exports the plugin-owned recommended flat config",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ba2148e2cdd9f7b881268f99ce87f69a66bed4bcdc344983dc5f2943406b6db0"
+ "sourceDigest": "6c042cc94d3df84ce513243d7672b0f6e14fc28a23b2df9ea9043952068dc07f"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Remove automatic stylesheet lint/fix configuration; keep markup linting and explicitly leave CSS to CSS tooling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "b5df56da5ec08933c87f853f6a6610a72a935e02aaa21db5f8af491c2b38ac71"
+ }
},
{
"source": {
@@ -8246,18 +8906,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-4a63c9e7dbdc43a7",
+ "id": "rc87-300afa1a7a34d01c",
"package": "eslint-config",
"file": "packages/eslint-config/tests/test.ts",
"line": 14,
- "title": "lints markup and standalone stylesheets",
+ "title": "lints markup and leaves standalone stylesheets to CSS tooling",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "55e0d6676cd2e5ba7292b6bd5929e1314c08f66d3d886db37deaa6d77e4d05b4"
+ "sourceDigest": "10fbf492299a35439dd98ec7193eacc614ea4ce7ed6ba8a1b79ef205e0866b79"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/eslint-config/tests/test.ts :: lints markup and standalone stylesheets -> packages/eslint-config/tests/test.ts :: lints markup and standalone stylesheets. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove automatic stylesheet lint/fix configuration; keep markup linting and explicitly leave CSS to CSS tooling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "611eb85020df5e3c76fb2d0b5b2881a530970ead9cb4c0d93c2a2866ef7c7434"
+ }
},
{
"source": {
@@ -8286,23 +8953,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-0384f3b3b701342c",
+ "id": "rc87-7b41a862e4030c96",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 4,
- "title": "adapter source matching defaults / invalid[1] / classList.add('fg:white block')",
+ "title": "adapter source matching defaults / invalid[1] / classList.add('fg-white block')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "sourceDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
"matrix": {
"index": 0,
"resolved": true,
- "value": "classList.add('fg:white block')"
+ "value": "classList.add('fg-white block')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "61616648c91ae6cbca847ece6f1cccf31327539c3230b7b75083ee896bf6ca77"
+ }
},
{
"source": {
@@ -8331,23 +9005,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-73cad9690d62dfda",
+ "id": "rc87-f94e4c6a9ddbfb45",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 4,
- "title": "adapter source matching defaults / invalid[2] / classList.remove('fg:white block')",
+ "title": "adapter source matching defaults / invalid[2] / classList.remove('fg-white block')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "sourceDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
"matrix": {
"index": 1,
"resolved": true,
- "value": "classList.remove('fg:white block')"
+ "value": "classList.remove('fg-white block')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "4db01d92071b6c30131c576f40453dc8e30a35a2d3f0a02c160bf809b580dddc"
+ }
},
{
"source": {
@@ -8376,23 +9057,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-121eca8ae4a12480",
+ "id": "rc87-7c72c4500f513930",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 4,
- "title": "adapter source matching defaults / invalid[3] / classList.toggle('fg:white block')",
+ "title": "adapter source matching defaults / invalid[3] / classList.toggle('fg-white block')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "sourceDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
"matrix": {
"index": 2,
"resolved": true,
- "value": "classList.toggle('fg:white block')"
+ "value": "classList.toggle('fg-white block')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "62450961eb0a30e28671087100d56d6ceb6d0767659aa03d65cca933c1231862"
+ }
},
{
"source": {
@@ -8421,23 +9109,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-2739de51bb0b9064",
+ "id": "rc87-f4999ec65aab202d",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 4,
- "title": "adapter source matching defaults / invalid[4] / classList.replace('fg:white block', 'p:2x m:2x')",
+ "title": "adapter source matching defaults / invalid[4] / classList.replace('fg-white block', 'p:0.5rem m:0.5rem')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "sourceDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
"matrix": {
"index": 3,
"resolved": true,
- "value": "classList.replace('fg:white block', 'p:2x m:2x')"
+ "value": "classList.replace('fg-white block', 'p:0.5rem m:0.5rem')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "b96f776333809029c6814cd106c6ceeb95ec12b49979787b5e721303a7e9e953"
+ }
},
{
"source": {
@@ -8466,23 +9161,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-69c7d819588308ea",
+ "id": "rc87-0f7bacd8fe32d976",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 4,
- "title": "adapter source matching defaults / invalid[5] / classList['add']('fg:white block')",
+ "title": "adapter source matching defaults / invalid[5] / classList['add']('fg-white block')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "sourceDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
"matrix": {
"index": 4,
"resolved": true,
- "value": "classList['add']('fg:white block')"
+ "value": "classList['add']('fg-white block')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "f39dbbe146dbf509630ad57fe33d7c1fe28dfabbadd60df69b468afbc83ab419"
+ }
},
{
"source": {
@@ -8510,23 +9212,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-d80e44996d737a35",
+ "id": "rc87-9fc97507f8b09f85",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 4,
- "title": "adapter source matching defaults / valid[1] / twMerge('fg:white block')",
+ "title": "adapter source matching defaults / valid[1] / twMerge('fg-white block')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "sourceDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
"matrix": {
"index": 0,
"resolved": true,
- "value": "twMerge('fg:white block')"
+ "value": "twMerge('fg-white block')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "95f5fbc44df966bcd3f4186e50cf297908f2894e594c24e353a35b504e08d994"
+ }
},
{
"source": {
@@ -8555,23 +9264,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-74150fed0ee9ede3",
+ "id": "rc87-1335a251c9ba8d6b",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 4,
- "title": "adapter source matching defaults / valid[2] / classList.contains('fg:white block')",
+ "title": "adapter source matching defaults / valid[2] / classList.contains('fg-white block')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "a6a9400ec7071b39603d608922523e761368efca53abf4aff7b9e1e4c32c73f0",
+ "sourceDigest": "8960f762897829df6fb77ce169189fd40fd823f5b52e0e4d8bc7b0e99e599eba",
"matrix": {
"index": 1,
"resolved": true,
- "value": "classList.contains('fg:white block')"
+ "value": "classList.contains('fg-white block')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "51627670beb08f4a4609d1030fd258b968d3a7713fe01e59d6d635076d7a047f"
+ }
},
{
"source": {
@@ -8600,23 +9316,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-71c26cbe571802ce",
+ "id": "rc87-5efba643d454eb30",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 41,
- "title": "adapter source matching custom settings / invalid[1] /
",
+ "title": "adapter source matching custom settings / invalid[1] /
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "sourceDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
"matrix": {
"index": 0,
"resolved": true,
- "value": "
"
+ "value": "
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "dc9e356560c25eb3428536ccb081a29315bdafdabdc1e2e9c5313756bdace038"
+ }
},
{
"source": {
@@ -8644,23 +9367,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-04b5f1fa22234454",
+ "id": "rc87-aff3fc9a69b5e01e",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 41,
- "title": "adapter source matching custom settings / invalid[2] / tw('fg:white block')",
+ "title": "adapter source matching custom settings / invalid[2] / tw('fg-white block')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "sourceDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
"matrix": {
"index": 1,
"resolved": true,
- "value": "tw('fg:white block')"
+ "value": "tw('fg-white block')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "95e44874fc23af5e74fcc31c0859691cf688841a1696557564794ff55c35e8cf"
+ }
},
{
"source": {
@@ -8688,23 +9418,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-ada382187e7b929d",
+ "id": "rc87-8ab761db962a9935",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 41,
- "title": "adapter source matching custom settings / invalid[3] / tokens.cx('fg:white block')",
+ "title": "adapter source matching custom settings / invalid[3] / tokens.cx('fg-white block')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "sourceDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
"matrix": {
"index": 2,
"resolved": true,
- "value": "tokens.cx('fg:white block')"
+ "value": "tokens.cx('fg-white block')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "a3f305cb4e30afd4bfc44185b806b8a3f30cae8c92f07ebeb8479765c95fcf2b"
+ }
},
{
"source": {
@@ -8732,23 +9469,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-932b42c5a9d001d0",
+ "id": "rc87-fb4a0bf3ce677611",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 41,
- "title": "adapter source matching custom settings / invalid[4] / tokens.cx`fg:white block`",
+ "title": "adapter source matching custom settings / invalid[4] / tokens.cx`fg-white block`",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "sourceDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
"matrix": {
"index": 3,
"resolved": true,
- "value": "tokens.cx`fg:white block`"
+ "value": "tokens.cx`fg-white block`"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "8a9c7e095310f56bc0c1b56253ce14ea336f1b1fa84c63746fcde184c68962dc"
+ }
},
{
"source": {
@@ -8776,23 +9520,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-c3ef6c69e66d8156",
+ "id": "rc87-15ea415dd78cf756",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 41,
- "title": "adapter source matching custom settings / invalid[5] / const styles = 'fg:white block'",
+ "title": "adapter source matching custom settings / invalid[5] / const styles = 'fg-white block'",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "sourceDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
"matrix": {
"index": 4,
"resolved": true,
- "value": "const styles = 'fg:white block'"
+ "value": "const styles = 'fg-white block'"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "9e64ea470f9cd6e4d170f1bdae694cd80bf3afbe6276544ea1d66122b8b09776"
+ }
},
{
"source": {
@@ -8821,23 +9572,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-9bd2764ee78a0a8d",
+ "id": "rc87-166b861322362d7c",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 41,
- "title": "adapter source matching custom settings / invalid[6] / const classesList = { primary: 'fg:white block' }",
+ "title": "adapter source matching custom settings / invalid[6] / const classesList = { primary: 'fg-white block' }",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "sourceDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
"matrix": {
"index": 5,
"resolved": true,
- "value": "const classesList = { primary: 'fg:white block' }"
+ "value": "const classesList = { primary: 'fg-white block' }"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "03c95c8746b913591f52e1006ff22f15c0d4742fe7c786aac4cdaced6cd68add"
+ }
},
{
"source": {
@@ -8866,23 +9624,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-07634e28f7afb0ef",
+ "id": "rc87-5300e9ab6e70ceab",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 41,
- "title": "adapter source matching custom settings / invalid[7] / const theme = { styles: 'fg:white block' }",
+ "title": "adapter source matching custom settings / invalid[7] / const theme = { styles: 'fg-white block' }",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "sourceDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
"matrix": {
"index": 6,
"resolved": true,
- "value": "const theme = { styles: 'fg:white block' }"
+ "value": "const theme = { styles: 'fg-white block' }"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "d927c4977ba0af218deedfaa312cbf65e522ea00b19328f7809b45bba587c463"
+ }
},
{
"source": {
@@ -8911,23 +9676,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-3a4a38c90f7e0fd1",
+ "id": "rc87-69930928c51df76c",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 41,
- "title": "adapter source matching custom settings / valid[1] /
",
+ "title": "adapter source matching custom settings / valid[1] /
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "sourceDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
"matrix": {
"index": 0,
"resolved": true,
- "value": "
"
+ "value": "
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "727caa52b14e118c30a18592dc64e817b7595fc927054a5831a2c2bd58d16f46"
+ }
},
{
"source": {
@@ -8955,23 +9727,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-55e07b6010f30b04",
+ "id": "rc87-0a53cf8bf804ed4c",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 41,
- "title": "adapter source matching custom settings / valid[2] / twMerge('fg:white block')",
+ "title": "adapter source matching custom settings / valid[2] / twMerge('fg-white block')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "sourceDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
"matrix": {
"index": 1,
"resolved": true,
- "value": "twMerge('fg:white block')"
+ "value": "twMerge('fg-white block')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "d6bd6ee25c45eb648e3ff3a28fcb0444dd22482431aa4961ead8ca1b76057051"
+ }
},
{
"source": {
@@ -8999,23 +9778,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-9238938224cfbe8c",
+ "id": "rc87-37b0618d5110cb62",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 41,
- "title": "adapter source matching custom settings / valid[3] / const stylesExtra = 'fg:white block'",
+ "title": "adapter source matching custom settings / valid[3] / const stylesExtra = 'fg-white block'",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "sourceDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
"matrix": {
"index": 2,
"resolved": true,
- "value": "const stylesExtra = 'fg:white block'"
+ "value": "const stylesExtra = 'fg-white block'"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "37c3eb875dee0e414e4ecd16deec6f40f6e1abb85082709b89d6af042fe015ad"
+ }
},
{
"source": {
@@ -9044,23 +9830,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-ae3e1cd935fb3624",
+ "id": "rc87-c906589cd19e545c",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/adapter-settings.test.ts",
"line": 41,
- "title": "adapter source matching custom settings / valid[4] / const theme = { stylesExtra: 'fg:white block' }",
+ "title": "adapter source matching custom settings / valid[4] / const theme = { stylesExtra: 'fg-white block' }",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "f4bb1fdabe2dad13976a1a2690896a1e4baa5985cba79a6ca89945f6dc24d404",
+ "sourceDigest": "1cd91e38e9e521a32282cb53f57d053d6a210fc98714f37c48c69fa9310ef535",
"matrix": {
"index": 3,
"resolved": true,
- "value": "const theme = { stylesExtra: 'fg:white block' }"
+ "value": "const theme = { stylesExtra: 'fg-white block' }"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "6c20cea20c32343aabd3e3626b7dcafcceef0ebd90e81e6877ba52b83d838e0d"
+ }
},
{
"source": {
@@ -9089,23 +9882,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-72347d9fca0cf282",
+ "id": "rc87-dd1ce40b312553c1",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/angular.test.ts",
"line": 4,
- "title": "sort classes / invalid[1] / :)
",
+ "title": "sort classes / invalid[1] / :)
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "98cad66954adc9b7d4caf27f5a22c09859e80bafb752c99d5ae50f78ea762c7c",
+ "sourceDigest": "2a4d108b6d1b7cdeffbe332d99edf5676e9590b1205d7220f05e973a7c2aa44f",
"matrix": {
"index": 0,
"resolved": true,
- "value": " :)
"
+ "value": " :)
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "e2b97d8eb34d511e47667afa916a4eba87670f64afa9351aa1c58293a94004c5"
+ }
},
{
"source": {
@@ -9223,23 +10023,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-391567b61761e5b3",
+ "id": "rc87-be1c3a90118aff29",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/issues/387.test.ts",
"line": 4,
- "title": "order / invalid[1] / {\"errors\":[{\"messageId\":\"invalidClass\",\"line\":\"4\",\"column\":\"22\",\"endLine\":\"4\",\"endColumn\":\"43\"}]}",
+ "title": "order / invalid[1] / {\"errors\":[{\"messageId\":\"invalidClass\",\"line\":\"4\",\"column\":\"22\",\"endLine\":\"4\",\"endColumn\":\"39\"},{\"messageId\":\"invalidClass\",\"line\":\"4\",\"column\":\"22\",\"endLine\":\"4\",\"endColumn\":\"39\"}",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "bf8b86b2f7ef0252f13f44104ebea418d41b656601dee199e2350537dc968df5",
+ "sourceDigest": "b6e4e7a2a2ede3157de9905cdc5de01cc9ad3c23dc2b9d3ab7c6170aabd2c367",
"matrix": {
"index": 0,
"resolved": true,
- "value": "{\"errors\":[{\"messageId\":\"invalidClass\",\"line\":\"4\",\"column\":\"22\",\"endLine\":\"4\",\"endColumn\":\"43\"}]}"
+ "value": "{\"errors\":[{\"messageId\":\"invalidClass\",\"line\":\"4\",\"column\":\"22\",\"endLine\":\"4\",\"endColumn\":\"39\"},{\"messageId\":\"invalidClass\",\"line\":\"4\",\"column\":\"22\",\"endLine\":\"4\",\"endColumn\":\"39\"}"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The known-invalid fixture is text-decoration:1 instead of an unknown function. Standard and -webkit declarations each report invalid CSS at the same mapped range; the shortened token changes endColumn 43 to 39.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "7a7c2b3bb70c361d2f67a2617b17d2ae97e7abc5096c9443d08bff828df45b3d"
+ }
},
{
"source": {
@@ -9304,7 +10111,7 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-ac2cdaec143ddda4",
"package": "eslint-plugin",
@@ -9313,9 +10120,16 @@
"title": "uses explicit Master CSS manifest objects from ESLint settings",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "29bbe49e452c6661dea769245cd5394b5e351b62eb6d6e790739a22948106d25"
+ "sourceDigest": "ddb8588e741821e7ebde1eba836a2efe2f6a98e44c64a004887ca0a3d759f980"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"uses explicit Master CSS manifest objects from ESLint settings\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "b055d4e3fdfc2da1284d80c74494c785f9a93a5b3fb46d1422a63e9bba64a886"
+ }
},
{
"source": {
@@ -9336,7 +10150,7 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-7c42e4a2078e5f09",
"package": "eslint-plugin",
@@ -9345,9 +10159,16 @@
"title": "uses project-level CSS manifest entries from the ESLint workspace",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3f57038d29e56e867ceb598478ce08cb638f9976c43fcc6f2b1883db6bff6812"
+ "sourceDigest": "49766a97d2498108429f2ff8cf41068ff05c2ff82eb19ce3667a39df0ad471b2"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"uses project-level CSS manifest entries from the ESLint workspace\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "34ee3bce72cc8f865ff39f2404a545cc2bbb30fd417678c2acb1f02bc2ac7831"
+ }
},
{
"source": {
@@ -9408,23 +10229,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-2d7ed4cfbec0f561",
+ "id": "rc87-6383321bfb3c21af",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/mdx.test.ts",
"line": 12,
- "title": "mdx sort classes / invalid[1] / # Test Simple
",
+ "title": "mdx sort classes / invalid[1] / # Test Simple
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "3b0286e3200f10df07d50c78f6854cf9718b0cf92eac31e111ba665f9bfdaa52",
+ "sourceDigest": "ebf5f750e2a1c65fcd4ffb089889c32298f3569ad4533e3389d887547dcb8424",
"matrix": {
"index": 0,
"resolved": true,
- "value": "# Test Simple
"
+ "value": "# Test Simple
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "7d78245d60565db09b189c95d19f62bf1f7c5a91f74992961391b120b36ffc4c"
+ }
},
{
"source": {
@@ -9453,23 +10281,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-cce4c18aae1d74d5",
+ "id": "rc87-4d774e08644297a7",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/mdx.test.ts",
"line": 12,
- "title": "mdx sort classes / invalid[2] / [ '```html', '', ' Save', ' ', '```' ].join('\\n')",
+ "title": "mdx sort classes / invalid[2] / [ '', ' Save', ' ', ].join('\\n')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "3b0286e3200f10df07d50c78f6854cf9718b0cf92eac31e111ba665f9bfdaa52",
+ "sourceDigest": "ebf5f750e2a1c65fcd4ffb089889c32298f3569ad4533e3389d887547dcb8424",
"matrix": {
"index": 1,
"resolved": true,
- "value": "[ '```html', '', ' Save', ' ', '```' ].join('\\n')"
+ "value": "[ '', ' Save', ' ', ].join('\\n')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "b9b1dd89c4f145930ff3546892ea745de1c72b9367dcab52f1042eee99db4fff"
+ }
},
{
"source": {
@@ -9498,23 +10333,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-da07c18cc490324c",
+ "id": "rc87-d9547ed9b9f5e4ad",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/mdx.test.ts",
"line": 12,
- "title": "mdx sort classes / valid[1] / Simple, basic
",
+ "title": "mdx sort classes / valid[1] / Simple, basic
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "3b0286e3200f10df07d50c78f6854cf9718b0cf92eac31e111ba665f9bfdaa52",
+ "sourceDigest": "ebf5f750e2a1c65fcd4ffb089889c32298f3569ad4533e3389d887547dcb8424",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Simple, basic
"
+ "value": "Simple, basic
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "4cb5a1b2d748873dea3fffd741f837ff3ea607548004551e31dd0a346c334a2d"
+ }
},
{
"source": {
@@ -9548,18 +10390,18 @@
"id": "rc87-30d7642d784ccd3e",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/mdx.test.ts",
- "line": 48,
+ "line": 44,
"title": "mdx no conflicting classes / invalid[1] / Simple
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "24b82a32934f19aac0b3bece621cde17deb288f182cfe2e7b37e9ab037486f59",
+ "sourceDigest": "f5e6905506dc5c8b5f9840dad099b632182f9fd1518ca5e4f4b9abc03d63524d",
"matrix": {
"index": 0,
"resolved": true,
"value": "Simple
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -9588,23 +10430,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-fdcd1d9f64063f54",
+ "id": "rc87-1baec11fe5f76f86",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/mdx.test.ts",
- "line": 48,
- "title": "mdx no conflicting classes / invalid[2] / [ '```html', 'Simple
', '```' ].join('\\n')",
+ "line": 44,
+ "title": "mdx no conflicting classes / invalid[2] / [ 'Simple
', ].join('\\n')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "24b82a32934f19aac0b3bece621cde17deb288f182cfe2e7b37e9ab037486f59",
+ "sourceDigest": "f5e6905506dc5c8b5f9840dad099b632182f9fd1518ca5e4f4b9abc03d63524d",
"matrix": {
"index": 1,
"resolved": true,
- "value": "[ '```html', 'Simple
', '```' ].join('\\n')"
+ "value": "[ 'Simple
', ].join('\\n')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "47e9f3357358486da1dbd0afc8be6027172b11f21355396ab5ff0927b638f37f"
+ }
},
{
"source": {
@@ -9633,23 +10482,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-1999ea10b3b32750",
+ "id": "rc87-0a5baa22a14dd5cb",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/mdx.test.ts",
- "line": 80,
- "title": "mdx no invalid classes / invalid[1] / [ '```html', 'Simple
', '```' ].join('\\n')",
+ "line": 72,
+ "title": "mdx no invalid classes / invalid[1] / [ 'Simple
', ].join('\\n')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "864577c33d862f45a708c531250e1f49c86e000f3d96e26029df9fa52b69d567",
+ "sourceDigest": "46eaae5defb4eac7814715e03a2208f4a360cd44964a0b451b65daea69134acf",
"matrix": {
"index": 0,
"resolved": true,
- "value": "[ '```html', 'Simple
', '```' ].join('\\n')"
+ "value": "[ 'Simple
', ].join('\\n')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "b84d44c9516f8fadaf76e81403db6d862e2cab8551d5b1c4d958dde5666ace0d"
+ }
},
{
"source": {
@@ -9678,23 +10534,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-c89312d3d30db393",
+ "id": "rc87-071ff7a856a4137f",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/mdx.test.ts",
- "line": 97,
- "title": "mdx prefer canonical classes / invalid[1] / [ '```html', '', ' Save', ' ', '```' ].join('\\n')",
+ "line": 87,
+ "title": "mdx prefer canonical classes / valid[2] / [ '', ' Save', ' ', ].join('\\n')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7255c746c48fec245700be281b1fd2747e7dec5691c2bed1b7d9669e12af1d4c",
+ "sourceDigest": "929bdb0145c47ba268b5e031f176bebf5c8956bc9e482ad1b678902577651b48",
"matrix": {
- "index": 0,
+ "index": 1,
"resolved": true,
- "value": "[ '```html', '', ' Save', ' ', '```' ].join('\\n')"
+ "value": "[ '', ' Save', ' ', ].join('\\n')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "63e7c1a866f40ae7722fdaa0eca4fbbbf872c481933afacd6ee585b5238cad5d"
+ }
},
{
"source": {
@@ -9723,23 +10586,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-42c671c588ddda84",
+ "id": "rc87-e9c2fc9e05a3e41e",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/mdx.test.ts",
- "line": 97,
- "title": "mdx prefer canonical classes / valid[1] / [ '```html', 'Simple
', '```' ].join('\\n')",
+ "line": 87,
+ "title": "mdx prefer canonical classes / valid[1] / [ 'Simple
', ].join('\\n')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7255c746c48fec245700be281b1fd2747e7dec5691c2bed1b7d9669e12af1d4c",
+ "sourceDigest": "929bdb0145c47ba268b5e031f176bebf5c8956bc9e482ad1b678902577651b48",
"matrix": {
"index": 0,
"resolved": true,
- "value": "[ '```html', 'Simple
', '```' ].join('\\n')"
+ "value": "[ 'Simple
', ].join('\\n')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "c2953a9566c30cef4c10ec8e9dd25675d1b8fb92e94e166afa2a0f1058ff78d7"
+ }
},
{
"source": {
@@ -9768,23 +10638,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-5691111c39a50ab2",
+ "id": "rc87-0b929c832971243a",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/mdx.test.ts",
- "line": 136,
- "title": "mdx no unapproved raw values / invalid[1] / [ '```html', 'Simple
', '```' ].join('\\n')",
+ "line": 111,
+ "title": "mdx no unapproved raw values / invalid[1] / [ 'Simple
', ].join('\\n')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "6435423f8c6cd500ebc0a1698877926e00664fabd565ce4118896a9052da3878",
+ "sourceDigest": "22daff76a797be052844d6dec05f02e1d62da115a479d57f831b8a9f1cd8b695",
"matrix": {
"index": 0,
"resolved": true,
- "value": "[ '```html', 'Simple
', '```' ].join('\\n')"
+ "value": "[ 'Simple
', ].join('\\n')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Executable MDX JSX retains diagnostics after token/native-unit migration; fenced display text is excluded by the source extractor. The mapped lint cases remove code fences to test executable JSX. Canonicalization preserves an unproven equivalent spelling; the dedicated display-content cases retain fence coverage.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "18d05b2039efdd044dd31eeee7b9ea178556f359d900fa3483588c5a1140ab15"
+ }
},
{
"source": {
@@ -9813,7 +10690,7 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-bbac92e3c825c448",
"package": "eslint-plugin",
@@ -9822,14 +10699,21 @@
"title": "collision / invalid[1] / collision
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 0,
"resolved": true,
"value": "collision
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "5663699bf5b91baf510d53bf5c4db9dae1774fd21d6a6eb26f584fd97255a4af"
+ }
},
{
"source": {
@@ -9858,23 +10742,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-ff05bdc57df805bf",
+ "id": "rc87-e57971266b9e3aff",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[10] / partial inset conflict
",
+ "title": "collision / valid[10] / partial inset conflict
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 9,
"resolved": true,
- "value": "partial inset conflict
"
+ "value": "partial inset conflict
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "d7c1917a13ecdfa784d4cdda86666d056147aa98200cab7d18f5b6b71c438291"
+ }
},
{
"source": {
@@ -9903,23 +10794,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-90b9b3ef00379f80",
+ "id": "rc87-7b78be465a791af4",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[11] / partial radius conflict
",
+ "title": "collision / valid[11] / partial radius conflict
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 10,
"resolved": true,
- "value": "partial radius conflict
"
+ "value": "partial radius conflict
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "a9ba8309fb93c303feb24599c2481830f4d91f0d01486dd12cc4d7e10a5801e3"
+ }
},
{
"source": {
@@ -9948,23 +10846,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-f60a866d8509f22e",
+ "id": "rc87-7e2e3c70cb3772eb",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[12] / partial border width conflict
",
+ "title": "collision / valid[12] / partial border width conflict
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 11,
"resolved": true,
- "value": "partial border width conflict
"
+ "value": "partial border width conflict
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "a5acfe23bcd68972c14e824055aab76549e85988d52d2f7ffccac2aa2b932bd4"
+ }
},
{
"source": {
@@ -9993,23 +10898,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-534873fc29c8093d",
+ "id": "rc87-3c7785c329b8d250",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[13] / partial border color conflict
",
+ "title": "collision / valid[13] / partial border color conflict
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 12,
"resolved": true,
- "value": "partial border color conflict
"
+ "value": "partial border color conflict
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "c5dd7a1fdfd6f957b254fd8af9ef7f85fe52163b18a26a7632565afb22506d1f"
+ }
},
{
"source": {
@@ -10038,23 +10950,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-03ad82b0ba2fb87c",
+ "id": "rc87-4e1d70b27818db36",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[14] / partial border style conflict
",
+ "title": "collision / valid[14] / partial border style conflict
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 13,
"resolved": true,
"value": "partial border style conflict
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "6007eb5e89cdbdb29f30fb9329163b275596c9538ae7985ee5c9cc1485da9092"
+ }
},
{
"source": {
@@ -10083,23 +11002,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-10141c3b5bc8a95f",
+ "id": "rc87-543493831b71d616",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[15] / mixed partial conflicts
",
+ "title": "collision / valid[15] / mixed partial conflicts
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 14,
"resolved": true,
- "value": "mixed partial conflicts
"
+ "value": "mixed partial conflicts
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "45b537ab92548905c37b82f84b4010a79b54d753ab8a13a3025c3d1fbbc7451b"
+ }
},
{
"source": {
@@ -10128,23 +11054,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-4c45cd11db6e7a62",
+ "id": "rc87-595773f312c886f1",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[16] / Vue
",
+ "title": "collision / valid[16] / Vue
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 15,
"resolved": true,
"value": "Vue
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "2558d5a77c555b9c3fd015e3f26f4a8e650f24f3af63d6e92feb4ab782c5249a"
+ }
},
{
"source": {
@@ -10182,14 +11115,14 @@
"title": "collision / invalid[2] / Error class
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 1,
"resolved": true,
"value": "Error class
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -10218,23 +11151,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-77da2091521b42f1",
+ "id": "rc87-3be524758ae661d5",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[3] / last class wins
",
+ "title": "collision / invalid[3] / generated CSS winner
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 2,
"resolved": true,
- "value": "last class wins
"
+ "value": "generated CSS winner
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "de2cfe39e72b71e2ee882e5fb0255a62f0eee781b6b6774f32575f83822dcca4"
+ }
},
{
"source": {
@@ -10263,23 +11203,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-387dcd6370375c79",
+ "id": "rc87-1cfbfc78d5723e1f",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[4] / partial margin axis conflict
",
+ "title": "collision / valid[5] / partial margin axis conflict
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
- "index": 3,
+ "index": 4,
"resolved": true,
- "value": "partial margin axis conflict
"
+ "value": "partial margin axis conflict
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "46fc9511f9c788d3ef3cee3929f7ae9bb3ffec9a35d3aa91c79aa45bfc9bdc1c"
+ }
},
{
"source": {
@@ -10308,23 +11255,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-8b18d2adf383ded1",
+ "id": "rc87-96d1689239293854",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[5] / partial padding shorthand conflict
",
+ "title": "collision / valid[6] / partial padding shorthand conflict
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
- "index": 4,
+ "index": 5,
"resolved": true,
- "value": "partial padding shorthand conflict
"
+ "value": "partial padding shorthand conflict
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "92df414e6f4b38406b8adcaafdbcf765364e6829e26c385fe4e8e158de454ba5"
+ }
},
{
"source": {
@@ -10353,23 +11307,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-7cdff47024dc4a96",
+ "id": "rc87-d3cec04c77616113",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[6] / partial shorthand side conflict
",
+ "title": "collision / valid[7] / partial shorthand side conflict
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
- "index": 5,
+ "index": 6,
"resolved": true,
- "value": "partial shorthand side conflict
"
+ "value": "partial shorthand side conflict
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "d1aff408b2855d1c361ed981073f7558196e97496a004e8bb1cc3e40df21699a"
+ }
},
{
"source": {
@@ -10398,23 +11359,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-34145c99b79f0625",
+ "id": "rc87-6af48924f405a79d",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[7] /
",
+ "title": "collision / valid[8] /
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
- "index": 6,
+ "index": 7,
"resolved": true,
- "value": "
"
+ "value": "
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "745b4014b80fd6251cebc4063207afec8204bf0ccc11ae041ccdb102133f9e7f"
+ }
},
{
"source": {
@@ -10443,23 +11411,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-a9677a7014d6ed1f",
+ "id": "rc87-183b76f2c83eae45",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[8] / multiple partial conflicts
",
+ "title": "collision / valid[9] / multiple partial conflicts
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
- "index": 7,
+ "index": 8,
"resolved": true,
- "value": "multiple partial conflicts
"
+ "value": "multiple partial conflicts
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "7f2564b5705431a98928946476d826791899b0eac0167bc43de167ce62fde0b1"
+ }
},
{
"source": {
@@ -10488,23 +11463,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-819b33f560336415",
+ "id": "rc87-e4bb0a60d69454a5",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / invalid[9] / full conflict before partial conflict
",
+ "title": "collision / invalid[4] / full conflict before partial conflict
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
- "index": 8,
+ "index": 3,
"resolved": true,
- "value": "full conflict before partial conflict
"
+ "value": "full conflict before partial conflict
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "72cf88ff5ef85d277b93802d3d2ba052d6727871c1031ab427f37ae5aa7f1e3a"
+ }
},
{
"source": {
@@ -10542,14 +11524,14 @@
"title": "collision / valid[1] / Simple, basic
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 0,
"resolved": true,
"value": "Simple, basic
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -10587,14 +11569,14 @@
"title": "collision / valid[2] / Error class
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 1,
"resolved": true,
"value": "Error class
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -10623,23 +11605,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-7c20aa3cb230decb",
+ "id": "rc87-8b68744e7c707eff",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / valid[3] /
",
+ "title": "collision / valid[3] /
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 2,
"resolved": true,
- "value": "
"
+ "value": "
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "62ef1df1b56886eee889e8db8c6ee16f4316bc9f4969adf8bb9a5a2d8b787c85"
+ }
},
{
"source": {
@@ -10668,23 +11657,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-75e692740899ee0b",
+ "id": "rc87-e4ec4443388c5560",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-conflicting-classes.test.ts",
"line": 4,
- "title": "collision / valid[4] /
",
+ "title": "collision / valid[4] /
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "b298d87519ba2ca85ef2600ce1ed9c13f289143785455d59ab3d8fa59879b752",
+ "sourceDigest": "aa75dbefc42d520609acaa8a65fa31e8acf10209e77b1b8d9aaf1d715692c37f",
"matrix": {
"index": 3,
"resolved": true,
- "value": "
"
+ "value": "
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Conflicts follow engine CSS priority rather than HTML class order. Only equivalent variant scope and identical generated property sets qualify for full conflict removal; partial overlaps remain. Diagnostics describe the generated CSS winner, and the p-sm/p-md example keeps p-sm plus px-lg.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "9793c25f616d69c31743e59d3f6545eb0fb6b172b74e4f387311bfd2a316a87a"
+ }
},
{
"source": {
@@ -10713,23 +11709,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-e1bc74276f9fda7f",
+ "id": "rc87-37b3faeec0991f4a",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-invalid-classes.test.ts",
"line": 7,
- "title": "invalid / invalid[1] / Simple, basic
",
+ "title": "invalid / invalid[1] / Simple, basic
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c",
+ "sourceDigest": "b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Simple, basic
"
+ "value": "Simple, basic
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "cb4d8ca43f6b87b3e44e4a74203b139f620d7e05f0226ae4383b0b8dcddebeaa"
+ }
},
{
"source": {
@@ -10758,23 +11761,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-b90edd25bc89df60",
+ "id": "rc87-b762ef59d79b3a5a",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-invalid-classes.test.ts",
"line": 7,
- "title": "invalid / invalid[2] / Simple, basic
",
+ "title": "invalid / invalid[2] / Simple, basic
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c",
+ "sourceDigest": "b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c",
"matrix": {
"index": 1,
"resolved": true,
- "value": "Simple, basic
"
+ "value": "Simple, basic
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "d39d7f0a7fda501b231b7391ba0a8e9ceeb0931d355b80c1a1076ab325e6303f"
+ }
},
{
"source": {
@@ -10803,23 +11813,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-1ec2176be61624b0",
+ "id": "rc87-8ad7f469e0459c2d",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-invalid-classes.test.ts",
"line": 7,
- "title": "invalid / invalid[3] / Error class
",
+ "title": "invalid / invalid[3] / Error class
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c",
+ "sourceDigest": "b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c",
"matrix": {
"index": 2,
"resolved": true,
- "value": "Error class
"
+ "value": "Error class
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "9cab5e5b29a003fffbf12a31ca894e60978f8d7ec7ba35811d7c747faa08ad88"
+ }
},
{
"source": {
@@ -10848,23 +11865,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-2b12ab30706efde4",
+ "id": "rc87-486d568b650ce608",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-invalid-classes.test.ts",
"line": 7,
- "title": "invalid / invalid[4] / Error class
",
+ "title": "invalid / invalid[4] / Error class
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c",
+ "sourceDigest": "b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c",
"matrix": {
"index": 3,
"resolved": true,
- "value": "Error class
"
+ "value": "Error class
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "435f06515a65807d4146065914f3cb3ecf17981152dbdab2567c375abbdfc4d4"
+ }
},
{
"source": {
@@ -10893,23 +11917,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-edae79ffa999de71",
+ "id": "rc87-6a44520f6a131ad1",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-invalid-classes.test.ts",
"line": 7,
- "title": "invalid / valid[1] / Simple, basic
",
+ "title": "invalid / valid[1] / Simple, basic
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c",
+ "sourceDigest": "b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Simple, basic
"
+ "value": "Simple, basic
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "06c93c11aac038c4ab2086cb7976eb7c0ce34eac2502f181e49733d7fb602705"
+ }
},
{
"source": {
@@ -10947,14 +11978,14 @@
"title": "invalid / valid[2] / TemplateLiteral
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c",
+ "sourceDigest": "b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c",
"matrix": {
"index": 1,
"resolved": true,
"value": "TemplateLiteral
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -10992,14 +12023,14 @@
"title": "invalid / valid[3] /
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "94a9d54a20c9e0f3551673a2761c21b85afff1f0c1d442bea60b39c26a8bc55c",
+ "sourceDigest": "b3a2b2a298379d81c9a022919b765180f88c805975e90fcf1e4b78a45e75b30c",
"matrix": {
"index": 2,
"resolved": true,
"value": "
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -11028,23 +12059,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-be74e9a8bebf4924",
+ "id": "rc87-258f645b01db598a",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-invalid-classes.test.ts",
- "line": 72,
- "title": "invalid / invalid[1] / Simple, basic
",
+ "line": 81,
+ "title": "invalid / invalid[1] / Simple, basic
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "78df1b65f3abb0913f31507f9643c26d14b8ad0793c92b44b5c7786d11d4b8e1",
+ "sourceDigest": "66d3c1f8434c9788fbc66a5cbe98ebf0de1dde77e69a34346daaee3c13b193b5",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Simple, basic
"
+ "value": "Simple, basic
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "00acac79fc7111b8c38812440e4e3205ad3b56fa49b0ebd020bbe8620e0d0b8c"
+ }
},
{
"source": {
@@ -11073,23 +12111,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-33d661ebbaf4fa9d",
+ "id": "rc87-1631cd89141b7072",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-invalid-classes.test.ts",
- "line": 72,
- "title": "invalid / invalid[2] / Error class
",
+ "line": 81,
+ "title": "invalid / invalid[2] / Error class
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "78df1b65f3abb0913f31507f9643c26d14b8ad0793c92b44b5c7786d11d4b8e1",
+ "sourceDigest": "66d3c1f8434c9788fbc66a5cbe98ebf0de1dde77e69a34346daaee3c13b193b5",
"matrix": {
"index": 1,
"resolved": true,
- "value": "Error class
"
+ "value": "Error class
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Known-invalid text-decoration:1 emits separate vendor and standard CSS-value errors; unknown-function values are no longer used as the known-invalid oracle. hello-world remains an unknown class fixture. Token names and explicit units change while configured unknown-class policy is retained.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "09e9f8813b97179db81dfc65decc588831edf042a3bf370e23df022907b25387"
+ }
},
{
"source": {
@@ -11118,23 +12163,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-29148015e682db52",
+ "id": "rc87-24a83639da3db69e",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-unapproved-raw-values.test.ts",
"line": 28,
- "title": "no unapproved raw values / invalid[1] / Raw values
",
+ "title": "no unapproved raw values / invalid[1] / Raw values
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "sourceDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Raw values
"
+ "value": "Raw values
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "a091760793b6f3fb9dd1040c756e45c4176424ad596213a2198580e45370cb43"
+ }
},
{
"source": {
@@ -11163,23 +12215,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-a383fec7a7a366eb",
+ "id": "rc87-4cba8c4e54a925a9",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-unapproved-raw-values.test.ts",
"line": 28,
- "title": "no unapproved raw values / invalid[2] / Multi-value raw value segments
",
+ "title": "no unapproved raw values / invalid[2] / Multi-value raw value segments
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "sourceDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
"matrix": {
"index": 1,
"resolved": true,
- "value": "Multi-value raw value segments
"
+ "value": "Multi-value raw value segments
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "5ddcb58efb0401750faafb5633a6ba91ce02b5865a2daf9f27466e8b21a025e5"
+ }
},
{
"source": {
@@ -11207,23 +12266,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-92eabf6d0c8890a9",
+ "id": "rc87-11602bc2e0d1e20b",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-unapproved-raw-values.test.ts",
"line": 28,
- "title": "no unapproved raw values / invalid[3] / clsx('font:15px m:17px')",
+ "title": "no unapproved raw values / invalid[3] / clsx('font-size:15px m:17px')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "sourceDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
"matrix": {
"index": 2,
"resolved": true,
- "value": "clsx('font:15px m:17px')"
+ "value": "clsx('font-size:15px m:17px')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "6ea9f4c8acf26470791c689136b220ed5a675bfc3e9434692bdf461d4d606a85"
+ }
},
{
"source": {
@@ -11260,14 +12326,14 @@
"title": "no unapproved raw values / invalid[4] / ctl(`fg:#123456`)",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "sourceDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
"matrix": {
"index": 3,
"resolved": true,
"value": "ctl(`fg:#123456`)"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -11297,23 +12363,30 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-f668461dc72c77dc",
+ "id": "rc87-878c2a729c95e6ba",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-unapproved-raw-values.test.ts",
"line": 28,
- "title": "no unapproved raw values / valid[1] / Tokens and static utilities
",
+ "title": "no unapproved raw values / valid[1] / Tokens and static utilities
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "sourceDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Tokens and static utilities
"
+ "value": "Tokens and static utilities
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "70871153c97ed73ee027de92f556688d5b9d923be155afc6a4a149b36cbaa3ae"
+ }
},
{
"source": {
@@ -11342,23 +12415,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-861cdb723d388428",
+ "id": "rc87-fe62af08ed4c2e64",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-unapproved-raw-values.test.ts",
"line": 28,
- "title": "no unapproved raw values / valid[2] / Invalid and unknown classes are ignored
",
+ "title": "no unapproved raw values / valid[2] / Invalid and unknown classes are ignored
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "sourceDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
"matrix": {
"index": 1,
"resolved": true,
- "value": "Invalid and unknown classes are ignored
"
+ "value": "Invalid and unknown classes are ignored
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "ca2a012a70289666c03c8a4cba878fe41be63b0adf7b33e20c68a61aab5c4643"
+ }
},
{
"source": {
@@ -11387,23 +12467,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-cac6a0fcc5cd90b6",
+ "id": "rc87-dad95b3c8d66f94f",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-unapproved-raw-values.test.ts",
"line": 28,
- "title": "no unapproved raw values / valid[3] / Raw values disabled
",
+ "title": "no unapproved raw values / valid[3] / Raw values disabled
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "sourceDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
"matrix": {
"index": 2,
"resolved": true,
- "value": "Raw values disabled
"
+ "value": "Raw values disabled
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "e3a0fe80bcf9c9ce288fc857bdf5222a54664a00393c8e9fac1187b7bb9a823c"
+ }
},
{
"source": {
@@ -11441,14 +12528,14 @@
"title": "no unapproved raw values / valid[4] / Allowed by generated property
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "sourceDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
"matrix": {
"index": 3,
"resolved": true,
"value": "Allowed by generated property
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -11486,14 +12573,14 @@
"title": "no unapproved raw values / valid[5] / Allowed by class key
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "sourceDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
"matrix": {
"index": 4,
"resolved": true,
"value": "Allowed by class key
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -11531,14 +12618,14 @@
"title": "no unapproved raw values / valid[6] / Allowed by pattern
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "sourceDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
"matrix": {
"index": 5,
"resolved": true,
"value": "Allowed by pattern
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -11567,23 +12654,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-b880302edee3495d",
+ "id": "rc87-d088287a7400a9c0",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-unapproved-raw-values.test.ts",
"line": 28,
- "title": "no unapproved raw values / valid[7] / Allowed multi-value segment by pattern
",
+ "title": "no unapproved raw values / valid[7] / Allowed multi-value segment by pattern
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "71df58b69d4660b7d8f0775f9e466339d83ba8b626857c7ea98bc60cc9fb8506",
+ "sourceDigest": "2037ac212a3d54d1f3b6e114d2fb99c2776df9323ae1cc8cadcaa9f92cac8170",
"matrix": {
"index": 6,
"resolved": true,
- "value": "Allowed multi-value segment by pattern
"
+ "value": "Allowed multi-value segment by pattern
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "732215474927db26329944d912a8a7828f7f436a24738da426c929940fe4daa2"
+ }
},
{
"source": {
@@ -11667,14 +12761,14 @@
"title": "no unapproved raw values custom manifest / invalid[1] / Custom token namespace raw value
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "33b5d7fdba1f6b13ee8b53ce108116613375207740d6479b12ac056240686cfe",
+ "sourceDigest": "f4ef82a563e53cba1d5ab49098c6ff01fa5eae3c08a9663d363934fe36689eef",
"matrix": {
"index": 0,
"resolved": true,
"value": "Custom token namespace raw value
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -11704,23 +12798,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-3e9b6b68f9ff714e",
+ "id": "rc87-f793976db04c4e18",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-unapproved-raw-values.test.ts",
"line": 114,
- "title": "no unapproved raw values custom manifest / valid[1] / Custom token
",
+ "title": "no unapproved raw values custom manifest / valid[1] / Custom token
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "33b5d7fdba1f6b13ee8b53ce108116613375207740d6479b12ac056240686cfe",
+ "sourceDigest": "f4ef82a563e53cba1d5ab49098c6ff01fa5eae3c08a9663d363934fe36689eef",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Custom token
"
+ "value": "Custom token
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "445ed923f29f2fa518abe2e3525b6d7d860911acd9cecf7c02b5a82235ad700e"
+ }
},
{
"source": {
@@ -11795,23 +12896,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-60ba5ca3998b5d79",
+ "id": "rc87-e90c7280e31b1551",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-unapproved-raw-values.test.ts",
"line": 147,
- "title": "no unapproved raw values parser smoke tests / invalid[1] / Vue
",
+ "title": "no unapproved raw values parser smoke tests / invalid[1] / Vue
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "dc7050f7779ceddd9d7894b8727c6ec8a4ce7f03dbcf1d666de83aef4f36d3cb",
+ "sourceDigest": "27b4ee00f2cd01b9235c352803f284531bb421c658685bea032db59ab545b763",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Vue
"
+ "value": "Vue
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "98ffd04d025a4785969c3a1cdc14602b8a07fd89142fec20a13ed4f9ab95e27b"
+ }
},
{
"source": {
@@ -11840,23 +12948,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-485132b1bfbaf0d5",
+ "id": "rc87-5097538bd9cc32e9",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-unapproved-raw-values.test.ts",
"line": 147,
- "title": "no unapproved raw values parser smoke tests / invalid[2] / Svelte
",
+ "title": "no unapproved raw values parser smoke tests / invalid[2] / Svelte
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "dc7050f7779ceddd9d7894b8727c6ec8a4ce7f03dbcf1d666de83aef4f36d3cb",
+ "sourceDigest": "27b4ee00f2cd01b9235c352803f284531bb421c658685bea032db59ab545b763",
"matrix": {
"index": 1,
"resolved": true,
- "value": "Svelte
"
+ "value": "Svelte
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "1f26f55eee6566602cfeb0c7aeb77d445dc814ee74ae23be8836d3b72e102b00"
+ }
},
{
"source": {
@@ -11885,23 +13000,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-06717a8f6562faf5",
+ "id": "rc87-7b944dca2fb78d58",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-unapproved-raw-values.test.ts",
"line": 147,
- "title": "no unapproved raw values parser smoke tests / invalid[3] / Angular
",
+ "title": "no unapproved raw values parser smoke tests / invalid[3] / Angular
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "dc7050f7779ceddd9d7894b8727c6ec8a4ce7f03dbcf1d666de83aef4f36d3cb",
+ "sourceDigest": "27b4ee00f2cd01b9235c352803f284531bb421c658685bea032db59ab545b763",
"matrix": {
"index": 2,
"resolved": true,
- "value": "Angular
"
+ "value": "Angular
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "bd0d126123ca971ff5466f3430840de766ba3914570567c8a1f1525a7f032ab0"
+ }
},
{
"source": {
@@ -11930,23 +13052,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-79fdc091ba87d1c3",
+ "id": "rc87-b9e6a67127fb99e8",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/no-unapproved-raw-values.test.ts",
"line": 147,
- "title": "no unapproved raw values parser smoke tests / invalid[4] / # Test MDX
",
+ "title": "no unapproved raw values parser smoke tests / invalid[4] / # Test MDX
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "dc7050f7779ceddd9d7894b8727c6ec8a4ce7f03dbcf1d666de83aef4f36d3cb",
+ "sourceDigest": "27b4ee00f2cd01b9235c352803f284531bb421c658685bea032db59ab545b763",
"matrix": {
"index": 3,
"resolved": true,
- "value": "# Test MDX
"
+ "value": "# Test MDX
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named tokens and explicit longhands/var() replace retired shorthand inference. Raw value policy still diagnoses literal segments, permits explicit variables, and honors property/pattern settings; the ignored invalid fixture is font: rather than the newly classified native font:error candidate.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "55ce1599e1ed95803d48d04d4a718a3a65cf258ffc98eaa7ad34cc5f2201cc25"
+ }
},
{
"source": {
@@ -12008,23 +13137,30 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-4791de9bd3ce10ba",
+ "id": "rc87-ad6aeef7c1209a80",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[1] / Static pattern utility with variants
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[14] / Static pattern utility with variants
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 0,
+ "index": 13,
"resolved": true,
"value": "Static pattern utility with variants
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "36a70be429885253fcc07b256eb974942b62af5b8365245db1c36925d9e6e897"
+ }
},
{
"source": {
@@ -12054,23 +13190,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-45c544d8e94ae20e",
+ "id": "rc87-b570a066868eddaf",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[10] / Condition order disabled keeps theme token fix
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[19] / Condition order disabled keeps theme token fix
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 9,
+ "index": 18,
"resolved": true,
- "value": "Condition order disabled keeps theme token fix
"
+ "value": "Condition order disabled keeps theme token fix
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "a96f7f41dadfb537279f699b6a9d7902ef8f119b12ebfe53340716e7a33b18dd"
+ }
},
{
"source": {
@@ -12100,23 +13243,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-60ea934649e2f3b4",
+ "id": "rc87-f3d003739808f76b",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[11] / Theme tokens disabled keeps condition order fix
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[28] / Literal values are preserved preserves condition nesting
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 10,
+ "index": 27,
"resolved": true,
- "value": "Theme tokens disabled keeps condition order fix
"
+ "value": "Literal values are preserved preserves condition nesting
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "c9e3192d427c2beda9578385cffbe335424d20f9b5a53a37e1cd3c8a1a9ceb2b"
+ }
},
{
"source": {
@@ -12145,23 +13295,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-c8370e92b0ea52b1",
+ "id": "rc87-d8c6c9e2fa60d788",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[12] / Property aliases disabled keeps condition order fix
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[29] / Property aliases disabled preserves condition nesting
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 11,
+ "index": 28,
"resolved": true,
- "value": "Property aliases disabled keeps condition order fix
"
+ "value": "Property aliases disabled preserves condition nesting
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "cded9c81c982e70558435c0f94ab7b3df71909c8b6a5ec5267f5aa21cbc9afcc"
+ }
},
{
"source": {
@@ -12191,23 +13348,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-79f505548ab25dc0",
+ "id": "rc87-8ffc1598b9dc80d0",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[13] / Variable references disabled keeps condition order fix
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[30] / Explicit variable references are preserved preserves condition nesting
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 12,
+ "index": 29,
"resolved": true,
- "value": "Variable references disabled keeps condition order fix
"
+ "value": "Explicit variable references are preserved preserves condition nesting
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "625beb623b0eaf5ef94366d5cdd516affa889c2361407808a9606a269aabc11a"
+ }
},
{
"source": {
@@ -12236,23 +13400,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-a5d83c832ae37878",
+ "id": "rc87-3313f3be1ef98186",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[14] / Multi-value tokens disabled keeps condition order fix
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[31] / Literal multi-values are preserved preserves condition nesting
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 13,
+ "index": 30,
"resolved": true,
- "value": "Multi-value tokens disabled keeps condition order fix
"
+ "value": "Literal multi-values are preserved preserves condition nesting
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "0c2549c6c21d16600e0e67ce77f103a6e97630a3105c1fc3be5a301c93587fe8"
+ }
},
{
"source": {
@@ -12281,23 +13452,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-e8df67bb4446fc40",
+ "id": "rc87-fd89c460702b2b1e",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[15] / Composition utilities
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[20] / Composition utilities
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 14,
+ "index": 19,
"resolved": true,
- "value": "Composition utilities
"
+ "value": "Composition utilities
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "ac53c90333d9a0eb6fe4fd8c3cca92cee82f9e8c33c330de8d1a7409f0a4c917"
+ }
},
{
"source": {
@@ -12326,23 +13504,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-50fb5138fb1e143b",
+ "id": "rc87-3dba7f33ca7a1375",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[16] / Axis composition utilities
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[21] / Axis composition utilities
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 15,
+ "index": 20,
"resolved": true,
- "value": "Axis composition utilities
"
+ "value": "Axis composition utilities
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "a34a21494065188cb0b46f8fd3c3628f9ee4168116d592cfe6afb2f28a8f5e07"
+ }
},
{
"source": {
@@ -12371,23 +13556,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-51e1ae4fab780db7",
+ "id": "rc87-5f63e70d73b95553",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[17] / Axis composition with condition order
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[32] / Axis composition with condition order
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 16,
+ "index": 31,
"resolved": true,
- "value": "Axis composition with condition order
"
+ "value": "Axis composition with condition order
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "e94359547338297b86777d74ef78ed283da28aaef21b2f6233663d01cfda4f5b"
+ }
},
{
"source": {
@@ -12416,23 +13608,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-2e4381707f8ba68c",
+ "id": "rc87-d3ad3c8b00566fa8",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[18] / Composition after canonicalization
",
+ "line": 43,
+ "title": "prefer canonical classes / invalid[2] / Composition after canonicalization
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 17,
+ "index": 1,
"resolved": true,
- "value": "Composition after canonicalization
"
+ "value": "Composition after canonicalization
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "9a7a3d82092bfeca8926abcdd4fe0603cd2350a65703e73b5da697ef099732be"
+ }
},
{
"source": {
@@ -12461,23 +13660,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-9d33dd88f22d116f",
+ "id": "rc87-bb6092b776f5dd75",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[19] / clsx('display:block font:16px')",
+ "line": 43,
+ "title": "prefer canonical classes / valid[22] / clsx('display:block font-size:16px')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 18,
+ "index": 21,
"resolved": true,
- "value": "clsx('display:block font:16px')"
+ "value": "clsx('display:block font-size:16px')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "80579dbbb6ffaf6aa9929cb495c9f7335fbf942b9724e6e30f2def0ea6dab296"
+ }
},
{
"source": {
@@ -12507,23 +13713,30 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-173901b039dba06c",
+ "id": "rc87-f73b7e35f57d3523",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[2] / Static utilities
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[15] / Static utilities
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 1,
+ "index": 14,
"resolved": true,
"value": "Static utilities
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "06d25c4500edb6fdfef94f2c5065d7712417e9c0dd0b254802b6ac6f6f826efb"
+ }
},
{
"source": {
@@ -12552,23 +13765,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-1cf4a441a12eba30",
+ "id": "rc87-3c0d4a2731017ab8",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[20] / clsx('block@dark@sm font:16px@dark@sm')",
+ "line": 43,
+ "title": "prefer canonical classes / valid[33] / clsx('block@dark@sm font-size:16px@dark@sm')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 19,
+ "index": 32,
"resolved": true,
- "value": "clsx('block@dark@sm font:16px@dark@sm')"
+ "value": "clsx('block@dark@sm font-size:16px@dark@sm')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "0bfb9738df9edd47ce550421671d954651ca5dceb856f93bcddd1f1699a37bb3"
+ }
},
{
"source": {
@@ -12597,23 +13817,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-5220ea8868363aac",
+ "id": "rc87-643ca11a57fc1d78",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[21] / clsx('width:md height:md')",
+ "line": 43,
+ "title": "prefer canonical classes / invalid[3] / clsx('width-md height-md')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 20,
+ "index": 2,
"resolved": true,
- "value": "clsx('width:md height:md')"
+ "value": "clsx('width-md height-md')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "8b8a1ef898ec54dbaf6be91ddec1fdbe1e105609201ee34ae44bd7e3bbf9039e"
+ }
},
{
"source": {
@@ -12642,23 +13869,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-0fbea12cbc344812",
+ "id": "rc87-ae45226ad14cab35",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[22] / clsx('margin-top:md margin-bottom:md')",
+ "line": 43,
+ "title": "prefer canonical classes / invalid[4] / clsx('margin-top-md margin-bottom-md')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 21,
+ "index": 3,
"resolved": true,
- "value": "clsx('margin-top:md margin-bottom:md')"
+ "value": "clsx('margin-top-md margin-bottom-md')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "68795a06f846a7192453b527909eaf9e643cc690513e24651d45bd63047dde96"
+ }
},
{
"source": {
@@ -12687,23 +13921,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-c15b6b254db828d6",
+ "id": "rc87-9339668b01062296",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[23] / ctl(`font:1rem r:.375rem`)",
+ "line": 43,
+ "title": "prefer canonical classes / valid[23] / ctl(`font-size:1rem r:.375rem`)",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 22,
"resolved": true,
- "value": "ctl(`font:1rem r:.375rem`)"
+ "value": "ctl(`font-size:1rem r:.375rem`)"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "3c067226a3a1f5b54d261a1ba4b3ed2dbda84b3c2e8c2159e4fe8986386e83c4"
+ }
},
{
"source": {
@@ -12732,23 +13973,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-7e8a2aa57fd614a5",
+ "id": "rc87-cea0ef3a37d02e26",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[24] / ctl(`block:hover@dark@sm`)",
+ "line": 43,
+ "title": "prefer canonical classes / valid[34] / ctl(`block:hover@dark@sm`)",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 23,
+ "index": 33,
"resolved": true,
"value": "ctl(`block:hover@dark@sm`)"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "155017dd112eb9b5f1b0df667ca9c3ed80ee5592b5e2f044251859d0d083a0a4"
+ }
},
{
"source": {
@@ -12777,23 +14025,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-7931f166ae9c26b4",
+ "id": "rc87-a0e83696b4af425f",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[25] / ctl(`w:1rem h:1rem`)",
+ "line": 43,
+ "title": "prefer canonical classes / valid[24] / ctl(`w:1rem h:1rem`)",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 24,
+ "index": 23,
"resolved": true,
"value": "ctl(`w:1rem h:1rem`)"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "19037ef40c39525e218ce0f3fb2ba93fe43fc3e31d365fdc946bfce064a29c40"
+ }
},
{
"source": {
@@ -12822,23 +14077,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-a1b42b0ae4f35da5",
+ "id": "rc87-4f9aa6e22fad7159",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[26] / ctl(`padding-left:1rem padding-right:1rem`)",
+ "line": 43,
+ "title": "prefer canonical classes / invalid[5] / ctl(`padding-left:1rem padding-right:1rem`)",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 25,
+ "index": 4,
"resolved": true,
"value": "ctl(`padding-left:1rem padding-right:1rem`)"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "c994922b96e52cb5715d27accf9ac0608694cd330ab8dbc1c88a598a5f8dca20"
+ }
},
{
"source": {
@@ -12867,23 +14129,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-61552abd57dcc78f",
+ "id": "rc87-f7a7a2067fb5abfa",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[3] / Variables
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[16] / Variables
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 2,
+ "index": 15,
"resolved": true,
- "value": "Variables
"
+ "value": "Variables
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "6feb623240aeac287712f2b593c1fea254aaf67df0253e779d58d101d8273dbc"
+ }
},
{
"source": {
@@ -12912,23 +14181,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-24a4759cef2ebf86",
+ "id": "rc87-02669c9330744b98",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[4] / Aliases
",
+ "line": 43,
+ "title": "prefer canonical classes / invalid[1] / Aliases
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 3,
+ "index": 0,
"resolved": true,
- "value": "Aliases
"
+ "value": "Aliases
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "61128b6e44379f6aea03e384c9f4438dbfec203f081e499f191cd16b84339a58"
+ }
},
{
"source": {
@@ -12957,23 +14233,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-c74944578664b6a3",
+ "id": "rc87-226dd738eab13d14",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[5] / Named token keys
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[25] / Named token keys
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 4,
+ "index": 24,
"resolved": true,
- "value": "Named token keys
"
+ "value": "Named token keys
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "0b5548df8732a2fb246d1776bc2e8409ae285a488bc328164d76033935ccb796"
+ }
},
{
"source": {
@@ -13002,23 +14285,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-8f20942924f27cfe",
+ "id": "rc87-8a173ee62aca252e",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[6] / Multi-value tokens
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[17] / Multi-value tokens
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 5,
+ "index": 16,
"resolved": true,
"value": "Multi-value tokens
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "d2fba204e2f2a193dcaf86b70f37028f8b64b08ea41895c6e1521f7bb8799f2b"
+ }
},
{
"source": {
@@ -13048,23 +14338,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-d90f6cf28023ebba",
+ "id": "rc87-4efd7aaf1d9a8bc1",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[7] / Variable references
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[18] / Variable references
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 6,
+ "index": 17,
"resolved": true,
"value": "Variable references
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "9fb8f13209d4143ac81e8f8b4d4cd99a04c6bd204764e12f8ab7cf9070fbbefa"
+ }
},
{
"source": {
@@ -13093,23 +14390,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-c183ed2405f120ce",
+ "id": "rc87-26c5688398c60dc7",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[8] / Condition order
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[26] / Condition order
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 7,
+ "index": 25,
"resolved": true,
"value": "Condition order
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "4a5b488ec395019d334307e4ffee465f421d2e7f25b1e19b0299225ffe19700c"
+ }
},
{
"source": {
@@ -13138,23 +14442,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-20e7d0283a684a74",
+ "id": "rc87-7d6dc8b43d19d6b8",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / invalid[9] / Condition order with canonical classes
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[27] / Condition order with canonical classes
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
- "index": 8,
+ "index": 26,
"resolved": true,
- "value": "Condition order with canonical classes
"
+ "value": "Condition order with canonical classes
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "08d62dea5ed5673529bbf8e7e21ee070d06bbaa984189f7c3aaf44bae9a599c5"
+ }
},
{
"source": {
@@ -13183,23 +14494,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-f569221ff687383b",
+ "id": "rc87-484523ab64fd28f6",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / valid[1] / Recommended classes
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[1] / Recommended classes
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Recommended classes
"
+ "value": "Recommended classes
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "1707cfd563c76c753e991c82cae0b3f20df95093f75d23059257c89accfffa28"
+ }
},
{
"source": {
@@ -13228,23 +14546,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-927cd4e360482a28",
+ "id": "rc87-04a5ff1a14ac391e",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / valid[10] / Axis composition utilities disabled
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[10] / Axis composition utilities disabled
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 9,
"resolved": true,
- "value": "Axis composition utilities disabled
"
+ "value": "Axis composition utilities disabled
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "6dff32a96d8b920a3b5aeab363376f41aaca2d9da5f3e1f540495bb417269eae"
+ }
},
{
"source": {
@@ -13278,18 +14603,18 @@
"id": "rc87-9ac41897f6793311",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
+ "line": 43,
"title": "prefer canonical classes / valid[11] / Condition order disabled
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 10,
"resolved": true,
"value": "Condition order disabled
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -13319,23 +14644,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-7989689229005312",
+ "id": "rc87-f635a0600e7a4e8b",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / valid[12] / Theme tokens and condition order disabled
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[12] / Condition order disabled preserves literals
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 11,
"resolved": true,
- "value": "Theme tokens and condition order disabled
"
+ "value": "Condition order disabled preserves literals
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "7381af7a236e1dd16b3c0bdae935f3f28c54b30cfdc531dc6e29380b9cd32e0c"
+ }
},
{
"source": {
@@ -13364,23 +14696,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-c6420e672fd9b493",
+ "id": "rc87-e33fa1ec98f13fda",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / valid[13] / Unsafe suffix order
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[13] / Unsafe suffix order
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 12,
"resolved": true,
- "value": "Unsafe suffix order
"
+ "value": "Unsafe suffix order
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "9762978bf9458e34a111017b79e140c5e05e1d50a159ab44c6e933cc2d1b3fbf"
+ }
},
{
"source": {
@@ -13409,23 +14748,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-af050a3e3399a5e3",
+ "id": "rc87-9aeb5d039b18dbfc",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / valid[2] / Unknown classes are ignored
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[2] / Unknown classes are ignored
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 1,
"resolved": true,
- "value": "Unknown classes are ignored
"
+ "value": "Unknown classes are ignored
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "02a22d8b154e9be6d6c16d73033460292a4aa16e7c2a7fe6e4b71c2540910183"
+ }
},
{
"source": {
@@ -13455,23 +14801,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-290c76660baf3210",
+ "id": "rc87-f1821005802355bb",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / valid[3] / Manifest aliases are preserved
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[3] / Manifest aliases are preserved
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 2,
"resolved": true,
- "value": "Manifest aliases are preserved
"
+ "value": "Manifest aliases are preserved
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "fc600bfe00920b01e956b68770251e042f7f6df56f2645f931f234d697963e34"
+ }
},
{
"source": {
@@ -13501,23 +14854,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-3a9e07cc4a862b5d",
+ "id": "rc87-05944ffacbb5e721",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / valid[4] / Theme tokens disabled
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[4] / Literal values are preserved
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 3,
"resolved": true,
- "value": "Theme tokens disabled
"
+ "value": "Literal values are preserved
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "356130c8ab4d9bbeb5a84df60f193ad2bf5879163a38cfcdbf456bb07bf4bdbb"
+ }
},
{
"source": {
@@ -13546,23 +14906,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-fc59a066e51fba4b",
+ "id": "rc87-339a747bf2a86a96",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / valid[5] / Property aliases disabled
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[5] / Property aliases disabled
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 4,
"resolved": true,
- "value": "Property aliases disabled
"
+ "value": "Property aliases disabled
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "37503f87c7820ab4a848d9284ba96912543702cbd66efacf5589b647b893eac6"
+ }
},
{
"source": {
@@ -13597,18 +14964,18 @@
"id": "rc87-0f247d94a9300ba3",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
+ "line": 43,
"title": "prefer canonical classes / valid[6] / Static utilities disabled
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 5,
"resolved": true,
"value": "Static utilities disabled
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -13638,23 +15005,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-431ae057ef257d7d",
+ "id": "rc87-4bed6a1f03ad954b",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / valid[7] / Variable references disabled
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[7] / Explicit variable references are preserved
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 6,
"resolved": true,
- "value": "Variable references disabled
"
+ "value": "Explicit variable references are preserved
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "2dbf3d795776dce847f7a5d9ebe69ea5f939acefd1140ae3f063182cc61a8705"
+ }
},
{
"source": {
@@ -13683,23 +15057,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-e7cbef34c3653ad7",
+ "id": "rc87-793f9d121e337eb8",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / valid[8] / Multi-value tokens disabled
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[8] / Literal multi-values are preserved
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 7,
"resolved": true,
- "value": "Multi-value tokens disabled
"
+ "value": "Literal multi-values are preserved
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "92a7c12d5978b9908fb0f42acfd8b0b9dbf378000424a796307f9684eab2dccf"
+ }
},
{
"source": {
@@ -13728,23 +15109,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-903249b8eb142324",
+ "id": "rc87-b36719969853c597",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 75,
- "title": "prefer canonical classes / valid[9] / Composition utilities disabled
",
+ "line": 43,
+ "title": "prefer canonical classes / valid[9] / Composition utilities disabled
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "7b45f1450bdf752b302a6bcbc828adf89438c5a2ec4b08ca6d38e975004dd6b3",
+ "sourceDigest": "d0e20ffb0020d9b36b45358387783f55c898bc3dfb72197740fe6cce24fec71e",
"matrix": {
"index": 8,
"resolved": true,
- "value": "Composition utilities disabled
"
+ "value": "Composition utilities disabled
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "99dc92de1ad1021b7c958e3435f44b0c736c74aa55d36cdb09e4ad67718ed030"
+ }
},
{
"source": {
@@ -13778,18 +15166,18 @@
"id": "rc87-f4aefe7cc24c1e21",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 340,
+ "line": 183,
"title": "prefer canonical classes custom components / valid[1] / Component class ",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "e649e9f2319ac7609febc0886c8100032364beaed64647e61e7ec3e064b812a8",
+ "sourceDigest": "499e873ba5d688dcf10701e976f414518def89af4d36a2b042048024de9d1a26",
"matrix": {
"index": 0,
"resolved": true,
"value": "Component class "
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -13819,23 +15207,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-7e2eb27a73d2ceca",
+ "id": "rc87-a43613ddb550e64e",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 362,
- "title": "prefer canonical classes custom manifest / invalid[1] / Custom manifest
",
+ "line": 205,
+ "title": "prefer canonical classes custom manifest / valid[2] / Custom manifest
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "1228341c6c043be83b8121ea56f3bd19207f4eb4df889f0dd9f51c817051dffb",
+ "sourceDigest": "13a9f6b37151454d6d955669cb342540980817150b5e237a0684ddb4762e3c23",
"matrix": {
- "index": 0,
+ "index": 1,
"resolved": true,
"value": "Custom manifest
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "129f0f3aa70b8152b2a0ba0edffba60779d02dddbf0d9ee26fefaa42380b2db3"
+ }
},
{
"source": {
@@ -13870,18 +15265,18 @@
"id": "rc87-498b2205d1d1fc3d",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 362,
+ "line": 205,
"title": "prefer canonical classes custom manifest / valid[1] / Custom variants and components
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "1228341c6c043be83b8121ea56f3bd19207f4eb4df889f0dd9f51c817051dffb",
+ "sourceDigest": "13a9f6b37151454d6d955669cb342540980817150b5e237a0684ddb4762e3c23",
"matrix": {
"index": 0,
"resolved": true,
"value": "Custom variants and components
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -13910,23 +15305,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-76b7f7f11b0d43d8",
+ "id": "rc87-ebf2d9bb17d4dd05",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 384,
- "title": "prefer canonical classes parser smoke tests / invalid[1] / Vue
",
+ "line": 223,
+ "title": "prefer canonical classes parser smoke tests / valid[1] / Vue
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "sourceDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Vue
"
+ "value": "Vue
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "2f0b84ed89ce6ad7c46198ef37da3995bbf5c230cbf5ad2c9fa1bb25affcf4b8"
+ }
},
{
"source": {
@@ -13955,23 +15357,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-90185aed40a54c8f",
+ "id": "rc87-f8f36e867e6ee492",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 384,
- "title": "prefer canonical classes parser smoke tests / invalid[2] / Vue condition
",
+ "line": 223,
+ "title": "prefer canonical classes parser smoke tests / valid[5] / Vue condition
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "sourceDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
"matrix": {
- "index": 1,
+ "index": 4,
"resolved": true,
"value": "Vue condition
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "b4994198d078437c655b4515c012e549611cd428e2cfad5f76cd7fa6806ed350"
+ }
},
{
"source": {
@@ -14000,23 +15409,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-65dad9b1586a51c4",
+ "id": "rc87-84b1d82884710190",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 384,
- "title": "prefer canonical classes parser smoke tests / invalid[3] / Svelte
",
+ "line": 223,
+ "title": "prefer canonical classes parser smoke tests / valid[2] / Svelte
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "sourceDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
"matrix": {
- "index": 2,
+ "index": 1,
"resolved": true,
- "value": "Svelte
"
+ "value": "Svelte
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "a86ccf2f901e743889bcf0e7509ce68569c07f78c21716cd30316de4e3cefc0b"
+ }
},
{
"source": {
@@ -14045,23 +15461,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-8e6548f7b2da966b",
+ "id": "rc87-7db22740288005e7",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 384,
- "title": "prefer canonical classes parser smoke tests / invalid[4] / Svelte condition
",
+ "line": 223,
+ "title": "prefer canonical classes parser smoke tests / valid[6] / Svelte condition
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "sourceDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
"matrix": {
- "index": 3,
+ "index": 5,
"resolved": true,
"value": "Svelte condition
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "5f0ca3fd329dd1587a1775693b8707006b1cd4fa127de0cc841f15e5508fef95"
+ }
},
{
"source": {
@@ -14090,23 +15513,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-382f83ef3864438b",
+ "id": "rc87-e519d40edf542cc8",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 384,
- "title": "prefer canonical classes parser smoke tests / invalid[5] / Angular
",
+ "line": 223,
+ "title": "prefer canonical classes parser smoke tests / valid[3] / Angular
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "sourceDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
"matrix": {
- "index": 4,
+ "index": 2,
"resolved": true,
- "value": "Angular
"
+ "value": "Angular
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "01eb6a3929f45b2a2bf56cf30d650216c7f3873e9643373570fecfadb9ad1686"
+ }
},
{
"source": {
@@ -14135,23 +15565,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-89945b41afd045da",
+ "id": "rc87-39702b3475593a76",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 384,
- "title": "prefer canonical classes parser smoke tests / invalid[6] / Angular condition
",
+ "line": 223,
+ "title": "prefer canonical classes parser smoke tests / valid[7] / Angular condition
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "sourceDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
"matrix": {
- "index": 5,
+ "index": 6,
"resolved": true,
"value": "Angular condition
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "095d5feff5e43d76a92fb42e4bce4bdc7d0b250c17d2a8748093a818b0ce2a35"
+ }
},
{
"source": {
@@ -14180,23 +15617,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-bc1db7b003c91340",
+ "id": "rc87-26ca6c44a09ea006",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 384,
- "title": "prefer canonical classes parser smoke tests / invalid[7] / # Test MDX
",
+ "line": 223,
+ "title": "prefer canonical classes parser smoke tests / valid[4] / # Test MDX
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "sourceDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
"matrix": {
- "index": 6,
+ "index": 3,
"resolved": true,
- "value": "# Test MDX
"
+ "value": "# Test MDX
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "cc792bb2675fa0e30d56dede90fb9d23fe4bad2390ce6fc0d604645de27125ba"
+ }
},
{
"source": {
@@ -14225,23 +15669,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-7f8e60d953565a77",
+ "id": "rc87-b3d64cd51950dff3",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 384,
- "title": "prefer canonical classes parser smoke tests / invalid[8] / # Test MDX condition
",
+ "line": 223,
+ "title": "prefer canonical classes parser smoke tests / valid[8] / # Test MDX condition
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "d241a4a69047adc17df8e51ba1f4bdd182136c988d25d949d75f20fb2a01a080",
+ "sourceDigest": "4f886a9a245c2af82be0f2c15a12f43494869104ce18351f52c78f735ddde023",
"matrix": {
"index": 7,
"resolved": true,
"value": "# Test MDX condition
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "90355df755272b34c2eedb2b9172de1eb7bb970be39ecb12d06335eb745d6b19"
+ }
},
{
"source": {
@@ -14271,23 +15722,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-8f5974e01fbb69e1",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 468,
- "title": "prefer canonical classes in compose directives / invalid[1] / .btn { @compose text-align:center contain:content; }",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "d64eaca39e37bf8e5fa5f3c59b4bd1006dbf5a6d00df45b714a0f99c93f8813a",
- "matrix": {
- "index": 0,
- "resolved": true,
- "value": ".btn { @compose text-align:center contain:content; }"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "5658195354fcfe9af3b8a0b10156aafca7c2a2cdcdefd4dafaaf7df135c86225"
+ }
},
{
"source": {
@@ -14317,23 +15761,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-c7422ce75f6698ce",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 468,
- "title": "prefer canonical classes in compose directives / invalid[2] / .btn { @compose contain:content; }",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "d64eaca39e37bf8e5fa5f3c59b4bd1006dbf5a6d00df45b714a0f99c93f8813a",
- "matrix": {
- "index": 1,
- "resolved": true,
- "value": ".btn { @compose contain:content; }"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "ce8c07b9bad2365d01aeccd3aadc086e53b9a91e0fb1359d303eb3d8e801f4c0"
+ }
},
{
"source": {
@@ -14363,23 +15800,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-317d63ee42e0b4a8",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 468,
- "title": "prefer canonical classes in compose directives / invalid[3] / @components { btn { @compose bg:blue-60:hover@sm block@dark; } }",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "d64eaca39e37bf8e5fa5f3c59b4bd1006dbf5a6d00df45b714a0f99c93f8813a",
- "matrix": {
- "index": 2,
- "resolved": true,
- "value": "@components { btn { @compose bg:blue-60:hover@sm block@dark; } }"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "1bc0b5cbdc1317c3afb16059b038d2f4c83140a9ee99b3a1589624fd510ba135"
+ }
},
{
"source": {
@@ -14409,23 +15839,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-ddf1ea7c99ef3d20",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 468,
- "title": "prefer canonical classes in compose directives / invalid[4] / .btn { @compose contain:content contain:none; }",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "d64eaca39e37bf8e5fa5f3c59b4bd1006dbf5a6d00df45b714a0f99c93f8813a",
- "matrix": {
- "index": 3,
- "resolved": true,
- "value": ".btn { @compose contain:content contain:none; }"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "49ac7db562ce35e8f2c22639a16b9a22b675a9df735145a33f8b097c50a29f20"
+ }
},
{
"source": {
@@ -14455,23 +15878,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-ce76b58a6a371473",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 468,
- "title": "prefer canonical classes in compose directives / valid[1] / .btn { @compose text-center; contain: content; }",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "d64eaca39e37bf8e5fa5f3c59b4bd1006dbf5a6d00df45b714a0f99c93f8813a",
- "matrix": {
- "index": 0,
- "resolved": true,
- "value": ".btn { @compose text-center; contain: content; }"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "44b1b634eccfa41849613a1ed669b5d1010f7592d0706ed135ccbbf5c8e72896"
+ }
},
{
"source": {
@@ -14501,23 +15917,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-e4c50f8d1daf8371",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 518,
- "title": "prefer canonical classes compose directives / invalid[1] / .btn { @compose font:16px margin:md; }",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
- "matrix": {
- "index": 0,
- "resolved": true,
- "value": ".btn { @compose font:16px margin:md; }"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "b73285882e4ff97e5648d3bc02ae0210f6025268872ce909c9ce1b0d86261b1d"
+ }
},
{
"source": {
@@ -14547,23 +15956,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-e44a27b12a65edc0",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 518,
- "title": "prefer canonical classes compose directives / invalid[2] / .btn { @compose w:md h:md mt:md mb:md; }",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
- "matrix": {
- "index": 1,
- "resolved": true,
- "value": ".btn { @compose w:md h:md mt:md mb:md; }"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "7842fcdf91d105d8478e3ebabc7831bd141e0e06c970a4504d3f5492bb734e9a"
+ }
},
{
"source": {
@@ -14593,23 +15995,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-8fb40499263db668",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 518,
- "title": "prefer canonical classes compose directives / invalid[3] / .btn { @compose block@dark@sm font:16px@dark@sm; }",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
- "matrix": {
- "index": 2,
- "resolved": true,
- "value": ".btn { @compose block@dark@sm font:16px@dark@sm; }"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "b12888b6dee1849db939b9edc699c49de622665232bc2658e9d42e515f7aef30"
+ }
},
{
"source": {
@@ -14639,23 +16034,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-1de48ca5936adff8",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 518,
- "title": "prefer canonical classes compose directives / invalid[4] / .btn { @compose font:16px margin:md ; }",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
- "matrix": {
- "index": 3,
- "resolved": true,
- "value": ".btn { @compose font:16px margin:md ; }"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "43ba9c734d29c5bb439764d0dda3dee89c90f6bc8b478b541eb25f5fb05a6199"
+ }
},
{
"source": {
@@ -14685,23 +16073,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-bf90ee70a9fdc07f",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 518,
- "title": "prefer canonical classes compose directives / invalid[5] / ",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
- "matrix": {
- "index": 4,
- "resolved": true,
- "value": " "
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "10d82955b4ee6c2aa50e9eb3346f31118c52a475bf7bf0c41560397010ec1fd7"
+ }
},
{
"source": {
@@ -14731,23 +16112,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-c8992b1d2cb069c0",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 518,
- "title": "prefer canonical classes compose directives / invalid[6] / ",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
- "matrix": {
- "index": 5,
- "resolved": true,
- "value": ""
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "cfa101b2ffaed61c5c2c1763c21ab6b6dbb6fbc88e16bf245b5df69ff52df84c"
+ }
},
{
"source": {
@@ -14777,23 +16151,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-9c498b75f794b066",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 518,
- "title": "prefer canonical classes compose directives / valid[1] / .btn { @compose \"font:16px margin:md\"; }",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
- "matrix": {
- "index": 0,
- "resolved": true,
- "value": ".btn { @compose \"font:16px margin:md\"; }"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "4a4395a065b4296dc3054feeb0724763221c58172e0bbfa9c54ace9e7845513a"
+ }
},
{
"source": {
@@ -14823,23 +16190,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-7bfafd80ccb12306",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 518,
- "title": "prefer canonical classes compose directives / valid[2] / .btn { @compose { font:16px margin:md }; }",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
- "matrix": {
- "index": 1,
- "resolved": true,
- "value": ".btn { @compose { font:16px margin:md }; }"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "1a17a623bfd119a1e1d6a10df35b688dd60130ce079320607bf7572a67e695f1"
+ }
},
{
"source": {
@@ -14869,23 +16229,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-a9089141c66a0123",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 518,
- "title": "prefer canonical classes compose directives / valid[3] / const css = '.btn { @compose font:16px margin:md; }'",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
- "matrix": {
- "index": 2,
- "resolved": true,
- "value": "const css = '.btn { @compose font:16px margin:md; }'"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "26824c99eaee81bd00dc5aa31d56bb1dd426a1b7702d24c4f4d8f664a19b56cd"
+ }
},
{
"source": {
@@ -14915,23 +16268,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-a93cde17bde04a07",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 518,
- "title": "prefer canonical classes compose directives / valid[4] / @compose font:16px margin:md
",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
- "matrix": {
- "index": 3,
- "resolved": true,
- "value": "@compose font:16px margin:md
"
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "1cd96a74c019d296aaa742385064459d5f1530c996b2050793a8e4eb2ae98d43"
+ }
},
{
"source": {
@@ -14961,23 +16307,16 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-4e00d48fec9dd39c",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/prefer-canonical-classes.test.ts",
- "line": 518,
- "title": "prefer canonical classes compose directives / valid[5] / ",
- "runner": "eslint-rule-tester",
- "kind": "test",
- "sourceDigest": "fc59f724839d26400942a4d249b72f6c0f59a2c90790877db1078d6698e1e8fc",
- "matrix": {
- "index": 4,
- "resolved": true,
- "value": ""
- }
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of this exact source/target pair: Canonical fixes require equivalent generated rule shape and priority. Literal units, explicit variables, static utilities, token names and condition order remain when rewriting could change cascade behavior. Deliberate property aliases remain fixable. Native compose declarations use prefer-native-declaration and preserve statement/variant boundaries; exact case differences document the retained/removed options and diagnostics. Compose-removal integration of 9d9817241: Retire the stylesheet-only Compose RuleTester case with the removed stylesheet parser and directive autofix API; markup canonicalization remains covered separately.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "04d9b6ebb227fbb017b32b574814b45ae9a24f81405f88ffe67a73db5d7df40d"
+ }
},
{
"source": {
@@ -15006,23 +16345,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-7d09d3eaa22afadf",
+ "id": "rc87-307a7f6b77748dd0",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/react.test.ts",
"line": 4,
- "title": "class matching react / invalid[1] / Welcome {name} ",
+ "title": "class matching react / invalid[1] / Welcome {name} ",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "1ad284f2a792a61f0a3847fe0780bc14b943ed34a9c1653c846103e1933a21a2",
+ "sourceDigest": "c841407a37b104cf2cbb716ffdb5a7286c98391c767890efea3274687e3959bb",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Welcome {name} "
+ "value": "Welcome {name} "
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The JSX/styled fixtures use known-invalid text-decoration:1 and report both emitted vendor and standard property failures. The valid fixture uses the named token bg-black.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "98a0bd9fec2b0e8e7e94e95c3ccf7317e1456833773bf4afdb04b1872d44286a"
+ }
},
{
"source": {
@@ -15051,23 +16397,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-0d0340035f5817b7",
+ "id": "rc87-538ba311c3382ba3",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/react.test.ts",
"line": 4,
- "title": "class matching react / invalid[2] / import React from 'react' import styled from '@master/styled.react' const H1 = styled.h1`text-decoration:bad()` export default () => ( Hello World )",
+ "title": "class matching react / invalid[2] / import React from 'react' import styled from '@master/styled.react' const H1 = styled.h1`text-decoration:1` export default () => ( Hello World )",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "1ad284f2a792a61f0a3847fe0780bc14b943ed34a9c1653c846103e1933a21a2",
+ "sourceDigest": "c841407a37b104cf2cbb716ffdb5a7286c98391c767890efea3274687e3959bb",
"matrix": {
"index": 1,
"resolved": true,
- "value": "import React from 'react' import styled from '@master/styled.react' const H1 = styled.h1`text-decoration:bad()` export default () => ( Hello World )"
+ "value": "import React from 'react' import styled from '@master/styled.react' const H1 = styled.h1`text-decoration:1` export default () => ( Hello World )"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The JSX/styled fixtures use known-invalid text-decoration:1 and report both emitted vendor and standard property failures. The valid fixture uses the named token bg-black.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "0520cbe507a2004c3be220deda6744ac96e13cfd82cbf14da33874a2e2ed79dc"
+ }
},
{
"source": {
@@ -15096,23 +16449,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-2370a06cc7a679fb",
+ "id": "rc87-64cf8a912f74145f",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/react.test.ts",
"line": 4,
- "title": "class matching react / invalid[3] / import React from 'react' import styled from '@master/styled.react' const H1 = styled.h1('text-decoration:bad()') export default () => ( Hello World )",
+ "title": "class matching react / invalid[3] / import React from 'react' import styled from '@master/styled.react' const H1 = styled.h1('text-decoration:1') export default () => ( Hello World )",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "1ad284f2a792a61f0a3847fe0780bc14b943ed34a9c1653c846103e1933a21a2",
+ "sourceDigest": "c841407a37b104cf2cbb716ffdb5a7286c98391c767890efea3274687e3959bb",
"matrix": {
"index": 2,
"resolved": true,
- "value": "import React from 'react' import styled from '@master/styled.react' const H1 = styled.h1('text-decoration:bad()') export default () => ( Hello World )"
+ "value": "import React from 'react' import styled from '@master/styled.react' const H1 = styled.h1('text-decoration:1') export default () => ( Hello World )"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The JSX/styled fixtures use known-invalid text-decoration:1 and report both emitted vendor and standard property failures. The valid fixture uses the named token bg-black.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "8401bd87246bdcf1290de0b6e2c669d5a765974a78ccaa5091cdcf14ae64efd2"
+ }
},
{
"source": {
@@ -15141,23 +16501,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-4bcefb994f63ae52",
+ "id": "rc87-2c09fda07095a6b3",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/react.test.ts",
"line": 4,
- "title": "class matching react / valid[1] / Welcome {name} ",
+ "title": "class matching react / valid[1] / Welcome {name} ",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "1ad284f2a792a61f0a3847fe0780bc14b943ed34a9c1653c846103e1933a21a2",
+ "sourceDigest": "c841407a37b104cf2cbb716ffdb5a7286c98391c767890efea3274687e3959bb",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Welcome {name} "
+ "value": "Welcome {name} "
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The JSX/styled fixtures use known-invalid text-decoration:1 and report both emitted vendor and standard property failures. The valid fixture uses the named token bg-black.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "d5ccf4561fa235c2b04204e0dc0247e38e123788096b0db806ea43b464baee8d"
+ }
},
{
"source": {
@@ -15178,7 +16545,7 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d1902226d6ba1a66",
"package": "eslint-plugin",
@@ -15187,9 +16554,16 @@
"title": "recommended config autofixes cross-rule class lists to a stable result",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c70fc1fafe42788b8dabd0e60b5429a3f9bc25e2f41391c66c6d8f437a79351f"
+ "sourceDigest": "6fb884af637ce9c7575a6185dca6d9d2ea303b062263b418193543793ff1e321"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Cross-rule fix stability now uses property alias padding-md -> p-md followed by the actual generated-CSS winner p:8px. MDX fenced display examples are preserved without diagnostics; ESLint disable/enable still surrounds executable JSX.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "7e7dc7d6e1742bba0198ec8894aad451edea98924e7f95ff60b7abd5feb0f73e"
+ }
},
{
"source": {
@@ -15209,18 +16583,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-ff2d555affd59529",
+ "id": "rc87-33c3c06b092c97ed",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/recommended-autofix.test.ts",
"line": 52,
- "title": "recommended config autofixes mdx fenced examples",
+ "title": "recommended config preserves mdx display examples",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9fd81305b5110aa606eaa6d7fe85538c9d8e11938b9072522e32edd4238363e1"
+ "sourceDigest": "f3936b3d746e751709b51eafe45a37cd3a180bc44c5ee9d2e7d7041fba0fb23b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Cross-rule fix stability now uses property alias padding-md -> p-md followed by the actual generated-CSS winner p:8px. MDX fenced display examples are preserved without diagnostics; ESLint disable/enable still surrounds executable JSX.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "ef187b2850bb384b534fe8a35ed5bd04a1880188434cb312851b586136f2841a"
+ }
},
{
"source": {
@@ -15399,18 +16780,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-8ad65d3ab79a1f48",
+ "id": "rc87-27e60509430513e9",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/schema.test.ts",
"line": 74,
- "title": "provides an opt-in stylesheet config",
+ "title": "does not expose the removed compose stylesheet config",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c207ef39336748ae6323e8f9733d936e005fa0b7b117a8f32bb9aad774140b90"
+ "sourceDigest": "ace904c0aa312ec6c9f931285c2e281bb05e9629df0f5614b5605a45f4f2a8a0"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Assert the removed stylesheet config is absent and recommended config contains only source configuration.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "ebe09e5051e36d5588eae2cf9dda21644bb09026a5eefe2526e3bc7303eefc5d"
+ }
},
{
"source": {
@@ -15439,23 +16827,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-3731770b03cf8842",
+ "id": "rc87-d1773083de9a4af0",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[1] / Classnames will be ordered
",
+ "title": "sort classes / invalid[1] / Classnames will be ordered
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Classnames will be ordered
"
+ "value": "Classnames will be ordered
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "7ec6bc943c0586646b7568415c639654f1b64ca519f1bd009953f17b5508082c"
+ }
},
{
"source": {
@@ -15484,23 +16879,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-d81e62746a996449",
+ "id": "rc87-cdce0c007b32e07a",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[10] / Single dups line + head spaces
",
+ "title": "sort classes / invalid[10] / Single dups line + head spaces
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 9,
"resolved": true,
- "value": "Single dups line + head spaces
"
+ "value": "Single dups line + head spaces
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "48260a505aea77ca1d4992e4e915953200438d17f11ce072743b28e690913fef"
+ }
},
{
"source": {
@@ -15529,23 +16931,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-b21e7002eaaae11e",
+ "id": "rc87-6e65a5879d544d60",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[11] / Single line dups + tail spaces
",
+ "title": "sort classes / invalid[11] / Single line dups + tail spaces
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 10,
"resolved": true,
- "value": "Single line dups + tail spaces
"
+ "value": "Single line dups + tail spaces
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "d8ac05ee039c38b8fe61e7d4735c0c0bdbcd11e4564115e7b98e7c222f76b6b1"
+ }
},
{
"source": {
@@ -15574,23 +16983,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-790a18d44de49783",
+ "id": "rc87-d59c1c2155c52b0b",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[12] / ctl(` hidden w:0.375rem@sm block hidden flex block w:3x flex block w:1x@lg w:1x@lg `);",
+ "title": "sort classes / invalid[12] / ctl(` hidden w:0.375rem@sm block hidden flex block w:0.75rem flex block w:0.25rem@lg w:0.25rem@lg `);",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 11,
"resolved": true,
- "value": "ctl(` hidden w:0.375rem@sm block hidden flex block w:3x flex block w:1x@lg w:1x@lg `);"
+ "value": "ctl(` hidden w:0.375rem@sm block hidden flex block w:0.75rem flex block w:0.25rem@lg w:0.25rem@lg `);"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "18af55ef8bfe4334f64ff564ee19e6fe0f1b7e2601acb60cee8473deaed80063"
+ }
},
{
"source": {
@@ -15619,23 +17035,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-78879dee5e5a5fd4",
+ "id": "rc87-3704e501abdb4d91",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[13] / ctl(` invalid w:0.375rem@sm flex container w:3x w:1x@lg `);",
+ "title": "sort classes / invalid[13] / ctl(` invalid w:0.375rem@sm flex container w:0.75rem w:0.25rem@lg `);",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 12,
"resolved": true,
- "value": "ctl(` invalid w:0.375rem@sm flex container w:3x w:1x@lg `);"
+ "value": "ctl(` invalid w:0.375rem@sm flex container w:0.75rem w:0.25rem@lg `);"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "7457b850460b0d1ebc79e48abcf5b236226c91ce1622f7e29af3005d309ef896"
+ }
},
{
"source": {
@@ -15664,23 +17087,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-4f4284d37cfcf2d7",
+ "id": "rc87-45f9ef373c06372b",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[14] / Allowed arbitrary value but incorrect order
",
+ "title": "sort classes / invalid[14] / Allowed arbitrary value but incorrect order
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 13,
"resolved": true,
- "value": "Allowed arbitrary value but incorrect order
"
+ "value": "Allowed arbitrary value but incorrect order
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "3c488e5d0fef53373d928fdea1ea84cc386c7592dda8dcfef30ee981df5f4add"
+ }
},
{
"source": {
@@ -15709,23 +17139,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-d564debe5f3e3c88",
+ "id": "rc87-65664ec8f76a3f7c",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[15] / clsx(`abs bottom:0 w:full h:70px flex flex-col`);",
+ "title": "sort classes / invalid[15] / clsx(`abs bottom:0 w:100% h:70px flex flex-col`);",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 14,
"resolved": true,
- "value": "clsx(`abs bottom:0 w:full h:70px flex flex-col`);"
+ "value": "clsx(`abs bottom:0 w:100% h:70px flex flex-col`);"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "53423271bcc627814fca17aa4d1ab5790ec74d0389f709a73b560443d5af830a"
+ }
},
{
"source": {
@@ -15754,23 +17191,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-0fac4681b1286a01",
+ "id": "rc87-f8391c8017764f4f",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[16] / cva({ primary: [\"abs bottom:0 w:full h:70px flex flex-col\"], })",
+ "title": "sort classes / invalid[16] / cva({ primary: [\"abs bottom:0 w:100% h:70px flex flex-col\"], })",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 15,
"resolved": true,
- "value": "cva({ primary: [\"abs bottom:0 w:full h:70px flex flex-col\"], })"
+ "value": "cva({ primary: [\"abs bottom:0 w:100% h:70px flex flex-col\"], })"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "3c78acded38a896bea2e03ff1fc68073abdd4a3d49d204daa0521329c6b7e2e6"
+ }
},
{
"source": {
@@ -15799,23 +17243,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-b5bdd47f07eb28e9",
+ "id": "rc87-dc14ba6611e91773",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[17] / clsx
",
+ "title": "sort classes / invalid[17] / clsx
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 16,
"resolved": true,
- "value": "clsx
"
+ "value": "clsx
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "21bdb963a1ce53cfa9f534d9ec9d7f81149f2b76277ff16a705080376343b8e4"
+ }
},
{
"source": {
@@ -15844,23 +17295,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-2552e1586dbd4b0f",
+ "id": "rc87-27a27252cf30b61a",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[18] / ctl(` ${ !isDisabled && ` flex top:0 b:0 ` } ${ isDisabled && ` b:0 mx:0 ` } flex px:0.125rem `)",
+ "title": "sort classes / invalid[18] / ctl(` ${ !isDisabled && ` flex top:0 border-width:0 ` } ${ isDisabled && ` border-width:0 mx:0 ` } flex px:0.125rem `)",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 17,
"resolved": true,
- "value": "ctl(` ${ !isDisabled && ` flex top:0 b:0 ` } ${ isDisabled && ` b:0 mx:0 ` } flex px:0.125rem `)"
+ "value": "ctl(` ${ !isDisabled && ` flex top:0 border-width:0 ` } ${ isDisabled && ` border-width:0 mx:0 ` } flex px:0.125rem `)"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "d02465ad054f2a5788db264d43a9355931c30a49b9f15eca6ac57757de3707fe"
+ }
},
{
"source": {
@@ -15898,14 +17356,14 @@
"title": "sort classes / invalid[19] / ...
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 18,
"resolved": true,
"value": "...
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -15934,23 +17392,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-db89d2874d8adb56",
+ "id": "rc87-727af0bc6be3c76f",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[2] / li text-decoration:none>li>a px:1x>li align-items:baseline fg:gray-30>li>a gap-x:7x font:.75rem font:medium pb:0.375rem>li pt:5x pt:0.625rem>li {",
+ "title": "sort classes / invalid[2] /
li text-decoration:none>li>a px:0.25rem>li align-items:baseline fg-gray-30>li>a gap-x:1.75rem font-size:.75rem font-medium pb:0.375rem>li pt:1.25",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 1,
"resolved": true,
- "value": "
li text-decoration:none>li>a px:1x>li align-items:baseline fg:gray-30>li>a gap-x:7x font:.75rem font:medium pb:0.375rem>li pt:5x pt:0.625rem>li {"
+ "value": "
li text-decoration:none>li>a px:0.25rem>li align-items:baseline fg-gray-30>li>a gap-x:1.75rem font-size:.75rem font-medium pb:0.375rem>li pt:1.25"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "74887de3789edd253bf994474b5ad86b41b8612315989e1aaef609d10e4313e5"
+ }
},
{
"source": {
@@ -15988,14 +17453,14 @@
"title": "sort classes / invalid[20] / ctl(`${enabled && \"px:0.125rem flex\"}`)",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 19,
"resolved": true,
"value": "ctl(`${enabled && \"px:0.125rem flex\"}`)"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -16033,14 +17498,14 @@
"title": "sort classes / invalid[21] / ctl(`px:0.125rem flex`)",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 20,
"resolved": true,
"value": "ctl(`px:0.125rem flex`)"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -16078,14 +17543,14 @@
"title": "sort classes / invalid[22] / ctl(` px:0.125rem flex `)",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 21,
"resolved": true,
"value": "ctl(` px:0.125rem flex `)"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -16114,23 +17579,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-0d9740de7a0666e6",
+ "id": "rc87-f99b48a9f28c56fc",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[23] /
",
+ "title": "sort classes / invalid[23] /
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 22,
"resolved": true,
- "value": "
"
+ "value": "
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "07da014d254e0cba7ecab29f7931ace240ace3ea1b5e6794306b24237c400ee1"
+ }
},
{
"source": {
@@ -16159,23 +17631,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-659aeeb89028f2e4",
+ "id": "rc87-53a0bdbb67a2ec50",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[24] / classnames([ 'invalid w:4px@lg w:6px@sm', ['w:3x flex'], ])",
+ "title": "sort classes / invalid[24] / classnames([ 'invalid w:4px@lg w:6px@sm', ['w:0.75rem flex'], ])",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 23,
"resolved": true,
- "value": "classnames([ 'invalid w:4px@lg w:6px@sm', ['w:3x flex'], ])"
+ "value": "classnames([ 'invalid w:4px@lg w:6px@sm', ['w:0.75rem flex'], ])"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "842a03a8740c2990d80a0233a8eceb0ea5769f6f4cd9410f730b5d781fec9e25"
+ }
},
{
"source": {
@@ -16213,14 +17692,14 @@
"title": "sort classes / invalid[25] / classnames({ invalid, flex: myFlag, 'w:4px@lg w:6px@sm': resize })",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 24,
"resolved": true,
"value": "classnames({ invalid, flex: myFlag, 'w:4px@lg w:6px@sm': resize })"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -16249,23 +17728,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-c27d05524b6a0623",
+ "id": "rc87-08db82e6ef93a313",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[26] / ctl(`p:0.188rem b:3px|solid|gray m:1x h:6x p:1x@lg flex b:2px m:1x@lg`)",
+ "title": "sort classes / invalid[26] / ctl(`p:0.188rem b:3px|solid|var(--color-gray) m:0.25rem h:1.5rem p:0.25rem@lg flex border-width:2px m:0.25rem@lg`)",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 25,
"resolved": true,
- "value": "ctl(`p:0.188rem b:3px|solid|gray m:1x h:6x p:1x@lg flex b:2px m:1x@lg`)"
+ "value": "ctl(`p:0.188rem b:3px|solid|var(--color-gray) m:0.25rem h:1.5rem p:0.25rem@lg flex border-width:2px m:0.25rem@lg`)"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "092fcdfea97c61697583c378b5b76ef973a58e62feb06835d38c4e0c57251123"
+ }
},
{
"source": {
@@ -16294,7 +17780,7 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-250dbbcdb7658b07",
"package": "eslint-plugin",
@@ -16303,14 +17789,21 @@
"title": "sort classes / invalid[27] /
Error class
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 26,
"resolved": true,
"value": "
Error class
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "5cef8c77f1c27a7ade387df5d5703ae6d1c3ff9dfdf785ca81f0a9bdac5a3561"
+ }
},
{
"source": {
@@ -16339,23 +17832,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-6dfa4eb1e9b2b6ff",
+ "id": "rc87-8f5d923bb01e21e7",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[28] /
order
",
+ "title": "sort classes / invalid[28] /
order
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 27,
"resolved": true,
- "value": "
order
"
+ "value": "
order
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "09da2937a620bfcbc1e3768aec0a5d2aa5a327c1e701d5c7f253b2f4c97d3466"
+ }
},
{
"source": {
@@ -16384,23 +17884,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-26de8cb0c49c380d",
+ "id": "rc87-7afd9024c0cc27d4",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[3] /
Enhancing readability with 'test' prop
",
+ "title": "sort classes / invalid[3] /
Enhancing readability with 'test' prop
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 2,
"resolved": true,
- "value": "
Enhancing readability with 'test' prop
"
+ "value": "
Enhancing readability with 'test' prop
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "833c567786650f69e7a1c90b3013a80a4d376a9e94145d5fec253579278113cb"
+ }
},
{
"source": {
@@ -16429,23 +17936,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-a022507eafb16cc8",
+ "id": "rc87-70c24af48c2966fb",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[4] /
:)...
",
+ "title": "sort classes / invalid[4] /
:)...
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 3,
"resolved": true,
- "value": "
:)...
"
+ "value": "
:)...
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "2c1a3a184d9e7cea5dad7509e6300d4973f08a4975976b1cd229155b4856cd1f"
+ }
},
{
"source": {
@@ -16474,23 +17988,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-dc2fd359c8fd686d",
+ "id": "rc87-5a51d3aa7b9247c4",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[5] /
Space trim issue with fix
",
+ "title": "sort classes / invalid[5] /
Space trim issue with fix
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 4,
"resolved": true,
- "value": "
Space trim issue with fix
"
+ "value": "
Space trim issue with fix
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "18ed5c8fc01973564aa18986805fd2683c55554c73996dd188ff989a71b2b2be"
+ }
},
{
"source": {
@@ -16519,23 +18040,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-869f9913c6d75f24",
+ "id": "rc87-585c3502503e1e8c",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[6] /
Simple quotes
",
+ "title": "sort classes / invalid[6] /
Simple quotes
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 5,
"resolved": true,
- "value": "
Simple quotes
"
+ "value": "
Simple quotes
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "c2e173405afe8fb0c9bdedc0d5da9fb63fc016d30d6dea2810c1e0e789c2bf6e"
+ }
},
{
"source": {
@@ -16564,23 +18092,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-3434d9506ad2d965",
+ "id": "rc87-0f5fb5f3574992ea",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[7] / clsx('fg:#aaaaaa {content:\\'\\';block;h:full;w:full;abs}::after bg:#ffffff')",
+ "title": "sort classes / invalid[7] / clsx('fg:#aaaaaa {content:\\'\\';block;h:100%;w:100%;abs}::after background-color:#ffffff')",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 6,
"resolved": true,
- "value": "clsx('fg:#aaaaaa {content:\\'\\';block;h:full;w:full;abs}::after bg:#ffffff')"
+ "value": "clsx('fg:#aaaaaa {content:\\'\\';block;h:100%;w:100%;abs}::after background-color:#ffffff')"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "cd5b279a07293b79a9beae60b1640ca6f338c176154be1abd35242af32fdc328"
+ }
},
{
"source": {
@@ -16609,23 +18144,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-75f0511fd2777494",
+ "id": "rc87-d8f1fc00ebe433de",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[8] /
removeDuplicates
",
+ "title": "sort classes / invalid[8] /
removeDuplicates
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 7,
"resolved": true,
- "value": "
removeDuplicates
"
+ "value": "
removeDuplicates
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "ee21af19e4f67b54d4c8938b250d18a7987845c83871f3ca1ef192bd22b1bfab"
+ }
},
{
"source": {
@@ -16654,23 +18196,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-06f2b00f300934e2",
+ "id": "rc87-c384666d35b37f86",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / invalid[9] /
Single line dups + no head/tail spaces
",
+ "title": "sort classes / invalid[9] /
Single line dups + no head/tail spaces
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 8,
"resolved": true,
- "value": "
Single line dups + no head/tail spaces
"
+ "value": "
Single line dups + no head/tail spaces
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "6b3756b55e8cfe03e0f6cfd2aaddc03535db750444a6894286851eae055f43c7"
+ }
},
{
"source": {
@@ -16699,23 +18248,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-4605c33f442beac7",
+ "id": "rc87-a9bacade145befc0",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[1] /
Simple, basic
",
+ "title": "sort classes / valid[1] /
Simple, basic
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 0,
"resolved": true,
- "value": "
Simple, basic
"
+ "value": "
Simple, basic
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "e25c4376c4405be17799557c6ac074126a9d71f25698f1c1f57453ea4f9990ed"
+ }
},
{
"source": {
@@ -16744,23 +18300,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-148c7e18a476afc3",
+ "id": "rc87-409f3aad30fc1e1a",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[10] /
Allowed arbitrary value
",
+ "title": "sort classes / valid[10] /
Allowed arbitrary value
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 9,
"resolved": true,
- "value": "
Allowed arbitrary value
"
+ "value": "
Allowed arbitrary value
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "cd76c1e7d1c489be3f686339c57d67c469e1b040a4c6ce6f9cd9d2e6dee9dd52"
+ }
},
{
"source": {
@@ -16790,23 +18353,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-735e4bc260161106",
+ "id": "rc87-765605c07843abe5",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[11] /
Stackable variants
",
+ "title": "sort classes / valid[11] /
Stackable variants
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 10,
"resolved": true,
- "value": "
Stackable variants
"
+ "value": "
Stackable variants
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "cf9eaa919e4277b04a2409cf2974702e6082300284e3670e036b215dd7601433"
+ }
},
{
"source": {
@@ -16835,23 +18405,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-c6ce617cbc168890",
+ "id": "rc87-f533fe78acf682cf",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[12] /
clsx
",
+ "title": "sort classes / valid[12] /
clsx
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 11,
"resolved": true,
- "value": "
clsx
"
+ "value": "
clsx
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "a05d5399445cf22bf04399f60e8abb4c86a9114f333d4473734808117efc7e62"
+ }
},
{
"source": {
@@ -16880,23 +18457,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-21fa966e71ae460a",
+ "id": "rc87-64635132e789b699",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[13] /
Number values
",
+ "title": "sort classes / valid[13] /
Number values
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 12,
"resolved": true,
- "value": "
Number values
"
+ "value": "
Number values
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "c052b7fd41b10f1aebcbcd67d4c881cfcc51634eb71dcf7b0471c84e1c457388"
+ }
},
{
"source": {
@@ -16934,14 +18518,14 @@
"title": "sort classes / valid[14] /
Extra spaces
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 13,
"resolved": true,
"value": "
Extra spaces
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -16970,23 +18554,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-242a467e7ab109f4",
+ "id": "rc87-54e265d55921f80e",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[15] /
Issue #131
",
+ "title": "sort classes / valid[15] /
Issue #131
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 14,
"resolved": true,
- "value": "
Issue #131
"
+ "value": "
Issue #131
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "7b0723c558cfb67eba4b4186ca48860934d8ea1fd5300114e7f9d8a3bb0adee3"
+ }
},
{
"source": {
@@ -17024,14 +18615,14 @@
"title": "sort classes / valid[16] /
No errors while typing
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 15,
"resolved": true,
"value": "
No errors while typing
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -17069,14 +18660,14 @@
"title": "sort classes / valid[17] /
Do not treat full width space as class separator
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 16,
"resolved": true,
"value": "
Do not treat full width space as class separator
"
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -17105,23 +18696,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-375fa31d769740e8",
+ "id": "rc87-b9a3e5d892b0df36",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[18] /
Collision class
",
+ "title": "sort classes / valid[18] /
Collision class
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 17,
"resolved": true,
- "value": "
Collision class
"
+ "value": "
Collision class
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "6c4d585674bcc21e82e20949aff413c6cac4078169084cb0ef2ef3b89320d1e6"
+ }
},
{
"source": {
@@ -17150,7 +18748,7 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-874d84a062e94ed6",
"package": "eslint-plugin",
@@ -17159,14 +18757,21 @@
"title": "sort classes / valid[19] / export default () => (
( Traditional class + syntax
",
+ "title": "sort classes / valid[2] / Traditional class + syntax
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 1,
"resolved": true,
- "value": "Traditional class + syntax
"
+ "value": "Traditional class + syntax
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "032d29ec418e0615577d7acde15f6ba98695557bac6c862676320efa5f951780"
+ }
},
{
"source": {
@@ -17240,23 +18852,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-463a53011dbf42f6",
+ "id": "rc87-99b29058f308e11f",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[20] / Error class
",
+ "title": "sort classes / valid[20] / Error class
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 19,
"resolved": true,
- "value": "Error class
"
+ "value": "Error class
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "9c64df8cd089125d6000d2de8aac5ff103b2fa9efe01a9d697ff79572387c0da"
+ }
},
{
"source": {
@@ -17285,23 +18904,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-55b09a827503f2d3",
+ "id": "rc87-6fa94790fc2e4baa",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[3] / ctl + exp
",
+ "title": "sort classes / valid[3] / ctl + exp
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 2,
"resolved": true,
- "value": "ctl + exp
"
+ "value": "ctl + exp
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "8e2f94242732782e7fe9a110bb7a84dbec3ac597625c824eaeb1b0d2a5628139"
+ }
},
{
"source": {
@@ -17330,23 +18956,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-8e07710996dc6e5f",
+ "id": "rc87-318fa4a994829b9b",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[4] / ctl + var
",
+ "title": "sort classes / valid[4] / ctl + var
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 3,
"resolved": true,
- "value": "ctl + var
"
+ "value": "ctl + var
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "59293a967806d732dd42942ff068bceeafa6763d1c392e3b7d2c666a4d92dcdb"
+ }
},
{
"source": {
@@ -17375,23 +19008,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-e29cabd5414dc31f",
+ "id": "rc87-5319c47c7bc03af0",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[5] / Space trim issue
",
+ "title": "sort classes / valid[5] / Space trim issue
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 4,
"resolved": true,
- "value": "Space trim issue
"
+ "value": "Space trim issue
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "6c3334238704e6ab06c0d6ced27a66b4883681e4957a62323519cac2f753b61c"
+ }
},
{
"source": {
@@ -17420,23 +19060,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-67d3d5a79018c9bb",
+ "id": "rc87-f9421a12697e06c4",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[6] / Simple quotes
",
+ "title": "sort classes / valid[6] / Simple quotes
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 5,
"resolved": true,
- "value": "Simple quotes
"
+ "value": "Simple quotes
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "a798570572fd959f2ae848d8204d110ab860baffebba9bcf917af483887eef91"
+ }
},
{
"source": {
@@ -17465,23 +19112,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-33d4b201b52f02df",
+ "id": "rc87-f9e3634c67f832b0",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[7] / Extra space at the end
",
+ "title": "sort classes / valid[7] / Extra space at the end
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 6,
"resolved": true,
- "value": "Extra space at the end
"
+ "value": "Extra space at the end
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "3ddf85a4cfe14e02e65519d6825391428cf7143cf29bfd40f2fe0c0341830fa0"
+ }
},
{
"source": {
@@ -17510,23 +19164,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-e67ac62b73502ce3",
+ "id": "rc87-f9b74c17a9e18a5b",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[8] / 'p', then 'px' then 'py'
",
+ "title": "sort classes / valid[8] / Native logical properties and condition order
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 7,
"resolved": true,
- "value": "'p', then 'px' then 'py'
"
+ "value": "Native logical properties and condition order
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "bba3f7fd8fb3fedbf2cbd343b00cc25a51521c0d278098d4ac4c3647d785b5ff"
+ }
},
{
"source": {
@@ -17555,23 +19216,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-c16f4f7672b8f35a",
+ "id": "rc87-55ce86259e161e9c",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/sort-classes.test.ts",
"line": 6,
- "title": "sort classes / valid[9] / ctl(` flex container w:3x w:0.375rem@sm w:1x@lg `)",
+ "title": "sort classes / valid[9] / ctl(` flex container w:0.75rem w:0.375rem@sm w:0.25rem@lg `)",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "0cd7c9257ebacbce0f90802a322d96fe7293f897e75ad14a09daf1598c276894",
+ "sourceDigest": "d3b9e552ecaf2dae910e9ad8abb21d9fe1cdd9c45ce11430322f4d3db3526320",
"matrix": {
"index": 8,
"resolved": true,
- "value": "ctl(` flex container w:3x w:0.375rem@sm w:1x@lg `)"
+ "value": "ctl(` flex container w:0.75rem w:0.375rem@sm w:0.25rem@lg `)"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "8badd0676f42f8c0b97bd311f3396f72cea5a7c08cceb5bd0b0d8aed964b42d7"
+ }
},
{
"source": {
@@ -17600,23 +19268,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-30f5dd4a175fce37",
+ "id": "rc87-118cf688556d2488",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/styles.test.ts",
"line": 4,
- "title": "class matching main utilities / invalid[1] / const classes = \"text-decoration:bad()\"",
+ "title": "class matching main utilities / invalid[1] / const classes = \"text-decoration:1\"",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "fbd581bd73b9c2e01fcd8f5517023d1d13782556d0d3133ba15ede8dcc069f72",
+ "sourceDigest": "f3dfb6a7dfb7dcd2b4d1bb9577e38996423d7ce6ad612ad9f3b792ad602d0f04",
"matrix": {
"index": 0,
"resolved": true,
- "value": "const classes = \"text-decoration:bad()\""
+ "value": "const classes = \"text-decoration:1\""
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The configured class variable and nested class object retain mapped error coverage using text-decoration:1, with one diagnostic for each emitted vendor/standard declaration.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "7037eea8e09683216afe0ce52044cfb537e650697e7c34037406d264856d4e17"
+ }
},
{
"source": {
@@ -17645,23 +19320,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-ba03d9ed18eba206",
+ "id": "rc87-b8465a63460df029",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/styles.test.ts",
"line": 4,
- "title": "class matching main utilities / invalid[2] / const classes = { btn: [\"text-decoration:bad()\"] }",
+ "title": "class matching main utilities / invalid[2] / const classes = { btn: [\"text-decoration:1\"] }",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "fbd581bd73b9c2e01fcd8f5517023d1d13782556d0d3133ba15ede8dcc069f72",
+ "sourceDigest": "f3dfb6a7dfb7dcd2b4d1bb9577e38996423d7ce6ad612ad9f3b792ad602d0f04",
"matrix": {
"index": 1,
"resolved": true,
- "value": "const classes = { btn: [\"text-decoration:bad()\"] }"
+ "value": "const classes = { btn: [\"text-decoration:1\"] }"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The configured class variable and nested class object retain mapped error coverage using text-decoration:1, with one diagnostic for each emitted vendor/standard declaration.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/eslint-policy-freeze-approval.md#approved-scope",
+ "scopeDigest": "2767c29bfc41d6a99b1fbce714f9ed198793e1c6f7cc136957fe18e1e05dfb0b"
+ }
},
{
"source": {
@@ -17699,14 +19381,14 @@
"title": "class matching main utilities / valid[1] / import { UtilityType } from \"@master/css-schema/utility-type\"; export default { utilities: [{ name: \"btn\", type: UtilityType.Semantic, layer: \"components\", rules: [{ selector: \"&\",",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "fbd581bd73b9c2e01fcd8f5517023d1d13782556d0d3133ba15ede8dcc069f72",
+ "sourceDigest": "f3dfb6a7dfb7dcd2b4d1bb9577e38996423d7ce6ad612ad9f3b792ad602d0f04",
"matrix": {
"index": 0,
"resolved": true,
"value": "import { UtilityType } from \"@master/css-schema/utility-type\"; export default { utilities: [{ name: \"btn\", type: UtilityType.Semantic, layer: \"components\", rules: [{ selector: \"&\","
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -17744,14 +19426,14 @@
"title": "class matching main utilities / valid[2] / import { UtilityType } from \"@master/css-schema/utility-type\"; export default { utilities: [{ name: \"btn\", type: UtilityType.Semantic, layer: \"components\", rules: [{ selector: \"&\",",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "fbd581bd73b9c2e01fcd8f5517023d1d13782556d0d3133ba15ede8dcc069f72",
+ "sourceDigest": "f3dfb6a7dfb7dcd2b4d1bb9577e38996423d7ce6ad612ad9f3b792ad602d0f04",
"matrix": {
"index": 1,
"resolved": true,
"value": "import { UtilityType } from \"@master/css-schema/utility-type\"; export default { utilities: [{ name: \"btn\", type: UtilityType.Semantic, layer: \"components\", rules: [{ selector: \"&\","
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -17789,14 +19471,14 @@
"title": "class matching main utilities / valid[3] / import { UtilityType } from \"@master/css-schema/utility-type\"; export default { utilities: [{ name: \"btn\", type: UtilityType.Semantic, layer: \"components\", rules: [{ selector: \"&\",",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "fbd581bd73b9c2e01fcd8f5517023d1d13782556d0d3133ba15ede8dcc069f72",
+ "sourceDigest": "f3dfb6a7dfb7dcd2b4d1bb9577e38996423d7ce6ad612ad9f3b792ad602d0f04",
"matrix": {
"index": 2,
"resolved": true,
"value": "import { UtilityType } from \"@master/css-schema/utility-type\"; export default { utilities: [{ name: \"btn\", type: UtilityType.Semantic, layer: \"components\", rules: [{ selector: \"&\","
}
},
- "proof": "exact-source"
+ "proof": "exact-case-source"
},
{
"source": {
@@ -17825,23 +19507,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-e4085fd7350e8b1d",
+ "id": "rc87-0e05853b8eace42a",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/svelte.test.ts",
"line": 4,
- "title": "svelte sort classes / invalid[1] / Enhancing readability
",
+ "title": "svelte sort classes / invalid[1] / Enhancing readability
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "5f97a5fd0b4214bd3096cc1e5c9ce7acd2f9d0ef359e4554da1e6512e17103c3",
+ "sourceDigest": "1bb2627dd67cf9cbdd9faba0c809a3e217332ae883d55bb96734a5301036430e",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Enhancing readability
"
+ "value": "Enhancing readability
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "9959fd45ac630685ebdf633621319ff23f9245832b5d06b238681220c7a9a524"
+ }
},
{
"source": {
@@ -17870,23 +19559,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-c23710bf7c0a928e",
+ "id": "rc87-17def6a582f8d400",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/svelte.test.ts",
"line": 4,
- "title": "svelte sort classes / valid[1] / Simple, basic
",
+ "title": "svelte sort classes / valid[1] / Simple, basic
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "5f97a5fd0b4214bd3096cc1e5c9ce7acd2f9d0ef359e4554da1e6512e17103c3",
+ "sourceDigest": "1bb2627dd67cf9cbdd9faba0c809a3e217332ae883d55bb96734a5301036430e",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Simple, basic
"
+ "value": "Simple, basic
"
}
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "7305c6b27828ecf6c0c53634877d4243f704d6ca30f52f911879303728970f10"
+ }
},
{
"source": {
@@ -17915,23 +19611,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-779d01df6dc7ccf4",
+ "id": "rc87-15dc035f90801671",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/vue.test.ts",
"line": 4,
- "title": "vue sort classes / invalid[1] / Enhancing readability
",
+ "title": "vue sort classes / invalid[1] / Enhancing readability
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "527b9ed381453ef5d4630e5d5a92d5009476d69dcda52af72467552d8f0177dd",
+ "sourceDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
"matrix": {
"index": 0,
"resolved": true,
- "value": "Enhancing readability
"
+ "value": "Enhancing readability
"
}
},
- "proof": "exact-case-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "143f2254ab1c70ceb24e9bbcc322b59c77c81ac7fd93bd014d70e30faaeb0188"
+ }
},
{
"source": {
@@ -17960,23 +19663,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-bab408a404989821",
+ "id": "rc87-ad09939d0a2e97ca",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/vue.test.ts",
"line": 4,
- "title": "vue sort classes / invalid[2] / Classnames will be ordered
",
+ "title": "vue sort classes / invalid[2] / Classnames will be ordered
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "527b9ed381453ef5d4630e5d5a92d5009476d69dcda52af72467552d8f0177dd",
+ "sourceDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
"matrix": {
"index": 1,
"resolved": true,
- "value": "Classnames will be ordered
"
+ "value": "Classnames will be ordered
"
}
},
- "proof": "exact-case-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "ee2906957e19b5f66c9f876596b07f7cf0fdbb034233572436f170cb574b8315"
+ }
},
{
"source": {
@@ -18005,23 +19715,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-b63f6a6103298c55",
+ "id": "rc87-378e215d42f03e2c",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/vue.test.ts",
"line": 4,
- "title": "vue sort classes / invalid[3] / Enhancing readability 2
",
+ "title": "vue sort classes / invalid[3] / Enhancing readability 2
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "527b9ed381453ef5d4630e5d5a92d5009476d69dcda52af72467552d8f0177dd",
+ "sourceDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
"matrix": {
"index": 2,
"resolved": true,
- "value": "Enhancing readability 2
"
+ "value": "Enhancing readability 2
"
}
},
- "proof": "exact-case-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "28b80c75559b0867efb7b2c9b16330fd55fd25b08403281df6e235e3af0f9856"
+ }
},
{
"source": {
@@ -18050,24 +19767,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-4c6d7d0e2df99416",
+ "id": "rc87-f53abef897ff3ae3",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/vue.test.ts",
"line": 4,
- "title": "vue sort classes / invalid[5] / :)...
",
+ "title": "vue sort classes / invalid[5] / :)...
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "527b9ed381453ef5d4630e5d5a92d5009476d69dcda52af72467552d8f0177dd",
+ "sourceDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
"matrix": {
"index": 4,
"resolved": true,
- "value": ":)...
"
+ "value": ":)...
"
}
},
- "proof": "exact-case-relocated",
- "relocatedFrom": "packages/eslint-plugin/tests/vue.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "6de816bd6e809880a8128554ae256392820166d9355607810f6cfbb3c8378ba4"
+ }
},
{
"source": {
@@ -18096,24 +19819,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-b8748f6bc223d8c7",
+ "id": "rc87-506e50a060048290",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/vue.test.ts",
"line": 4,
- "title": "vue sort classes / invalid[6] /
",
+ "title": "vue sort classes / invalid[6] /
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "527b9ed381453ef5d4630e5d5a92d5009476d69dcda52af72467552d8f0177dd",
+ "sourceDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
"matrix": {
"index": 5,
"resolved": true,
- "value": "
"
+ "value": "
"
}
},
- "proof": "exact-case-relocated",
- "relocatedFrom": "packages/eslint-plugin/tests/vue.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "18f5ef6113f40d030d0d7deb4c2291cb1601234fe6d04ca534898affb7f506a4"
+ }
},
{
"source": {
@@ -18143,24 +19872,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-be5509be5524a32c",
+ "id": "rc87-3aa3863e09304ff6",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/vue.test.ts",
"line": 4,
- "title": "vue sort classes / invalid[7] /
",
+ "title": "vue sort classes / invalid[8] /
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "527b9ed381453ef5d4630e5d5a92d5009476d69dcda52af72467552d8f0177dd",
+ "sourceDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
"matrix": {
"index": 7,
"resolved": true,
- "value": "
"
+ "value": "
"
}
},
- "proof": "exact-case-relocated",
- "relocatedFrom": "packages/eslint-plugin/tests/vue.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "4ec472ffaee10e1d5d353cc4acf9799160f36f183ce5b4a8a0f11892b34e9c13"
+ }
},
{
"source": {
@@ -18235,24 +19976,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-79f0bb252ee0e07f",
+ "id": "rc87-1b9dd5b2e97b57ae",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/vue.test.ts",
"line": 4,
- "title": "vue sort classes / invalid[9] /
",
+ "title": "vue sort classes / invalid[9] /
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "527b9ed381453ef5d4630e5d5a92d5009476d69dcda52af72467552d8f0177dd",
+ "sourceDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
"matrix": {
"index": 8,
"resolved": true,
- "value": "
"
+ "value": "
"
}
},
- "proof": "exact-case-relocated",
- "relocatedFrom": "packages/eslint-plugin/tests/vue.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "6226464fdcb2229c31e2bb1af196871ec02a0084d4dcd446ea12b83151674b95"
+ }
},
{
"source": {
@@ -18281,23 +20028,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-4ecbf4d220120558",
+ "id": "rc87-af629033059af3d5",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/vue.test.ts",
"line": 4,
- "title": "vue sort classes / valid[1] /
Simple, basic
",
+ "title": "vue sort classes / valid[1] /
Simple, basic
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "527b9ed381453ef5d4630e5d5a92d5009476d69dcda52af72467552d8f0177dd",
+ "sourceDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
"matrix": {
"index": 0,
"resolved": true,
- "value": "
Simple, basic
"
+ "value": "
Simple, basic
"
}
},
- "proof": "exact-case-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "4e43339c3ed9e8502038b28b6ce227c2d29e3fc20821f5a4dc13610e47bc0589"
+ }
},
{
"source": {
@@ -18326,23 +20080,30 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-73a56558ce38481b",
+ "id": "rc87-e97542b1e64f5287",
"package": "eslint-plugin",
"file": "packages/eslint-plugin/tests/vue.test.ts",
"line": 4,
- "title": "vue sort classes / valid[2] /
Sparse array
",
+ "title": "vue sort classes / valid[2] /
Sparse array
",
"runner": "eslint-rule-tester",
"kind": "test",
- "sourceDigest": "527b9ed381453ef5d4630e5d5a92d5009476d69dcda52af72467552d8f0177dd",
+ "sourceDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
"matrix": {
"index": 1,
"resolved": true,
- "value": "
Sparse array
"
+ "value": "
Sparse array
"
}
},
- "proof": "exact-case-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approves this exact source-matching/sorting case pair: named-token spelling, explicit native units and longhands, native-property ordering and native-candidate classification, with the reviewed diagnostic end-column adjustment where present. Source/parser/range assertions remain as shown in the pinned review. Collision, canonical autofix, invalid/raw-value policy and MDX behavior are outside this approval.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:29:00.229Z",
+ "reviewRef": "parity/eslint-source-sort-freeze-approval.md#approved-scope",
+ "scopeDigest": "5f2b1c2dadfc365573d6116fe348bd2e307448698c255cedc3cc970da1b74073"
+ }
},
{
"source": {
@@ -18463,7 +20224,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-db46c376e47a7d7f",
"package": "internal",
@@ -18472,9 +20233,16 @@
"title": "serializes manifest and emittedGlobals modules",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1f62739dd2f8e252c35bebb60e72b730f16c8e929cc4b9c6621d9462572b0e63"
+ "sourceDigest": "cc54916beaa4325daaf324463270b8b72e25999d1c828be96800455bdee9f4e0"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/internal/tests/module.test.ts :: serializes manifest and emittedGlobals modules -> packages/internal/tests/module.test.ts :: serializes manifest and emittedGlobals modules. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "ed5c4d8772d8d89b40bdd1c192b0225cd2a9d4fc5e28d4970e793b13f84bfdf1"
+ }
},
{
"source": {
@@ -18598,22 +20366,22 @@
},
"status": "approved-contract-change",
"target": {
- "id": "rc87-2d99ea0e5a8248fe",
+ "id": "rc87-95afc75a0d20ce37",
"package": "internal",
"file": "packages/internal/tests/module.test.ts",
"line": 80,
- "title": "builds a universal manifest facade that resolves Next production and dev assets",
+ "title": "builds a universal manifest facade using the emitted asset URL",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5bb285512b710f4cb5fe56e5902499814b647ee410347a7ea3ee6d92c6d070dc"
+ "sourceDigest": "632567a524db6c1138bc2dd6116ecb22bf57625eba4b9b1b7ca40e04cff861f5"
},
"proof": "approved-contract-change",
- "reason": "The universal manifest facade retains the refactor contract import-first assertions and adds the user-approved legacy Safari compatibility path: fetch only when JSON import-loader construction throws SyntaxError, without changing published APIs, exports, virtual module IDs, or rendering modes.",
+ "reason": "The approved bundler-owned manifest delivery replaces hand-assembled Next production/development URLs. The replacement retains universal loading through the emitted asset URL and explicitly tests the new delivery contract.",
"approval": {
- "approvedBy": "Aron
",
- "approvedAt": "2026-07-28T12:14:27Z",
- "reviewRef": "codex-task:019f8ebd-c9e4-73b1-814b-5de5e204ca41",
- "scopeDigest": "6fe7a81f96131dfa49550e0f9608777417cc7938cf967e8e341305a121393625"
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T09:09:01.429Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "fe34adf8998554b7b99b7266c85bae0c802f9cb9e7b51c419a8614531d44e478"
}
},
{
@@ -18766,7 +20534,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-cce0d208b209b2eb",
"package": "language-server",
@@ -18775,9 +20543,16 @@
"title": "publishes exact @compose class diagnostics in CSS documents",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "df00fdae0eb774276257b8172dd9cec36a4223b3c8540bfe0c102708e11f31e9"
+ "sourceDigest": "a25a264a47e0c764a97b5fe9147604ada2ee743170063354c2cd307d8f977ad0"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "97d750adb88c9603c175bc111185839687d133b3cfa2b76e5420963f17cde1ef"
+ }
},
{
"source": {
@@ -18799,7 +20574,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-057f64e6f899063a",
"package": "language-server",
@@ -18808,9 +20583,16 @@
"title": "publishes exact @compose class diagnostics in SFC style blocks",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "24e1c8cebce31d502263084fd59eff6228173cdc825d5cf4a0a1d8c20f0a680e"
+ "sourceDigest": "7e80c48215904c0af08dd5245190e121e40b4473452a35cda9a1b6b2a12bc2a5"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "0941fa7a8ec9350cd08ac3cdd3a34c6a25ae9a07fad0b1ba49c13ce3b479f111"
+ }
},
{
"source": {
@@ -18830,7 +20612,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-4d3a4318c7c80d47",
"package": "language-server",
@@ -18839,9 +20621,16 @@
"title": "preserves UTF-16 offsets in Svelte style fragments",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "614c61308e7c12dd8c2b8fdc206b3fce5b5b00c683ccb89f950215e0a253f32e"
+ "sourceDigest": "d0e7ea203025f7f41728f56b22405fb88a5bd9e2d580993d1dafd25b2105bae4"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "9bdc4bffde35e46409edfcc16c17c72ad172ac314af66de108ed93faf4565482"
+ }
},
{
"source": {
@@ -18863,7 +20652,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-c9dc0a318d3d099c",
"package": "language-server",
@@ -18872,9 +20661,16 @@
"title": "publishes quoted @compose syntax diagnostics",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "38abe58d284e9ed5aa721551425c78d0e6f149541143a298697f35e59fde35af"
+ "sourceDigest": "01f5374d1f6894d205ec956560806d4ac9dd402c5ea7308fbede8fba4e83c9d7"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "1cfec4591051a9e00e1d34615b38f52647a6e0197bc07f6fd115f38718f51f50"
+ }
},
{
"source": {
@@ -18896,7 +20692,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-7d4098ee94edaa69",
"package": "language-server",
@@ -18905,9 +20701,16 @@
"title": "publishes grouped @compose syntax diagnostics",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7cebfebc33ef52e6d153b26d25398b8e67f8f8c9c963fabb8d50b5e410de804c"
+ "sourceDigest": "476ae7af9a5187c589328eafb1c90426f2d348f9f86d33764e676d620476f9ba"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "0e926fc12c38c10f2b943a40141f41f452ccaedf50386a3bff44056307ebd8b1"
+ }
},
{
"source": {
@@ -18928,7 +20731,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-e87cb64b936fab83",
"package": "language-server",
@@ -18937,9 +20740,16 @@
"title": "publishes manifest loading diagnostics",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1c35e298054b801336c4c95a667bc7838dd1f2dca8f9296836bc35a1eee5adc5"
+ "sourceDigest": "e31f9f87223c5961a7b8ce6eff7aa2ccd2f821599451b02ee50c7642f1270893"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/language-server/tests/diagnostics.test.ts :: publishes manifest loading diagnostics -> packages/language-server/tests/diagnostics.test.ts :: publishes manifest loading diagnostics. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Use removed-compose-directive instead of target/quoted/group syntax diagnostics, locating the @compose token in original UTF-16 source; preserve host and manifest error handling.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "9dffd30eb7e29c34f08f9d36e795384649ad5b99be5fecd7b5ae2f18d07c2e0c"
+ }
},
{
"source": {
@@ -19024,7 +20834,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-2ca28a8fee7427df",
"package": "language-server",
@@ -19033,9 +20843,16 @@
"title": "returns document formatting edits for CSS directives",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a84dfe8888f5efbc069d3c115d475986ae2221bbb3f3bbe11a868c61eafcee60"
+ "sourceDigest": "0133441fdb6e4dcf464955b79bb68b47be3ce8b9bd40af2aaebde816559c5308"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/language-server/tests/formatting.test.ts :: returns document formatting edits for CSS directives -> packages/language-server/tests/formatting.test.ts :: returns document formatting edits for CSS directives. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "fc41f0be118ddad1fc2aa0e7b5244121de470fe72617af37453d07b108f8f66a"
+ }
},
{
"source": {
@@ -19056,7 +20873,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-aff0c5687d375213",
"package": "language-server",
@@ -19065,9 +20882,16 @@
"title": "returns range formatting edits for CSS directives",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3243b7d4c0aaae184bc121b7a180deeecd50f72b6b74fcd71795554bddf57e29"
+ "sourceDigest": "eb914f139414d777665294bae2dda12eaaecae44b7cd47854a6918cbf7300cd8"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"returns range formatting edits for CSS directives\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "3db8e841e355d9024800d6837ecc70eeb54742eda8dc72ee512fc3b7f64671d0"
+ }
},
{
"source": {
@@ -19119,7 +20943,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-ed144a8c64653ef0",
"package": "language-server",
@@ -19128,9 +20952,16 @@
"title": "returns no formatting edits when disabled",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ca0df59d5ca5b9575c1ea03b990326af7f0f08837355e04709a94e520905b603"
+ "sourceDigest": "eda80b486a1d0d4e2bf1677d77872b20d1c65468cf8b29523b7943408bf559da"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/language-server/tests/formatting.test.ts :: returns no formatting edits when disabled -> packages/language-server/tests/formatting.test.ts :: returns no formatting edits when disabled. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "76383e4c437add89ef611d002e733d89a53b9b9b9bb0e06358e8de39bd39f9b5"
+ }
},
{
"source": {
@@ -19151,7 +20982,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-36ad6d860a2a4cc3",
"package": "language-server",
@@ -19160,9 +20991,16 @@
"title": "loads managed CSS entry manifest before language features run",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "740d87cc2120be23a27a4f18ddaab0f0171ecbcbd1a4f6900b78f3adc3e35c93"
+ "sourceDigest": "f77fe7edd22cf7ea4b7498e243a584ad0b66fe2a64cb25308905666021b9663e"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"loads managed CSS entry manifest before language features run\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "148f17427992413cd13fa7a1a9b3a91b0a967a4878b50c8c0fa01b11181b7cd1"
+ }
},
{
"source": {
@@ -19375,7 +21213,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-1cc1d0090085ed33",
"package": "language-server",
@@ -19384,9 +21222,16 @@
"title": "returns active semantic tokens for the class at a position",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0298511f7df9b9e243ecb772980b25550acb1ed5a6acc2a6c2d41fc937a1d4bf"
+ "sourceDigest": "aae3dcbf38ee3943874e7deffa034379fadeb9d66153bb8aac1e40cefcb11839"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: fg-red is one named token; the active token span no longer reports a declaration property.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "b16b61137514cb790f7db8608a2db4be3090b6c9c449e0b8aff389f36a24347c"
+ }
},
{
"source": {
@@ -19408,7 +21253,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-dc7591a4ae298a44",
"package": "language-server",
@@ -19417,9 +21262,16 @@
"title": "returns CSS directive class-list semantic tokens in active mode",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6759722b51ad501fa7d1aa0dd30f81f5fd028162c9dab15d9eecd994fb3093e7"
+ "sourceDigest": "c2d01f313263da035fec7b65cf62fb7ab7ab22e2bc3669bd3868aee48efddaaa"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: @utilities replaces @components and fg-red is an enumMember; active mode excludes directive keywords and declaration properties. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "d847bf55e273b0396d57e7b5a07914fd890d6028d97574b139621a6d8e9a0948"
+ }
},
{
"source": {
@@ -19501,7 +21353,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-e39e3553acb8ff50",
"package": "language-server",
@@ -19510,9 +21362,16 @@
"title": "returns full semantic tokens for opened documents",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "369e6e9202cb4433d85012aa8b90d378a0e35d1a2e456c47f3efa069e6184012"
+ "sourceDigest": "1a3a3f1554dbcae46a7a0c82b50b43c3f917d279623580d01da360e7863517e4"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The grouped named token fg-red loses its old declaration-property split while enumMember and selector/query coverage remains.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "714525c744f85747d9f86e3983f188bc6ded735929c87df24d704fa884950b32"
+ }
},
{
"source": {
@@ -19565,7 +21424,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-3dbeb88b8f407cb0",
"package": "language-server",
@@ -19574,9 +21433,16 @@
"title": "returns CSS directive class-list semantic tokens when highlighting is off",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c4d59db907cccd641f421f2092264fa941eb9ba42fb397ba35fad4439f0b0f96"
+ "sourceDigest": "f60183bbd3c4019a5601d4967b83fa4e7f475ae7094d14475af389be09705099"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"returns CSS directive class-list semantic tokens when highlighting is off\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "d44ff5806bcad03f15f2f0f0d1f4871ddd09f7755210c8403e3e1ccfbe1b844f"
+ }
},
{
"source": {
@@ -19785,7 +21651,7 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-3fac9efeebd10f88",
"package": "language-service",
@@ -19794,9 +21660,16 @@
"title": "uses Rust for document contexts and hover inspection",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0aacab8e23c2fbc940b60350a10b800be95886226e8e671436ebf04c697f1164"
+ "sourceDigest": "8822b648be61077962a077bc2bacb49462ef36ca216b031028aa680317c04608"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"uses Rust for document contexts and hover inspection\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "ff0d261336f1dc054a80069fb075e0b578a3827b233241fb08483711b151b0c1"
+ }
},
{
"source": {
@@ -19852,16 +21725,17 @@
},
"status": "preserved-exact",
"target": {
- "id": "rc87-2372d116de8c5692",
+ "id": "rc87-a114e07da0096edb",
"package": "language-service",
- "file": "packages/language-service/tests/shiki.test.ts",
- "line": 137,
+ "file": "packages/language-service/tests/shiki-grammar.test.ts",
+ "line": 38,
"title": "exports the Shiki language registration as a named value",
"runner": "vitest",
"kind": "test",
"sourceDigest": "80259524ec27e63357a83b72caee72379b3fe1190e13a0d35b3ce894d3069bf7"
},
- "proof": "exact-source"
+ "proof": "exact-source-relocated",
+ "relocatedFrom": "packages/language-service/tests/shiki.test.ts"
},
{
"source": {
@@ -19882,18 +21756,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-2fa1682486ebcf8c",
+ "id": "rc87-26a0fc70a4fe84a2",
"package": "language-service",
- "file": "packages/language-service/tests/shiki.test.ts",
- "line": 143,
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 115,
"title": "defines deterministic TextMate grammar scopes for CSS directives",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e7187843a68de3bad508bda887d786c23559a288711c97587ff1fdf2f700b18e"
+ "sourceDigest": "0c81536fd07fe53affba02b91eacb6101b910de445b6767c34b6119edc3e5393"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/language-service/tests/shiki.test.ts :: defines deterministic TextMate grammar scopes for CSS directives -> packages/language-service/tests/rc87-shiki.test.ts :: defines deterministic TextMate grammar scopes for CSS directives. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "9c36e3f9cb11bc6c987d310d56256a5b060be9d16371582b4c7a52ac8cf96b69"
+ }
},
{
"source": {
@@ -19915,16 +21796,17 @@
},
"status": "preserved-exact",
"target": {
- "id": "rc87-4a7a42b87983cb2d",
+ "id": "rc87-44dfe92e02a0a784",
"package": "language-service",
- "file": "packages/language-service/tests/shiki.test.ts",
- "line": 190,
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 161,
"title": "supports Shiki dynamic language imports",
"runner": "vitest",
"kind": "test",
"sourceDigest": "80754bd9b7409c8d204ee51a6dc90a93e9e69b95e6decf54757576867e7a5561"
},
- "proof": "exact-source"
+ "proof": "exact-source-relocated",
+ "relocatedFrom": "packages/language-service/tests/shiki.test.ts"
},
{
"source": {
@@ -19945,18 +21827,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-50a6d8ef235beb32",
+ "id": "rc87-75bb3596f5f148b0",
"package": "language-service",
- "file": "packages/language-service/tests/shiki.test.ts",
- "line": 214,
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 185,
"title": "registers a real Shiki TextMate injection grammar for CSS directives",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4b7b0d0733dcf636f9e7d33646649a0d0ddb2abe549652b5428104a9dccb962b"
+ "sourceDigest": "354b739b9da65931bafc2e0b9100dffa14e82bf0038efc797fde28b0d449aa8c"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/language-service/tests/shiki.test.ts :: registers a real Shiki TextMate injection grammar for CSS directives -> packages/language-service/tests/rc87-shiki.test.ts :: registers a real Shiki TextMate injection grammar for CSS directives. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "acd894ca034467216ff955d491a150e55f418e88114a1892bdd979cfa00c5372"
+ }
},
{
"source": {
@@ -19979,16 +21868,17 @@
},
"status": "preserved-exact",
"target": {
- "id": "rc87-11ce58a03cdb4b00",
+ "id": "rc87-3b1814f38ddb99eb",
"package": "language-service",
- "file": "packages/language-service/tests/shiki.test.ts",
- "line": 248,
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 219,
"title": "keeps guide theme snippets correct with TextMate only",
"runner": "vitest",
"kind": "test",
"sourceDigest": "988048db90a1f3ac536b0cebba0ca2849d19372174b423e5b9f392228a4fc798"
},
- "proof": "exact-source"
+ "proof": "exact-source-relocated",
+ "relocatedFrom": "packages/language-service/tests/shiki.test.ts"
},
{
"source": {
@@ -20015,7 +21905,7 @@
"id": "rc87-3ed933e5fedf10aa",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 272,
+ "line": 107,
"title": "does not attach semantic metadata to guide theme CSS directive syntax",
"runner": "vitest",
"kind": "test",
@@ -20048,7 +21938,7 @@
"id": "rc87-614eb1632af3733f",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 289,
+ "line": 124,
"title": "does not resolve guide theme CSS directive syntax through semantic scope styles",
"runner": "vitest",
"kind": "test",
@@ -20079,7 +21969,7 @@
"id": "rc87-671b393d7ed4aef8",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 307,
+ "line": 142,
"title": "does not create Master Shiki decorations for native-only CSS",
"runner": "vitest",
"kind": "test",
@@ -20111,7 +22001,7 @@
"id": "rc87-9f5ae22425b343d8",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 322,
+ "line": 157,
"title": "normalizes Shiki language ids separately from class-list languages",
"runner": "vitest",
"kind": "test",
@@ -20137,18 +22027,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-2c5a5b24e801cfff",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 334,
+ "line": 169,
"title": "creates Shiki decorations from Master CSS semantic tokens",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d3eaea3bbbcff8731825bf214123f891dc44e6e1f4c8d0decfa8bee3508a9849"
+ "sourceDigest": "3db1b85f0eaa0bb3ff8672b2d0494d954d944f3285b4057dae84a0aec9b35460"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: fg-brand is one enumMember. The fixture btn is a utility, so all three occurrences use utility.semantic role without component/declaration modifiers.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "5e6494e081ae0faf6fba6deff208218ef2e7e93c7833e6a4ac71f47aa3a9973a"
+ }
},
{
"source": {
@@ -20170,18 +22067,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-12186aa5abf43d09",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 394,
+ "line": 337,
"title": "creates Shiki decorations for CSS directive class-list spans",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "495258ab526e870f3f031ee20752c85bbd5e0262245774d14bfb8973e9cd0b6d"
+ "sourceDigest": "18ca5a9cff56d761acb43883f730888fe83d399101306c910df4770d33fbca1b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named token spans and utility registration change; pattern fixture syntax uses font-<~font-size> and raw grid-cols:<*> rather than the removed typed raw form. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "510226c9bc47cf0d2d3e644a90f7b3548af6b98d1264122a97819b9ae6ab6baa"
+ }
},
{
"source": {
@@ -20202,18 +22106,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-dd8bb950e0e1689f",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 479,
+ "line": 416,
"title": "creates Shiki decorations for raw Master CSS class lists",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "23618e63a338083833f901301ff8bb462a1bf048ba3610152fe992f6730f5ead"
+ "sourceDigest": "6df3d5ffaa6542cd8f7b0b22a3962ec356537714066e23d11c3e4a3a2a3c9908"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Raw class-list named tokens become complete enumMember spans; modifier and query spans remain.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "d84e9f5ef4d96607b6313abb178cd3a639d5ea7d004eda4c9186cadc382c3428"
+ }
},
{
"source": {
@@ -20233,18 +22144,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-048c5fec4032b5c6",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 503,
+ "line": 439,
"title": "skips semantic token decorations inside host comments",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7bd31e18c36c85efcfd5834854c1613fefe53f59d57997a6c031dd9f20ce05a3"
+ "sourceDigest": "6eee4673eb1dfbfbb5429575816cd15779ec61d6b1c8983148ca61e634f94a36"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Comment exclusion is retained with complete fg-blue/fg-red spans replacing old split value tokens.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "67db1bf0ad1c4edbb170bc3e17eaebba563863ff005aa0e9cd864b34d4bca995"
+ }
},
{
"source": {
@@ -20264,18 +22182,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-a5e7df0a818329f3",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 514,
+ "line": 450,
"title": "applies semantic token styles by type and modifier",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "796b91a605afcaa326e393c89a33a741b8475db8b948486b385f11bae3ce325e"
+ "sourceDigest": "25b0bb634553e33d76c5336ecd4f0ef0080a3f9ad13a9fd1f0478e58dbf833d9"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The utility btn uses the enumMember value color and loses component-only font-weight 600; existing block styling stays.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "ad73e72f4949c39b4dff4262f1063404092d8b13356b195ec51e8fbcde3fdb75"
+ }
},
{
"source": {
@@ -20296,18 +22221,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-b1ef4609b9c3a1a7",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 547,
+ "line": 483,
"title": "wraps host class attribute values around Master CSS semantic spans",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6f7bf9ee8de1c8d2091515661eeb1bada31990906a454f9617be114be4578a6e"
+ "sourceDigest": "dd24bb47ce5fb3e35759b42738fd5d1ee58b346a78f99b0eda3cdb9a360a690f"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The host attribute wrapper retains source text, host role and original style, and contains one semantic-utility span rather than property/separator/value spans.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "23cbcaa9e36d06272f05da550497697fc2fb89a0f52806dd5484ec18059a01f7"
+ }
},
{
"source": {
@@ -20328,18 +22260,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-35f63a5af0e4a031",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 588,
+ "line": 522,
"title": "can disable host class attribute value wrappers",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2d5d95474435bd62c4b77c3d26c455dbe72316b2d19a9a5061d47ef08120b16d"
+ "sourceDigest": "9272450eaa2d3290d9e5c4bca84e86a45eb432d47840eff16f1a549182e0a745"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Disabling host wrappers still produces no wrapper and exactly one named-token utility.semantic span.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "2aa49134c72edd4992996fdac3653c48a4d9f197250f88d20bb8735ef7040f81"
+ }
},
{
"source": {
@@ -20360,18 +22299,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-87a49eee126da67d",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 611,
+ "line": 660,
"title": "handles caller Shiki decorations around host class attribute value wrappers",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6ca790e1075125d57887e4821355c9d727ee5d2267c40b093f0f6ac568f50b3e"
+ "sourceDigest": "21baaaa52852fe0fe31cb42ff9aaaa33ce3150b8169f600919596fd04afa63e6"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"handles caller Shiki decorations around host class attribute value wrappers\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "ca3cf5af0833b3c184964ee098955a1eb046be36327e976e3aaa18bda67fb1c7"
+ }
},
{
"source": {
@@ -20392,18 +22338,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-11e7d929b66310fd",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 648,
+ "line": 697,
"title": "does not create host wrappers for raw class-list highlighting",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "941f3ace18a98df984b80d5aeb5c8f0d5a8e7b50edf0b93b7104dbfc7ae25d6a"
+ "sourceDigest": "17ea44caae96a5b7da2593c21f2a27bec4833841a6527e8bb7d834f515dd12c3"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"does not create host wrappers for raw class-list highlighting\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "77f1a8e03d027dbe821ff699b1a05180926374e2bd598053614a153272e2df0a"
+ }
},
{
"source": {
@@ -20423,18 +22376,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-b65ebde91c14e95b",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 664,
+ "line": 713,
"title": "applies semantic decorations in the Shiki tokens hook",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7f181eed07de7eebb5e8acec7db516a62373df2bdf61dc061bd41f90dd8a8fc8"
+ "sourceDigest": "70512485e9a74b393a4fa0a83816bd9fbcb256dff987d559503a507f8de5efcf"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The Shiki tokens hook emits enumMember/utility.semantic classes for btn and no component-only font-weight style.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "f8c238e710d87e06d97713b1c483267052238a506791198c808a9c77d2f25d50"
+ }
},
{
"source": {
@@ -20460,7 +22420,7 @@
"id": "rc87-5079a76d5cefd655",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 708,
+ "line": 755,
"title": "uses semantic token scope styles for selector semantic tokens",
"runner": "vitest",
"kind": "test",
@@ -20486,18 +22446,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-45de05367dfbdb24",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 756,
+ "line": 803,
"title": "uses semantic token scope styles for documentation Master CSS tokens",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "31518d64a8b7020b90db1956b106bcf004d3faaefcde762251e955e72234ec8e"
+ "sourceDigest": "dbd90dff6f48b274b163a3b0e2f8c14cf9a79585226091342930a342dc8dba32"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: HTML and CSS directive documentation tokens use complete named-token value styling; @utilities replaces @components. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "88c921d2ccfc46cffa712e254f1f30ec634dee13ab94847448acc1e7aaa3e76b"
+ }
},
{
"source": {
@@ -20519,18 +22486,25 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-49294136507486df",
"package": "language-service",
"file": "packages/language-service/tests/shiki.test.ts",
- "line": 863,
+ "line": 895,
"title": "uses semantic token scope styles for CSS directive class-list tokens",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5252878a3d8ab8c74835d088e3204acdad15889c1a632e42c1690a47bbad121c"
+ "sourceDigest": "8b583f7a42a0e2fad7cc7eebc9e782e97b4b2978cd813d4886cf813fe137c4f7"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: p-md and r-xl each receive one value-colored utility.semantic span while remaining directive/query token checks stay. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "351db59897ba177b274de71abba4c39a114ac6d16be0fdc640bdb599c628e14f"
+ }
},
{
"source": {
@@ -20552,18 +22526,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-8f864fb0ea35d7ce",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 147,
+ "line": 150,
"title": "registers tools, resources, prompts, and renders CSS through MCP",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8f9861cd4e3caeafe27980503717a433cc12a1e531266810d338f9c077ae5c44"
+ "sourceDigest": "8eb06e080b0a324d74be7bb39d33ea1224b4dcc97564abaadbb837c577d40500"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: registers tools, resources, prompts, and renders CSS through MCP -> packages/mcp/tests/core.test.ts :: registers tools, resources, prompts, and renders CSS through MCP. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "86b67a328967cea2e82f6e1207570c2a396f162f6e97e38b9f81f6a0ae204db4"
+ }
},
{
"source": {
@@ -20585,18 +22566,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-70467a45db659966",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 230,
+ "line": 240,
"title": "audits setup and inspects CSS-first directives through MCP",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "914ea051ddf78805466bfad3a89e9da758e3b9a19862e42d4f77001f20d04807"
+ "sourceDigest": "44813697951688c7a5d07bed3a5b292f512feef6d598e9e684022419a8cb0d89"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: audits setup and inspects CSS-first directives through MCP -> packages/mcp/tests/core.test.ts :: audits setup and inspects CSS-first directives through MCP. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance MCP directive inspection to version 2 after removing composition traces; preserve directive inventory and setup assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "ba6b3b2b816ffcdd3a817c181dab31858e989a1450d66476d5328d4514de14e8"
+ }
},
{
"source": {
@@ -20618,18 +22606,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-5ee3dd7b8dcf6086",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 308,
+ "line": 316,
"title": "traces, extracts, queries, and compares Master CSS classes through MCP",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c7c4369973523018c30e6ccc36b0749c9bbb6bdd9fb85ea33714009d504f7bca"
+ "sourceDigest": "6ad89c8e799b3a3b48edc27475be3bfa70b74d648e5d9fadf03b86345709dd7f"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: traces, extracts, queries, and compares Master CSS classes through MCP -> packages/mcp/tests/core.test.ts :: traces, extracts, queries, and compares Master CSS classes through MCP. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a88ecc1e7d98cc00db4b76191a018d89fbf2b3ec7b389573895ba990243fb74b"
+ }
},
{
"source": {
@@ -20651,18 +22646,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d58e50c2a10ef009",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 404,
+ "line": 420,
"title": "previews directive formatting without writing until the preview is applied",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "be9d47f17ef638c5d93ba7a911fdceef27bd3b15c1a0615579ed989c37132ce8"
+ "sourceDigest": "516ebeade7dc639994e49b5b265fd83c7ae8a11b2008a4115119a1b87f507a46"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: previews directive formatting without writing until the preview is applied -> packages/mcp/tests/core.test.ts :: previews directive formatting without writing until the preview is applied. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Use safelist formatting in content and file previews while preserving confirmation-token, no-write-before-apply and applied-output checks.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "248621f6a6986cfe0a21d7b4db46f5411442513fdaec2414168fc452ad71f475"
+ }
},
{
"source": {
@@ -20689,7 +22691,7 @@
"id": "rc87-abd3cb056fd81dd0",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 445,
+ "line": 463,
"title": "routes Master CSS contributor paths to context files, risks, and validation commands",
"runner": "vitest",
"kind": "test",
@@ -20722,7 +22724,7 @@
"id": "rc87-54b2504377febf1c",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 493,
+ "line": 511,
"title": "summarizes change impact and package graph for contributor tools",
"runner": "vitest",
"kind": "test",
@@ -20755,7 +22757,7 @@
"id": "rc87-0b352572aedcb25f",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 596,
+ "line": 614,
"title": "routes setup package contributor paths to testing and package-boundary context",
"runner": "vitest",
"kind": "test",
@@ -20788,7 +22790,7 @@
"id": "rc87-91d4dd8ca61e5700",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 650,
+ "line": 668,
"title": "returns limited contributor routing outside the Master CSS repository",
"runner": "vitest",
"kind": "test",
@@ -20821,7 +22823,7 @@
"id": "rc87-51b092cde77ad479",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 695,
+ "line": 713,
"title": "routes AI-facing documentation changes to docs consistency validation",
"runner": "vitest",
"kind": "test",
@@ -20861,7 +22863,7 @@
"id": "rc87-7b149d21add65c4f",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 730,
+ "line": 748,
"title": "routes site documentation changes to site context and prepare validation",
"runner": "vitest",
"kind": "test",
@@ -20889,18 +22891,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-37a716cccf338a1d",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 772,
+ "line": 790,
"title": "previews and applies lint fixes only with a confirmation token",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6395e055805b961e3b8abbf648905fa91b765b157d5492862469b6830dcc4b72"
+ "sourceDigest": "07cd50824f157336fde88cb10de5c998c41372ab1d20b295b5666180eff0976d"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: previews and applies lint fixes only with a confirmation token -> packages/mcp/tests/core.test.ts :: previews and applies lint fixes only with a confirmation token. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "3570a2cefdf3cbaa0672c773967c8d4d310dcd4b159ae618bc97aac1a81eb9df"
+ }
},
{
"source": {
@@ -20922,18 +22931,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-6a15248469d8ce76",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 804,
+ "line": 823,
"title": "lints cjs files with the shared script language mapping",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2eca7aae8fe216061489274591eb273a6e8f428ac6884ed66a10ff56719c8d6a"
+ "sourceDigest": "7258b15e92745d66a66325b485a73a35bc1ae5ba731de13cb28edbc49bb3297e"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: lints cjs files with the shared script language mapping -> packages/mcp/tests/core.test.ts :: lints cjs files with the shared script language mapping. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "7a9b7ab1479c6978e487a92a577c7dda4131ff0abc27553ea7dcd7406b628aff"
+ }
},
{
"source": {
@@ -20955,18 +22971,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-bda5260bf5403fa5",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 827,
+ "line": 847,
"title": "scans project sources with missing CSS classification",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3022a67f57969e21cc64cb77710322247730777a0bc4f342594cb3ddf0e5761d"
+ "sourceDigest": "2cf3007f88ae0c20dfdf22a7b91775b63d4557e980db95b94c0f499c91d1336b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: scans project sources with missing CSS classification -> packages/mcp/tests/core.test.ts :: scans project sources with missing CSS classification. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance the diagnostics report expectation from version 3 to 4; scanner, lint and missing-CSS assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "660d17b188b14238e9f517dbc87313b121290302de5d5943303daa0c2fe3ebf4"
+ }
},
{
"source": {
@@ -20988,18 +23011,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-6c45d1556603cf91",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 858,
+ "line": 879,
"title": "lints in-memory content without requiring a file on disk",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "290a7c54010649eb030770bdb7cd1e1389f1325770a8dfe0ad475f75f3dd9252"
+ "sourceDigest": "69082146b1a90a7bb702dfa0a951f33bf0302be7b7ba1e965c66f901db25a771"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/mcp/tests/core.test.ts :: lints in-memory content without requiring a file on disk -> packages/mcp/tests/core.test.ts :: lints in-memory content without requiring a file on disk. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Advance the diagnostics report expectation from version 3 to 4; scanner, lint and missing-CSS assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "d9bf1fadbe439dda7744d107c7a184b277166fa7de74df3ef39e81d01cb6512e"
+ }
},
{
"source": {
@@ -21026,7 +23056,7 @@
"id": "rc87-a4017140deaab73d",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 884,
+ "line": 906,
"title": "rejects root escape patterns and stale preview writes",
"runner": "vitest",
"kind": "test",
@@ -21059,7 +23089,7 @@
"id": "rc87-d0751402c121a4f2",
"package": "mcp",
"file": "packages/mcp/tests/core.test.ts",
- "line": 904,
+ "line": 926,
"title": "accepts writable files addressed through the configured root path alias",
"runner": "vitest",
"kind": "test",
@@ -21088,7 +23118,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-340707601e1b0a28",
"package": "next",
@@ -21097,9 +23127,16 @@
"title": "disposes the build renderer after materializing its output",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "55a84fdc0e5d2d489bf7eb26e3a1ed01ce33a431f80df9dcb5c5b3366b9b2536"
+ "sourceDigest": "051fba9ce10a8375b9ec2bf0719d9e571d27b67558bda67c474e95c6b69b16af"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"disposes the build renderer after materializing its output\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "e20e43bc314d8a2ed25b8ce91f0bc7a251dcb1fb943feebb7c76c7a0ec4c365e"
+ }
},
{
"source": {
@@ -21122,7 +23159,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-5c0737810dccaf5c",
"package": "next",
@@ -21131,9 +23168,16 @@
"title": "shares one build renderer without leaking rules between HTML outputs",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "92c26e5761c8952f44d2b95e84a25611dc27dc010ec16496a5ae30cf3fb65acf"
+ "sourceDigest": "6b1c09cea65b506b8936deb111574e6c106f09a273717659c646ae42b977a957"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/adapter.test.ts :: shares one build renderer without leaking rules between HTML outputs -> packages/next/tests/adapter.test.ts :: shares one build renderer without leaking rules between HTML outputs. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "c5b411254ea0f05742be6a233a701f7e2f58e45f8e17df02b71c4c54819ad733"
+ }
},
{
"source": {
@@ -21161,7 +23205,7 @@
"id": "rc87-b1dfafe83b741592",
"package": "next",
"file": "packages/next/tests/adapter.test.ts",
- "line": 153,
+ "line": 165,
"title": "disposes the build renderer when an output fails",
"runner": "vitest",
"kind": "test",
@@ -21190,18 +23234,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-e74315879f5ad97a",
"package": "next",
"file": "packages/next/tests/adapter.test.ts",
- "line": 165,
+ "line": 177,
"title": "renders Master CSS into static HTML outputs once",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d35441b7a582491febb582ccb5b7c47571a7529d3b9ae4d8a5c8eab49c397c9b"
+ "sourceDigest": "f9fb94577fcfb7414ce9f2e194ab86d4abb5ef1727828b6e77856fff2d36d2a0"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/adapter.test.ts :: renders Master CSS into static HTML outputs once -> packages/next/tests/adapter.test.ts :: renders Master CSS into static HTML outputs once. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "4590d8f5b6e457bb90b1fd1a0ddbc2a01e08484a49bdfd37b2f2d11543071acf"
+ }
},
{
"source": {
@@ -21225,18 +23276,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d79c47a9c3f2b39e",
"package": "next",
"file": "packages/next/tests/adapter.test.ts",
- "line": 218,
+ "line": 243,
"title": "writes static export hydration manifests into the default export root",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "21cf6d741837551b7a30ce17251d53e6bf74a3689c9540b75a96e3fa1e803fe6"
+ "sourceDigest": "6e2d786add6a89f0d9c5aa01cef641aee3c175b0f0ed0a30399ec9e17f8f116a"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/adapter.test.ts :: writes static export hydration manifests into the default export root -> packages/next/tests/adapter.test.ts :: writes static export hydration manifests into the default export root. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "b6a0f2d8209ed26331a0ab0ecf673fe335fdaee903a6548246943fdd126b7bc3"
+ }
},
{
"source": {
@@ -21259,18 +23317,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-0c8501d038901aac",
"package": "next",
"file": "packages/next/tests/adapter.test.ts",
- "line": 242,
+ "line": 267,
"title": "derives a custom static export root from nested output metadata",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0c3d120074d4de76d7832b950d33503e866e352da02c0874f2c882f6d077659d"
+ "sourceDigest": "77d172ec601a9dcd4cb4b5f08ece5e3e14bd275cfb4a6f9762250a82cb160658"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/adapter.test.ts :: derives a custom static export root from nested output metadata -> packages/next/tests/adapter.test.ts :: derives a custom static export root from nested output metadata. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a34fd85ba1ad40d0dd9be0c849b6dbdd6e962400684cac1331832d222531103e"
+ }
},
{
"source": {
@@ -21293,18 +23358,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-c6efccfb5323a963",
"package": "next",
"file": "packages/next/tests/adapter.test.ts",
- "line": 263,
+ "line": 288,
"title": "fails when static export output metadata cannot identify the export root",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a1fc6d1dbf6e76e71a6e1aa258b6f6e67b1721a31e60c5fb2f612aafb5a3496e"
+ "sourceDigest": "739b1f3d45a4d27681e18b76bd43ecc0b15ddfc014964a38639e76941381ab37"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/adapter.test.ts :: fails when static export output metadata cannot identify the export root -> packages/next/tests/adapter.test.ts :: fails when static export output metadata cannot identify the export root. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "b719d63dcdfe25567ba672ba84657ee4252553482df0f76b9315b4a0117579b6"
+ }
},
{
"source": {
@@ -21333,7 +23405,7 @@
"id": "rc87-225ac221836ffb97",
"package": "next",
"file": "packages/next/tests/adapter.test.ts",
- "line": 277,
+ "line": 302,
"title": "does not write empty Master CSS for non-Master classes",
"runner": "vitest",
"kind": "test",
@@ -21367,7 +23439,7 @@
"id": "rc87-de9185944ea92121",
"package": "next",
"file": "packages/next/tests/adapter.test.ts",
- "line": 297,
+ "line": 322,
"title": "does not inline native-only managed CSS entry output",
"runner": "vitest",
"kind": "test",
@@ -21396,18 +23468,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-dcd91d977e32457a",
"package": "next",
"file": "packages/next/tests/adapter.test.ts",
- "line": 351,
+ "line": 376,
"title": "keeps only generated CSS in style#master-css when native CSS is also present",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "61de6dbe9304dc01bf8b1c0997eebe9be0b7e53485e5cd2786a83ac5087e39e6"
+ "sourceDigest": "dae4949c59043a8a8a1f3832b8d29d78cd103ab480d97b4c468503b628616a1d"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/adapter.test.ts :: keeps only generated CSS in style#master-css when native CSS is also present -> packages/next/tests/adapter.test.ts :: keeps only generated CSS in style#master-css when native CSS is also present. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "2e9a946a9f739628ae34fab21e438787ffbd6e987eb6d556d1ca565208afe42f"
+ }
},
{
"source": {
@@ -21436,7 +23515,7 @@
"id": "rc87-daddbe2ab938435c",
"package": "next",
"file": "packages/next/tests/adapter.test.ts",
- "line": 379,
+ "line": 404,
"title": "runs the Master CSS adapter before the external adapter by default",
"runner": "vitest",
"kind": "test",
@@ -21471,7 +23550,7 @@
"id": "rc87-6f175af36f1c90cb",
"package": "next",
"file": "packages/next/tests/adapter.test.ts",
- "line": 403,
+ "line": 428,
"title": "can run the external adapter before the Master CSS adapter",
"runner": "vitest",
"kind": "test",
@@ -21501,7 +23580,7 @@
],
"priority": "P0"
},
- "status": "verified-superset",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-f3a51f991c07da68",
"package": "next",
@@ -21510,10 +23589,16 @@
"title": "resolves @compose entries against the loaded base manifest while extracting native CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "999028c048d0793e5b6979d2efc0cbc7507e4e313db5910e0cc0f8ce509dc0e7"
+ "sourceDigest": "c1ac4752d14ba983e1e1862ccfbcac48fe93d173ae4e55ebb96dbd7917f044f0"
},
- "proof": "verified-superset",
- "reason": "The Next build-state compose, native CSS, and disposal assertions remain and the target adds emitted-global variable coverage."
+ "proof": "approved-contract-change",
+ "reason": "The Next build-state compose, native CSS, and disposal assertions remain and the target adds emitted-global variable coverage. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "81f2b7cc7ec9d5a0fe204d76139731aa79d6060d90f31f26478879e7a1a0ad59"
+ }
},
{
"source": {
@@ -21537,18 +23622,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-78ebee2f1e48562c",
"package": "next",
"file": "packages/next/tests/css-manifest-import-loader.test.ts",
- "line": 61,
+ "line": 52,
"title": "rewrites relative CSS manifest query imports from TypeScript modules to generated JS manifest modules",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7cb57df7d1821ad836b02eac5a4d734228487e31af15bdcf612d03572afb5f64"
+ "sourceDigest": "465d9a008fa8c01671fdc78ef5f363097084bc5f8cbd8a9eb0d8b28b5b7e2192"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/css-manifest-import-loader.test.ts :: rewrites relative CSS manifest query imports from TypeScript modules to generated JS manifest modules -> packages/next/tests/css-manifest-import-loader.test.ts :: rewrites relative CSS manifest query imports from TypeScript modules to generated JS manifest modules. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "71f4ba9ff95210117d0011065601efc4a08ef814ae5cb84404cdf5bc1dc78364"
+ }
},
{
"source": {
@@ -21572,18 +23664,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-cc64a4ef8922d47c",
"package": "next",
"file": "packages/next/tests/css-manifest-import-loader.test.ts",
- "line": 88,
+ "line": 80,
"title": "resolves package CSS manifest query imports without package-specific rules",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "fbcf0df7513913114cf9a03aea8d1d0c71ae9f5c47290a50b0df713784939d5a"
+ "sourceDigest": "06d42dae5c99211bf9e60051684af1bbf438c3ea47d7ef0af3ecc94619393435"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/css-manifest-import-loader.test.ts :: resolves package CSS manifest query imports without package-specific rules -> packages/next/tests/css-manifest-import-loader.test.ts :: resolves package CSS manifest query imports without package-specific rules. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "2a16876be43d48de07ddb4c18ec5e43e4baeaf9e3029f94bee84ddb0b0b12a3d"
+ }
},
{
"source": {
@@ -21612,7 +23711,7 @@
"id": "rc87-b6faf1426e516ff6",
"package": "next",
"file": "packages/next/tests/css-manifest-import-loader.test.ts",
- "line": 118,
+ "line": 110,
"title": "leaves non-import strings and unrelated imports unchanged",
"runner": "vitest",
"kind": "test",
@@ -21714,22 +23813,22 @@
},
"status": "approved-contract-change",
"target": {
- "id": "rc87-c6f234a37661be00",
+ "id": "rc87-a9210afde2b25995",
"package": "next",
"file": "packages/next/tests/css-manifest-loader.test.ts",
"line": 77,
- "title": "wraps the manifest JSON as an external JSON facade when requested",
+ "title": "exports standard ESM data without writing bundler output assets",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "449583c35a6d3b4499950043ea16a0a2d16912810941afe4801ceac17028121e"
+ "sourceDigest": "18466eeec0c81b7e8e3f595f9b75f6593264bcdb8731aad877676e02eedb828f"
},
"proof": "approved-contract-change",
- "reason": "The Next manifest facade retains the refactor contract import-first assertions and adds the user-approved legacy Safari compatibility path: fetch only when JSON import-loader construction throws SyntaxError, without changing published APIs, exports, virtual module IDs, or rendering modes.",
+ "reason": "Reviewed at implementation HEAD 2079d665a: the renamed ESM test imports emitted data, asserts languageVersion:3 and theme content, rejects fetch and /_next URL assembly, and confirms no .next output directory. This preserves the approved bundler-owned delivery change rather than the removed external JSON behavior.",
"approval": {
- "approvedBy": "Aron ",
- "approvedAt": "2026-07-28T12:14:27Z",
- "reviewRef": "codex-task:019f8ebd-c9e4-73b1-814b-5de5e204ca41",
- "scopeDigest": "af679f9e7623f989848eb99dfe20a405f13b37feefcc96155dd439af8f9276da"
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T15:06:47.465Z",
+ "reviewRef": "parity/sizing-resolution-validation.md#historical-evidence-review",
+ "scopeDigest": "83cdd2abfd107576a9590f945f18320b17eb68bbdaf0589dc98c9918bac94b65"
}
},
{
@@ -21754,18 +23853,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-bdb21071a6a1472c",
"package": "next",
"file": "packages/next/tests/css-manifest-loader.test.ts",
- "line": 102,
+ "line": 94,
"title": "inlines manifest modules in development for HMR",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6561b80aafc67a162d38174be0871d5f0a1f4715acf2de9d116132577a1e1124"
+ "sourceDigest": "308bd54b08c225d6d0a2a326acb2ab4f06e4373bb33b453d67942cbb63600774"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/css-manifest-loader.test.ts :: inlines manifest modules in development for HMR -> packages/next/tests/css-manifest-loader.test.ts :: inlines manifest modules in development for HMR. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "69be29b61f80e8143181941331b5766cd5478522b7f70be0c263b355e9c50c1b"
+ }
},
{
"source": {
@@ -21789,18 +23895,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-e5d343ae48cff114",
"package": "next",
"file": "packages/next/tests/css-manifest-loader.test.ts",
- "line": 130,
+ "line": 122,
"title": "loads CSS when the loader resource includes ?master-css-manifest",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6d323e4fae2ea145f270a4c7ecbef9d695f237e4fe427e8ee391428b0b0d374c"
+ "sourceDigest": "4812bbfa89cdae1e274fe4d3de6b750498a0c2a7e64037a652377474a2efb28e"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"loads CSS when the loader resource includes ?master-css-manifest\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "cedb9f415168b9931909e261eb019ecdbc293f11c66c2f9dad7c28af7b1cde77"
+ }
},
{
"source": {
@@ -21824,18 +23937,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-dcfcbfe417ea201d",
"package": "next",
"file": "packages/next/tests/css-manifest-loader.test.ts",
- "line": 159,
+ "line": 151,
"title": "loads the default virtual manifest from CSS entry files only",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0f0f0b15669e17910a91dcb35e67c6c81c8cb62420ca80f85ef28c7605741189"
+ "sourceDigest": "d8497b6e1c7d66f240da75ee2257060e5b4f340aaf8a3b083cb5cc6ff819692e"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"loads the default virtual manifest from CSS entry files only\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "111938efc0b24bf17c23f9479dbd70a309cd7078ace9c9d839f3636e81ba37bf"
+ }
},
{
"source": {
@@ -21859,18 +23979,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-9320973372113ac9",
"package": "next",
"file": "packages/next/tests/css-manifest-loader.test.ts",
- "line": 222,
+ "line": 214,
"title": "keeps virtual manifest dependencies registered after invalid CSS and recovers on the next run",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4a6bbd0862e2e1283fea873c35fc4c3542944684e649443710afc5ba16e93c6d"
+ "sourceDigest": "c0a24776c7042e71a562534258eb8ebb5403ca83f02bf20a14a0066b15cc684f"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/css-manifest-loader.test.ts :: keeps virtual manifest dependencies registered after invalid CSS and recovers on the next run -> packages/next/tests/css-manifest-loader.test.ts :: keeps virtual manifest dependencies registered after invalid CSS and recovers on the next run. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "e281266af266f6cc3bfd5d502a6fd6f1919182b533de1fdd0ec8f038993f65c1"
+ }
},
{
"source": {
@@ -21894,18 +24021,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-aff116ec4161fc64",
"package": "next",
"file": "packages/next/tests/css-manifest-query-e2e.test.ts",
- "line": 55,
+ "line": 51,
"title": "builds a clean Next project that imports an explicit CSS manifest resource",
"runner": "vitest",
"kind": "e2e",
- "sourceDigest": "787c9c35e103208182994e6534677168938687d4e17e762dbdcfc7b99a917482"
+ "sourceDigest": "32480936fb691017ec6e80d70d46f1c0611a5a4c752bed439559f63247506943"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/css-manifest-query-e2e.test.ts :: builds a clean Next project that imports an explicit CSS manifest resource -> packages/next/tests/css-manifest-query-e2e.test.ts :: builds a clean Next project that imports an explicit CSS manifest resource. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "86925b096435d4c999da636d07ce9b8687fc2913195f4bd0fb70dca7231b9a69"
+ }
},
{
"source": {
@@ -21928,18 +24062,30 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-829a1d4894486dd0",
+ "id": "rc87-f1211f7319125596",
"package": "next",
"file": "packages/next/tests/dev-hmr-e2e.test.ts",
- "line": 166,
- "title": "updates Master CSS without a full reload",
+ "line": 284,
+ "title": "updates Master CSS without a full reload (turbo)",
"runner": "vitest",
"kind": "e2e",
- "sourceDigest": "c2394a7d1b0af643094e28ff052d68c3850b977bd1df67bae2875be820fb64b8"
+ "sourceDigest": "fda02e7fe62b04cf782009d7331fd772511b2b1699794f1d1131ec3b6a559626",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "turbo"
+ }
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/dev-hmr-e2e.test.ts :: updates Master CSS without a full reload -> packages/next/tests/dev-hmr-e2e.test.ts :: updates Master CSS without a full reload (turbo). The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "5763c58349d63739c36aae24b32710b8db27b54b725d8f197219f2cf9ae80a8e"
+ }
},
{
"source": {
@@ -21962,18 +24108,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-680bf632928ceace",
"package": "next",
"file": "packages/next/tests/next-config.test.ts",
- "line": 108,
+ "line": 119,
"title": "sets the Next adapter path and registers options",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "398d3906212c6f0eca8375918d93f478bd24e17f3af6094324bb1bf55e149a34"
+ "sourceDigest": "beb52b30267579861497d5a8deb29b15062d785582f5a089768d47d81245b797"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/next-config.test.ts :: sets the Next adapter path and registers options -> packages/next/tests/next-config.test.ts :: sets the Next adapter path and registers options. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "7d3ff035f5c267be275d5c3a32cb0aceaff1baf8254dfaf9738ece7f9083b84f"
+ }
},
{
"source": {
@@ -21997,19 +24150,25 @@
],
"priority": "P0"
},
- "status": "verified-superset",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-64695981843c3c3f",
"package": "next",
"file": "packages/next/tests/next-config.test.ts",
- "line": 116,
+ "line": 127,
"title": "adds a CSS manifest webpack loader",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "831214290606fcec676fffb39cea34b44d0adfa2f687a9eaea5a81205d371978"
+ "sourceDigest": "4124e3f6196368dbc26787197f67b026d175abb63e704b739df900de078548ab"
},
- "proof": "verified-superset",
- "reason": "The Next Webpack manifest-loader assertions remain and the target adds the emitted-globals loader contract."
+ "proof": "approved-contract-change",
+ "reason": "Next Webpack manifest testing explicitly selects progressive mode after the approved static default. Loader options intentionally drop external:true for bundler-managed ESM; emitted-globals has a dedicated loader and ordinary CSS is no longer matched by the manifest loader. Alias and instrumentation assertions remain.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T08:47:41.470Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "0c4c5e000d2dec77bd4c22f0ba34d2353c5f133c4049a5d0a0fd2584e823af8d"
+ }
},
{
"source": {
@@ -22033,19 +24192,25 @@
],
"priority": "P0"
},
- "status": "verified-superset",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-bc7adf7569796dc8",
"package": "next",
"file": "packages/next/tests/next-config.test.ts",
- "line": 170,
+ "line": 174,
"title": "adds a CSS manifest Turbopack loader",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3635270702bb7333ab86052d08b87177fb2bffc2bec0180570e7e7da16c782b8"
+ "sourceDigest": "6acfe4d189cfa974bcecaf2ad5713cb1d83eae6da099757699f4f6f2c8e9cf4d"
},
- "proof": "verified-superset",
- "reason": "The Next Turbopack manifest-loader assertions remain and the target adds the emitted-globals loader contract."
+ "proof": "approved-contract-change",
+ "reason": "The reviewed Next progressive-mode case preserves user JS rules and ESM manifest delivery. Ordinary CSS/SCSS/Sass files enter the stylesheet loader without requiring Master directive content; the ordinary rule excludes CSS Modules, generated output paths, and manifest queries. CSS Modules enter project context through a separate module rule. Explicit QA approval covers the exact case digest in the freeze review.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:12:20Z",
+ "reviewRef": "parity/freeze-migration-approval.md#three-contract-records",
+ "scopeDigest": "57b497573ed8e2a850c8dd5a6f8c833946fbcbb334b5885082736981a98794a1"
+ }
},
{
"source": {
@@ -22074,7 +24239,7 @@
"id": "rc87-5217c633cc9db1c3",
"package": "next",
"file": "packages/next/tests/next-config.test.ts",
- "line": 286,
+ "line": 287,
"title": "adds CSS manifest loaders and runtime aliases without the adapter when mode is runtime",
"runner": "vitest",
"kind": "test",
@@ -22103,18 +24268,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-91f24e279275cde6",
"package": "next",
"file": "packages/next/tests/next-config.test.ts",
- "line": 309,
+ "line": 331,
"title": "preserves an existing user instrumentation-client file behind the Master CSS runtime wrapper",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8889140f1c7907e77f928045733e1172bef13a804aa215afbf57206657833bae"
+ "sourceDigest": "93c8946aa2b3f6e9d25dda96a145617b53aa69ca223cb13b67c3658d9876653e"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/next-config.test.ts :: preserves an existing user instrumentation-client file behind the Master CSS runtime wrapper -> packages/next/tests/next-config.test.ts :: preserves an existing user instrumentation-client file behind the Master CSS runtime wrapper. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "5c3c28476457215cd30b30b9b716d6daec7708d712813ae4127132683856a6a0"
+ }
},
{
"source": {
@@ -22142,7 +24314,7 @@
"id": "rc87-2f48b55d70369cc0",
"package": "next",
"file": "packages/next/tests/next-config.test.ts",
- "line": 325,
+ "line": 347,
"title": "generates the runtime instrumentation wrapper as ESM",
"runner": "vitest",
"kind": "test",
@@ -22177,7 +24349,7 @@
"id": "rc87-f4413d9d2a8c6c7e",
"package": "next",
"file": "packages/next/tests/next-config.test.ts",
- "line": 342,
+ "line": 364,
"title": "resolves async virtual manifest modules before starting the runtime",
"runner": "vitest",
"kind": "test",
@@ -22212,7 +24384,7 @@
"id": "rc87-ee59493410e60ff5",
"package": "next",
"file": "packages/next/tests/next-config.test.ts",
- "line": 369,
+ "line": 391,
"title": "keeps sync virtual manifest modules working in the runtime wrapper",
"runner": "vitest",
"kind": "test",
@@ -22246,7 +24418,7 @@
"id": "rc87-30ae2d61246f7977",
"package": "next",
"file": "packages/next/tests/next-config.test.ts",
- "line": 395,
+ "line": 417,
"title": "returns the original config when disabled",
"runner": "vitest",
"kind": "test",
@@ -22276,18 +24448,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-fe8901f174085d14",
"package": "next",
"file": "packages/next/tests/next-config.test.ts",
- "line": 453,
+ "line": 429,
"title": "composes an existing Next adapter path with the Master CSS adapter",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f2ee2cd64b314d361aca30a604db06fb0ec08b000cc683aa38a4a40f410a52e1"
+ "sourceDigest": "a44c731c0a841218fcdce5faa31582d391e2c550132d7f262c942b6efeaf5335"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/next-config.test.ts :: composes an existing Next adapter path with the Master CSS adapter -> packages/next/tests/next-config.test.ts :: composes an existing Next adapter path with the Master CSS adapter. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "3cb581fb351bd84a011f147c06fa4e28d2fc5bf3d6c869e4cd8f971c1ac70b09"
+ }
},
{
"source": {
@@ -22311,18 +24490,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-5dc31ee125b79ae2",
"package": "next",
"file": "packages/next/tests/next-config.test.ts",
- "line": 474,
+ "line": 451,
"title": "composes NEXT_ADAPTER_PATH when no adapter path is configured",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f9c154bd7222a6954480644cfb88e83a840c7425aac8d6bd14004e194cb996e1"
+ "sourceDigest": "8bb84edc113e5ddec6cae4b1f3fee814de7099db631056d402885683b84a845d"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/next-config.test.ts :: composes NEXT_ADAPTER_PATH when no adapter path is configured -> packages/next/tests/next-config.test.ts :: composes NEXT_ADAPTER_PATH when no adapter path is configured. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "aba4b9d346633f0d38d976a1811994bec2fa62933e0c1b7c96e7663f792f3012"
+ }
},
{
"source": {
@@ -22345,18 +24531,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-4c05d082c3d2b807",
+ "id": "rc87-5a257d5426586008",
"package": "next",
"file": "packages/next/tests/next-config.test.ts",
- "line": 497,
- "title": "sets up static mode with Turbopack rules without adding a webpack callback",
+ "line": 474,
+ "title": "defaults to static mode with Turbopack rules without a runtime bootstrap",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a546eec2a2bba89f1012b6c37f2e4fe1c8f7c43aeae0e0c7c8709f4a19498165"
+ "sourceDigest": "8a1fe1b1006da9ba2b8abd218b1543cd9133bc7d5e10ab9ccbd4e0c6c43d1b10"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/next-config.test.ts :: sets up static mode with Turbopack rules without adding a webpack callback -> packages/next/tests/next-config.test.ts :: defaults to static mode with Turbopack rules without a runtime bootstrap. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f8a05689c3b40bdbe5af81eaeebd9d1fbe39d3969d1a8de7a91b72151f5c93a5"
+ }
},
{
"source": {
@@ -22379,18 +24572,30 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-34f37c5dee8956d6",
+ "id": "rc87-58466113d7ef359d",
"package": "next",
"file": "packages/next/tests/playground.test.ts",
- "line": 71,
- "title": "imports the global CSS entry as a Next config module",
+ "line": 56,
+ "title": "defaults to static CSS without browser runtime assets in turbopack",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8039b43dda2a1e5694c892b718e4ecdc10621672e924a8b82c41adcc91f7b655"
+ "sourceDigest": "635d148b8503594cfeba08bc758b270b8afcef8013d830e772159fe2e3a46677",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "turbopack"
+ }
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/playground.test.ts :: imports the global CSS entry as a Next config module -> packages/next/tests/playground.test.ts :: defaults to static CSS without browser runtime assets in turbopack. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "307215c642bee09405b6c39c84aeeed9faefc7500444788224dd273d5fe3cefc"
+ }
},
{
"source": {
@@ -22414,18 +24619,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-eacaf42de80ce6ab",
+ "id": "rc87-94ae65a723c0cb67",
"package": "next",
"file": "packages/next/tests/static-export-e2e.test.ts",
- "line": 53,
- "title": "emits every referenced hydration manifest directly into the export output",
+ "line": 57,
+ "title": "exports hydration assets and adopts them in the browser before dynamic updates",
"runner": "vitest",
"kind": "e2e",
- "sourceDigest": "e2f039bb9bb458e4656ccd9a8ab00e09d3f63f41430ef62ec049aec1ec7bc131"
+ "sourceDigest": "930dc6b227f4c7c2982933e868a9237b935cb4a966a6d4f190624c6b76e7c7f4"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/static-export-e2e.test.ts :: emits every referenced hydration manifest directly into the export output -> packages/next/tests/static-export-e2e.test.ts :: exports hydration assets and adopts them in the browser before dynamic updates. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "8f0354a852a3a98a209ada82061168d4e3c0262022b79bd9d06802e8771b86f1"
+ }
},
{
"source": {
@@ -22448,18 +24660,19 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-f7398622b00a5e61",
"package": "next",
"file": "packages/next/tests/static.test.ts",
- "line": 75,
+ "line": 89,
"title": "writes extracted CSS from source files including imported modules",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a314a55031d9dc4e6119f15b2761a7126fe07856ee676c95a761db3bc5549d43"
+ "sourceDigest": "45acd6b1343d3af2e8f57254ce4bf84dbd43f90c778477c9d43c7378da836875"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete case body for \"writes extracted CSS from source files including imported modules\". Only the output inspection changes from reading the entry alone to readStaticCSS, which reads that entry plus reachable relative imports in its current immutable stylesheet graph with cycle protection. It does not scan stale assets. Existing fixture, scan/loader actions, and all CSS inclusion/exclusion and pass-through assertions are retained; exclusions now cover the reachable graph. This preserves effective delivered-CSS coverage, without asserting historical single-file layout or byte identity. The complete Next static suite passes 11/11."
},
{
"source": {
@@ -22482,18 +24695,19 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-eb4fb7083521fe9d",
"package": "next",
"file": "packages/next/tests/static.test.ts",
- "line": 104,
+ "line": 213,
"title": "replaces @master/css imports for dev CSS chunks and preserves ordinary CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0b7678286c5670ed0ec412316e5e3555cc5be58c57d8efe75db113b68e89f12a"
+ "sourceDigest": "c40d1ceb99c1be8784aa0db23217e003c7399397b8433df46989f4021826ed65"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete Next CSS-chunk replacement case. Only four file reads change to readStaticCSS, which inspects the entry and reachable relative imports in its current immutable graph. The exact replacement import, absence of .main from the replaced chunk, and .main/display/color/theme-variable assertions remain unchanged. The full static suite passes 11/11. This preserves delivered-CSS assertions without claiming historical single-file layout."
},
{
"source": {
@@ -22516,18 +24730,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-b0de955f29213cf0",
"package": "next",
"file": "packages/next/tests/static.test.ts",
- "line": 146,
+ "line": 255,
"title": "prunes dev CSS chunks that import @master/css",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9741aeab74c3aa111640bcd9c0ee4d9ea02dcc3153aae33b9376a70e65b8276e"
+ "sourceDigest": "f9cef11a6de923a034fca6cd40e077c10031984f36b991c359f41c025dffdbbd"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/static.test.ts :: prunes dev CSS chunks that import @master/css -> packages/next/tests/static.test.ts :: prunes dev CSS chunks that import @master/css. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "cc1fa0eb33e9c1910d34d1a082465cf0fd8168c556c08a8cbcb47dbb3c8e539d"
+ }
},
{
"source": {
@@ -22550,18 +24771,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-7124a1251a981322",
+ "id": "rc87-bef21052a908494f",
"package": "next",
"file": "packages/next/tests/static.test.ts",
- "line": 182,
- "title": "adds output and managed CSS entry files as CSS loader dependencies for dev updates",
+ "line": 291,
+ "title": "tracks original inputs without adding generated outputs as watcher dependencies",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "689c901d2937b01494067398ba7acfb96bd5cf932c3f0caa18a49e6e9e452669"
+ "sourceDigest": "727b1c146bcd589a616ea93ee1f2c18fb03e7391afd7c638bae68c5d4cddcfaa"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/static.test.ts :: adds output and managed CSS entry files as CSS loader dependencies for dev updates -> packages/next/tests/static.test.ts :: tracks original inputs without adding generated outputs as watcher dependencies. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f5c55f9c2e71786b126b23bade3844abd37458e83612b58a871962a6caad6c9d"
+ }
},
{
"source": {
@@ -22585,18 +24813,19 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-881bb85795ca4198",
"package": "next",
"file": "packages/next/tests/static.test.ts",
- "line": 206,
+ "line": 315,
"title": "ignores app stylesheets with @theme when they do not import @master/css",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e16e26ef166354bc3883c4952500bf0537e1bafe80c06ee1e71b927cb35bb6c0"
+ "sourceDigest": "5fbf819ae98ced88633d04d0c9ae3815de861a50fb446e51a6d336e045cd0bb4"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete case body for \"ignores app stylesheets with @theme when they do not import @master/css\". Only the output inspection changes from reading the entry alone to readStaticCSS, which reads that entry plus reachable relative imports in its current immutable stylesheet graph with cycle protection. It does not scan stale assets. Existing fixture, scan/loader actions, and all CSS inclusion/exclusion and pass-through assertions are retained; exclusions now cover the reachable graph. This preserves effective delivered-CSS coverage, without asserting historical single-file layout or byte identity. The complete Next static suite passes 11/11."
},
{
"source": {
@@ -22619,18 +24848,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-f647fa76fa45bb93",
+ "id": "rc87-9fbde6cb16daf403",
"package": "next",
"file": "packages/next/tests/static.test.ts",
- "line": 224,
- "title": "lets the scanner loader feed an imported module into the scanner incrementally",
+ "line": 333,
+ "title": "lets the source loader publish an imported module while the CSS loader owns complete watches",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5298e7c41a13d65202cf331f67991bf7e30f0fc14a37fa28b2a4d90ed60e2076"
+ "sourceDigest": "077a45c29b8b2252440f9e50994c4097d868b211dd52a9b01815c0e8772e2117"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/static.test.ts :: lets the scanner loader feed an imported module into the scanner incrementally -> packages/next/tests/static.test.ts :: lets the source loader publish an imported module while the CSS loader owns complete watches. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "63181488bb6540dfd1531f23d0c011804629385201545c7067e290372eee1e04"
+ }
},
{
"source": {
@@ -22653,18 +24889,19 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-ae34a7e7d60def44",
"package": "next",
"file": "packages/next/tests/static.test.ts",
- "line": 246,
+ "line": 357,
"title": "does not scan excluded node_modules modules from the static loader",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a2b314e4ee518e27843489347f3fb1be3adf44ed96b5aa0557be145e106e7acb"
+ "sourceDigest": "60d61e68a5a25453c110baa2c758ab61329b9e515ae17367dfebdd1a532fec8b"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete case body for \"does not scan excluded node_modules modules from the static loader\". Only the output inspection changes from reading the entry alone to readStaticCSS, which reads that entry plus reachable relative imports in its current immutable stylesheet graph with cycle protection. It does not scan stale assets. Existing fixture, scan/loader actions, and all CSS inclusion/exclusion and pass-through assertions are retained; exclusions now cover the reachable graph. This preserves effective delivered-CSS coverage, without asserting historical single-file layout or byte identity. The complete Next static suite passes 11/11."
},
{
"source": {
@@ -22687,18 +24924,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-c936ed3d3cebc78c",
+ "id": "rc87-89d8170051967c64",
"package": "next",
"file": "packages/next/tests/static.test.ts",
- "line": 272,
- "title": "updates static CSS when Turbopack reruns the source loader",
+ "line": 383,
+ "title": "updates static CSS when Webpack reruns the source loader",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "81fd4e71b0f4ccb5ac5db14c843408b6537c6c096243344ab048951bf3aac1c6"
+ "sourceDigest": "f0e0417ad659f7564b7207d906168a3902ce8633a64926843a49bfcf87e6d9d8"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/static.test.ts :: updates static CSS when Turbopack reruns the source loader -> packages/next/tests/static.test.ts :: updates static CSS when Webpack reruns the source loader. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "250ce6c29f8b2c5f1bc87e8ab2610b22f838703f4173b33eede49c97fed442f7"
+ }
},
{
"source": {
@@ -22721,18 +24965,19 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-8f00b4e0b7f55c97",
"package": "next",
"file": "packages/next/tests/static.test.ts",
- "line": 301,
+ "line": 412,
"title": "updates static CSS when Turbopack reruns the CSS loader",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "11110a8e5cca741f0118c1d26c6388a996174d172d78030aa498e4b8af2c7e16"
+ "sourceDigest": "27ecf33db5d374cba310f61dddc72b989ae2e7730c0b62ead641a59f7fb05496"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete case body for \"updates static CSS when Turbopack reruns the CSS loader\". Only the output inspection changes from reading the entry alone to readStaticCSS, which reads that entry plus reachable relative imports in its current immutable stylesheet graph with cycle protection. It does not scan stale assets. Existing fixture, scan/loader actions, and all CSS inclusion/exclusion and pass-through assertions are retained; exclusions now cover the reachable graph. This preserves effective delivered-CSS coverage, without asserting historical single-file layout or byte identity. The complete Next static suite passes 11/11."
},
{
"source": {
@@ -22761,7 +25006,7 @@
"id": "rc87-42e1bd1243c512dc",
"package": "next",
"file": "packages/next/tests/stylesheet-loader.test.ts",
- "line": 36,
+ "line": 87,
"title": "derives native CSS from @master/css instead of hardcoding a package subpath",
"runner": "vitest",
"kind": "test",
@@ -22791,18 +25036,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-9028ebc1995bef78",
+ "id": "rc87-d27f05ed9cd53a65",
"package": "next",
"file": "packages/next/tests/stylesheet-loader.test.ts",
- "line": 50,
- "title": "derives native CSS from @master entry directives",
+ "line": 101,
+ "title": "keeps @master entry lightweight without importing package CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a85f202cb3ba81862ba1b14f926c865e9c76777ea2b514bf21960b63c293cc5d"
+ "sourceDigest": "79619598e3ec464ac1e1a016de3b8866f70fb5fe6714f2a9944b4ec03bd36f33"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/stylesheet-loader.test.ts :: derives native CSS from @master entry directives -> packages/next/tests/stylesheet-loader.test.ts :: keeps @master entry lightweight without importing package CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "ec1ef89beeb080939ac78b46b5e84a67ee1a2795d7790c09311d1ab14fc617d6"
+ }
},
{
"source": {
@@ -22827,18 +25079,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-f9c0eb4b3b8f2fbb",
"package": "next",
"file": "packages/next/tests/stylesheet-loader.test.ts",
- "line": 60,
+ "line": 111,
"title": "preserves native CSS and keyframes from imported Master entry graphs",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1f8b4e975fc9fec86ec18df93a2b9c9b0f6ec4f85f5ffba45275f104cae85f05"
+ "sourceDigest": "1721cb02a5023b7b4cabf34feef0b50d803fa4b58b68b2866cd60e320ca9a14a"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"preserves native CSS and keyframes from imported Master entry graphs\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:51:16.953Z",
+ "reviewRef": "parity/utility-registration-freeze-approval.md#approved-scope",
+ "scopeDigest": "9d1e903a4119747ae0be84558d9a92d5142e529572a3b13b609ad17e6a70286d"
+ }
},
{
"source": {
@@ -22867,7 +25126,7 @@
"id": "rc87-5a8ee152eff81176",
"package": "next",
"file": "packages/next/tests/stylesheet-loader.test.ts",
- "line": 85,
+ "line": 136,
"title": "leaves ordinary CSS unchanged",
"runner": "vitest",
"kind": "test",
@@ -22897,18 +25156,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-55b73f1c832fdb61",
"package": "next",
"file": "packages/next/tests/stylesheet-loader.test.ts",
- "line": 94,
+ "line": 145,
"title": "locally lowers @compose in CSS Modules without importing package CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3915fa8671163eb0cc144b406cdf4fd368996e749601cf822536cfe51ccf988a"
+ "sourceDigest": "f0a8299334e547956fc0913129b34ec48982648af8daaecff44a983c19d8a28b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"locally lowers @compose in CSS Modules without importing package CSS\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "48c4d561bd627c52e1aedfae9727fc5c93932ca4b1a34779ea35c1971860c49f"
+ }
},
{
"source": {
@@ -22932,18 +25198,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-72b32e8d8e81f786",
"package": "next",
"file": "packages/next/tests/stylesheet-loader.test.ts",
- "line": 121,
+ "line": 172,
"title": "locally lowers explicit @reference CSS Modules without importing package CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d5f6cabf8dc7d096ec2a65806ed8d3a2bbae3a70d6055307d22157d3925faa2f"
+ "sourceDigest": "5554aa18cf2bb182eef13a015e70b874c7f6c32d8e63708ca24cf710f4ffe118"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"locally lowers explicit @reference CSS Modules without importing package CSS\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "3652437f2d7330c95c2a923a236840a8e288cf7e54f98b25ef14220dcf51301f"
+ }
},
{
"source": {
@@ -22968,18 +25241,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-0ab81b21d1f50161",
"package": "next",
"file": "packages/next/tests/stylesheet-loader.test.ts",
- "line": 139,
+ "line": 235,
"title": "emits referenced default theme variables for page-level CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a66514e27f51015d3673a958491086b54c51838a5e072868941157c3b6633559"
+ "sourceDigest": "01efa6f04b79c289a466be4a9e8c57fc76d7fdc2809d335907550f5e4c5871c4"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"emits referenced default theme variables for page-level CSS\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "764f9ff3f6bdeda74aa5cbc1fc75b0adf6ed321223f23ff2207848b39c69f5b3"
+ }
},
{
"source": {
@@ -23004,18 +25284,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-bdad67c1e43d1886",
+ "id": "rc87-0edd975cbfed3450",
"package": "next",
"file": "packages/next/tests/stylesheet-loader.test.ts",
- "line": 159,
- "title": "dedupes referenced default theme variables already emitted by global CSS for page-level CSS",
+ "line": 255,
+ "title": "retains local resources when a discovered global entry is not guaranteed loaded",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "56c42de527875f8b76054bbe2bbef9a0d4e5eaee7a41890cb7f7541403f887dc"
+ "sourceDigest": "21ff69ee9a48b1c808ba857d182dbd4844e19057186f6d7128c43cb51054da76"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/next/tests/stylesheet-loader.test.ts :: dedupes referenced default theme variables already emitted by global CSS for page-level CSS -> packages/next/tests/stylesheet-loader.test.ts :: retains local resources when a discovered global entry is not guaranteed loaded. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "c3a08e411db44a92dccef8d5ac0bc3582ea7e36c463b5bd49786740b6e8eeb43"
+ }
},
{
"source": {
@@ -23039,18 +25326,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-fb72a22f3bdde978",
"package": "next",
"file": "packages/next/tests/stylesheet-loader.test.ts",
- "line": 182,
+ "line": 278,
"title": "keeps local style dependencies registered after invalid @compose and recovers on the next run",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2ae98ed79517b2ef58abec7e5f14a9fdf3c4b0d70cfe044426681f25929234d7"
+ "sourceDigest": "f785e2ced3e33bcc71332fd4a058f117f25ef6631c836110ccf33c573d1ffe99"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/next/tests/stylesheet-loader.test.ts :: keeps local style dependencies registered after invalid @compose and recovers on the next run -> packages/next/tests/stylesheet-loader.test.ts :: keeps local style dependencies registered after invalid @compose and recovers on the next run. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "69b3db7e4a2a3323c3714f50311b37924b91be5470667751b4600c1bed9653a7"
+ }
},
{
"source": {
@@ -23071,7 +25365,7 @@
],
"priority": "P0"
},
- "status": "verified-superset",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-bb811e6bf975c3ed",
"package": "nuxt",
@@ -23080,10 +25374,16 @@
"title": "matches generated CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6cf6ae349b1772019addebb1572bdd5bbf6825fee995cdf6aa9c5f80807c0a5b"
+ "sourceDigest": "948e001956418c2255b04617c81ad314e15a6756b6d441c300281c26dce9553b"
},
- "proof": "verified-superset",
- "reason": "The Nuxt pre-render CSS assertions remain and the target adds global variable ownership and placement coverage."
+ "proof": "approved-contract-change",
+ "reason": "Nuxt pre-render intentionally no longer injects a hydration manifest because this mode has no runtime. Generated component display/font-size assertions remain; delivered CSS is followed through its asset imports, owns --color-host, and HTML contains the generated token rule without duplicating its variable.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T08:47:41.470Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "ac6448114d6decb49495bcc081e2537b3a2dda274a192323dcf4014ca6e63aaa"
+ }
},
{
"source": {
@@ -23169,7 +25469,7 @@
],
"priority": "P0"
},
- "status": "verified-superset",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-60160a1512713e62",
"package": "nuxt",
@@ -23178,10 +25478,16 @@
"title": "matches generated CSS snapshot",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cf1b32532b0d0cae3092bf583438c9e7d4bfa156695b78ec99be4bccfe3014c7"
+ "sourceDigest": "cf793609619463bdc1d13c694cfddddf9fc0184dea17410922efc4d24fdf2227"
},
- "proof": "verified-superset",
- "reason": "The Nuxt progressive CSS assertions remain and the target adds global variable ownership and placement coverage."
+ "proof": "approved-contract-change",
+ "reason": "Nuxt progressive retains inline hydration, no external hydration attribute, and no JSON modulepreload assertions. Existing component CSS assertions remain; the target follows delivered stylesheet imports and separately checks token rule placement and one owner for its variable.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T08:47:41.470Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "ab2ec0fa9cbf62612e4fdeb9689d25efef7cabff5a53b0e0a0e0f65c287d8d17"
+ }
},
{
"source": {
@@ -23268,7 +25574,7 @@
],
"priority": "P0"
},
- "status": "verified-superset",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-060c3ad6820a18f8",
"package": "nuxt",
@@ -23277,10 +25583,16 @@
"title": "lets runtime utilities override global component layer CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "de25f1b167d1913e1be6709cc2385f66201efcdcbf2e6f1c9b8d405e31a71d93"
+ "sourceDigest": "bb2566d846b0475cf732bdcc47e776091f33b5cf68affc66121a4e807bf7f5ba"
},
- "proof": "verified-superset",
- "reason": "The Nuxt runtime cascade assertion remains and the target also verifies emitted global variables stay out of the runtime stylesheet."
+ "proof": "approved-contract-change",
+ "reason": "Nuxt runtime still waits for and asserts display:block overriding component CSS. Additional assertions require the generated fg-host rule in the runtime stylesheet while keeping its externally emitted --color-host variable out of that stylesheet.",
+ "approval": {
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T08:47:41.470Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "9afccd306db64580159324e39fa016d58d8f2b37cb885760c5f6f959101482a7"
+ }
},
{
"source": {
@@ -23303,18 +25615,19 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-0d2143fc5ddcd155",
"package": "nuxt",
"file": "packages/nuxt/tests/static.test.ts",
- "line": 13,
+ "line": 14,
"title": "should contain stylesheet link and CSS with specific class",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "87d39c1954106158bc0eb7948c2c8d6a57ab14a98561140e8732203ae6caacfa"
+ "sourceDigest": "71edf48132fff9cd1529255a58042718e495c90c05b443151455c706bb14830e"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete Nuxt stylesheet case and fetchDeliveredStylesheet helper. The linked entry and its reachable fixture imports are fetched from the running Nuxt server with cycle protection; no stale asset-directory scan is used. Every original link, type, .box, display:flex and font-size:1em assertion remains. Additional assertions cover scoped .probe selectors, both mode variables and removal of compiler-only reference/scratch markers. The static suite passes 2/2, including real-browser computed colors for both modes. This preserves delivered-CSS coverage without claiming a single-file layout."
},
{
"source": {
@@ -23406,7 +25719,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-e26ee2198e53ea9b",
"package": "preset",
@@ -23415,9 +25728,16 @@
"title": "renders representative classes through the native Rust engine",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "630589ccff44fb22e5cfb26b2cdfed05135e31f9f5a1598320cf96709a4b72a6"
+ "sourceDigest": "82a14152ac10253e7f08dafe737b26b0be760386084af95eb41076f6fa7c13f1"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"renders representative classes through the native Rust engine\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "d39c782b0531f38a2587dbd11028de1a69eaa0198ccddc2305c0ba0bef4af1be"
+ }
},
{
"source": {
@@ -23711,7 +26031,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-f9c577219c15b646",
"package": "runtime",
@@ -23720,9 +26040,16 @@
"title": "complex",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "117bfa4f0f85db1045132416dd9616d2418727855dc43244b7f4ae673861cd67"
+ "sourceDigest": "c6474730cc899821b19fb943eb94fc584b0941b4909c7a2fcdbc3b5388acbd92"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"complex\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "39a5a4b0280789a24da090501fcd29d08992f3eb9bf607ba3b6b82b86aec0b49"
+ }
},
{
"source": {
@@ -23744,7 +26071,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-446b3234ab1cf237",
"package": "runtime",
@@ -23753,9 +26080,16 @@
"title": "disconnect clears counts and observe rescans the current DOM",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "b2dac8681206673cd08701736c42c63a8cb69bc706526855686640ca75f402cf"
+ "sourceDigest": "1a4cf72881bdf0db91d706e13a9dde04b1f6508c3c7ca550917384264e3dc11d"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/edge-cases.test.ts :: disconnect clears counts and observe rescans the current DOM -> packages/runtime/e2e/edge-cases.test.ts :: disconnect clears counts and observe rescans the current DOM. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "28f824e399b2686bedc58dd1ae1b4e1f5495a7171944e4fb99e38f0220a52e6e"
+ }
},
{
"source": {
@@ -23777,7 +26111,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d8846c51fa3e2af2",
"package": "runtime",
@@ -23786,9 +26120,16 @@
"title": "mutation removals keep counts immediate and retain CSSOM rules after settle",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "1436a4d3c57c13288b19581f1ac0185fdcf424eeaae1414e9d45226c16e0b6ef"
+ "sourceDigest": "7e0c4f0263b69d766b925974acfaa57458d36db837e37285cf18f0b72a8cf985"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"mutation removals keep counts immediate and retain CSSOM rules after settle\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "78dd449e13e2fb2580561fb3fdc9c8b4af47d846f2431600034e5543bd158894"
+ }
},
{
"source": {
@@ -23811,7 +26152,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-48a1ad4e356801ba",
"package": "runtime",
@@ -23820,9 +26161,16 @@
"title": "mutation removal flush keeps remaining native CSSOM references valid",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "42b26757ad454928e6f02bf55a98a275bffaf8714621c37d5b6e3be682bd1f2a"
+ "sourceDigest": "fcd7e548c794be0e8ef59302c03b7a318fc9a6fa15620f4c9b75c304df34df90"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"mutation removal flush keeps remaining native CSSOM references valid\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "762eb5f20d8f9a2658e30936008eb2e3844d8e7bedaaf4b3ab2f08202092ea11"
+ }
},
{
"source": {
@@ -23845,7 +26193,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-234d591dd8aabd90",
"package": "runtime",
@@ -23854,9 +26202,16 @@
"title": "re-adding a retained class cancels retained cleanup",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "d914ef996bf6561932c02d8342328f1ca604fd4bef2046996b715509dc66523a"
+ "sourceDigest": "9056290f7ae9da6f5199867aefa5b2ba9a43b51410b260ef82d696373e580312"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"re-adding a retained class cancels retained cleanup\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "0a9b539af4e710dea6c4e38e7bebdb3aadc46883ebe052ad4e825ad6560e1ff0"
+ }
},
{
"source": {
@@ -23878,7 +26233,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-9533b10158c80bd7",
"package": "runtime",
@@ -23887,9 +26242,16 @@
"title": "direct remove deletes retained CSSOM rules synchronously",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "712658b2709068f140555a4f3c333c7fef732bb6ae287068e0f89c76d309d9df"
+ "sourceDigest": "ead180946126478e8b6b2235310892a3c8714add15d735ffc19e61a92912f979"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"direct remove deletes retained CSSOM rules synchronously\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "163485dada9571d6365dfcc7c200ae6e94427535d8d5e497663e4955dcb14d5e"
+ }
},
{
"source": {
@@ -23912,7 +26274,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-5e8982a988021b9c",
"package": "runtime",
@@ -23921,9 +26283,16 @@
"title": "retained hard-limit cleanup returns to soft target and preserves active classes",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "9e7cf59eec42b38d73be1e51e734d2968ff2775d395a21403d5be716eb709acd"
+ "sourceDigest": "1e415886a2ff31004e0992793794b658d328c758bcb54182a07448f86ecadb88"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"retained hard-limit cleanup returns to soft target and preserves active classes\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "8d63d7e2270cdfe8f0d8c6a1d851ba2dcd1028288eb5babd4e8208ace43dbd1a"
+ }
},
{
"source": {
@@ -23946,7 +26315,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-ce04b418651dfdbb",
"package": "runtime",
@@ -23955,9 +26324,16 @@
"title": "mutation removals are canceled when a class returns before flush",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "8b3c26c19442e2a4dd425b18f86ecd19cf93a330e25b66b7b86d70fe286d704c"
+ "sourceDigest": "dba7ce6b3bff1470f445f6ab154bdda5218beda944f490afa35be0f71996b442"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"mutation removals are canceled when a class returns before flush\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "b4174b0c3f2d51357b021cefc61b655c78810cb7c4741f9fc235864a24c8c687"
+ }
},
{
"source": {
@@ -23980,7 +26356,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-044d450087fe9f83",
"package": "runtime",
@@ -23989,9 +26365,16 @@
"title": "direct ensureClassRules and deleteClassRules stay synchronous",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "b6054757145e919e41442b1b9ef6725478201c7ecdc4f9031d00716fcb402e3f"
+ "sourceDigest": "072e48139f49eaba5089660c3ba016c134c97aef053456a6b98f9b31391fd2ec"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"direct ensureClassRules and deleteClassRules stay synchronous\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "3c9826d6bdb104a25f17dc28e59a6ae52c9642e61dc9153a50ba5b6a38a309e7"
+ }
},
{
"source": {
@@ -24014,7 +26397,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-20031249c83720ea",
"package": "runtime",
@@ -24023,9 +26406,16 @@
"title": "observer-added cold classes update counts immediately and flush rules before paint",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "f21d4199cac9b506451cb5350b1cd0646caba86cac241b77ae54e51fb6e382e3"
+ "sourceDigest": "82b7c86a60c4c324f060e611724c224e7db449432fdfa758ce8c9f7f9b6d7c0b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"observer-added cold classes update counts immediately and flush rules before paint\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "be06e24ce7ebd5103ab271a223fe34e38f401088b200b76dc7adce80e5cd0e76"
+ }
},
{
"source": {
@@ -24048,7 +26438,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-aa64f308290aae54",
"package": "runtime",
@@ -24057,9 +26447,16 @@
"title": "observer-added retained classes are reused immediately",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "7131df434c8d476797f6c3a14f7a20d344b3cec79bb2f59aee9d5109bcbac12c"
+ "sourceDigest": "335e02c9ae35b3af16ed2e5087de8ae9e43214f9958662c43113d9e2c1a1949b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"observer-added retained classes are reused immediately\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "a68f253025d1cb73b3c47c73f100f4fb3d644db359537429f2e41d84e3188802"
+ }
},
{
"source": {
@@ -24115,7 +26512,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-007b3ff1d80bab7f",
"package": "runtime",
@@ -24124,9 +26521,16 @@
"title": "disconnect and dispose clear pending mutation additions and removals",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "62fbb0e23662318005f0cb45f1dbfd0f0cbf8331b14e34adff2865f3dcbed051"
+ "sourceDigest": "bc36f4a9c40f5ab6669f951b62d54c924129c94c0c166a98f3fcfe1fad82d9e4"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"disconnect and dispose clear pending mutation additions and removals\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "f14db8894e5396ee17d15ad6f3187c4a8049441c324030957c1f8fe5ded52362"
+ }
},
{
"source": {
@@ -24187,7 +26591,7 @@
"id": "rc87-abc7335b2382576a",
"package": "runtime",
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 76,
+ "line": 60,
"title": "progressive hydration without a manifest rebuilds with runtime CSS",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
@@ -24217,19 +26621,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-93af2958154d0d1f",
"package": "runtime",
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 102,
+ "line": 86,
"title": "progressive hydration with a mismatched manifest rebuilds with runtime CSS",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "1e56b74b934b3410027ef789da4a1a736b987ce40243391f2df2a7a22fa79fef"
+ "sourceDigest": "9d23d2fdf0fc4b0200c2b419eb001011d4108293ff9267d510b345925230c5b2"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/runtime/e2e/edge-cases.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: progressive hydration with a mismatched manifest rebuilds with runtime CSS -> packages/runtime/e2e/hydration-edge-cases.test.ts :: progressive hydration with a mismatched manifest rebuilds with runtime CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "e99b5fe8148f4b5bf55bb413efb2f1bad645bb59665fe5bca079169709ba55c6"
+ }
},
{
"source": {
@@ -24252,19 +26662,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-99f67a67e5155f1a",
"package": "runtime",
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 128,
+ "line": 112,
"title": "progressive hydration with an empty manifest rebuilds with runtime CSS",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "42b30fdb924eb54de1976ee5ca38cbf62d684927ad6ca3980d6c45b4d518b9b3"
+ "sourceDigest": "5f70f0d7e0fa3ce5a1554398311ddb90a08f11da1303785acc33b0b01b1afa96"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/runtime/e2e/edge-cases.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: progressive hydration with an empty manifest rebuilds with runtime CSS -> packages/runtime/e2e/hydration-edge-cases.test.ts :: progressive hydration with an empty manifest rebuilds with runtime CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "b15699cc1f0bc9c66776f25772a1cb4f82161cbc4ae35557317ac0e539f749f6"
+ }
},
{
"source": {
@@ -24288,19 +26704,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-4146e1c67cb5ed87",
"package": "runtime",
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 157,
+ "line": 142,
"title": "progressive hydration uses hydration manifest and retains removed hydrated classes",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "664dde1f200bdb4682a352f2eaf577bae6e8e9d3c7e557c200864d1893e085b5"
+ "sourceDigest": "3cb1c7a1bb0929c99db76960bb9ca81400ee6948ba9f3dc2bfcf7c1365723a30"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/runtime/e2e/edge-cases.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: progressive hydration uses hydration manifest and retains removed hydrated classes -> packages/runtime/e2e/hydration-edge-cases.test.ts :: progressive hydration uses hydration manifest and retains removed hydrated classes. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "cb65590fbf149adfba87cb53d487eedbce645dfcc891efdfdc3ee01210a3a4c1"
+ }
},
{
"source": {
@@ -24323,19 +26745,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-dd785f5a00080d1c",
"package": "runtime",
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 226,
+ "line": 211,
"title": "progressive hydration imports an external style hydration manifest",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "40c713c41d230220cf249eb8b1d6786b4f33b8579871ce716ed4406a042f1e76"
+ "sourceDigest": "98d4af3e15e524882d0eb43fbccb41329ce9a1b38522bb845a71041ccc3aa9fb"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/runtime/e2e/edge-cases.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: progressive hydration imports an external style hydration manifest -> packages/runtime/e2e/hydration-edge-cases.test.ts :: progressive hydration imports an external style hydration manifest. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "ce87737d9f84536f8bae8ef1a8cacf2154c631ccce2800c80c69e7edd017155b"
+ }
},
{
"source": {
@@ -24363,7 +26791,7 @@
"id": "rc87-c35f4133a3cc46b5",
"package": "runtime",
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 475,
+ "line": 452,
"title": "runtime start does not import a hydration manifest without a runtime style source",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
@@ -24398,7 +26826,7 @@
"id": "rc87-2f31722fba4cd1fa",
"package": "runtime",
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 507,
+ "line": 484,
"title": "progressive hydration fails open when an external style hydration manifest import fails",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
@@ -24428,19 +26856,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-5bd3bd774f2c4703",
"package": "runtime",
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 593,
+ "line": 570,
"title": "explicit hydration manifest wins over external DOM discovery",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "50e104544dfebccc46dfd26184113b054908e813d9eb62ed9066cffd7fd76776"
+ "sourceDigest": "e1bd52902099bc5ef432080bb1766ec2f56fbed98188b9891a8c82af54a3f5cf"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/runtime/e2e/edge-cases.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: explicit hydration manifest wins over external DOM discovery -> packages/runtime/e2e/hydration-edge-cases.test.ts :: explicit hydration manifest wins over external DOM discovery. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "aa229d29eafd90e8cce5ba00e826841ae82e07d4bf1eb56a3dfbfa329ec55055"
+ }
},
{
"source": {
@@ -24464,19 +26898,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-820ed52581c5186c",
"package": "runtime",
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 632,
+ "line": 609,
"title": "progressive hydration matches bucketed theme variables",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "7787a60a62733e6195291720952f34d8ee0bdd09f09d05a958950c2ef3454d95"
+ "sourceDigest": "548bf45a2068af0ed45bf5947fd429277516fee60df26dbc4ccb1cbb2585b8b2"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/runtime/e2e/edge-cases.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: progressive hydration matches bucketed theme variables -> packages/runtime/e2e/hydration-edge-cases.test.ts :: progressive hydration matches bucketed theme variables. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "384267ac3d3c68d032bb639d7d08685e7b3701863e7849f58d63a39749fe0452"
+ }
},
{
"source": {
@@ -24500,19 +26940,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-3c0c571ac1932746",
+ "id": "rc87-a8de2822faa035a1",
"package": "runtime",
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 662,
- "title": "progressive hydration matches theme variable buckets by key",
+ "line": 639,
+ "title": "progressive hydration rejects reordered theme variable buckets",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "553c5b10bed5644764116787a5deb4a95015872e42f9676744716d2598f39e30"
+ "sourceDigest": "e0512488ee4f76a8b8877cb9647e54bb3241078f500255a63ac5c0fb615fdd61"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/runtime/e2e/edge-cases.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/runtime/e2e/edge-cases.test.ts :: progressive hydration matches theme variable buckets by key -> packages/runtime/e2e/hydration-edge-cases.test.ts :: progressive hydration rejects reordered theme variable buckets. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f5000cb9b15167774cae81c90e761dd1c922b2ac39b9da6761ee6714293c2926"
+ }
},
{
"source": {
@@ -24535,19 +26981,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-56ba13b0f3001a60",
"package": "runtime",
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 702,
+ "line": 679,
"title": "removes shared alias variable dependencies when classes disappear",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "f7b9e2e8bdee7f72709954dcd90c58e5405cd406f5f775eb827072c01875da56"
+ "sourceDigest": "90d6b1890baa6753cea33909b550c96b79ec0b61015f2cf17146201c6d29f15c"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/runtime/e2e/edge-cases.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: removes shared alias variable dependencies when classes disappear -> packages/runtime/e2e/hydration-edge-cases.test.ts :: removes shared alias variable dependencies when classes disappear. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "c79227b715d4857cbab684ee21f13a70cdfcba0720a55b0e99cf36c0b7b53fed"
+ }
},
{
"source": {
@@ -24571,19 +27023,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-57df4f677d5a9520",
"package": "runtime",
"file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 782,
+ "line": 759,
"title": "inlines variables without runtime theme counts",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "853607bc97d2402f3d9641b535f1e15dbe54a62454903512b6b55c1052ce0453"
+ "sourceDigest": "ae6cc5e65a9fd208e8c3919f14c8a5936432b461131cd19e85d17cb2be868111"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/runtime/e2e/edge-cases.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/runtime/e2e/edge-cases.test.ts :: inlines variables without runtime theme counts -> packages/runtime/e2e/hydration-edge-cases.test.ts :: inlines variables without runtime theme counts. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "69dd55386402b7fc97770cf27cbfb821d5520192cc1a16631484b9447f8c9d4b"
+ }
},
{
"source": {
@@ -24606,7 +27064,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-e6459f3d31cfae86",
"package": "runtime",
@@ -24615,9 +27073,16 @@
"title": "uses split bundled preset manifest",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "b1fdbf8531dc33d5b233b681dda94e11b22ff63a17e5254e02c7804a317e1f7b"
+ "sourceDigest": "53db942036f8dfa6d8ce4e67a8f3eeea7614cbfff041241ef46b799e33b72bac"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"uses split bundled preset manifest\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "1943e57eb05ff2e4e0328544bdf029f216b4d5b87808be50fbdcf535a43a0eee"
+ }
},
{
"source": {
@@ -24640,7 +27105,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-aa9f904b5b77da78",
"package": "runtime",
@@ -24649,9 +27114,16 @@
"title": "uses modulepreloaded default manifest",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "643039c2daca54077274de8373a51156df566bfd9a933a9ca0cfdd99feca098a"
+ "sourceDigest": "5a3fee48182a3fde9d4b85a99be9b5849d2b33576be1d069d15703abb9040a1b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"uses modulepreloaded default manifest\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "a684c950b4c203553ce02532414f66ea97aa5fe1ce403296886ec821c35f4569"
+ }
},
{
"source": {
@@ -24674,7 +27146,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-4866e126c81aecc5",
"package": "runtime",
@@ -24683,9 +27155,16 @@
"title": "ignores global manifest override",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "3de0a8111c78155734b3c2cdda940af53f5201e678f621a5dcaaa80a1720179a"
+ "sourceDigest": "e794b3353b951a079b8b592e41d6144b7b7c56c4967caa9127f7c10e216ead79"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"ignores global manifest override\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "acfda0719d8ce500a3e5c81036f24d2536ee4818f22041449a51f885a44feadf"
+ }
},
{
"source": {
@@ -24776,7 +27255,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-c90242da5283c6bd",
"package": "runtime",
@@ -24785,9 +27264,16 @@
"title": "expects the animate token output",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "839a03cf67e6fe8e335719f45e4344d52eab718b4945c944682bbf29cf6a5e2a"
+ "sourceDigest": "4acb45eb87094c4d8cea24d6d6c012ee64409ec55be4d775467d20d68cb06db5"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"expects the animate token output\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "1c4646e79e3e79e725358d249da995658b905627ca2eba49f51efadf83dd9de3"
+ }
},
{
"source": {
@@ -24942,7 +27428,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-15f40a5319465c15",
"package": "runtime",
@@ -24951,9 +27437,16 @@
"title": "dispose on progressive",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "54068fe8602f8692419359d643e396bda6f7f67d8b62a2f54c4bccae589aedce"
+ "sourceDigest": "52e33d19d6c9b402a73d2bbf5597ad5f863e57f52f7e7cbc625dfa26c1f927b3"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"dispose on progressive\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "83e67a94f89b2e17083d4800ccae3ffe6e8169601a5a589ebd3130912c3c06fb"
+ }
},
{
"source": {
@@ -25044,7 +27537,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-1d16d45477ca8574",
"package": "runtime",
@@ -25053,9 +27546,16 @@
"title": "inserts functional pseudo-class selector aliases into native CSSOM",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "f9723023ec1728039814883e25bd804f15ff04e3d37898ca6b3fec8a12abf6cb"
+ "sourceDigest": "51a937cf74965cf747812aa7321a4011925817ce737e39b3896d917576ee23f8"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/lifecycle.test.ts :: inserts functional pseudo-class selector aliases into native CSSOM -> packages/runtime/e2e/lifecycle.test.ts :: inserts functional pseudo-class selector aliases into native CSSOM. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "70fc928207b57033bc0f4b361598dcef2c824cd556170ffd63b5ac2ca7b92488"
+ }
},
{
"source": {
@@ -25146,18 +27646,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-24d1ba25ea426f17",
+ "id": "rc87-2aa23782268a878a",
"package": "runtime",
"file": "packages/runtime/e2e/lifecycle.test.ts",
"line": 203,
- "title": "generates browser native declarations through CSS.supports fallback",
+ "title": "preserves native declarations independently of browser support",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "ea31e9c9f578b759317605f1506b9fe200757b09a2a1be2fb241ac8f262355f3"
+ "sourceDigest": "0ebddf6a3ebf4f957e83da9b0ba317d5f1d7966cdd22158017b133c500753524"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/runtime/e2e/lifecycle.test.ts :: generates browser native declarations through CSS.supports fallback -> packages/runtime/e2e/lifecycle.test.ts :: preserves native declarations independently of browser support. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "80fad8659c416814a17674303b852478910bc483ec84c853ba111922bfe25caa"
+ }
},
{
"source": {
@@ -25181,18 +27688,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-926f3f474304ded0",
"package": "runtime",
"file": "packages/runtime/e2e/lifecycle.test.ts",
- "line": 250,
+ "line": 252,
"title": "hydrates progressive static theme variables and keyframes",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "5fc6c8a8ae7d84c16a631e5d526c5d13519ab46c8ad100556d857f74a8e34d2b"
+ "sourceDigest": "50fc27e1ff2b694b00896a724085d375e588a524d81ca4f5118da8cbc810e46b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/lifecycle.test.ts :: hydrates progressive static theme variables and keyframes -> packages/runtime/e2e/lifecycle.test.ts :: hydrates progressive static theme variables and keyframes. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "e94b7c9da1d892370e1ee6018ef24e7931544461a2ee4b6ff7b2eb3e1506198c"
+ }
},
{
"source": {
@@ -25219,19 +27733,19 @@
"id": "rc87-19ccc0505d60d982",
"package": "runtime",
"file": "packages/runtime/e2e/lifecycle.test.ts",
- "line": 288,
+ "line": 290,
"title": "registers emittedGlobals counts on an existing runtime",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "657727f550badd476e66a660280ff8419d3b03b6ce494cfada7ec75189957a27"
+ "sourceDigest": "16dc9856f98b32f5029bc2acc9fdf25a5e3f2103209bc1b49a624aec06645cfc"
},
"proof": "approved-contract-change",
- "reason": "The runtime emittedGlobals case now verifies referenced resource removal and concurrent count merging with concrete globals while retaining same-instance and registration-count coverage.",
+ "reason": "Runtime emittedGlobals still returns the same instance and registers variable/animation counts. The target uses an actually referenced named token and animation, verifies both resources before registration, preserves their utility rules afterwards, and removes only their duplicate resource definitions. Concurrent-start count merging is tested separately and is not claimed as an assertion inside this case.",
"approval": {
- "approvedBy": "Aron ",
- "approvedAt": "2026-08-01T12:53:04Z",
- "reviewRef": "codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c",
- "scopeDigest": "ed1ea81e04702dd01c92be68b0059b52f438072d7ed610408a4e4dae4ede5d3a"
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T08:47:41.470Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "6b041d84f9ac375d74f7c422d36dcdb36fb78795ad530897212043cd81ccf2a4"
}
},
{
@@ -25259,7 +27773,7 @@
"id": "rc87-71714679cc4c1b82",
"package": "runtime",
"file": "packages/runtime/e2e/lifecycle.test.ts",
- "line": 387,
+ "line": 389,
"title": "registers emittedGlobals counts once on a new runtime",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
@@ -25320,7 +27834,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-e4168bcf06ac6da0",
"package": "runtime",
@@ -25329,9 +27843,10 @@
"title": "components",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "b65f2704e23810480ecd6b959006f675cffcd610e1562147389f37cf24f0df12"
+ "sourceDigest": "49dc5fcf8270a53a732154295972babf34bf78d184f27f15ce82e9728aa1cf09"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "All original progressive component CSSOM, rule order, text, selectors and media-rule assertions remain unchanged. The target additionally asserts that hydration actually selected progressive mode before examining those rules."
},
{
"source": {
@@ -25353,7 +27868,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-d07375d346c8325d",
"package": "runtime",
@@ -25362,9 +27877,10 @@
"title": "comprehensive",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "e1f651997d508585f03f8bbdaefd72923e730db67dc098e49f4fcce0727efb13"
+ "sourceDigest": "19b246f6e3c0ff6b57de0de44c41649d2c2e3f4eec7f5cf1b09fc61399c37dbf"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "All original comprehensive progressive layer names and native rule-count assertions remain unchanged. The target additionally asserts that hydration actually selected progressive mode before examining those layers."
},
{
"source": {
@@ -25386,7 +27902,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-0440c9b8a8beccac",
"package": "runtime",
@@ -25395,9 +27911,16 @@
"title": "prerender",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "6cb0a210343555de62691f62afab0175e87fc0e8f52b06e9c9c232dcb3d3aea6"
+ "sourceDigest": "dac79565dffe4a58a21ec251e25af43d3f3454c6b020f94310a6c485cbc844da"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/progressive/default-mode.test.ts :: prerender -> packages/runtime/e2e/progressive/default-mode.test.ts :: prerender. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "e9a4feff802a9f45180ea43dca40da0a8f396c0a062031bee0188bfab4a5ba6d"
+ }
},
{
"source": {
@@ -25419,7 +27942,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-797e835ca45531f0",
"package": "runtime",
@@ -25428,9 +27951,16 @@
"title": "prerender",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "33ab393cf4d4c2b9e7a5ce1785420c3cb753d990975080a5dff99a91af094278"
+ "sourceDigest": "635e97bc0cdccae649695a7378328f84b2ba6d33ac57b2cf85593ad71eb5b2d1"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/progressive/media-mode.test.ts :: prerender -> packages/runtime/e2e/progressive/media-mode.test.ts :: prerender. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "ef6bac0555dff524571fafb968bc32bbfe8e7cf04462ae01dba8220ae5e19904"
+ }
},
{
"source": {
@@ -25453,7 +27983,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-408a34c01bcc8aaf",
"package": "runtime",
@@ -25462,9 +27992,16 @@
"title": "selectors",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "39043ed26a035969f53a7ffe283f208a311a4207dfe74a37fbb59e712219a88b"
+ "sourceDigest": "b253389ed36195a6c5e3e68f5382ae9af6f668e8ae73813f0845ff53efdb3757"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/progressive/modes/index.test.ts :: selectors -> packages/runtime/e2e/progressive/modes/index.test.ts :: selectors. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "27e679a839ee42b07646416801d3653247fdfea1c7a40a83d20a773d49628009"
+ }
},
{
"source": {
@@ -25487,7 +28024,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-7a7b9fa25c74a52e",
"package": "runtime",
@@ -25496,9 +28033,16 @@
"title": "selectors",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "4c9a5a254cbbe15ce463d6e506d53c5fbdae9517c341f9850841d67bfb8e3592"
+ "sourceDigest": "b7e142f12351fc4306fd282604d49198536044182d29c387bb0a0cf0b30a8709"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/progressive/selectors/index.test.ts :: selectors -> packages/runtime/e2e/progressive/selectors/index.test.ts :: selectors. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "2d57f62aded4ae2d2a1f05c0d267abcc96024d5e1986cf1b14bc7dbc824e938e"
+ }
},
{
"source": {
@@ -25521,7 +28065,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-fcb1f769e9b365f4",
"package": "runtime",
@@ -25530,9 +28074,10 @@
"title": "theme",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "cc1e1a92a609dce11a9319464ec8590edfde4a1cc450287e77ce29cef4a15446"
+ "sourceDigest": "520d6b3901024cd825995e0229695d73cff870ae9c77b88736f8ac8c8a84f78f"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "The original progressive theme token-count assertion remains unchanged. The target additionally asserts that hydration actually selected progressive mode before examining those token counts."
},
{
"source": {
@@ -25556,7 +28101,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d8f85d3df48bdcf5",
"package": "runtime",
@@ -25565,9 +28110,16 @@
"title": "keeps default variable buckets before mode buckets when CSSOM buckets are inserted later",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "040304fa50d7850f0fc3bbbebe2c882bf28fc46cc536ba5dce41fdc63c6e6789"
+ "sourceDigest": "de0b1f6bf7be7f2a7d2bfd2150452ee7f228d18459e1b476a9e0c7c51610b254"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/theme-layer-order.test.ts :: keeps default variable buckets before mode buckets when CSSOM buckets are inserted later -> packages/runtime/e2e/theme-layer-order.test.ts :: keeps default variable buckets before mode buckets when CSSOM buckets are inserted later. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f15e2a461955cc8d5acc5cdb62d3bb040699874a7379d4aa483d76726306931b"
+ }
},
{
"source": {
@@ -25590,18 +28142,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-43ff1e405dc3ffac",
+ "id": "rc87-64997ee47e90cc48",
"package": "runtime",
"file": "packages/runtime/e2e/variables.test.ts",
"line": 28,
- "title": "async ({ page }) => { await init(page, '', { variables, modes, modeTrigger: 'class' }) }",
+ "title": "async ({ page }) => { await init(page, '', { variables, modes }) }",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "b8c63034c67bbbf1ee22d53d24d15aa5252566eb8066ecbe737b1bca893c8f7e"
+ "sourceDigest": "faea9e27f4626293d5900580917475319d5b439575c89f3ccb474718edb5dd80"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/runtime/e2e/variables.test.ts :: async ({ page }) => { await init(page, '', { variables, modes, modeTrigger: 'class' }) } -> packages/runtime/e2e/variables.test.ts :: async ({ page }) => { await init(page, '', { variables, modes }) }. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "39850a198a912540eda701f827a0ecdc9a0a0230d6ec83668e651cc6489133d1"
+ }
},
{
"source": {
@@ -25624,7 +28183,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-bab35476046dc1a0",
"package": "runtime",
@@ -25633,9 +28192,16 @@
"title": "expects the variable output",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "b522deecd7ed5b8b0c843448f7e48df5565ce71b900c6068910f0e8849120add"
+ "sourceDigest": "ef3b48d4daaf76459cf9e3af917c99834b34c8a43cba4d2705025fe3fbb2ae50"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/runtime/e2e/variables.test.ts :: expects the variable output -> packages/runtime/e2e/variables.test.ts :: expects the variable output. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "131bd2b03f1ac943b25cea93a1fc04b64fd6d53fed8bd4a8805a624ea849eed8"
+ }
},
{
"source": {
@@ -25658,18 +28224,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-3b5381fe7ffcfeed",
+ "id": "rc87-88346a45355ab2e1",
"package": "runtime",
"file": "packages/runtime/e2e/variables.test.ts",
- "line": 155,
- "title": "sets native color-scheme on local class-triggered mode islands",
+ "line": 156,
+ "title": "inherits explicit native color-scheme without an engine mode side effect",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "c0c31660dfba9d9cf213172574f30f63f198c411ae76f82c5feb5cefb79793b2"
+ "sourceDigest": "f8a424a36e68a81f5c7e0cd7ce3e45dd69d8f3b857c063971e26664008f44882"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/runtime/e2e/variables.test.ts :: sets native color-scheme on local class-triggered mode islands -> packages/runtime/e2e/variables.test.ts :: inherits explicit native color-scheme without an engine mode side effect. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "139d4db6a11ed2952f1e9cc77eea8e691fe15959fb89b494b3c9654471a32bb3"
+ }
},
{
"source": {
@@ -25790,7 +28363,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-7c76d636d09bcaf2",
"package": "runtime",
@@ -25799,9 +28372,10 @@
"title": "module evaluation / compile-only smoke",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e6dfe03cc981f48de4fbdf58e6b64124fd17b366ce2615d3e161f97820c8e680"
+ "sourceDigest": "9c58b6de1900c824833d8a9c8226786fb8322efd4e7538c6b5c65ab109fee179"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete runtime compile-only smoke source before and after the migration. Only the input manifest gains the required languageVersion: 3 field. Both decorator calls, custom-element refresh, ShadowRoot selection, emitted globals and type contracts remain unchanged. The runtime type-check includes this file and passes."
},
{
"source": {
@@ -25955,7 +28529,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-4e74f806433ac2c5",
"package": "runtime",
@@ -25964,9 +28538,16 @@
"title": "383",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a20ea463ebdd351ee290277782ab3ebac605f0744b41fc21d0d1380f5e796e7f"
+ "sourceDigest": "1b849475984dd5c1e22b9d432d3729c14458851a3e00a3ed1ae090dfa122ce74"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"383\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "5e6764e0ded8c042a9034b641a2e1f6f653a9bd1ec89daadf4fc07ae9cd6c977"
+ }
},
{
"source": {
@@ -26055,7 +28636,7 @@
],
"priority": "P1"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d1e28f5ab29e6c3e",
"package": "schema",
@@ -26064,9 +28645,16 @@
"title": "normalizes derived manifest fields in JSON",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b029c2ed64c92c643305f5633fa2ea507a7c5f2fcd281706a4ab91cfe493f976"
+ "sourceDigest": "b00eb9c2305cad2a02d69dbfd355d69be2ee39f28da28b028108b08ef432a5f1"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/schema/tests/manifest.test.ts :: normalizes derived manifest fields in JSON -> packages/schema/tests/manifest.test.ts :: normalizes derived manifest fields in JSON. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "36897a6708c22fe406240990a85facc6cd0d9c990982088509c67077ece7d9a1"
+ }
},
{
"source": {
@@ -26087,7 +28675,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-4196983661cffb3d",
"package": "server",
@@ -26096,9 +28684,16 @@
"title": "basic",
"runner": "playwright-or-vitest-e2e",
"kind": "e2e",
- "sourceDigest": "e9a9bd2d6e8a0baa9e9f674f02b196a0a8174d477630bda329e7dfd8c6e655fb"
+ "sourceDigest": "0a53d3089e3ba9f464be12f59813fdab23c3d1b3d6d35498d1e04c0b8ff5f626"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/server/e2e/beta.css.master.co/docs/installation/general/test.ts :: basic -> packages/server/e2e/beta.css.master.co/docs/installation/general/test.ts :: basic. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "86e31a9b83be63a36ac50a65646cb19749e64276147e57a2fe57556b90e74c3f"
+ }
},
{
"source": {
@@ -26152,7 +28747,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-8a9c1985a1f50938",
"package": "server",
@@ -26161,9 +28756,16 @@
"title": "renders a complete immutable HTML result",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1a7d21d519784d5725bdf63bac28c542d491e70c389365fe4d8256d0df15b4ae"
+ "sourceDigest": "9715b69871d64d371c123619efea55b4f60467c0b98f78d12615dd937a12ee02"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"renders a complete immutable HTML result\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "c9550a40496da9e554284204de5f2ad37503a0c36f25289686436a9b7a79e534"
+ }
},
{
"source": {
@@ -26184,7 +28786,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-b7af484045f903f6",
"package": "server",
@@ -26193,9 +28795,16 @@
"title": "render elements",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6c9d9bed9bd7801bdca99060e30eb8c8e8611e372655ef693341208f7b316e3c"
+ "sourceDigest": "9161f61c4a158d05fcdf375691f0d4eb428dd3afd17378e4ba582552bb1c48d2"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"render elements\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "535ca2d17485f72e1c5fc3f6c99c63d8a2cc58102126dcdad873ff771e22646d"
+ }
},
{
"source": {
@@ -26378,7 +28987,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-8740682ae4139966",
"package": "server",
@@ -26387,9 +28996,16 @@
"title": "injects generated CSS into documents with or without a head",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "58ab6c01a9b52e73b405e3d8982ce03d059712e4f43542e866d48d14f80ef4da"
+ "sourceDigest": "54c484fa6b6cc9db3f8210d2eb4f9ed25143f8e045e3c819b8caefff170de6a7"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"injects generated CSS into documents with or without a head\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "c5a6d388a20fded6a09e6ec2deceb1bd6b1f60760e388a7f78999bcfe98ec23c"
+ }
},
{
"source": {
@@ -26410,7 +29026,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-4ea9659443aa1918",
"package": "server",
@@ -26419,9 +29035,16 @@
"title": "updates an existing master style without duplicating it",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d4f14f2c615f3c87d7cc820cde449b74e3fda7dc412d70117737fc14f6e404c7"
+ "sourceDigest": "ba770083266fe8e84b24040525514bce20954b4eb42f16f3fd6e975815d78c22"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"updates an existing master style without duplicating it\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "2c024bd9b74f91105e54d9109e07a04ab661b5a1525346aff7530f13de26e952"
+ }
},
{
"source": {
@@ -26708,7 +29331,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-2a82e3387d1c954b",
"package": "server",
@@ -26717,9 +29340,16 @@
"title": "matches the core render owner and native render protocol",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "aba697fc601b0ed143d0ecc0051b7cc6dc170884981de5af49825d5be228d36b"
+ "sourceDigest": "26b32fe9ca6a980ac874b86da1413a3d94ed51200ccb631eb92adeee75909468"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"matches the core render owner and native render protocol\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "ea8b627d7414fe022f43967b731493101846e364760384547adcb1c8dc1b9698"
+ }
},
{
"source": {
@@ -26740,7 +29370,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-989b124c0f6e9a46",
"package": "server",
@@ -26749,9 +29379,16 @@
"title": "reuses a renderer without leaking rules between documents",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "530c9fc4b578cc26ae901cd633dfb87929567d5966f4a75b9b6c19fcaca6fa99"
+ "sourceDigest": "7bae902001ef5edcc8bb573a551cabfd3da8396070d358c807e589a62077d5cb"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"reuses a renderer without leaking rules between documents\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "83b3fea7cb2e67c4e092892224c0a9d8ef7dac576abc9a94cdba6657f0ff8cf9"
+ }
},
{
"source": {
@@ -26772,7 +29409,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-1462d9a6987da8a2",
"package": "server",
@@ -26781,9 +29418,16 @@
"title": "preserves native aliases that share a declaration across cached pages",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "314d9378be70f6ebb105d72f98182d0379fe823e4504b683c8957e2e89c72533"
+ "sourceDigest": "85b2b04ff8417f6ce0e0e56ed26caeb11c430d2d274a14a6b571840285111654"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/server/tests/server-renderer.test.ts :: preserves native aliases that share a declaration across cached pages -> packages/server/tests/server-renderer.test.ts :: preserves native aliases that share a declaration across cached pages. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "ae5299ce8f2a871fa0ec28c50e29009e960f36e0351842401f217a422b1b66a7"
+ }
},
{
"source": {
@@ -26804,7 +29448,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-b9dfe7e0dd133d3c",
"package": "server",
@@ -26813,9 +29457,16 @@
"title": "rebuilds bounded cache generations without changing output",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "35231d5b7ebf857aad899c8539b3c0b35dead498a8121027616894b1751a569d"
+ "sourceDigest": "626a56fb46147339a494a9d4988e17188fcab6d493cd79f1a94fb0d4f369d121"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"rebuilds bounded cache generations without changing output\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "3ff6422937469b31f45253ccffd5cc4abb91cc169542ee420d5a9c5131c6de0f"
+ }
},
{
"source": {
@@ -26836,7 +29487,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-9e310fd655a40e23",
"package": "server",
@@ -26845,9 +29496,16 @@
"title": "renders oversized pages outside the bounded cache",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4383190b9b9b08f6ffc7bb6b8438767cd3acc165c967c37eb81c4430886e61d3"
+ "sourceDigest": "b882b7151d6a692c09a52dd068b0ba5141fe32b58266c5dc3a18a150cb4f101d"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"renders oversized pages outside the bounded cache\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "ea4af70a90a09d7a0fb9d57b6f9083dc6124aeaae28fef117f51370c2fe248a6"
+ }
},
{
"source": {
@@ -26868,7 +29526,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-935e4fcec1473d25",
"package": "server",
@@ -26877,9 +29535,16 @@
"title": "validates cache bounds and preserves immutable results after disposal",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "536a2ff5149f253feefb7de1904b929f43ecaf52ce1d9644ef0e97acd3bfbced"
+ "sourceDigest": "0df2587a37e8ee56b8b2d0cca79d5007433ecfb804e1b232c6bef3759b3e5f05"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"validates cache bounds and preserves immutable results after disposal\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "ce0e1b2bb6155ad4f18e05cb56977694ff5d01092697ab2992ebf8a8916f9ded"
+ }
},
{
"source": {
@@ -27672,18 +30337,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-ef0bb430a248a76d",
+ "id": "rc87-40e3b0c260f5f759",
"package": "server",
"file": "packages/server/tests/test.ts",
"line": 43,
- "title": "renders native CSS declarations through css-tree fallback",
+ "title": "preserves structurally valid native CSS without a host support filter",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cf288e22c897ca82341ca61fe16338787bbec647e9538ce9a703a5274534e8c3"
+ "sourceDigest": "ec1d9f2fe2051712ff1580938847cfaf701c7e18180758a500154c338e7552fb"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/server/tests/test.ts :: renders native CSS declarations through css-tree fallback -> packages/server/tests/test.ts :: preserves structurally valid native CSS without a host support filter. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "05cdefae0d160c48de14daf8a606ebc056f0fc833bee11823de5fc13ec3f043a"
+ }
},
{
"source": {
@@ -27706,7 +30378,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-aba2deb3341faee6",
"package": "svelte",
@@ -27715,9 +30387,16 @@
"title": "renders a complete response across arbitrary chunks",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5318cfa69fbf65cc01fc5b5f4657ace33dba6caf1a20c05c5309fcfc063e132e"
+ "sourceDigest": "adb696c90a3a30bc289954c2c32be73433fbff60f0e2bfb4accb4ef7e53790b5"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"renders a complete response across arbitrary chunks\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "0ebac03636b1dc67d3d1812f2a3e9031b4b69374bc80b54af451f38c7c418e15"
+ }
},
{
"source": {
@@ -27740,7 +30419,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-9890adf43c5e0dfb",
"package": "svelte",
@@ -27749,9 +30428,16 @@
"title": "isolates render state between responses",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "61145016ea7eb05209c88595d455fc8dd6c3ec531b7615e4c93534172725d80a"
+ "sourceDigest": "4f488e861ba1f8e8d556ce20da9b7bdeed0fd26dbf4666cde9cc17e6fa1797b9"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"isolates render state between responses\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "4e084a9f7c7ba0f5522d66f93dfac0c6c7742db2157cda10d5ac05740c5bfccc"
+ }
},
{
"source": {
@@ -27809,7 +30495,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-9fb06cb439f3854e",
"package": "svelte",
@@ -27818,9 +30504,16 @@
"title": "honors emitted globals and disabled hydration",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "697a1f416e2bd87d0abc3d32b4d6ce86351a25d9047fe7e2f42da492146dd896"
+ "sourceDigest": "b97427677fe1abc9708d979e0be56a11ca29551dfd9ee779430a0872306898b9"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"honors emitted globals and disabled hydration\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "701f6ede2f5972f216e1e4234078930080e9123d39d66a1eaf76d9c4a08e44f3"
+ }
},
{
"source": {
@@ -27882,7 +30575,7 @@
"id": "rc87-2ab341bbbb8df98a",
"package": "svelte",
"file": "packages/svelte/tests/vite.test.ts",
- "line": 9,
+ "line": 14,
"title": "includes the emittedGlobals virtual module from the wrapped Vite plugin",
"runner": "vitest",
"kind": "test",
@@ -27916,7 +30609,7 @@
"id": "rc87-1f5e193d3f3dcc6d",
"package": "svelte",
"file": "packages/svelte/tests/vite.test.ts",
- "line": 13,
+ "line": 18,
"title": "externalizes server hook dependencies from SvelteKit server bundles",
"runner": "vitest",
"kind": "test",
@@ -27943,18 +30636,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-b161e2fcad643e62",
+ "id": "rc87-3933ebb66361fdcd",
"package": "tooling",
"file": "packages/tooling/tests/language/format-directives.test.ts",
- "line": 43,
- "title": "formats @compose class-list preludes",
+ "line": 38,
+ "title": "leaves removed compose directives unchanged",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b3687d2ae4f53502564dbfe1fd2a8e2cbd5c86c74e94a5ec0d36f8e77d785f6a"
+ "sourceDigest": "a1bddf4676161d1441aefa687090b7474ed7725df45466b2b844eda32b99cc3d"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/language/format-directives.test.ts :: formats @compose class-list preludes -> packages/tooling/tests/language/format-directives.test.ts :: formats @compose class-list preludes. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "a02258d09c4b6b87dcb717647b11ec6d046e0d8be864f16570056bdfdd728b46"
+ }
},
{
"source": {
@@ -27975,18 +30675,16 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-8af187233ba94d35",
- "package": "tooling",
- "file": "packages/tooling/tests/language/format-directives.test.ts",
- "line": 48,
- "title": "leaves quoted and grouped @compose syntax unchanged",
- "runner": "vitest",
- "kind": "test",
- "sourceDigest": "5514b1fac745e8eb079448ba66f86051670cc72e9eda08c5fc51024246554d15"
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/language/format-directives.test.ts :: leaves quoted and grouped @compose syntax unchanged -> packages/tooling/tests/language/format-directives.test.ts :: leaves quoted and grouped @compose syntax unchanged. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire this Compose-specific formatting fixture; removed directives remain untouched and safelist formatting retains dedicated executable cases.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "3ed3e90d4e50ba6a0a40cf70d4b44395901823a008e2199f16e08390d19691e4"
+ }
},
{
"source": {
@@ -28007,18 +30705,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-0fab234554e87fd8",
+ "id": "rc87-299bf6931184b6b8",
"package": "tooling",
"file": "packages/tooling/tests/language/format-directives.test.ts",
- "line": 53,
- "title": "formats @safelist quoted class lists while preserving quote style",
+ "line": 44,
+ "title": "preserves safelist quote style",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7e9f2e59ef4b6143d038cc2096fb0c221e63382e08cd574d5ea986609fd2224d"
+ "sourceDigest": "e273ca528027a1af0d65bdc37d4f3d210dd67cf332ad9afe36007f5794ef93c8"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/language/format-directives.test.ts :: formats @safelist quoted class lists while preserving quote style -> packages/tooling/tests/language/format-directives.test.ts :: formats @safelist quoted class lists while preserving quote style. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "c3eef3f47f0732d18a67054c4dee04318a5a064011e0ec2b1482f1dc0af8b827"
+ }
},
{
"source": {
@@ -28038,18 +30743,16 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
- "target": {
- "id": "rc87-e825fd439c22cdf5",
- "package": "tooling",
- "file": "packages/tooling/tests/language/format-directives.test.ts",
- "line": 58,
- "title": "leaves internal styles dogfood directives unchanged",
- "runner": "vitest",
- "kind": "test",
- "sourceDigest": "5eec81b3d1ae2c7ebf91b2ea1546ebd9eba4434e84af1d6258173dab48c20e8d"
- },
- "proof": "exact-source"
+ "status": "approved-contract-removal",
+ "target": null,
+ "proof": "approved-contract-removal",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/language/format-directives.test.ts :: leaves internal styles dogfood directives unchanged -> packages/tooling/tests/language/format-directives.test.ts :: leaves internal styles dogfood directives unchanged. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Retire this Compose-specific formatting fixture; removed directives remain untouched and safelist formatting retains dedicated executable cases.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "023923e5f14478ee271ec69afbd02625b6879fb9be8a8baaef33ca768c27ba39"
+ }
},
{
"source": {
@@ -28074,7 +30777,7 @@
"id": "rc87-4a1cc3f5e4e55c59",
"package": "tooling",
"file": "packages/tooling/tests/language/format-directives.test.ts",
- "line": 70,
+ "line": 48,
"title": "normalizes directive spacing without changing block contents",
"runner": "vitest",
"kind": "test",
@@ -28100,18 +30803,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-2b946a760e1253bc",
"package": "tooling",
"file": "packages/tooling/tests/language/format-directives.test.ts",
- "line": 75,
+ "line": 53,
"title": "ignores directives inside comments and strings",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a6069e1837cfd4ffa47c22b0d9bbfbd6b19131b1584e6aa5ce99c4abab500db4"
+ "sourceDigest": "bce9907c6f150b0714f4b2d18f2b606f47fd21fdb48ab2106490d4cb1120e0cf"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"ignores directives inside comments and strings\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "72d49fc19cfcecbe4457ba8699bb0079c2d154086e69da9488c3cc645d6fcf11"
+ }
},
{
"source": {
@@ -28131,18 +30841,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-a0e40cebddb38394",
"package": "tooling",
"file": "packages/tooling/tests/language/format-directives.test.ts",
- "line": 80,
+ "line": 58,
"title": "can limit edits to a source range",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "09e0865ea6a199708131fcea551f5608e9229961b70bc03077fe14ca4607e85b"
+ "sourceDigest": "ab6d66b3bc5a95adbcbb870218c1cd93764cf175ed25f612f39ef0305683e9ff"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"can limit edits to a source range\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "38c0095dd9f9d1cea54252fbe20779689c1e1d95b58f321c18ad5fb62a5b5736"
+ }
},
{
"source": {
@@ -28195,7 +30912,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-6f3145ee8c7d46b5",
"package": "tooling",
@@ -28204,9 +30921,16 @@
"title": "discovers UTF-16 class contexts for markup, script, and CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6862dc7bcab7ad519273b6b4f53996a521e49fbabec3bb81dc1dcfbdf2a7d475"
+ "sourceDigest": "26cfc0299cdd25dedfa751a027fe4657616bf1508deeac34d6bf7466a044fb6c"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"discovers UTF-16 class contexts for markup, script, and CSS\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f. Compose-removal integration of 9d9817241: Remove Compose formatting/highlighting/class-context semantics; use supported safelist class lists for retained formatting, token and range coverage, and leave removed directives unchanged where explicitly tested.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "e26c77f13881807d0607de3d2180634718d0fda4b03fe7dd99479f7b59642604"
+ }
},
{
"source": {
@@ -28228,7 +30952,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-c611fc1e092ab84c",
"package": "tooling",
@@ -28237,9 +30961,16 @@
"title": "owns classification, inspection, completion metadata, and colors",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d04e0d6e07fb4a3cf18927d9603b76f4019f5df295d10167f0c219861c7eeb99"
+ "sourceDigest": "cbc55fd84cd5ae2040e32e85713dbc394a983a2e97b36f1d2528278e441baa42"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named-token classification is token instead of declaration, inspection uses matchStatus=matched instead of valid=true; completion and color checks remain.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "052b98b2deff72c125106544afa627023c5739e3776d744a0082dcc8e21f4ad7"
+ }
},
{
"source": {
@@ -28325,7 +31056,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-0c3b4f53433ec72f",
"package": "tooling",
@@ -28334,9 +31065,16 @@
"title": "owns sort, conflict, validation, and edit policy",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c6d377146c1d516d9b06528b873b00c0abda2c3b06acb7d24603ef15da7ce438"
+ "sourceDigest": "48b9eee5e9ad2639c2cfda03dd6614e614e170b37c809ace6662a0cb8527be00"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"owns sort, conflict, validation, and edit policy\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "f0f564ea0faed437d7be789d2f00f8e4581f4e3465672475f22ad640575a1f77"
+ }
},
{
"source": {
@@ -28358,7 +31096,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-7a9e5c45ec0fc87e",
"package": "tooling",
@@ -28367,9 +31105,16 @@
"title": "owns canonical recommendations while the wrapper only maps host diagnostics",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "592cfb2c6e481274a2f17d13e90da514609a9b763b9993ae25366fb8dd10c899"
+ "sourceDigest": "4938061d7f0cfdc8206f5ba89a7d5c99e0902226fc334964f98e57d4f5af2b02"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/lint/index.test.ts :: owns canonical recommendations while the wrapper only maps host diagnostics -> packages/tooling/tests/lint/index.test.ts :: owns canonical recommendations while the wrapper only maps host diagnostics. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "025e703d7210121e83d736fa5402f962d8189d887abd2972e432cc24aa6b8bec"
+ }
},
{
"source": {
@@ -28391,18 +31136,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-10c2c919df81e395",
"package": "tooling",
"file": "packages/tooling/tests/lint/index.test.ts",
- "line": 122,
+ "line": 116,
"title": "lints and fixes source files without a TypeScript engine",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cb868fed3193fd9077457430a068596b60bbfcda9dfacd0dac8c634f8e17ac7a"
+ "sourceDigest": "a8e4471ccf26f9f4b3ab0d1d7539fc8469e2dfe02a42dc2c22891cb164d93700"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"lints and fixes source files without a TypeScript engine\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "344f53a2d1b2e15346d33196f5da470b346ab5cbcbf23565ba6d3bbbed221bdb"
+ }
},
{
"source": {
@@ -28424,7 +31176,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-3c28c41d2c671162",
"package": "tooling",
@@ -28433,9 +31185,16 @@
"title": "uses the built-in source extraction pipeline by default",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3a06b992e3ddeaa6c41c7aaa6b621c1b8e3d1f8e7860fce9fd587290fc70549c"
+ "sourceDigest": "9fddebb136566cfe390b02e3e019971cf50843ca555a959359f5d7ac14d0e813"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"uses the built-in source extraction pipeline by default\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "9eafc64e61bbab7c4fc2ec7e8af46af1040be61fe41d6b0f9dbe3f4aad332be4"
+ }
},
{
"source": {
@@ -28457,7 +31216,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-116f73ddf74ed32f",
"package": "tooling",
@@ -28466,9 +31225,16 @@
"title": "auto extracts framework source files by extension",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "089267c9b01aa98d5fa8ea4153760b0cb38dc42f2ba7d3204101d042e152a739"
+ "sourceDigest": "5c28576de4efde7d63ce6d85b13c8909bf66b419753d11811e0cedcae6e14547"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/adapters.test.ts :: auto extracts framework source files by extension -> packages/tooling/tests/scanner/adapters.test.ts :: auto extracts framework source files by extension. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "c276c5508932b91e242b567d7f3c97a0c13c70035f49fbd2a004a7d812f31e26"
+ }
},
{
"source": {
@@ -28556,7 +31322,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-73c31dcdb81fde33",
"package": "tooling",
@@ -28565,9 +31331,16 @@
"title": "inserts safelist during init and reset",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9a71f863048ceabd329af82bb91e50be33dc7c6efa053ee0b044caabf1d1e41e"
+ "sourceDigest": "4759cd7bbee8374426f79478db2df88fd2cb5c30bfbd2e2f5fd5278a790605a3"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"inserts safelist during init and reset\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "93e68d4a2fa9dc19aacbc60269498c6e244278c509f1ca52adf959b30d92b3cd"
+ }
},
{
"source": {
@@ -28655,7 +31428,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-3c486db7d89c53f8",
"package": "tooling",
@@ -28664,9 +31437,16 @@
"title": "cache invalidates on content change",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0185e51f802418e6b5bc216ecc148f88dfe62c25c84603f129b23c2aafcb77ba"
+ "sourceDigest": "c74c177a8447e0fbae5406002c7eb6782c2768a93831bdf846042f4c43446b6d"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"cache invalidates on content change\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "c27d734b02f7f115d9ccdce84a2439438e1ea700495e8e413d97783d2f33dc8b"
+ }
},
{
"source": {
@@ -28721,7 +31501,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-4e98d09d5fbd24d7",
"package": "tooling",
@@ -28730,9 +31510,16 @@
"title": "same class across many files remains a single generated rule",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5663d721a67a569b3fc52f62158e8bb9de781fe08493296a25cede481b572171"
+ "sourceDigest": "2a91f55e2dc8eba856cf00e5bafc76d5d0d3f8c8c75bcb0c58170eb290b05c95"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"same class across many files remains a single generated rule\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "87e3344e3f77958c53f2d1392b177cbaa7c342b66027b5bd9ba483697f26f485"
+ }
},
{
"source": {
@@ -28754,7 +31541,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-b68640e106b42fb8",
"package": "tooling",
@@ -28763,9 +31550,16 @@
"title": "resets stateful regular expressions while filtering repeated classes",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4751462a1623456e3c7b70543c33a7c33d978f589e083d3ad97c36b2ca34a0aa"
+ "sourceDigest": "965a971602a3401397f54a084b2671cd1996751eab80e2261138789f62842e2e"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"resets stateful regular expressions while filtering repeated classes\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "5ca583d526822ae5baec9bbbb3db0ecd41d19d71958f824f51d73db18a7521d2"
+ }
},
{
"source": {
@@ -28787,7 +31581,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-4fef17fa41b4a953",
"package": "tooling",
@@ -28796,9 +31590,16 @@
"title": "rebuilds when blocklist is reassigned",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "96ec5045d3f3950f805c3063dc255d07bd5eb46800dd67dc48da87b265a4a2a6"
+ "sourceDigest": "826c69c2c987959edbb3ef707ab67eeb8a91b5bbcf1d3ee46449d7764907b7d7"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"rebuilds when blocklist is reassigned\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "8b1762e83514f9eb781ae35d1105e6658c4bc2602639edccd9f7e2c997df0f40"
+ }
},
{
"source": {
@@ -29150,7 +31951,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-adfe1f2fcb029ef8",
"package": "tooling",
@@ -29159,9 +31960,16 @@
"title": "scanModule() scans source-like allowed modules only",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7a1872f27e9b059827b1c8ba7fa40215df7b6e05b81aed462867c2222a7af2a6"
+ "sourceDigest": "3ee81e9d74a25da9de1b3468acb7f38f81a9b5eaf5ca56bea12954d4865378e1"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"scanModule() scans source-like allowed modules only\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "c12ec19e5f659a5727e1e15b3947c24cbb8a85816bb33657ba11307d12b85bc5"
+ }
},
{
"source": {
@@ -29244,7 +32052,7 @@
"matrix": {
"index": 6,
"resolved": true,
- "value": "comments are excluded | // const a = 'bg:white' | "
+ "value": "comments are excluded | // const a = 'bg-white' | "
}
},
"proof": "exact-source"
@@ -29287,7 +32095,7 @@
"matrix": {
"index": 10,
"resolved": true,
- "value": "conditional at and mode suffixes | x
| bg:black@xl | bg:white@dark"
+ "value": "conditional at and mode suffixes | x
| bg-black@xl | bg-white@dark"
}
},
"proof": "exact-source"
@@ -29330,7 +32138,7 @@
"matrix": {
"index": 12,
"resolved": true,
- "value": "data and class attributes are both scanned | x
| bg:white | real | fg:black"
+ "value": "data and class attributes are both scanned | x
| bg-white | real | fg-black"
}
},
"proof": "exact-source"
@@ -29416,7 +32224,7 @@
"matrix": {
"index": 8,
"resolved": true,
- "value": "group syntax | x
| {bg:white;fg:black}"
+ "value": "group syntax | x
| {bg-white;fg-black}"
}
},
"proof": "exact-source"
@@ -29459,7 +32267,7 @@
"matrix": {
"index": 3,
"resolved": true,
- "value": "html basic | x
| bg:white | fg:black | m:2x | p:2x"
+ "value": "html basic | x
| bg-white | fg-black | m:0.5rem | p:0.5rem"
}
},
"proof": "exact-source"
@@ -29502,7 +32310,7 @@
"matrix": {
"index": 4,
"resolved": true,
- "value": "jsx | x
| bg:white | fg:black"
+ "value": "jsx | x
| bg-white | fg-black"
}
},
"proof": "exact-source"
@@ -29545,7 +32353,7 @@
"matrix": {
"index": 2,
"resolved": true,
- "value": "single class | bg:white | bg:white"
+ "value": "single class | bg-white | bg-white"
}
},
"proof": "exact-source"
@@ -29588,7 +32396,7 @@
"matrix": {
"index": 7,
"resolved": true,
- "value": "style blocks are excluded | x
| bg:white"
+ "value": "style blocks are excluded | x
| bg-white"
}
},
"proof": "exact-source"
@@ -29717,7 +32525,7 @@
"matrix": {
"index": 9,
"resolved": true,
- "value": "width-height shorthand | x
| min:10x | calc(100vw-3.75rem)x20rem"
+ "value": "width-height shorthand | x
| min:2.5rem | calc(100vw-3.75rem)x20rem"
}
},
"proof": "exact-source"
@@ -31063,7 +33871,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-ae6254f7191c455a",
"package": "tooling",
@@ -31072,9 +33880,16 @@
"title": "extract latent classes from html",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4e19e2a2b759ee4f5abaa67eb7595362ac02189911ab338ba5b77852bf2ea283"
+ "sourceDigest": "959837de365f1e8d3c388f1ee1c5227d869fb70bfe32b3c215f10e7a21c520ee"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract-html.test.ts :: extract latent classes from html -> packages/tooling/tests/scanner/extract-html.test.ts :: extract latent classes from html. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "e4c8cac7499e202add6d5179f38a92c980bcbb3621dce3e9e34bbd3150c220bf"
+ }
},
{
"source": {
@@ -31125,7 +33940,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-68c6f0fc9e3e8a48",
"package": "tooling",
@@ -31134,9 +33949,16 @@
"title": "basic js object",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "048193a99a0f5c594d997117506f6ff8dca3ade6f32e79aab62735e1260c4410"
+ "sourceDigest": "0850e009f576e98c8e83d9408e699aaf5b7307c062f9754de99799340099e06e"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: basic js object -> packages/tooling/tests/scanner/extract.test.ts :: basic js object. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "166a64efc291a61cf7cac29b510e18c220b7cc04703091a51fe2bfdd1dc609ae"
+ }
},
{
"source": {
@@ -31156,7 +33978,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-2a7ddc50fae25bc9",
"package": "tooling",
@@ -31165,9 +33987,16 @@
"title": "basic html",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "aa0512fa8f33788e576bc94605a9a7f5da4b171f81815dee9c6e63a5acc6c0ff"
+ "sourceDigest": "1d36b182ad2e5a05909c1200ad6892e5f8da9536a3717c33c1507de1b7b1e569"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: basic html -> packages/tooling/tests/scanner/extract.test.ts :: basic html. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "97830f4dd627287400b018dbd8fc437660d6ae34f853177c7e0d38cfd7f5a1a8"
+ }
},
{
"source": {
@@ -31187,7 +34016,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-33c6c9451d628517",
"package": "tooling",
@@ -31196,9 +34025,16 @@
"title": "utility sign and symbol key syntax is not extracted",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3bae7f2c2b9716671fb6c846fddf15b721aed11c89697a6cf6051cab941cae94"
+ "sourceDigest": "ef242c6914a70ef2c43ab842bbab4a869ddd70f9f4ea2150ce6cc3c359b5f51e"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: utility sign and symbol key syntax is not extracted -> packages/tooling/tests/scanner/extract.test.ts :: utility sign and symbol key syntax is not extracted. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "16aee21bc56468893537da29e5b9f39752ab8025e619b4e4bc44f05d5d29d8e1"
+ }
},
{
"source": {
@@ -31280,7 +34116,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-0afc4bae825a62ef",
"package": "tooling",
@@ -31289,9 +34125,16 @@
"title": "comment",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7369856b6cea37dc5a2f821d768ed7187ebbc5fdb806c14b872839e4ac29caba"
+ "sourceDigest": "b0629d9fb7c7956df7ce8786aaf9f9c5a11dccea4063409bb5907754512133f2"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: comment -> packages/tooling/tests/scanner/extract.test.ts :: comment. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "0be25f26e90ee1847b9d008c1ac3107cfd530e83af44fc976ef9bc19ea88f23c"
+ }
},
{
"source": {
@@ -31342,7 +34185,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-940ef33e2f9e54a5",
"package": "tooling",
@@ -31351,9 +34194,16 @@
"title": "media",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6875a1b146f943a29985f050d09dd793db36b0e84a3b9a59692e6dc44f1aaf61"
+ "sourceDigest": "f1728df42884a8338d8671c41f56a288beedba68a9b64c5ad9c7e3664628a92e"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: media -> packages/tooling/tests/scanner/extract.test.ts :: media. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "2fbd3b7d16cc6489e9eb5dadb46037bd06ac32d9b487042f0e4e0aba455af34b"
+ }
},
{
"source": {
@@ -31373,7 +34223,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-50f036526635cc73",
"package": "tooling",
@@ -31382,9 +34232,16 @@
"title": "wxh",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b793ae0c0459b585e6ff46a99bedffebbd4a7b4466e50ef8d16656600f23844f"
+ "sourceDigest": "097283f365da95c111f7a7e5f07c3694a73959b2bbb94f9e37456d8326bf2565"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: wxh -> packages/tooling/tests/scanner/extract.test.ts :: wxh. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "c106223e1b3d948ee7efc942120fa837bb2e3046d19b232b3b274b875d802540"
+ }
},
{
"source": {
@@ -31404,7 +34261,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-75c9417d1ccb141a",
"package": "tooling",
@@ -31413,9 +34270,16 @@
"title": "group",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c7ae5986b22ae6cd72a875bfaffa559f9318b5884c3703558941487b23374569"
+ "sourceDigest": "f78ee3dc0a4e663ec646666604a4b8a7caa380d4113aafa2f81c8dbdb6f12890"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/extract.test.ts :: group -> packages/tooling/tests/scanner/extract.test.ts :: group. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "b8a5a0ce9cba800d02ef5edc3b1164423c64dacde8ea17d0a6953936382cd008"
+ }
},
{
"source": {
@@ -31621,7 +34485,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-ead0c852e550915b",
"package": "tooling",
@@ -31630,9 +34494,16 @@
"title": "issue #337: extracts --name:var(--custom-var) class from source",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "dbeb5d859f4a1bc9a6cfc43586cbcec089e1411ba8ec7b1d4098981d788231db"
+ "sourceDigest": "d27488a4e861468d3fed2a83c591851161b86a7007d264d66a4afa531ac7cfbf"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"issue #337: extracts --name:var(--custom-var) class from source\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "611e08ab7d2a4495130c4ead6b25cd97addb1c7fdd35bc2128fbbd4a77a6c56b"
+ }
},
{
"source": {
@@ -31776,7 +34647,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-1760dc737cb86f2a",
"package": "tooling",
@@ -31785,9 +34656,16 @@
"title": "uses explicit compiled manifests",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "78ea5258e9f3f578f710ad2e561a61535e67a47ae89ff7c3e0f7f37b4dfb2b0d"
+ "sourceDigest": "f189a74b62e103a2c609a038756cf0f8f200502374de1fd8be9182092f655c41"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/manifest.test.ts :: uses explicit compiled manifests -> packages/tooling/tests/scanner/manifest.test.ts :: uses explicit compiled manifests. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "f6259b3eac0a8e04f8854bc3efcb6e7ddb8ebae09cacc68f28f7362911bfe279"
+ }
},
{
"source": {
@@ -31813,7 +34691,7 @@
"id": "rc87-39b79c348660ccf5",
"package": "tooling",
"file": "packages/tooling/tests/scanner/manifest.test.ts",
- "line": 51,
+ "line": 53,
"title": "ignores native CSS classes from unmanaged CSS files",
"runner": "vitest",
"kind": "test",
@@ -31839,18 +34717,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-8c2559572a593020",
"package": "tooling",
"file": "packages/tooling/tests/scanner/rust-state-parity.test.ts",
- "line": 39,
+ "line": 40,
"title": "Rust scanner cache/state matches the TypeScript scanner oracle slice",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cd9637cba9c86a545c6d8e1cfdd7aa060d219bc2aa9ab280a1cef3e06f581f2e"
+ "sourceDigest": "d8e3f255854ed4e2dbf2589339ace0955aa6cd91736a728bf8f21d1994a4a760"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"Rust scanner cache/state matches the TypeScript scanner oracle slice\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "91700bf9508efa18a216ee443c1c6f5b0292428ed2b7732ca54cc5e6372e82c8"
+ }
},
{
"source": {
@@ -31932,7 +34817,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-5c07a0ab3e427817",
"package": "tooling",
@@ -31941,9 +34826,16 @@
"title": "syntax",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4960548e68084c4a6949be87b74d83f4db7ed82a291af230d3b4c8bbd9b6d767"
+ "sourceDigest": "753e0040502f23de4ea0c4f16451c24d18757def0533669bcff0ce1d845b7bd1"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/tooling/tests/scanner/syntax.test.ts :: syntax -> packages/tooling/tests/scanner/syntax.test.ts :: syntax. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "247b444e904c42790f3bd31f7712fb3b13c3f64d2a28b055072862497a12e70d"
+ }
},
{
"source": {
@@ -31963,18 +34855,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-4b87d4e154724d16",
+ "id": "rc87-b7f91194506bc386",
"package": "tooling",
"file": "packages/tooling/tests/scanner/syntax.test.ts",
"line": 74,
- "title": "keeps CSS grammar validation in the host batch handshake",
+ "title": "preserves declarations whose CSS capability is unknown",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "04b59723cc34da3e2f14b67305147b689a7489c705c1d3ed3a0cb9f3d618b8df"
+ "sourceDigest": "e0c321af4060b33842a41cbfb4df25dc444b221771394c7eb11fac83cfa74f67"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/tooling/tests/scanner/syntax.test.ts :: keeps CSS grammar validation in the host batch handshake -> packages/tooling/tests/scanner/syntax.test.ts :: preserves declarations whose CSS capability is unknown. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "b3787ba5011ba139a64f05437f27fd9f9a4926e2f65cf19e811b7d0e13af3887"
+ }
},
{
"source": {
@@ -31994,7 +34893,7 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-1036d5b7cf8ed78f",
"package": "tooling",
@@ -32003,9 +34902,16 @@
"title": "extracts built-in source formats through the native Rust session",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "aad81071bc040643e4a2bdc6504bbfa641ceeac2c614e2ef37712ca0fce1f922"
+ "sourceDigest": "c41a0a25b569c2fa03d0b15ab9cbb2921f93aaaec95e3468ff40a7f39ee8f6a1"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"extracts built-in source formats through the native Rust session\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "add7116d36126ad7f2202a32eb7e52f05c2a0657e23b91d8cab11455dd922448"
+ }
},
{
"source": {
@@ -32118,18 +35024,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-47da29b9f3ee6f32",
+ "id": "rc87-bdca23b6ed84c4b5",
"package": "tooling",
"file": "packages/tooling/tests/validator/test.ts",
"line": 16,
- "title": "validates classes through a Rust session and host CSS oracle",
+ "title": "validates classes through a Rust session with independent CSS value checks",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8c085a83cc6912c5e8144b8b0ea48d2feed63fa13dcae89769bf8bb1564931dd"
+ "sourceDigest": "735d4201f9d7f86cf2c70321843517f2a612d89f84be6a22b237d73a04bce3e7"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/tooling/tests/validator/test.ts :: validates classes through a Rust session and host CSS oracle -> packages/tooling/tests/validator/test.ts :: validates classes through a Rust session with independent CSS value checks. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "3c4c023f792179be2e6b4143e85258e97317950654c406640ceba9b4d510e8b5"
+ }
},
{
"source": {
@@ -32149,18 +35062,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-92b7db2e09b4732c",
+ "id": "rc87-fa2ad20a085f3178",
"package": "tooling",
"file": "packages/tooling/tests/validator/test.ts",
"line": 46,
- "title": "keeps native declarations behind host support checks",
+ "title": "preserves native declarations while reporting invalid CSS values",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3268c3102bae321068eebdadd20b597642b00d868cdd225fb980fe642f5c35fb"
+ "sourceDigest": "54f0adfe8b6fd78c604c9edaa7a894e6a46803269e44f0fd70f310b84ab118f1"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/tooling/tests/validator/test.ts :: keeps native declarations behind host support checks -> packages/tooling/tests/validator/test.ts :: preserves native declarations while reporting invalid CSS values. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "b2439bb77fd1849e99ed49e9bf6571f38ac7374929e1905fa7dbec6679ce9922"
+ }
},
{
"source": {
@@ -32359,7 +35279,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-72d9ca61d7283e10",
"package": "vite",
@@ -32368,9 +35288,16 @@
"title": "runtime mode registers runtime preloads only with runtime injection",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a8a6ba69643956857090ecd7c778c0ef45f422716b5ac9df6444359fc30323a1"
+ "sourceDigest": "c97d1efb3f23dba803fcb9ba249ca9aff135a0f5277c9258d162b0aaa542ff39"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/core.test.ts :: runtime mode registers runtime preloads only with runtime injection -> packages/vite/tests/core.test.ts :: runtime mode registers runtime preloads only with runtime injection. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "c806fde03cb6fa9e1da158e36ecb3753773433b3e210050b45802d42ff9a8672"
+ }
},
{
"source": {
@@ -32437,15 +35364,15 @@
"title": "loads global CSS before the runtime stylesheet in runtime mode",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6387e9c21ea68945e8d6f547750b2af1f73f1fa58a4ee0873156be1ecb42f595"
+ "sourceDigest": "9d66632cf60c55e157f04cfea386749bc7b7ae4148c667831aa08d1d0edbbe82"
},
"proof": "approved-contract-change",
- "reason": "The Vite browser HMR case retains its global-CSS-before-runtime assertions and uses an explicit navigation and readiness timeout for loaded CI runners.",
+ "reason": "Vite browser HMR still verifies global CSS loads before the runtime stylesheet and the computed utility display wins. The approved native-components contract moves this equal-layer ordering probe from components to utilities, preserving the intended source-order test; explicit navigation/readiness timeouts accommodate loaded runners.",
"approval": {
- "approvedBy": "Aron ",
- "approvedAt": "2026-08-01T12:53:04Z",
- "reviewRef": "codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c",
- "scopeDigest": "2cb2d0803fb3465a0fa644392ce46b53fbfc5753bf1bb9b56fd0c993435cf58f"
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T08:47:41.470Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "4b51e87f050eb174ee4789acf9c15a7a9a45a792706e249fed41f2385beec8a3"
}
},
{
@@ -32515,7 +35442,7 @@
"id": "rc87-c5e4107df5ae3b17",
"package": "vite",
"file": "packages/vite/tests/modes/scanner.test.ts",
- "line": 38,
+ "line": 43,
"title": "does not mutate source discovery options",
"runner": "vitest",
"kind": "test",
@@ -32550,7 +35477,7 @@
"id": "rc87-9d5ee577cd3d795a",
"package": "vite",
"file": "packages/vite/tests/modes/scanner.test.ts",
- "line": 88,
+ "line": 93,
"title": "delegates real source modules to scanModule",
"runner": "vitest",
"kind": "test",
@@ -32580,18 +35507,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-94b524d516938049",
"package": "vite",
"file": "packages/vite/tests/modes/scanner.test.ts",
- "line": 109,
+ "line": 114,
"title": "delegates non-virtual module ids to scanner module eligibility",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "927c25009274e8ab864d42de635d13f0971359e444e5fd4642dc2f52993fe52a"
+ "sourceDigest": "a677a36c9315a08651449a704a7eeb87f503ec2b4e4bb3f8faeba566e03ac457"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/modes/scanner.test.ts :: delegates non-virtual module ids to scanner module eligibility -> packages/vite/tests/modes/scanner.test.ts :: delegates non-virtual module ids to scanner module eligibility. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "15da6fbdc45d1a20c6dad4c7179b0ef09f912a823659ee804be7661916c61fc4"
+ }
},
{
"source": {
@@ -32620,7 +35554,7 @@
"id": "rc87-baa68c50245b7c3f",
"package": "vite",
"file": "packages/vite/tests/modes/scanner.test.ts",
- "line": 128,
+ "line": 132,
"title": "virtual module ids are rejected before scanModule",
"runner": "vitest",
"kind": "test",
@@ -32650,18 +35584,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-556cc73a1877ed47",
+ "id": "rc87-31e4216d48a92883",
"package": "vite",
"file": "packages/vite/tests/modes/scanner.test.ts",
- "line": 137,
- "title": "does not wait for Vite request idle during dev server setup",
+ "line": 141,
+ "title": "watches policy files without adding dev import edges or waiting for request idle",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "fa906f1b647e4ea50cd12d7bc68f402a66413195e94df6324244ef16ee01f1b7"
+ "sourceDigest": "bf7280f2a78b4c604fb93fadeb467ede9747cb77be475c5e5fdc7a524364dfd7"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/modes/scanner.test.ts :: does not wait for Vite request idle during dev server setup -> packages/vite/tests/modes/scanner.test.ts :: watches policy files without adding dev import edges or waiting for request idle. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "89b37b73baca7db41322b5fd60092b3e8b1f3f5bbeedd11a7676562184cc8a9f"
+ }
},
{
"source": {
@@ -32690,7 +35631,7 @@
"id": "rc87-43cd170a2bab09d5",
"package": "vite",
"file": "packages/vite/tests/modes/scanner.test.ts",
- "line": 143,
+ "line": 155,
"title": "build transformIndexHtml feeds HTML to scanModule",
"runner": "vitest",
"kind": "test",
@@ -32725,7 +35666,7 @@
"id": "rc87-2ba8fb15dd9a6c4e",
"package": "vite",
"file": "packages/vite/tests/modes/scanner.test.ts",
- "line": 161,
+ "line": 173,
"title": "serve transformIndexHtml is left to the HMR plugin",
"runner": "vitest",
"kind": "test",
@@ -33261,18 +36202,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-4830c5bbe833a934",
+ "id": "rc87-bc885bad6849fc41",
"package": "vite",
"file": "packages/vite/tests/plugins/local-compose.test.ts",
- "line": 36,
+ "line": 33,
"title": "lowers @compose in CSS Modules without emitting a Master CSS slot",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c4bda323b0ebcba47e52d8096bcb930484734de181cae614dff7ac6b41872bad"
+ "sourceDigest": "d3712ff1f2315a709e0d53a29d5fb52f0b9cd5af1f31fc2244b5ed545ebe8d56"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Reviewed portable watcher/path adaptation; every rc.87 assertion and fixture remains after removing only Vite normalizePath wrappers. An independent AST comparison proves the remaining case body is identical. Windows inputs and expected paths now use Vite host conventions. See parity/vite-portable-freeze-approval.md#assertion-preserving-cases. Full Vite 678/678 and focused cases pass. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "4f7d1be5c622f060c83c52d7b21fa40a0f5f609fa4b8c5580b2decf541b53368"
+ }
},
{
"source": {
@@ -33297,18 +36245,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-979c4a4224515564",
+ "id": "rc87-6cf452021b9b88ee",
"package": "vite",
"file": "packages/vite/tests/plugins/local-compose.test.ts",
- "line": 63,
- "title": "dedupes theme variables already emitted by global style entries",
+ "line": 62,
+ "title": "retains local resources when discovered entries are not guaranteed loaded",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e8304cfbe92e7dbce244f2364d0659086b9e73fb972dfa5e72473473bd5f6119"
+ "sourceDigest": "818586f8408fa9fb11595dc40c57acb3ff80e8ab001496c427b71dfa972a8a00"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/local-compose.test.ts :: dedupes theme variables already emitted by global style entries -> packages/vite/tests/plugins/local-compose.test.ts :: retains local resources when discovered entries are not guaranteed loaded. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "03a240c45ddd64e58697fdddb5e4b6df1ce71fe0cbe6a0ba796c2ed59095dd6b"
+ }
},
{
"source": {
@@ -33332,18 +36287,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-3c895256e4ada270",
+ "id": "rc87-2296a08861e42312",
"package": "vite",
"file": "packages/vite/tests/plugins/local-compose.test.ts",
- "line": 89,
+ "line": 88,
"title": "leaves ordinary CSS and Master entries to their existing pipelines",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "65a4141289437558edcd825e52cbcdee1c0c4797601f4513985bdc90d0f07862"
+ "sourceDigest": "2e26db7f9b49c0ff9fdbbe2a21c00eb052edbddda693f086d13c057acf1f7f38"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "139536a634d8679534a5fb2bb242bdb3a0a046af4370455e313fbf4d88c716f3"
+ }
},
{
"source": {
@@ -33367,18 +36329,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-8f612ed6cfd8a913",
+ "id": "rc87-af46134c2e32e600",
"package": "vite",
"file": "packages/vite/tests/plugins/local-compose.test.ts",
- "line": 110,
+ "line": 109,
"title": "lowers @compose in SFC style requests",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f4b8ac676237fbd8ee9a1673668f0c4b0ca998d482addd225a8538487eae66a1"
+ "sourceDigest": "19afcb2cd1c36baecb1fd6cc224aa3e4340b5bf568b4c44b08691b71fc0e98c0"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "5939ac25dd22d00442d487903e34880a7af257a9ae489b66e32fb829877fb211"
+ }
},
{
"source": {
@@ -33402,18 +36371,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-054c879ed15dfa40",
+ "id": "rc87-eecad1a7a2b1e039",
"package": "vite",
"file": "packages/vite/tests/plugins/local-compose.test.ts",
- "line": 128,
+ "line": 127,
"title": "lowers explicit @reference styles and watches the reference file",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "15d2a61f201c3b8f30ea44d3381803209e8ed5dd9f9953d45648c0c8fc2482c5"
+ "sourceDigest": "4b7245428c0bcdc48304ea307cc2a4a3c460bdd10b9fd4e6613a8dc8d7762a14"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"lowers explicit @reference styles and watches the reference file\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Supplemental exact QA preserves every assertion while using Vite-normalized watcher paths on Windows; see parity/vite-portable-freeze-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "6f5c09e9dbefd9088a77bc1065d0234de3ec2602405c68017f33dce1d7fb8279"
+ }
},
{
"source": {
@@ -33437,18 +36413,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-38a81a3aed064c0b",
+ "id": "rc87-992add79cfd20c24",
"package": "vite",
"file": "packages/vite/tests/plugins/local-compose.test.ts",
- "line": 170,
+ "line": 194,
"title": "keeps local style dependencies registered after invalid @compose and recovers on the next run",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0c3189271e8600b9de9bf67c45c46762cc281885dbb071c0a7437065fb4c4012"
+ "sourceDigest": "6bc5648a4f2e5a7e5e57a87f267db89a47152678c03fda702dce74b9bfb16e1d"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/local-compose.test.ts :: keeps local style dependencies registered after invalid @compose and recovers on the next run -> packages/vite/tests/plugins/local-compose.test.ts :: keeps local style dependencies registered after invalid @compose and recovers on the next run. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "557f380f3a87b3b8744076d30c71ebaff2b2e18d93c0e3b5bcb22100e821fa07"
+ }
},
{
"source": {
@@ -33472,18 +36455,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-7bd1070dec3c3eb5",
+ "id": "rc87-7be859c17bbf2af1",
"package": "vite",
"file": "packages/vite/tests/plugins/local-compose.test.ts",
- "line": 197,
+ "line": 221,
"title": "reloads local compose modules without forcing a full reload when project manifest dependencies change",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "25bcd55f915e6a9ae604011404e26ac8d4a5d62658c73078541454d6aba7d234"
+ "sourceDigest": "bf646e17edf3653a683172a790957b7bdbdecf077144fe393e342cdd40977479"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/local-compose.test.ts :: reloads local compose modules without forcing a full reload when project manifest dependencies change -> packages/vite/tests/plugins/local-compose.test.ts :: reloads local compose modules without forcing a full reload when project manifest dependencies change. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "6c7b22d214cf90f92b6c0d1c3ef624718391b8fe2e14837c945d405965059450"
+ }
},
{
"source": {
@@ -33577,7 +36567,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-8c38f5f8d793e40e",
"package": "vite",
@@ -33586,9 +36576,16 @@
"title": "keeps per-file manifest dependencies registered after invalid CSS and recovers on the next run",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9cb7ea75f848a8c565a64f5e5daa191a636a17180aa23928f1ffb5dac79fdd5c"
+ "sourceDigest": "262f30cf7520a06c4ac952d00712e47f56a8ead5755cde069ff0c1b30bfb5a99"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/manifest-loader.test.ts :: keeps per-file manifest dependencies registered after invalid CSS and recovers on the next run -> packages/vite/tests/plugins/manifest-loader.test.ts :: keeps per-file manifest dependencies registered after invalid CSS and recovers on the next run. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "df127bacd23ecdd2b3b4a32727ccf474737c10a4b1951f275d9587491daa9479"
+ }
},
{
"source": {
@@ -33906,18 +36903,19 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-426ea0afb5a08621",
"package": "vite",
"file": "packages/vite/tests/plugins/manifest-virtual-module.test.ts",
- "line": 36,
+ "line": 37,
"title": "loads the default virtual manifest from the managed CSS entry",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0ff5d9a5651036e3a10ccbff343a04266d4952e0a83e7842562751ca7ffa8025"
+ "sourceDigest": "ba98d64264baa0de84f7fe1475d69482371488c670a5a779e71a59dd16985172"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed portable watcher/path adaptation; every rc.87 assertion and fixture remains after removing only Vite normalizePath wrappers. An independent AST comparison proves the remaining case body is identical. Windows inputs and expected paths now use Vite host conventions. See parity/vite-portable-freeze-approval.md#assertion-preserving-cases. Full Vite 678/678 and focused cases pass."
},
{
"source": {
@@ -33941,18 +36939,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-011aece17a20bf7a",
"package": "vite",
"file": "packages/vite/tests/plugins/manifest-virtual-module.test.ts",
- "line": 51,
+ "line": 52,
"title": "keeps default manifest dependencies registered after invalid CSS and recovers on the next run",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8d0024a31fbbde01386e16c5db23502542cf23685b4796010812af834b51cace"
+ "sourceDigest": "dacd55188818471237f1f41e6531482f7ff30a3af216723ac0b19a0758f6897c"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/manifest-virtual-module.test.ts :: keeps default manifest dependencies registered after invalid CSS and recovers on the next run -> packages/vite/tests/plugins/manifest-virtual-module.test.ts :: keeps default manifest dependencies registered after invalid CSS and recovers on the next run. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "176418c545f01523e4354c2d867581a5bdc56d54f2cf45e569339da9aefd5e28"
+ }
},
{
"source": {
@@ -33981,7 +36986,7 @@
"id": "rc87-138d2a9846a509c5",
"package": "vite",
"file": "packages/vite/tests/plugins/manifest-virtual-module.test.ts",
- "line": 87,
+ "line": 88,
"title": "emits the default manifest as an external JSON asset in production build",
"runner": "vitest",
"kind": "test",
@@ -34023,7 +37028,7 @@
"id": "rc87-61c8ed2a39c80422",
"package": "vite",
"file": "packages/vite/tests/plugins/manifest-virtual-module.test.ts",
- "line": 110,
+ "line": 111,
"title": "does not eagerly load the default manifest during production buildStart",
"runner": "vitest",
"kind": "test",
@@ -34058,7 +37063,7 @@
"id": "rc87-de63cfc41ad8a597",
"package": "vite",
"file": "packages/vite/tests/plugins/manifest-virtual-module.test.ts",
- "line": 121,
+ "line": 122,
"title": "emits the default manifest through a universal facade in SSR production build",
"runner": "vitest",
"kind": "test",
@@ -34095,18 +37100,19 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-f31ee191a59a71b4",
"package": "vite",
"file": "packages/vite/tests/plugins/manifest-virtual-module.test.ts",
- "line": 141,
+ "line": 142,
"title": "handles unimported CSS manifest changes through CSS HMR only",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "de314b914139026a38055903d8ab7f5abe48fef3db61dd1d20cf8641dfae5bb2"
+ "sourceDigest": "e9d23b1895335f151e320c3af8a2de6b8623e7a7e9533c7ba7d821cfbb771c6f"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed portable watcher/path adaptation; every rc.87 assertion and fixture remains after removing only Vite normalizePath wrappers. An independent AST comparison proves the remaining case body is identical. Windows inputs and expected paths now use Vite host conventions. See parity/vite-portable-freeze-approval.md#assertion-preserving-cases. Full Vite 678/678 and focused cases pass."
},
{
"source": {
@@ -34130,18 +37136,19 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-f44b976958b10bfc",
"package": "vite",
"file": "packages/vite/tests/plugins/manifest-virtual-module.test.ts",
- "line": 167,
+ "line": 168,
"title": "updates the default virtual manifest module through HMR when imported",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "13c72238b508259b29dd166ce373bfecce396f0f5398e8c83dc7e5d14607d6c4"
+ "sourceDigest": "5ff340a5182adcdfeb5776d2d53fff1aec6449e14dc57541233d799805e13e5e"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed portable watcher/path adaptation; every rc.87 assertion and fixture remains after removing only Vite normalizePath wrappers. An independent AST comparison proves the remaining case body is identical. Windows inputs and expected paths now use Vite host conventions. See parity/vite-portable-freeze-approval.md#assertion-preserving-cases. Full Vite 678/678 and focused cases pass."
},
{
"source": {
@@ -34166,18 +37173,30 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-1e6ed1519c10683b",
+ "id": "rc87-c2233a4dcb41b846",
"package": "vite",
"file": "packages/vite/tests/plugins/pre-render.test.ts",
"line": 25,
- "title": "renders HTML classes with the managed CSS manifest entry",
+ "title": "renders HTML classes in pre-render with the managed CSS manifest entry",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4c282f8804c4e9dea0b5764bf4904c346aaf79d36cfc020fbfc84314f90765fe"
+ "sourceDigest": "2341f4556c56c6e0e754eb58641ad6911c5148c842d4edd82dea6c43eb8a34f3",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "pre-render"
+ }
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/pre-render.test.ts :: renders HTML classes with the managed CSS manifest entry -> packages/vite/tests/plugins/pre-render.test.ts :: renders HTML classes in pre-render with the managed CSS manifest entry. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "658e6a6c2bfae47ad54116ab5f3463a4db180180412e70c27f6e960140a98248"
+ }
},
{
"source": {
@@ -34210,7 +37229,7 @@
"id": "rc87-f874061263b9390f",
"package": "vite",
"file": "packages/vite/tests/plugins/pre-render.test.ts",
- "line": 83,
+ "line": 89,
"title": "disposes production renderers after failed builds",
"runner": "vitest",
"kind": "test",
@@ -34254,7 +37273,7 @@
"id": "rc87-92aac3f3e740ac86",
"package": "vite",
"file": "packages/vite/tests/plugins/pre-render.test.ts",
- "line": 83,
+ "line": 89,
"title": "disposes production renderers after successful builds",
"runner": "vitest",
"kind": "test",
@@ -34288,18 +37307,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-0bc6d109d462febe",
"package": "vite",
"file": "packages/vite/tests/plugins/pre-render.test.ts",
- "line": 108,
+ "line": 114,
"title": "reloads CSS entry dependencies for pre-rendered HTML",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "bac6f692049b40d34b2edc8fea9223168f7d694fc37952c9b4568a205af91d7c"
+ "sourceDigest": "79e368e7e89f939015f198af5216232de767cdb811e130084822734a6f9450e5"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/pre-render.test.ts :: reloads CSS entry dependencies for pre-rendered HTML -> packages/vite/tests/plugins/pre-render.test.ts :: reloads CSS entry dependencies for pre-rendered HTML. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "7b0bf59945b88a273fa2264a5e0622bad035609c9df737b2eadf44286919dfc1"
+ }
},
{
"source": {
@@ -34731,7 +37757,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d59d9f282901a287",
"package": "vite",
@@ -34740,9 +37766,16 @@
"title": "compiles managed CSS entry config rules and preserves used native CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "fef7570d0e4451f13bda8e80193d09e53aebe0f7f226d49e0fa5d3e43badcacd"
+ "sourceDigest": "f001a805a90a4c6b574af82d0df544935a6475de8020f4e47915d254fdc3bb3f"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry-build.test.ts :: compiles managed CSS entry config rules and preserves used native CSS -> packages/vite/tests/plugins/style-entry-build.test.ts :: compiles managed CSS entry config rules and preserves used native CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "6ee59fd29128fdfa50ebbf11971a8ceddd995fc5c9ddb58504d70da6400c5bc6"
+ }
},
{
"source": {
@@ -34765,18 +37798,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-9f2d8be151bb8f92",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry-build.test.ts",
- "line": 238,
+ "line": 242,
"title": "uses the managed CSS entry for config and native CSS pruning",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f0b53241bfde4e32f78dbf73d2c33929e84868d2c4569c4ed3ea2b1bfe76136c"
+ "sourceDigest": "dfd38a4816d94dff5b6df21655d50d4d170fd2c492c9350bb0d3c736314e1e75"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry-build.test.ts :: uses the managed CSS entry for config and native CSS pruning -> packages/vite/tests/plugins/style-entry-build.test.ts :: uses the managed CSS entry for config and native CSS pruning. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "df2af7a936e96df31ebd0de205bf8c74ed42d84fceea2dad0dd873eeccbd5ef8"
+ }
},
{
"source": {
@@ -34799,7 +37839,7 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-df7279821cd67e25",
"package": "vite",
@@ -34808,9 +37848,16 @@
"title": "C3: handleReset awaits index.html re-insert AND every module-graph re-insert",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "fc306517c0d170b9afad94b586e2e8f7041765409fe6a69009d6fbb39e575117"
+ "sourceDigest": "112cbc03b968b5a3050ba9f1aca0812a574fcc0e252ccee72e6f2824f8dc953b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry-hmr.test.ts :: C3: handleReset awaits index.html re-insert AND every module-graph re-insert -> packages/vite/tests/plugins/style-entry-hmr.test.ts :: C3: handleReset awaits index.html re-insert AND every module-graph re-insert. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "17ff8a224520328f0f899ace1818bddd19b6af9acf70ba12174dd09c32476813"
+ }
},
{
"source": {
@@ -35003,18 +38050,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-08ebbddcb7e50d7f",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry-vite-build.test.ts",
- "line": 66,
+ "line": 70,
"title": "keeps package imports legal when @master/css appears first in the import block",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0c85d275fb8fd44c146f1ffee295a98ab340a7182ecdefc33c9ca95b2ff72306"
+ "sourceDigest": "ae9eb9459a81dfcb5a77d3f033101145d2ce16017ebe0ef4b7d69a1c89ed7d5c"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry-vite-build.test.ts :: keeps package imports legal when @master/css appears first in the import block -> packages/vite/tests/plugins/style-entry-vite-build.test.ts :: keeps package imports legal when @master/css appears first in the import block. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "15d8b363b49ee1ff0bd75f8ddb3aec2b303cea1370449acb23fa02ab1e3b6078"
+ }
},
{
"source": {
@@ -35037,18 +38091,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-23ebb60ebffe120e",
+ "id": "rc87-8436c9142c110082",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry-vite-build.test.ts",
- "line": 96,
- "title": "default runtime mode emits preset base CSS for the root Master CSS import",
+ "line": 100,
+ "title": "explicit runtime mode emits preset base CSS for the root Master CSS import",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "855fad9700bdff0c318f33a8dc38d5c4ebca3fd0091a4941081d36ac944804e9"
+ "sourceDigest": "547a5a560ebba1fbb9ce9b4bc5a9b48365c43c7a8ea74a0aa1f45dab6a992581"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/style-entry-vite-build.test.ts :: default runtime mode emits preset base CSS for the root Master CSS import -> packages/vite/tests/plugins/style-entry-vite-build.test.ts :: explicit runtime mode emits preset base CSS for the root Master CSS import. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "e9b4b88bd2507fb500a5fad9d2129046674bbf0bf9faeb7391eb581af9fdb4f9"
+ }
},
{
"source": {
@@ -35081,7 +38142,7 @@
"id": "rc87-715e99bcae525d41",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry-vite-build.test.ts",
- "line": 113,
+ "line": 118,
"title": "pre-render mode emits preset base CSS for the root Master CSS import",
"runner": "vitest",
"kind": "test",
@@ -35125,7 +38186,7 @@
"id": "rc87-1bc7becdf5ce6a4f",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry-vite-build.test.ts",
- "line": 113,
+ "line": 118,
"title": "progressive mode emits preset base CSS for the root Master CSS import",
"runner": "vitest",
"kind": "test",
@@ -35164,7 +38225,7 @@
"id": "rc87-dd28b7dc9ceda14e",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry-vite-build.test.ts",
- "line": 133,
+ "line": 138,
"title": "static mode emits preset base CSS for the root Master CSS import",
"runner": "vitest",
"kind": "test",
@@ -35193,18 +38254,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-2d4455c6d2301761",
+ "id": "rc87-b2ef88c31a82efa1",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry-vite-build.test.ts",
- "line": 152,
- "title": "default runtime mode lets Vite expand the explicit base.css subpath import",
+ "line": 157,
+ "title": "default static mode lets Vite expand the explicit base.css subpath import",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3e78f4bd7740faa1ea6ccb71d5cffcca5acff58ce52e15a4251393397325a280"
+ "sourceDigest": "a3309e16c5a40c50d773243878cf8e5bba5695e37de9c8c62a0a398901a5810f"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/style-entry-vite-build.test.ts :: default runtime mode lets Vite expand the explicit base.css subpath import -> packages/vite/tests/plugins/style-entry-vite-build.test.ts :: default static mode lets Vite expand the explicit base.css subpath import. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "7c3b4be9d4f67ad9abaa70016fff75604908645cb416615118ea71e973b6fa8a"
+ }
},
{
"source": {
@@ -35232,7 +38300,7 @@
"id": "rc87-147ffe918f3288ba",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry.test.ts",
- "line": 37,
+ "line": 65,
"title": "build load emits the slot placeholder for bundle-time replacement",
"runner": "vitest",
"kind": "test",
@@ -35261,18 +38329,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-e151716687bd682a",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry.test.ts",
- "line": 49,
+ "line": 77,
"title": "serve load inlines current extracted CSS and tracks the virtual CSS module for HMR",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "df0b0a4be712ae665a1034e8ddfc6c1425083eedf4ecfe7e7302408aad522967"
+ "sourceDigest": "d7c00a711c889f6eff947ed2dc5932ff2a04e78260c06c798b644a44ad2090d9"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"serve load inlines current extracted CSS and tracks the virtual CSS module for HMR\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "838909712e20fb0931bd9f7526decfcc1beb2d81c927b3f61498dab46cc3027e"
+ }
},
{
"source": {
@@ -35296,18 +38371,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-409a7df8ce71c205",
+ "id": "rc87-475a451024126740",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry.test.ts",
- "line": 60,
- "title": "treats @master/css import stylesheets as managed native CSS pruning entries",
+ "line": 88,
+ "title": "treats @master/css import stylesheets as managed entries preserving native CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8700f021b9caf7724c4e927be75c89ae3dec005e80956c252e61d1ec36bbed82"
+ "sourceDigest": "0cacd035bfd137a4b16ee3c374a3dc5ea655af9a7a4f438b173c4940215a896c"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/style-entry.test.ts :: treats @master/css import stylesheets as managed native CSS pruning entries -> packages/vite/tests/plugins/style-entry.test.ts :: treats @master/css import stylesheets as managed entries preserving native CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "9dcf9b67d10e0216a83c7c6d1e519a58128b4d3f8d7f1d72cd9fd684bcdd6b01"
+ }
},
{
"source": {
@@ -35330,18 +38412,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-7ace699066028665",
+ "id": "rc87-f37c934ad7a06426",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry.test.ts",
- "line": 80,
- "title": "build transform keeps native imports before the slot when @master/css comes first",
+ "line": 108,
+ "title": "build transform retains native imports in the source graph when @master/css comes first",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "612f2797b082f632caefc18f24e2b5da2f5651aad7ec570eff8586ab3b31381b"
+ "sourceDigest": "40d7fde8ad493ee5315a1005b7761bc3aba5a3d253d906bf8b4f08e9dbb9bb0b"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/style-entry.test.ts :: build transform keeps native imports before the slot when @master/css comes first -> packages/vite/tests/plugins/style-entry.test.ts :: build transform retains native imports in the source graph when @master/css comes first. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "4f0df2ccc8dca3b3567e7822f878940b58d514878d14225346eece072d7f0eac"
+ }
},
{
"source": {
@@ -35365,18 +38454,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-58ddaa9d830cec33",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry.test.ts",
- "line": 99,
+ "line": 127,
"title": "serve transform emits current CSS and reloads the managed stylesheet for HMR",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8acdce155d8e361c894dfaca9a4a474e63f6b9799f7d9c81e199a8ff559b4763"
+ "sourceDigest": "fc3e0eb9024c8b8512215d34782f97d6eaa55ca292a8278f46ded5bfbefb33f0"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact named-token migration for \"serve transform emits current CSS and reloads the managed stylesheet for HMR\". The reviewed case changes named-token separators and corresponding escaped CSS selectors from colon to hyphen; the two matching blocklist cases update their regex prefix. All other case-body assertions, values and lifecycle behavior remain. Scope is the 62-case patch 7eb939d7e29fc7c45191d3a08fb284b5dcb47458fdb1fd5e72e4f81ae188ec2f.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T16:30:08.516Z",
+ "reviewRef": "parity/named-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "431b6a151aedc917a006cf4b44e02a600d8d7468a3724a416c694aa1fde1b727"
+ }
},
{
"source": {
@@ -35404,19 +38500,19 @@
"id": "rc87-48ff4814761d1c90",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry.test.ts",
- "line": 115,
+ "line": 143,
"title": "keeps managed style dependencies registered after invalid CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4eff30677d1e0c99728b77d0be687e3e063f2a9f5a719e1c76d66a5160d0c2e9"
+ "sourceDigest": "652c915163351d4fa0a4fe4e70d83e14eea0a4293a4bcbb21bf1115673212f55"
},
"proof": "approved-contract-change",
- "reason": "The failed-style dependency case now compares the normalized absolute path returned by the Vite host while preserving the same dependency registration requirement.",
+ "reason": "Vite failed-style handling still rejects invalid composition and registers the original absolute source dependency. The fixture now uses @utilities and a definitely missing named token, and expects the new utility diagnostic wording; this avoids relying on removed colon-token inference to create an error. Supplemental exact QA preserves every assertion while using Vite-normalized watcher paths on Windows; see parity/vite-portable-freeze-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
"approval": {
- "approvedBy": "Aron ",
- "approvedAt": "2026-08-01T12:53:04Z",
- "reviewRef": "codex-task:019fbcb1-2f4f-7b92-91bd-42420d48943c",
- "scopeDigest": "09fffd6b3e164cc50628cca661459c30f2993f80ccddbb9d33871ffcdd54ea75"
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "1a43c97de59724e8ebda646ef7ab03c269d01d9330096a5925c58a654e37245a"
}
},
{
@@ -35440,18 +38536,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-84acc9250ce6f4e8",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry.test.ts",
- "line": 134,
+ "line": 162,
"title": "serve transform keeps native imports before generated CSS when @master/css comes first",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "bfe4f31034e46c7b048b69f97912282d401c2e0780c795e8767bb01b4df53ba1"
+ "sourceDigest": "975d3f8ee561df1bbc9154fa876baf463de5a42a59dd1da68c58957a8edfc5ac"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry.test.ts :: serve transform keeps native imports before generated CSS when @master/css comes first -> packages/vite/tests/plugins/style-entry.test.ts :: serve transform keeps native imports before generated CSS when @master/css comes first. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "9b41b9b74de3e3702f4f92675fc458e47bad86a686168d67968cbb05700a587b"
+ }
},
{
"source": {
@@ -35474,18 +38577,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-52307c22d15207f6",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry.test.ts",
- "line": 152,
+ "line": 183,
"title": "non-generated modes emit package base CSS for Master imports without generated utilities",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8e8b406a4ab3318df37c9c2155d957b1b4861ea10ca17a2b4e2152f34d1eac11"
+ "sourceDigest": "6f6bc4bf8375de35332d1cc03b23bab31999090fc7c8258845d54da6d20996ee"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry.test.ts :: non-generated modes emit package base CSS for Master imports without generated utilities -> packages/vite/tests/plugins/style-entry.test.ts :: non-generated modes emit package base CSS for Master imports without generated utilities. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "535a2e9017bab1d926d890e60dc349a7585f846604305657e79adefd331e4251"
+ }
},
{
"source": {
@@ -35508,18 +38618,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-1923fa0372b572de",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry.test.ts",
- "line": 174,
+ "line": 205,
"title": "non-generated modes preserve native imports when consuming empty Master entries",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "570d701e4632725df4beaf5e4a59ce4e586503b31237fc2453cf303f68fed273"
+ "sourceDigest": "e30574feca9610a60158152c6d4695afffe82f4b556f5dbf7ca4a8406b06f5b2"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry.test.ts :: non-generated modes preserve native imports when consuming empty Master entries -> packages/vite/tests/plugins/style-entry.test.ts :: non-generated modes preserve native imports when consuming empty Master entries. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "edcc24a5c24b3a35feb7f1946036ff2ed0fdf7d93d8116f1af1966c39d19b56e"
+ }
},
{
"source": {
@@ -35543,18 +38660,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-45d9aa7a252223a7",
+ "id": "rc87-b4ead2e37b45fcfe",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry.test.ts",
- "line": 192,
- "title": "treats @master stylesheets as managed native CSS pruning entries",
+ "line": 226,
+ "title": "treats @master stylesheets as managed entries preserving native CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6c94e3b178bbe01e0e57d181162aeb777ae40bae42087ad23765824aa09993bd"
+ "sourceDigest": "e1470dd3f12aa3d74dd6c1bcb535dfcf7229b1e265628c8b0f8f9626d65bd683"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/vite/tests/plugins/style-entry.test.ts :: treats @master stylesheets as managed native CSS pruning entries -> packages/vite/tests/plugins/style-entry.test.ts :: treats @master stylesheets as managed entries preserving native CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "096772b826f7c1e045fc9d7486cbdce502632a0f1b1e2afab186bb66ff4f7d3c"
+ }
},
{
"source": {
@@ -35578,18 +38702,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-c9d8806f571973d4",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry.test.ts",
- "line": 211,
+ "line": 245,
"title": "ignores standalone @master stylesheets without @master/css imports",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "bef7d6eec609f4e97ce4962fc243a0743dcdaf764e5312684bda079ffb864f4b"
+ "sourceDigest": "e78dd26c1c95bd03fd9c437bdce427ae6a46a0f9da36c2fd0fb8abe3eb30f299"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vite/tests/plugins/style-entry.test.ts :: ignores standalone @master stylesheets without @master/css imports -> packages/vite/tests/plugins/style-entry.test.ts :: ignores standalone @master stylesheets without @master/css imports. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "4f89e7bafb00f040d44dcde93c74279727c21b0ae8f737575722193af30425a2"
+ }
},
{
"source": {
@@ -35617,7 +38748,7 @@
"id": "rc87-217809ee2d33ebd5",
"package": "vite",
"file": "packages/vite/tests/plugins/style-entry.test.ts",
- "line": 226,
+ "line": 260,
"title": "ignores non-CSS modules and unrelated CSS imports",
"runner": "vitest",
"kind": "test",
@@ -35835,7 +38966,7 @@
"id": "rc87-c29641de4f274800",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 184,
+ "line": 196,
"title": "build emits the server bundle",
"runner": "vitest",
"kind": "test",
@@ -35866,7 +38997,7 @@
"id": "rc87-d0705cbcfa174cf1",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 188,
+ "line": 200,
"title": "extension bundle keeps vscode external without default import interop",
"runner": "vitest",
"kind": "test",
@@ -35897,7 +39028,7 @@
"id": "rc87-efa470f41aa3ddad",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 197,
+ "line": 209,
"title": "extension bundle includes workspace language server resolution fallback",
"runner": "vitest",
"kind": "test",
@@ -35923,18 +39054,19 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-dc58165adfc83f37",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 205,
+ "line": 217,
"title": "extension bundle reuses one Master CSS output channel for the language client",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9002eee0c1d49c66489b3a7b41a182a966965d658252dc06f6f223cddbd8651a"
+ "sourceDigest": "dea2b8f3f53442915bc60760b589f3e499b2236db99483b835213e2f4380e8d4"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete bundled-output assertion against the baseline. The AST check retains one Master CSS output-channel construction and requires the LanguageClient identity masterCSS plus display name Master CSS, preserving both constructor arguments checked by the old regex. It additionally proves that the client options reference that same channel instance across bundled variable declarations or assignments, rather than merely containing an outputChannel key. All 27 staged-bundle and TextMate tests and VSCode lint pass."
},
{
"source": {
@@ -35959,7 +39091,7 @@
"id": "rc87-601763f2adabc06b",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 216,
+ "line": 250,
"title": "server bundle does not retain removed TypeScript semantic bindings",
"runner": "vitest",
"kind": "test",
@@ -35986,18 +39118,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-9b67d767485c6314",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 236,
+ "line": 270,
"title": "server bundle embeds referenced MDN JSON modules",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5f24fdedf1a5fc9732128c657b6d0d2bf77b57b9e9e22d396b8b86ab094156ae"
+ "sourceDigest": "2b196dce6198516b35e39a5ac9c4bfb9ee06bed92562db7dcd3d5e03eee61a92"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/vscode/tests/server-bundle.test.js :: server bundle embeds referenced MDN JSON modules -> packages/vscode/tests/server-bundle.test.js :: server bundle embeds referenced MDN JSON modules. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "30a55d824a9f7a56a27fc1607348e88e09834c8de26c7b5200ade5534685d412"
+ }
},
{
"source": {
@@ -36023,7 +39162,7 @@
"id": "rc87-5f8e7047f4a4566e",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 247,
+ "line": 280,
"title": "staged extension includes runtime packages for the current target",
"runner": "vitest",
"kind": "test",
@@ -36055,7 +39194,7 @@
"id": "rc87-b9356db2170186e5",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 254,
+ "line": 287,
"title": "staged extension includes runtime packages for win32-x64",
"runner": "vitest",
"kind": "test",
@@ -36086,7 +39225,7 @@
"id": "rc87-43ccec6b0379bfc5",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 260,
+ "line": 293,
"title": "staged extension preserves the Marketplace publisher by default",
"runner": "vitest",
"kind": "test",
@@ -36117,7 +39256,7 @@
"id": "rc87-3ab79834c8a53cc9",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 267,
+ "line": 300,
"title": "staged extension supports an Open VSX publisher override",
"runner": "vitest",
"kind": "test",
@@ -36148,7 +39287,7 @@
"id": "rc87-e98877e0f4b081bc",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 274,
+ "line": 307,
"title": "staged extension rejects unsupported targets",
"runner": "vitest",
"kind": "test",
@@ -36180,7 +39319,7 @@
"id": "rc87-9384b2b1423bc060",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 280,
+ "line": 313,
"title": "manifest contributes TextMate grammar, semantic token scopes, and CSS diagnostic defaults",
"runner": "vitest",
"kind": "test",
@@ -36211,7 +39350,7 @@
"id": "rc87-247a9f4efc2fc08a",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 331,
+ "line": 364,
"title": "staged extension includes shared TextMate grammar asset",
"runner": "vitest",
"kind": "test",
@@ -36237,18 +39376,19 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-e28158711048da1b",
"package": "vscode",
"file": "packages/vscode/tests/server-bundle.test.js",
- "line": 342,
+ "line": 375,
"title": "staged language server starts without workspace node_modules and shuts down",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "740ea6453b399bdf9c9ed41442c7e5df5aa8edabccd6fdf743007004d19b7c92"
+ "sourceDigest": "9953fdeb374ec1b6fc180e232b1dfee49ee1dbccd428a542de919aa8472a6bc0"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Retained the historical test identity after reviewing the complete staged-server case. All initialization capabilities, isolated workspace without node_modules, shutdown and zero exit-status assertions remain verbatim. The only added block sends initialized/didOpen and checks a real LSP completion maps :first to :first-child. The focused staged test and VSCode lint pass locally with the unchanged request deadline; cross-platform completion timing remains subject to the active Windows run."
},
{
"source": {
@@ -36304,7 +39444,7 @@
"id": "rc87-046dea6e5291ed87",
"package": "vscode",
"file": "packages/vscode/tests/textmate-grammar.test.js",
- "line": 96,
+ "line": 123,
"title": "does not change native CSS TextMate scopes when injected",
"runner": "vitest",
"kind": "test",
@@ -36337,7 +39477,7 @@
"id": "rc87-2037b28961fe81ec",
"package": "vscode",
"file": "packages/vscode/tests/textmate-grammar.test.js",
- "line": 210,
+ "line": 237,
"title": "highlights keyframes nested inside theme directives with native CSS scopes",
"runner": "vitest",
"kind": "test",
@@ -36368,7 +39508,7 @@
"id": "rc87-7c55e7b0131fc1c7",
"package": "vscode",
"file": "packages/vscode/tests/textmate-grammar.test.js",
- "line": 241,
+ "line": 268,
"title": "documents native CSS punctuation scopes used by semantic token mappings",
"runner": "vitest",
"kind": "test",
@@ -36395,18 +39535,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-69b24f0ff70fd33c",
"package": "vscode",
"file": "packages/vscode/tests/textmate-grammar.test.js",
- "line": 277,
+ "line": 304,
"title": "highlights every Master CSS directive keyword",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "95c367ee084d6559d985269d1fee310390d8507eca6ceaf3fbf2c6cdafe7f8fd"
+ "sourceDigest": "12645ef688592a2ef9c96d88708d4b63ca3da0f6d6cea7f31cdcc128c0a007ed"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Removed @defaults/@components are excluded from the supported keyword list; directive spans include @ and must not split it into the old punctuation scope. Compose-removal integration of 9d9817241: Use supported safelist class-list highlighting and native declarations in selector/variant fixtures; exclude Compose from supported directive keywords, and verify removed Compose receives exactly native CSS highlighting in an additional case.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "4485a28a373ef924356d4c2a06943661ebf67471907c1d7a4c9963b5811b294f"
+ }
},
{
"source": {
@@ -36428,18 +39575,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-5b8cc29aa8a94cb9",
"package": "vscode",
"file": "packages/vscode/tests/textmate-grammar.test.js",
- "line": 322,
+ "line": 346,
"title": "highlights directive preludes, strings, class lists, and dynamic patterns",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "35aade9d2c0c386992964071759c5214c6ac350805b003b5a839c9f27634be2f"
+ "sourceDigest": "f618a028705a4f002cabc9c7f9ca14b7a929e90be1f80b72cc90ae74a401c2e8"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Named utility and token-pattern syntax changes; query scopes include @. The duplicate fg-primary assertion was replaced by an explicit native background-color property assertion. Compose-removal integration of 9d9817241: Use supported safelist class-list highlighting and native declarations in selector/variant fixtures; exclude Compose from supported directive keywords, and verify removed Compose receives exactly native CSS highlighting in an additional case.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "0f760bcd0ef9d8f825758f960ad2e1fa96efe73851fa8c7053d1d66d822bba92"
+ }
},
{
"source": {
@@ -36461,18 +39615,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-a6cb1f63877dcff7",
"package": "vscode",
"file": "packages/vscode/tests/textmate-grammar.test.js",
- "line": 369,
+ "line": 392,
"title": "highlights custom variants, nested selectors, queries, and values",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4d6d31a2ec74ae42c8d3376ecba9355f8d129c4a29bb86ed876a13c4fb6aa662"
+ "sourceDigest": "161f82b215b02c2f3db4ebed9afa34317d801b91f48c7421741b79117ba198d7"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The injected CSS grammar leaves native @media with the native grammar scope; Master @custom-variant/@slot spans include @; selector/value checks remain. Compose-removal integration of 9d9817241: Use supported safelist class-list highlighting and native declarations in selector/variant fixtures; exclude Compose from supported directive keywords, and verify removed Compose receives exactly native CSS highlighting in an additional case.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "94da571c953a9e936c238292ce3359013efc5534cfe5af396436ee2bfde146f7"
+ }
},
{
"source": {
@@ -36494,18 +39655,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-5a3a055267fe6e03",
"package": "vscode",
"file": "packages/vscode/tests/textmate-grammar.test.js",
- "line": 397,
+ "line": 450,
"title": "highlights detailed Master directive syntax without misclassifying native pieces",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6d766679256afc405847fd9c2fafbefc669cc3b5c10a54d0e8e51401cf4d3b49"
+ "sourceDigest": "4fd16e059938da8cdf902849ed38ae9a0a2237003661b1662b9a39dadde16efe"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: The injected grammar preserves native --alpha() syntax instead of assigning a Master function scope, uses explicit var(--size), named tokens and token namespace patterns; native comment/number/unit checks remain. Compose-removal integration of 9d9817241: Use supported safelist class-list highlighting and native declarations in selector/variant fixtures; exclude Compose from supported directive keywords, and verify removed Compose receives exactly native CSS highlighting in an additional case.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "f4040e5607bd1d6c0056ffddd4c2178ec35c1fd776d761837a95fd6a32a91c3c"
+ }
},
{
"source": {
@@ -36526,18 +39694,25 @@
],
"priority": "P2"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-d6f1e639b422f215",
"package": "vscode",
"file": "packages/vscode/tests/textmate-grammar.test.js",
- "line": 471,
+ "line": 529,
"title": "does not highlight directives inside comments or quoted strings",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0254de95692502a2a4798f3f7f6b5c99289a91caff2c6390261a1553773cd462"
+ "sourceDigest": "12a0a3e4942a597e0bee57bea54d92cc0aa6a35dca0aa1b3531af8cdcc6e2fa4"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of this exact source/target pair: Comment/string exclusion remains; the only real directive token now includes the complete @theme text.",
+ "approval": {
+ "approvedBy": "Aron (explicit QA approval in this task)",
+ "approvedAt": "2026-09-27T17:33:53.038Z",
+ "reviewRef": "parity/language-token-freeze-approval.md#approved-scope",
+ "scopeDigest": "018691a235e8bd20080a9473f8e20ecf63ae95345454aed8e3d673dfeb6267e6"
+ }
},
{
"source": {
@@ -36565,7 +39740,7 @@
"id": "rc87-62dae87558a12abc",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 202,
+ "line": 203,
"title": "exports the plugin as the default export",
"runner": "vitest",
"kind": "test",
@@ -36599,7 +39774,7 @@
"id": "rc87-1cfdc65db7f89e38",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 234,
+ "line": 235,
"title": "installs a pre style loader for managed CSS entries",
"runner": "vitest",
"kind": "test",
@@ -36633,7 +39808,7 @@
"id": "rc87-fe594c1c0192c08b",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 257,
+ "line": 258,
"title": "rewrites managed CSS entries to the generated CSS virtual import",
"runner": "vitest",
"kind": "test",
@@ -36663,18 +39838,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-fa92a6eb10d7d185",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 283,
+ "line": 284,
"title": "keeps imported native CSS and keyframes in the generated CSS virtual module",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "aa9c78d103562eac34166d1e850243658c89f65987015732452980bbea3f6561"
+ "sourceDigest": "5846a220b3465da1f416f0002ce1be8b23c8b3c1953e81e1b51f90cc50edc476"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/webpack/tests/plugin.test.ts :: keeps imported native CSS and keyframes in the generated CSS virtual module -> packages/webpack/tests/plugin.test.ts :: keeps imported native CSS and keyframes in the generated CSS virtual module. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "cac5793a17e06c88d410946c5b7e0dbdc395dc10e69e554343d715838725478c"
+ }
},
{
"source": {
@@ -36702,7 +39884,7 @@
"id": "rc87-d74106ef23e15621",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 332,
+ "line": 331,
"title": "scans modules that expose source through originalSource()",
"runner": "vitest",
"kind": "test",
@@ -36732,18 +39914,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-41097ea300e09962",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 357,
+ "line": 356,
"title": "locally lowers @compose in CSS Modules without rewriting to the virtual CSS import",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "226c5a78758a6a22ae86848604e962780871200bef0442494153d1688e4860c2"
+ "sourceDigest": "bf1d0f61bc562d04dde4dd9d5c02bb1fe05e726c14eb83595c260367a25ad80c"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA approval of the exact utility registration migration for \"locally lowers @compose in CSS Modules without rewriting to the virtual CSS import\". The old @components registration becomes @utilities, with the corresponding utilities layer metadata or layer assertion where present. All other assertions in this case remain. Native @layer components stays valid and the four unrelated native-layer fixture renames are excluded. Scope is the reviewed 24-case patch 92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "a5211e5bb8a8f1846c59fd20caba9aca19df398b162d387d7dc49861749f13fc"
+ }
},
{
"source": {
@@ -36768,18 +39957,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-b4ff936f0bef3660",
+ "id": "rc87-bc3220b00a9e8560",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 387,
- "title": "dedupes local theme variables already emitted by global style entries",
+ "line": 385,
+ "title": "retains local resources separately when discovered entries are not guaranteed loaded",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2330b2e08e2fd2ee041c5e94716d9508b700237aedb5e9243d00a6f8b264ed50"
+ "sourceDigest": "70e4a509a9a9983922619f170f9deb0bfdd7fe0c99eca644284372b71b84e0ff"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/webpack/tests/plugin.test.ts :: dedupes local theme variables already emitted by global style entries -> packages/webpack/tests/plugin.test.ts :: retains local resources separately when discovered entries are not guaranteed loaded. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "4583189065c6da7067b60e7decbda244c192cc01219373e885183bb327ae7ba6"
+ }
},
{
"source": {
@@ -36803,18 +39999,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-7b3f20f279ae6e88",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 412,
+ "line": 411,
"title": "style loader keeps local style dependencies registered after invalid @compose",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5f54a0e92cfaa11da10f49e7dce8e6fd43089d99e19336d1b595d76dea4e6b57"
+ "sourceDigest": "b6791a110c5ff6b58d3914a5c7f475c9e3198f2cb249e751515b0f4b61a437f3"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/webpack/tests/plugin.test.ts :: style loader keeps local style dependencies registered after invalid @compose -> packages/webpack/tests/plugin.test.ts :: style loader keeps local style dependencies registered after invalid @compose. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "9611836c35e22f730da163b1f745119e5970471e7129853431202cdb96dab6c7"
+ }
},
{
"source": {
@@ -36838,18 +40041,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-7551338099ad9f97",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 435,
+ "line": 434,
"title": "locally lowers explicit @reference CSS Modules and reports reference dependencies",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3f0b1f051db7c8a407fa8c66018882987937abeec15fb902c2457a040cf2d620"
+ "sourceDigest": "4f316caa734bbdeb338d95f713309505dcd07aecbebe1c69dd03546479dd20c5"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/webpack/tests/plugin.test.ts :: locally lowers explicit @reference CSS Modules and reports reference dependencies -> packages/webpack/tests/plugin.test.ts :: locally lowers explicit @reference CSS Modules and reports reference dependencies. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "fb1f83f1c6669fbf95186d2821b8ab4796a2949b806a1435d02dd0cf4d1b4374"
+ }
},
{
"source": {
@@ -36877,7 +40087,7 @@
"id": "rc87-04417c896081dcd2",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 475,
+ "line": 500,
"title": "leaves ordinary CSS unchanged in the style loader helper",
"runner": "vitest",
"kind": "test",
@@ -36912,7 +40122,7 @@
"id": "rc87-18d82ac9694ae950",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 492,
+ "line": 517,
"title": "strips Master directives from package CSS files before css-loader sees them",
"runner": "vitest",
"kind": "test",
@@ -36947,19 +40157,19 @@
"id": "rc87-6c18481fc5cdfa31",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 506,
+ "line": 531,
"title": "resolves virtual:master-css-manifest to a JS facade and external JSON asset",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "825fbb83678c41c1bda9025b82f6d7e0e8dd5fbb774f4793fa605974249e5ab1"
+ "sourceDigest": "c260d70c0ab9722d3fd96f1fc881cfbb35b105f634e69b0b2bc31ce76080f438"
},
"proof": "approved-contract-change",
- "reason": "The Webpack default manifest facade retains the refactor contract import-first assertions and adds the user-approved legacy Safari compatibility path: fetch only when JSON import-loader construction throws SyntaxError, without changing published APIs, exports, virtual module IDs, or rendering modes.",
+ "reason": "Webpack retains its virtual JS facade plus external JSON asset and version:1 assertions. The audited target explicitly reads .default from the JSON module and covers the previously approved Safari fetch fallback; the negative inline-CSS assertion uses current font-weight:bold spelling. This Webpack contract is separate from the approved Next ESM delivery change.",
"approval": {
- "approvedBy": "Aron ",
- "approvedAt": "2026-07-28T12:14:27Z",
- "reviewRef": "codex-task:019f8ebd-c9e4-73b1-814b-5de5e204ca41",
- "scopeDigest": "7b3ec6136739fc76be6f6ba28e205d33af22252bef125fcb695a9057cd99cc54"
+ "approvedBy": "Aron (explicit implementation plan in this task)",
+ "approvedAt": "2026-09-25T08:47:41.470Z",
+ "reviewRef": "parity/utility-contract-validation.md#migration-evidence-audit",
+ "scopeDigest": "cba967be1d780a9c0c77bff938506266b45e750eca67393dc77ce023bb451470"
}
},
{
@@ -36988,7 +40198,7 @@
"id": "rc87-83df9a29b279d577",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 534,
+ "line": 559,
"title": "adds resolve file dependencies to Set and array-like containers",
"runner": "vitest",
"kind": "test",
@@ -37023,7 +40233,7 @@
"id": "rc87-487a283b7e430932",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 547,
+ "line": 572,
"title": "resolves virtual:master-css-manifest to an inline module in development",
"runner": "vitest",
"kind": "test",
@@ -37053,18 +40263,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-1300f23ca2eac111",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 572,
+ "line": 597,
"title": "keeps virtual manifest file dependencies after invalid CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2f6ede7b16a00c1b552f104004284f274e11b02eea476cda267856356a9045e7"
+ "sourceDigest": "d7bc84f5bde4c4581e6cdc6e79c0d4d184c82dcf3a2ac542be71601c7c439034"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/webpack/tests/plugin.test.ts :: keeps virtual manifest file dependencies after invalid CSS -> packages/webpack/tests/plugin.test.ts :: keeps virtual manifest file dependencies after invalid CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "a63d5c3745d1b159e4d91446e76ca14f2f314db8ed303795469fb8517486ae94"
+ }
},
{
"source": {
@@ -37092,7 +40309,7 @@
"id": "rc87-dde33348ed8edfef",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 614,
+ "line": 639,
"title": "resolves virtual:master-css-emitted-globals to a JS virtual module",
"runner": "vitest",
"kind": "test",
@@ -37127,7 +40344,7 @@
"id": "rc87-692ac35eb7556a3f",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 636,
+ "line": 661,
"title": "resolves ?master-css-manifest imports to per-file JS facades and external JSON assets",
"runner": "vitest",
"kind": "test",
@@ -37169,7 +40386,7 @@
"id": "rc87-ee5192bc2b047526",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 669,
+ "line": 694,
"title": "resolves ?master-css-manifest imports to inline modules in development",
"runner": "vitest",
"kind": "test",
@@ -37199,18 +40416,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-b8a6d8670385ca12",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 694,
+ "line": 719,
"title": "keeps ?master-css-manifest file dependencies after invalid CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "bf4e13f7244c82ccefc5817857f77b61514b64a4abe7ce52f57b55d61a3cd3bf"
+ "sourceDigest": "19d3d8d7c2cb3538f1af87dbb4b8c6109fd2f4cba0a7d7dfdc6e93fac477f806"
},
- "proof": "exact-source"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact final review scope: packages/webpack/tests/plugin.test.ts :: keeps ?master-css-manifest file dependencies after invalid CSS -> packages/webpack/tests/plugin.test.ts :: keeps ?master-css-manifest file dependencies after invalid CSS. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Reject removed Compose with its removal diagnostic; use native declarations/variants for successful recovery while retaining dependency, watcher, error-location and output assertions.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "9fd1a009e69c3c9e317b8bcfaf3c07b795c81079b1a982c8546c76c0a6c74e06"
+ }
},
{
"source": {
@@ -37238,7 +40462,7 @@
"id": "rc87-476b86b0ce18f0ff",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 733,
+ "line": 758,
"title": "resolves virtual CSS module imports to the generated CSS virtual module",
"runner": "vitest",
"kind": "test",
@@ -37272,7 +40496,7 @@
"id": "rc87-b0bf669f8620bb63",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 755,
+ "line": 780,
"title": "resolves CSS @import virtual utilities to the generated CSS virtual module",
"runner": "vitest",
"kind": "test",
@@ -37306,7 +40530,7 @@
"id": "rc87-146794a4d143347a",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 777,
+ "line": 802,
"title": "leaves unrelated CSS @import unresolved",
"runner": "vitest",
"kind": "test",
@@ -37340,7 +40564,7 @@
"id": "rc87-0171357361ca064a",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 202,
+ "line": 204,
"title": "leaves CSS @import @master/css package imports unchanged",
"runner": "vitest",
"kind": "test",
@@ -37375,7 +40599,7 @@
"id": "rc87-9d4259fc34ceab92",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 224,
+ "line": 226,
"title": "leaves non-CSS @master/css imports unchanged",
"runner": "vitest",
"kind": "test",
@@ -37411,7 +40635,7 @@
"id": "rc87-b6e9332526ceaaad",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 246,
+ "line": 248,
"title": "adds managed CSS entry files as virtual manifest dependencies",
"runner": "vitest",
"kind": "test",
@@ -37442,19 +40666,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-b0d4a6a4453fb277",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 267,
+ "line": 269,
"title": "adds managed CSS import graph as virtual manifest dependencies",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "076552e3785dfc1f28b17f665792e04a100dfa32901899d39bb08046fddaa79e"
+ "sourceDigest": "706a50c63c5694da42d93b39ba1959eb32cabb7c91cb3c7521cba6a3aa9ade28"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/webpack/tests/plugin.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/webpack/tests/plugin.test.ts :: adds managed CSS import graph as virtual manifest dependencies -> packages/webpack/tests/plugin-runtime.test.ts :: adds managed CSS import graph as virtual manifest dependencies. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "4061950ae36f82f4406f3906b7f9d1b634bed38253a396f58994c25cdd3053d0"
+ }
},
{
"source": {
@@ -37477,19 +40707,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-613968e45bb4eca2",
+ "id": "rc87-33bf64a0000c0693",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 305,
- "title": "prunes managed CSS entry native CSS and uses its config",
+ "line": 307,
+ "title": "explicitly prunes managed CSS entry native CSS and uses its config",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "fa8e911c8399f4fd2e457ae7f4688239d4d3c5eab14ee8507751751abca4408a"
+ "sourceDigest": "060c984aec5910fd0a67376c16b1d9ddb23a1d0023d9f6078d4fd47d345e1229"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/webpack/tests/plugin.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/webpack/tests/plugin.test.ts :: prunes managed CSS entry native CSS and uses its config -> packages/webpack/tests/plugin-runtime.test.ts :: explicitly prunes managed CSS entry native CSS and uses its config. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "0d01012ccde011f86180a3561de7de8c4f8174617712869362caa2315643a567"
+ }
},
{
"source": {
@@ -37512,19 +40748,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-dc35f7170131e48f",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 360,
+ "line": 364,
"title": "includes package base CSS for managed package imports",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5d351cddc52f9c442504b29e8ffa05627bbb93ac480d88fc5d3ccebfe30091db"
+ "sourceDigest": "59118a7359f28f2db016bac7b037da05c485d347c555db1d34b20d2e7ed54ee1"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/webpack/tests/plugin.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/webpack/tests/plugin.test.ts :: includes package base CSS for managed package imports -> packages/webpack/tests/plugin-runtime.test.ts :: includes package base CSS for managed package imports. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "d59ac6995ea65114f5f702409ed8523a0a18a937cef9ba898e4c67896cf7d15e"
+ }
},
{
"source": {
@@ -37547,19 +40789,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-e7d134890a94e6d9",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 381,
+ "line": 386,
"title": "keeps managed CSS fallback reset dependencies after failed style registration",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1da3187b3f8f63477a2c0d1871276e1e8e3da0d34edb560e27f5822137221e8d"
+ "sourceDigest": "a491a165eba005ec99a62a7f48a237e6bb33961f8afd9876e120e8f3e5b9f3bf"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/webpack/tests/plugin.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/webpack/tests/plugin.test.ts :: keeps managed CSS fallback reset dependencies after failed style registration -> packages/webpack/tests/plugin-runtime.test.ts :: keeps managed CSS fallback reset dependencies after failed style registration. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md. Compose-removal integration of 9d9817241: Replace successful Compose expansion fixtures with explicit native declarations, theme variables and local variants; retain the applicable CSS, ordering, reference/resource, ownership and integration assertions. Composition provenance assertions disappear with the removed API.",
+ "approval": {
+ "approvedBy": "Aron (authorized complete compose removal and integration in this task)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/compose-removal-integration-review.md",
+ "scopeDigest": "429ad5cd1c84587a8f3f178b061fe7b2fcf079ddae5f304631ba03d21a441fa5"
+ }
},
{
"source": {
@@ -37588,7 +40836,7 @@
"id": "rc87-6b5185abb25057bd",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 415,
+ "line": 420,
"title": "resets scanner when the default CSS manifest changes in watch mode",
"runner": "vitest",
"kind": "test",
@@ -37618,19 +40866,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-9b20bf9cb7a80c61",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 439,
+ "line": 444,
"title": "resets scanner when a managed CSS import dependency changes in watch mode",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0782ced5abc27d2041e0e169cf7d508561b50b56aa2cb786e01606e238c28ab0"
+ "sourceDigest": "740393df87f6f2c65d5c03abf2bd1930e926676d2147e3b2b2c499e9cc3a0759"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/webpack/tests/plugin.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/webpack/tests/plugin.test.ts :: resets scanner when a managed CSS import dependency changes in watch mode -> packages/webpack/tests/plugin-runtime.test.ts :: resets scanner when a managed CSS import dependency changes in watch mode. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "a48fe43f9a619cf94b57189267b9b9e685375099a2b31c3a54250734265ccae7"
+ }
},
{
"source": {
@@ -37653,19 +40907,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-61248027460947bf",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 513,
+ "line": 523,
"title": "registers reset dependencies with the active compilation",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b1effb786b4dc7ea737e4ed3cedeae80e7f9f2c75f9964981ec10da9b95c63c3"
+ "sourceDigest": "e671c07f4df0c0d4176f7bb624684d03a4c5c8f334f5cc3b8bf76bdd84279208"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/webpack/tests/plugin.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/webpack/tests/plugin.test.ts :: registers reset dependencies with the active compilation -> packages/webpack/tests/plugin-runtime.test.ts :: registers reset dependencies with the active compilation. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "d996bb6b707dc1184dd1ec35097b1c03787e0b6389acbfbc76ded9b7a18449b8"
+ }
},
{
"source": {
@@ -37694,7 +40954,7 @@
"id": "rc87-eb9ef45be691966d",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 536,
+ "line": 547,
"title": "does not reset scanner when a non-manifest file changes in watch mode",
"runner": "vitest",
"kind": "test",
@@ -37724,19 +40984,25 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
"id": "rc87-c20408a4ef84b2ca",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 559,
+ "line": 570,
"title": "finishModules.tapPromise awaits all scanner.scanModule() calls before resolving",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a60aee202e24ccd3e183f79dab3247726c6f421a12b8d178687e1b7b4f6c9469"
+ "sourceDigest": "d54350752a96e296354b2674634535133213c23e5de8a9d4c68f9aa9d90b1a37"
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/webpack/tests/plugin.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact moved review scope: packages/webpack/tests/plugin.test.ts :: finishModules.tapPromise awaits all scanner.scanModule() calls before resolving -> packages/webpack/tests/plugin-runtime.test.ts :: finishModules.tapPromise awaits all scanner.scanModule() calls before resolving. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "72cea9a98cae01939a0f25735a17e8be5041d8fb35622635e372565f2b452673"
+ }
},
{
"source": {
@@ -37764,7 +41030,7 @@
"id": "rc87-c46d2199c730ba14",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 597,
+ "line": 608,
"title": "regression: SyncHook + tap(async) DOES NOT await — proves the original bug",
"runner": "vitest",
"kind": "test",
@@ -37799,7 +41065,7 @@
"id": "rc87-51d743a086a37163",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 614,
+ "line": 625,
"title": "per-compilation pendingByPath is isolated across watch rebuilds",
"runner": "vitest",
"kind": "test",
@@ -37834,7 +41100,7 @@
"id": "rc87-914385780445e8fc",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 645,
+ "line": 656,
"title": "modules without a resource path are skipped without throwing",
"runner": "vitest",
"kind": "test",
@@ -37869,7 +41135,7 @@
"id": "rc87-98b84a9b4412e39f",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 672,
+ "line": 683,
"title": "internal config virtual modules are not re-scanned",
"runner": "vitest",
"kind": "test",
@@ -37904,7 +41170,7 @@
"id": "rc87-90b7d19662b2d8d1",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 695,
+ "line": 706,
"title": "registers a runtime entry only when runtime injection is enabled",
"runner": "vitest",
"kind": "test",
@@ -37940,7 +41206,7 @@
"id": "rc87-fea8f823ff5316af",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 713,
+ "line": 724,
"title": "injects classic runtime script and pure-runtime preloads into emitted HTML assets",
"runner": "vitest",
"kind": "test",
@@ -37975,7 +41241,7 @@
"id": "rc87-e769bf053f880b75",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 741,
+ "line": 752,
"title": "injects module runtime preloads for module output",
"runner": "vitest",
"kind": "test",
@@ -38005,19 +41271,30 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "approved-contract-change",
"target": {
- "id": "rc87-6ef857f5c3de37b0",
+ "id": "rc87-9998c26f558f3cfd",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 763,
- "title": "does not duplicate runtime script or preload tags",
+ "line": 774,
+ "title": "does not duplicate runtime script or preload tags with \" quotes",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2235006ca674396bf2635b61e2fefb4c5bb18b6e3eb9e6f7884df590cfbf104c"
+ "sourceDigest": "3ef8af062d32082439cbdd02e2a920d3cd7a27ab6b1a4c9d083ab583381fc871",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "\""
+ }
},
- "proof": "exact-source-relocated",
- "relocatedFrom": "packages/webpack/tests/plugin.test.ts"
+ "proof": "approved-contract-change",
+ "reason": "Explicit QA of the exact renamed review scope: packages/webpack/tests/plugin.test.ts :: does not duplicate runtime script or preload tags -> packages/webpack/tests/plugin-runtime.test.ts :: does not duplicate runtime script or preload tags with \" quotes. The frozen old/new case bodies and review rationale are pinned by the review hashes in parity/final-freeze-contract-approval.md.",
+ "approval": {
+ "approvedBy": "Aron (explicit approval of all three remaining exact freeze review scopes)",
+ "approvedAt": "2026-09-28T02:45:50.429Z",
+ "reviewRef": "parity/final-freeze-contract-approval.md",
+ "scopeDigest": "dfad43d91174e36f66c404d59f5649cca3c24d534390d77b59ad89de872b3e34"
+ }
},
{
"source": {
@@ -38041,36 +41318,37 @@
],
"priority": "P0"
},
- "status": "preserved-exact",
+ "status": "verified-superset",
"target": {
"id": "rc87-2944b251d4f939aa",
"package": "webpack",
"file": "packages/webpack/tests/runtime-e2e.test.ts",
- "line": 136,
+ "line": 119,
"title": "injects runtime assets and preserves utility layer precedence over global CSS",
"runner": "vitest",
"kind": "e2e",
- "sourceDigest": "06eaaf64975216762e7ea1e54a5779b3de4c49bbde3c40dc1c33f44413f39daa"
+ "sourceDigest": "728c17b3b3bc10f75030905005603902ced7c56038bcb6d6cf3b046db1f295e2"
},
- "proof": "exact-source"
+ "proof": "verified-superset",
+ "reason": "Reviewed the complete Webpack production-browser case and asset producers. Production HTML minification removes optional attribute quotes, so the raw HTML substring checks are represented by browser DOM checks with the same rel/as/href, defer, empty crossorigin and last-body-element requirements. The missing exact Manifest href prefix and empty crossorigin checks were restored, and singleton counts strengthen duplicate-injection coverage. CSS display/layer placement assertions remain. The rebuilt published bundle passes the browser case, lint passes, and the unchanged shared manifest-preload unit test still pins exact serializer bytes. This verifies preserved injection semantics, not parity of the bundler's optional quote formatting."
}
],
"added": [
{
- "id": "rc87-afcc9d12f3e25e40",
+ "id": "rc87-01eda7588523b846",
"package": "astro",
"file": "packages/astro/tests/core.test.ts",
- "line": 99,
- "title": "honors injectRuntime=false in progressive mode",
+ "line": 100,
+ "title": "does not inject client runtime or middleware by default",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8c78a46988a951dd5047dbbc3219c783a9e43affc41890602b19d92f115b1837"
+ "sourceDigest": "14801c7e07be2f4ba0a8dfdd7863be48fdb4a12b5a9bd6c7511ebca0d9c966af"
},
{
"id": "rc87-15c2bd9299dd6e08",
"package": "astro",
"file": "packages/astro/tests/core.test.ts",
- "line": 200,
+ "line": 201,
"title": "prefixes static hydration manifests with the configured Astro base",
"runner": "vitest",
"kind": "test",
@@ -38084,7 +41362,17 @@
"title": "does not duplicate globals already emitted by Astro stylesheets",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8fab267e8b3f7279877c9eae5c258506fc331235afb922445889d8a9cc3454f5"
+ "sourceDigest": "f298d1df9d693b05766a5a1d10326a7c73f3c8824374314bf45ce3e92450b7bc"
+ },
+ {
+ "id": "rc87-6825efdff1633944",
+ "package": "astro",
+ "file": "packages/astro/tests/theme-reference-e2e.test.ts",
+ "line": 12,
+ "title": "delivers referenced native variables through an Astro scoped style",
+ "runner": "vitest",
+ "kind": "e2e",
+ "sourceDigest": "4c7bef5235dde56760a5d64063ac912e2eb3eac2df600e2b97d20c6ab42fe380"
},
{
"id": "rc87-7d61437b53e96dfd",
@@ -38104,7 +41392,7 @@
"title": "loads an explicit engine artifact file URL in Node",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b23f4c233cb455dbda3f85d10ad5d2a89142de9119dbb0876bf4671984d3a66e"
+ "sourceDigest": "e151c7127216ab8d634bd3438b9ff983d37cf226fec75ac572d1e5174a830f72"
},
{
"id": "rc87-d12c7af1b8710195",
@@ -38114,7 +41402,7 @@
"title": "registers emitted globals after the Wasm-owned session starts",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "005a138e9c39c9d1eee2647f2a62834ac01bb18d97a1c023c509985d551b6e54"
+ "sourceDigest": "5b9fbac7719126f1658afe2d9c8109cfde9d70dafb981469cd1b79166a1dc709"
},
{
"id": "rc87-b26d4cd665f699cf",
@@ -38127,4400 +41415,21160 @@
"sourceDigest": "981c025bda52f5b2a2486f0a433f401e926f2fb07cd6427d2c52b00c15044baa"
},
{
- "id": "rc87-bec36a7ab9d932a8",
+ "id": "rc87-e074e5d00c0d1ba5",
"package": "binding",
- "file": "packages/binding/tests/loader.test.ts",
- "line": 73,
- "title": "rejects binding ABI 5 metadata after the engine surface expansion",
+ "file": "packages/binding/tests/bug-hunt-host-import-ownership.test.ts",
+ "line": 7,
+ "title": "BH-0004 host import ownership has native/Wasm parity and preserves child external imports",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "88069c88326c65a55d363ccff102421ff5211e59fa0eb524191c8b915ed6cb56"
+ "sourceDigest": "f4158106692cd1fe3f93a5119e7f4aa32cc82e73f0051a3f4c55c0f24e72a3c9"
},
{
- "id": "rc87-5afff731b12da503",
- "package": "cli",
- "file": "packages/cli/tests/rc87-core.test.ts",
- "line": 33,
- "title": "uses the explicit generate command instead of rc.87 root scan options",
+ "id": "rc87-56759027bb0434d0",
+ "package": "binding",
+ "file": "packages/binding/tests/bug-hunt-stylesheet-discovery.test.ts",
+ "line": 17,
+ "title": "BH-0004 native/Wasm discovery retains file boundaries, occurrences and UTF-16 import spans",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "09feedea3689547173230bf101b59a128fafe5467d72d2ce8ca5c2f77b294155"
+ "sourceDigest": "1e0c11bec7d8fcb29f29819d922f5bc0ce008be38e3cfd81f95b2915a7aa0346"
},
{
- "id": "rc87-4b144ace73024a4e",
- "package": "cli",
- "file": "packages/cli/tests/rc87-core.test.ts",
+ "id": "rc87-ab2f0729849267e0",
+ "package": "binding",
+ "file": "packages/binding/tests/bug-hunt-stylesheet-discovery.test.ts",
"line": 42,
- "title": "does not restore the removed rc.87 extract command shim",
+ "title": "`BH-0004 ${binding} discovery rejects cycles`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "36db4d9fa6ca195b9bbe8b190ee8c5d72b0687acfeedb0e35936d30ac69c3bda",
+ "sourceDigest": "d9c0b68cc0e16e71b1c791ac7470c6c9ce4fff92c293aad6e6eb85cce92d7b1d"
+ },
+ {
+ "id": "rc87-ab2f0729849267e0",
+ "package": "binding",
+ "file": "packages/binding/tests/bug-hunt-stylesheet-discovery.test.ts",
+ "line": 42,
+ "title": "`BH-0004 ${binding} discovery rejects cycles`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d9c0b68cc0e16e71b1c791ac7470c6c9ce4fff92c293aad6e6eb85cce92d7b1d"
+ },
+ {
+ "id": "rc87-9f0ccf2a6e9fd1c8",
+ "package": "binding",
+ "file": "packages/binding/tests/bug-hunt-stylesheet-discovery.test.ts",
+ "line": 51,
+ "title": "`BH-0004 ${binding} discovery validates import syntax`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "22cc61e99753e708a4c1689778f03154bfa8a8502fd0600ec9311be185ff8d77"
+ },
+ {
+ "id": "rc87-9f0ccf2a6e9fd1c8",
+ "package": "binding",
+ "file": "packages/binding/tests/bug-hunt-stylesheet-discovery.test.ts",
+ "line": 51,
+ "title": "`BH-0004 ${binding} discovery validates import syntax`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "22cc61e99753e708a4c1689778f03154bfa8a8502fd0600ec9311be185ff8d77"
+ },
+ {
+ "id": "rc87-16ff5e189a86db29",
+ "package": "binding",
+ "file": "packages/binding/tests/bug-hunt-stylesheet-discovery.test.ts",
+ "line": 57,
+ "title": "`BH-0004 ${binding} discovery respects disposal`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6845eec8c47a30ff290f35f06863f905bfe2723490dfc75cb2f7c277300f5702"
+ },
+ {
+ "id": "rc87-16ff5e189a86db29",
+ "package": "binding",
+ "file": "packages/binding/tests/bug-hunt-stylesheet-discovery.test.ts",
+ "line": 57,
+ "title": "`BH-0004 ${binding} discovery respects disposal`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6845eec8c47a30ff290f35f06863f905bfe2723490dfc75cb2f7c277300f5702"
+ },
+ {
+ "id": "rc87-354914adf5026598",
+ "package": "binding",
+ "file": "packages/binding/tests/document-preparation.test.ts",
+ "line": 6,
+ "title": "native prepared documents reject stale IDs without consuming newer work",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "28a4f88e144ee777c34c3e48545f1348934ada9efb368a5f589d027c1af986b2",
"matrix": {
"index": 0,
"resolved": true,
- "value": "extract"
+ "value": "native"
}
},
{
- "id": "rc87-6dbaed8ad2db027d",
- "package": "cli",
- "file": "packages/cli/tests/rc87-core.test.ts",
- "line": 42,
- "title": "does not restore the removed rc.87 render command shim",
+ "id": "rc87-dbf611486a31ebfd",
+ "package": "binding",
+ "file": "packages/binding/tests/document-preparation.test.ts",
+ "line": 6,
+ "title": "wasm prepared documents reject stale IDs without consuming newer work",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "36db4d9fa6ca195b9bbe8b190ee8c5d72b0687acfeedb0e35936d30ac69c3bda",
+ "sourceDigest": "28a4f88e144ee777c34c3e48545f1348934ada9efb368a5f589d027c1af986b2",
"matrix": {
"index": 1,
"resolved": true,
- "value": "render"
+ "value": "wasm"
}
},
{
- "id": "rc87-4df6ca0358c81014",
- "package": "cli",
- "file": "packages/cli/tests/rc87-core.test.ts",
- "line": 42,
- "title": "does not restore the removed rc.87 scan command shim",
+ "id": "rc87-fddfb8fbc4ff68e9",
+ "package": "binding",
+ "file": "packages/binding/tests/document-preparation.test.ts",
+ "line": 18,
+ "title": "native releases prepared input after invalid requests and support payloads",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "36db4d9fa6ca195b9bbe8b190ee8c5d72b0687acfeedb0e35936d30ac69c3bda",
+ "sourceDigest": "910b8f41c74c389f98c833c55af262e71dd9fa8f8029c38b608ceea4283e1878",
"matrix": {
- "index": 2,
+ "index": 0,
"resolved": true,
- "value": "scan"
+ "value": "native"
}
},
{
- "id": "rc87-25b0e10bf66ab41a",
- "package": "cli",
- "file": "packages/cli/tests/rc87-core.test.ts",
- "line": 49,
- "title": "publishes only the master-css binary",
+ "id": "rc87-d093817c27f3b7dd",
+ "package": "binding",
+ "file": "packages/binding/tests/document-preparation.test.ts",
+ "line": 18,
+ "title": "wasm releases prepared input after invalid requests and support payloads",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "444d23b6d6ccc56c226f0b42297031ad894ddaa2d5ca99a535db00d87c4d325b"
+ "sourceDigest": "910b8f41c74c389f98c833c55af262e71dd9fa8f8029c38b608ceea4283e1878",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "wasm"
+ }
},
{
- "id": "rc87-b11746c9f1518fb7",
- "package": "compiler",
- "file": "packages/compiler/tests/browser.test.ts",
- "line": 40,
- "title": "browser compileCSSManifest rejects @reference directives",
+ "id": "rc87-bec36a7ab9d932a8",
+ "package": "binding",
+ "file": "packages/binding/tests/loader.test.ts",
+ "line": 73,
+ "title": "rejects binding ABI 5 metadata after the engine surface expansion",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3f898904df9d93362c582a30aa9051bf6cc689897e8a8d0877394a927c646964"
+ "sourceDigest": "88069c88326c65a55d363ccff102421ff5211e59fa0eb524191c8b915ed6cb56"
},
{
- "id": "rc87-962c39ac1ff5b7fa",
- "package": "compiler",
- "file": "packages/compiler/tests/project/test.ts",
- "line": 35,
- "title": "recognizes CSS requests with Windows extended-length path prefixes",
+ "id": "rc87-60fa16de1c38f5d3",
+ "package": "binding",
+ "file": "packages/binding/tests/native-components-compose.test.ts",
+ "line": 4,
+ "title": "native and Wasm retain ordered native output, resource references and migration decisions",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d0b7db2527d74c445fab44496d6db827236a2931c8379847fd04d40ce604553f"
+ "sourceDigest": "337698e4c31a074f11b28ecc3e190bcfeb333ba00f0026bf35925fb2b5f1acc0"
},
{
- "id": "rc87-932a5c3096ae418e",
- "package": "compiler",
- "file": "packages/compiler/tests/project/test.ts",
- "line": 52,
- "title": "normalizes Windows extended-length binding paths for host filesystem access",
+ "id": "rc87-d9f435392466ac35",
+ "package": "binding",
+ "file": "packages/binding/tests/sizing-resolution.test.ts",
+ "line": 6,
+ "title": "native and Wasm agree on entry replacement, equal-value ambiguity and removed sizes",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "af92b657dacc33694d61c379acad737c722bb96d7a1d81c1d642966e18b3a9cd"
+ "sourceDigest": "3cb3f1829ff997d768be66634b13594b1bc8fb0817fd78787e1410dd95744492"
},
{
- "id": "rc87-169aa2084c530524",
- "package": "compiler",
- "file": "packages/compiler/tests/project/test.ts",
- "line": 164,
- "title": "loads CSS manifest resources",
+ "id": "rc87-064f89aafe8422dd",
+ "package": "binding",
+ "file": "packages/binding/tests/sizing-resolution.test.ts",
+ "line": 26,
+ "title": "ABI 13 exposes rc-sizing migration with identical native and Wasm decisions",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c9e25bbc4b794c0a472faa13a69b5161324b5584450890df6f583c85039a7a2d"
+ "sourceDigest": "9b6e710c6d081007451a1de2926eea7a728ca83dacb781f487882ad7c0493b6d"
},
{
- "id": "rc87-1ce84bf138cf2c12",
- "package": "compiler",
- "file": "packages/compiler/tests/project/test.ts",
- "line": 224,
- "title": "loads CSS manifest resources synchronously",
+ "id": "rc87-a082458c7d63daa6",
+ "package": "binding",
+ "file": "packages/binding/tests/sizing-resolution.test.ts",
+ "line": 40,
+ "title": "migration providers preserve a custom entry that shadows a historical sizing alias",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8e76e72af9a15bd08ae14a6dbceac8f82140522e102d98afbbbe1547cc87a6e4"
+ "sourceDigest": "f699c73fd09b1b098a3a82d84656a87f0ffea65ef70dc8390d54af008eb596ba"
},
{
- "id": "rc87-c8e38b5882938dae",
- "package": "compiler",
- "file": "packages/compiler/tests/project/test.ts",
- "line": 456,
- "title": "reports missing workspace runtime packages without throwing",
+ "id": "rc87-64bf52e88f9052ac",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 16,
+ "title": "BH-0004 cleanup expires only older owned generations and always retains the previous one",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f9e332b408f75d8c05889e2845d86071e1e4f6c95eb0af41d22a5da165bcc7ad"
+ "sourceDigest": "128cc52ee877f954f84eeeb77640308957e40e07ff7bdb9493152fab398e0464"
},
{
- "id": "rc87-c80932d3a9a18c74",
- "package": "compiler",
- "file": "packages/compiler/tests/project/test.ts",
- "line": 540,
- "title": "turns CSS manifest results into JSON sources",
+ "id": "rc87-a7b6d26a32495f7b",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 34,
+ "title": "`BH-0004 relinquishes ownership after user ${mutation} without deleting the file`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "00bde77d89a8164bf3c2267325a4e99a02f64c1c91fd26039980bfd409538ed1"
+ "sourceDigest": "98455efc3d6f0b20d22dbe3eb587905a04c4e09a1c0a44043ac5e9152e2d76fe"
},
{
- "id": "rc87-751eb55eb912e996",
- "package": "compiler",
- "file": "packages/compiler/tests/stylesheet/browser.test.ts",
- "line": 30,
- "title": "uses one explicit compiler artifact for compilation and rendering",
+ "id": "rc87-a7b6d26a32495f7b",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 34,
+ "title": "`BH-0004 relinquishes ownership after user ${mutation} without deleting the file`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b344a6544ebd7a657ba7b9d6583b4cca6ed23552ad540cd96611f5cbdb81c2b5"
+ "sourceDigest": "98455efc3d6f0b20d22dbe3eb587905a04c4e09a1c0a44043ac5e9152e2d76fe"
},
{
- "id": "rc87-ec1b7a9617b42bdf",
- "package": "compiler",
- "file": "packages/compiler/tests/stylesheet/style.test.ts",
- "line": 211,
- "title": "preserves Windows extended-length path prefixes while cleaning style requests",
+ "id": "rc87-a7b6d26a32495f7b",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 34,
+ "title": "`BH-0004 relinquishes ownership after user ${mutation} without deleting the file`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d4281759295865fedc75dbd25b3e50183e1a476cb0099f50b7f025ae28367d9d"
+ "sourceDigest": "98455efc3d6f0b20d22dbe3eb587905a04c4e09a1c0a44043ac5e9152e2d76fe"
},
{
- "id": "rc87-bee4d1e5c45c7230",
- "package": "compiler",
- "file": "packages/compiler/tests/stylesheet/style.test.ts",
- "line": 558,
- "title": "tracks default package artifacts as style dependencies",
+ "id": "rc87-a7b6d26a32495f7b",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 34,
+ "title": "`BH-0004 relinquishes ownership after user ${mutation} without deleting the file`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a0b7dd1f7d1305f28fa477e105435ca920c6db899258da22e373c5323fa6762e"
+ "sourceDigest": "98455efc3d6f0b20d22dbe3eb587905a04c4e09a1c0a44043ac5e9152e2d76fe"
},
{
- "id": "rc87-18c35f57cf46ef6c",
- "package": "create",
- "file": "packages/create/tests/setup-frameworks.test.ts",
- "line": 728,
- "title": "does not restore the retired rc.87 @master/css-sv package name",
+ "id": "rc87-a7b6d26a32495f7b",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 34,
+ "title": "`BH-0004 relinquishes ownership after user ${mutation} without deleting the file`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7a3a53eedf2c34299082bf2e1983714916041593798f6f066a597e55d6ac8504"
+ "sourceDigest": "98455efc3d6f0b20d22dbe3eb587905a04c4e09a1c0a44043ac5e9152e2d76fe"
},
{
- "id": "rc87-1bbc6192ec3cb4f7",
- "package": "css",
- "file": "packages/css/tests/engine/rust-engine.test.ts",
- "line": 142,
- "title": "uses semantic engine corpus version 2",
+ "id": "rc87-f567545e40ecc439",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 52,
+ "title": "BH-0004 never claims preexisting matching bytes or unrelated matching-prefix files",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "98319b1d8edc500f0de1cffa4bd7efb1b547f51454d6f1704ffeb5dd15822f12"
+ "sourceDigest": "0473644e883b16b2df56a157fabea0281a6235efacb02133ec819848bfe69251"
},
{
- "id": "rc87-51156c3e93ad5779",
- "package": "css",
- "file": "packages/css/tests/engine/rust-engine.test.ts",
- "line": 147,
- "title": "`executes semantic engine corpus case ${parityCase.id} through native and Wasm sessions`",
+ "id": "rc87-684d4b3c0f3749d1",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 65,
+ "title": "BH-0004 another output pins borrowed assets without acquiring their ownership",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a178ad32e656c7be85946370c80163a8da188f798644d8ef688e9439630fbd79"
+ "sourceDigest": "c664f5db7d7ceaf7bc774e62be98c225204a0baa60b51e7ce0d916591cef34de"
},
{
- "id": "rc87-fe7b1949b4d07e05",
- "package": "css",
- "file": "packages/css/tests/engine/rust-engine.test.ts",
- "line": 362,
- "title": "registers emitted globals through native and Wasm engines",
+ "id": "rc87-3a0897a756542074",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 83,
+ "title": "`BH-0004 recovers journal state after ${stage} write failure`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "117d43fc22e91e4efd75db78f8aa43a04a0e70566dcc340ae78b772406842f78"
+ "sourceDigest": "11b816c6a0972ec63f30bdc27d263dec8029b2b12be9d79d7b932c37b041be59"
},
{
- "id": "rc87-1f6ba6afdba0cb65",
- "package": "css",
- "file": "packages/css/tests/facade.test.ts",
- "line": 11,
- "title": "@master/css re-exports the manifest-driven engine facade",
+ "id": "rc87-3a0897a756542074",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 83,
+ "title": "`BH-0004 recovers journal state after ${stage} write failure`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a15cc6407c0c438bd8aa5a4f1c4aca54bec8615fe04a6f293b08a4fb84c79b58"
+ "sourceDigest": "11b816c6a0972ec63f30bdc27d263dec8029b2b12be9d79d7b932c37b041be59"
},
{
- "id": "rc87-f850677b1ac88e1f",
- "package": "css",
- "file": "packages/css/tests/rc87-client-types.test.ts",
- "line": 12,
- "title": "provides types for Master CSS integration virtual modules",
+ "id": "rc87-7db98c3b99e5af8e",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 108,
+ "title": "BH-0004 cleanup failure leaves valid output and retries later",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "682ec82a9aeccde31268272ffeef9be385664765695caa2fb3c284c174928f82"
+ "sourceDigest": "3277d84b33c6d1d7b27de9330a1868005b5cc5f8cc49182073f1c74e54379bce"
},
{
- "id": "rc87-f0244f94b010a84d",
- "package": "eslint-config",
- "file": "packages/eslint-config/tests/test.ts",
- "line": 33,
- "title": "ESLint Configuration is valid",
+ "id": "rc87-72097a713a035990",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 127,
+ "title": "BH-0004 abandoned pending assets are cleaned after their retention period",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "db3b29c0c1f6d06185f7e092a04efdd4ec9683e0b87e8b171a88d6197a9dba1b"
+ "sourceDigest": "2a2c006a7de51e8f3d0dd8d84a9f84bf98e3e6ec62a520eb6fa6872396cb17f0"
},
{
- "id": "rc87-996004337cedc713",
- "package": "eslint-config",
- "file": "packages/eslint-config/tests/test.ts",
- "line": 53,
- "title": "Default ESLint configuration lints standalone stylesheets",
+ "id": "rc87-028de22f9d2fa2b5",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-cleanup.test.ts",
+ "line": 147,
+ "title": "BH-0004 malformed ownership data cannot authorize deletion outside the output directory",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c03cf65e7f26dd363646adc0da94b3dddfbb0861c5bf7f082a595be86f48025c"
+ "sourceDigest": "61952e193658421c5907aad9030fcf0b59c4be24b20f3a3dc5f97ffea5c5dfd0"
},
{
- "id": "rc87-73e8aaf7f189c771",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/manifest-settings.test.ts",
- "line": 136,
- "title": "uses the project manifest for files that have not been written yet",
+ "id": "rc87-97ae3e2e263ed504",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-asset-ownership.test.ts",
+ "line": 14,
+ "title": "BH-0004 CLI records only assets it created and separates output ownership",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "63eee013c295209f113756a529dc4918f6fb6b3e143489bf8adfabb67387a617"
+ "sourceDigest": "8ef4414c79f57bbeaa742fcecfe31b5aa6561b963cdc9ce3360d3184f3c38060"
},
{
- "id": "rc87-46c202562916fe8f",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/manifest-settings.test.ts",
- "line": 164,
- "title": "reloads project manifests between lint runs in the same process",
+ "id": "rc87-2bd6a36c68a547e2",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-binding-option.test.ts",
+ "line": 6,
+ "title": "BH-0026 rejects unknown binding names instead of silently using auto",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7a9f8297233cc15e58ad9ac4c2d01657cf68ca11b636cedf238947fb5096afb3"
+ "sourceDigest": "1dd290e767f34df7d9145a8dd261d4547bad08b61b6bee460baf7a9ba4996e63"
},
{
- "id": "rc87-a0b905c7c250740b",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/rust-context.test.ts",
- "line": 27,
- "title": "reuses a tooling session across source files in one lint run",
+ "id": "rc87-4df33dbc478cced7",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-mjs.test.ts",
+ "line": 13,
+ "title": "BH-0018 Node CLI discovers .mjs with default sources",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "773fdb597e23c15be0a4d719dd76d205c3f8a379db60f3aac672837c2dfd2689"
+ "sourceDigest": "1cd5bdefae1c12d0aa0593cf407c6f56a33860b5c74bd2668716f5bf5566521c",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "default"
+ }
},
{
- "id": "rc87-b8baa4eec186e737",
- "package": "eslint-plugin",
- "file": "packages/eslint-plugin/tests/vue.test.ts",
- "line": 4,
- "title": "vue sort classes / invalid[4] / Static bound class
",
- "runner": "eslint-rule-tester",
+ "id": "rc87-9a2303389bdec27f",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-mjs.test.ts",
+ "line": 13,
+ "title": "BH-0018 Node CLI discovers .mjs with explicit sources",
+ "runner": "vitest",
"kind": "test",
- "sourceDigest": "527b9ed381453ef5d4630e5d5a92d5009476d69dcda52af72467552d8f0177dd",
+ "sourceDigest": "1cd5bdefae1c12d0aa0593cf407c6f56a33860b5c74bd2668716f5bf5566521c",
"matrix": {
- "index": 3,
+ "index": 2,
"resolved": true,
- "value": "Static bound class
"
+ "value": "explicit"
}
},
{
- "id": "rc87-c3255a639bad7508",
- "package": "internal",
- "file": "packages/internal/tests/module.test.ts",
- "line": 93,
- "title": "prefers JSON import attributes without calling fetch",
+ "id": "rc87-30f240dba188cfb5",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-mjs.test.ts",
+ "line": 13,
+ "title": "BH-0018 Node CLI discovers .mjs with glob sources",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "31d52aeb5b1902eed217924cd53c616a1dd5bab1239d7a83e947b903694c357b"
+ "sourceDigest": "1cd5bdefae1c12d0aa0593cf407c6f56a33860b5c74bd2668716f5bf5566521c",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "glob"
+ }
},
{
- "id": "rc87-34bf97d92ae3004c",
- "package": "internal",
- "file": "packages/internal/tests/module.test.ts",
- "line": 105,
- "title": "falls back to fetch only when import attributes fail to compile",
+ "id": "rc87-9990aea70aa5fe24",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-ownership-interruption.test.ts",
+ "line": 16,
+ "title": "`BH-0004 recovers actual process termination ${mode}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5786f75ec220311a3517b112d90713f7d195c94dc7afcbd12f3436007a9c7964"
+ "sourceDigest": "f17b3520f722e19447f86c19379f861f9b16117acb649c5c32adac6a18562ac7"
},
{
- "id": "rc87-28031ac807ec5325",
- "package": "internal",
- "file": "packages/internal/tests/module.test.ts",
- "line": 127,
- "title": "does not fetch when JSON import evaluation rejects",
+ "id": "rc87-9990aea70aa5fe24",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-ownership-interruption.test.ts",
+ "line": 16,
+ "title": "`BH-0004 recovers actual process termination ${mode}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "117ef30f49015f6359b576d3d0ba59bbe23179fd9eacb73845c95ced3d6fabd8"
+ "sourceDigest": "f17b3520f722e19447f86c19379f861f9b16117acb649c5c32adac6a18562ac7"
},
{
- "id": "rc87-3b0f9e4b3218c695",
- "package": "internal",
- "file": "packages/internal/tests/module.test.ts",
- "line": 139,
- "title": "does not fetch for non-syntax loader construction errors",
+ "id": "rc87-9990aea70aa5fe24",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-ownership-interruption.test.ts",
+ "line": 16,
+ "title": "`BH-0004 recovers actual process termination ${mode}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c4d38178c88ee40a720586d80120da002d5e967fdf0760c524da2746af7f77d7"
+ "sourceDigest": "f17b3520f722e19447f86c19379f861f9b16117acb649c5c32adac6a18562ac7"
},
{
- "id": "rc87-46f3c89f5237b1b9",
- "package": "internal",
- "file": "packages/internal/tests/module.test.ts",
- "line": 153,
- "title": "rejects unsuccessful fallback responses",
+ "id": "rc87-9990aea70aa5fe24",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-ownership-interruption.test.ts",
+ "line": 16,
+ "title": "`BH-0004 recovers actual process termination ${mode}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9afe02024e6e8595625453c6ab9be4bad9c1b5fed8246137612b5f076afaba68"
+ "sourceDigest": "f17b3520f722e19447f86c19379f861f9b16117acb649c5c32adac6a18562ac7"
},
{
- "id": "rc87-bcb0e64af49e5474",
- "package": "language-server",
- "file": "packages/language-server/tests/diagnostics.test.ts",
- "line": 45,
- "title": "locates SFC diagnostics after matching attribute text",
+ "id": "rc87-7ee8809364477cd3",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-ownership-interruption.test.ts",
+ "line": 74,
+ "title": "BH-0004 a queued publication times out without stealing a live owner",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b8d96a9aa6ab73eb24da6d768a13b9a9f8bb4d16653daf5cbd192cca253eb027"
+ "sourceDigest": "5316e4ce2ebc103482163927f310ebf5138cab6eaad9b6929c803f2100bd2cb4"
},
{
- "id": "rc87-f48cb89be50102f1",
- "package": "language-server",
- "file": "packages/language-server/tests/diagnostics.test.ts",
- "line": 119,
- "title": "does not report manifest errors when discovery found no entries",
+ "id": "rc87-d5d969a9b9b8a93d",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-publication-faults.test.ts",
+ "line": 8,
+ "title": "`BH-0004 preserves the previous graph after ${stage} fails`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "346b01e70ed5be469b04b725985d5074ae1e27ff3bc8dd4cad30d04f0b8469b7"
+ "sourceDigest": "1a45abbfe2f8ef955d683ced9b3ebb73ab281cd2a246bcb4e12b364e47857492"
},
{
- "id": "rc87-fd9c9729abac6e7e",
- "package": "language-server",
- "file": "packages/language-server/tests/runtime.test.ts",
- "line": 23,
- "title": "uses a resolved workspace Master CSS runtime when available",
+ "id": "rc87-d5d969a9b9b8a93d",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-publication-faults.test.ts",
+ "line": 8,
+ "title": "`BH-0004 preserves the previous graph after ${stage} fails`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e7cbeacb37721068389eb827ae81b1e11b9b227635e41cfa8a53039ca89313f0"
+ "sourceDigest": "1a45abbfe2f8ef955d683ced9b3ebb73ab281cd2a246bcb4e12b364e47857492"
},
{
- "id": "rc87-cdef278edb6fd717",
- "package": "language-server",
- "file": "packages/language-server/tests/runtime.test.ts",
- "line": 77,
- "title": "falls back to the bundled runtime when workspace packages are missing",
+ "id": "rc87-bc7bb8f38fe44b9c",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-publication-faults.test.ts",
+ "line": 45,
+ "title": "`BH-0004 atomic entry replacement preserves ${existing ? 'existing' : 'dangling'} symlinks`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "060452773b7b8cabb9e95d06b7164929ab4e97b8dd95ed4f98374e5a23fc29ee"
+ "sourceDigest": "5b163681a113ea4d71e5b90f7edf26eba3f5c67f4b2796ee1aae1abbf3927eef"
},
{
- "id": "rc87-a98aaec72e8ecfcb",
- "package": "language-server",
- "file": "packages/language-server/tests/test.ts",
- "line": 15,
- "title": "propagates workspace initialization failures",
+ "id": "rc87-bc7bb8f38fe44b9c",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-publication-faults.test.ts",
+ "line": 45,
+ "title": "`BH-0004 atomic entry replacement preserves ${existing ? 'existing' : 'dangling'} symlinks`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "be4497e83a491a612db5999bff5fc84ac4979ed97f8d4ee41a6901c77fde85c8"
+ "sourceDigest": "5b163681a113ea4d71e5b90f7edf26eba3f5c67f4b2796ee1aae1abbf3927eef"
},
{
- "id": "rc87-11deae8ba68864fc",
- "package": "language-server",
- "file": "packages/language-server/tests/test.ts",
- "line": 51,
- "title": "coordinates concurrent document opens with closes during initialization",
+ "id": "rc87-be10fd8961e86269",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-publication-faults.test.ts",
+ "line": 61,
+ "title": "BH-0004 rejects a sidecar symlink without changing its target or the entry",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cb4930745d641fd0809cdf5c41e96e377b5ea2970953a82c41bf996421e3e6ad"
+ "sourceDigest": "d228ba70194dc71599b4b7d041c0501a51c4a4a94d2ec58e94f82ac7cf9746f2"
},
{
- "id": "rc87-5c8361cf59e26225",
- "package": "language-service",
- "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
- "line": 25,
- "title": "hex",
+ "id": "rc87-1de5eeef873db96f",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-publication.test.ts",
+ "line": 23,
+ "title": "BH-0004 publication failure preserves every previously published asset",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5436b020029758ff06c1d5a1c855f4f925b8379f6bd4bfbb570cf8d40faeb521"
+ "sourceDigest": "dc7ab125762f93a783209752c0dd2df71c3e079ea868cbf23208d3ef18cf9f57"
},
{
- "id": "rc87-1351e35d50dd71ca",
- "package": "language-service",
- "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
- "line": 29,
- "title": "variable",
+ "id": "rc87-ba3439ea941c9088",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-publication.test.ts",
+ "line": 42,
+ "title": "BH-0004 immutable sidecar collision preserves user-modified files",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2e1f56b464b0e005cce06a553b1095d619b4cefc43bf2072aa76057d5c1686e9"
+ "sourceDigest": "23b624b171d759761473963c5cc3922c80161d3a3515026d8a1ff06ad8d4b18d"
},
{
- "id": "rc87-25685963549be190",
- "package": "language-service",
- "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
- "line": 33,
- "title": "rgb",
+ "id": "rc87-8b759000d2a9d448",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-publication.test.ts",
+ "line": 58,
+ "title": "BH-0004 concurrent CLI publishers reuse complete immutable assets",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9dc7dd2ad82ee6d19f3a1e9b954eb55e238177acb02fae95b0d6623b9908a443"
+ "sourceDigest": "9a46b3f279c29f441d665f7599c586188e4d4041fc674b249de1db727c5aa2e1"
},
{
- "id": "rc87-8dcb44d1b93c30fe",
- "package": "language-service",
- "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
- "line": 37,
- "title": "rgba",
+ "id": "rc87-01ee3e13d6793386",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-publication.test.ts",
+ "line": 76,
+ "title": "BH-0004 watch retries a publication failure without changing the previous graph",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "91d45297554de24519f45490c5e072bc9f4f3f2e4271650d9ac91d8d762dabb7"
+ "sourceDigest": "64ae345d7359612177ecc475b31a16bb93b7f470f3d6e78bebe792146e469f46"
},
{
- "id": "rc87-b817fee1ca2f2e42",
- "package": "language-service",
- "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
- "line": 41,
- "title": "hsl",
+ "id": "rc87-4dcdcd8ddcdb953f",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-stylesheet-delivery.test.ts",
+ "line": 14,
+ "title": "BH-0004 CLI emits a referenced resource and native declarations without emitting reference CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a91fae75f8d495140e83fe88d0b7fef008f5e840c3a58b204dd7ef0c35fd4b05"
+ "sourceDigest": "7cd306934b41f87fd1bc275124fc4af75c53e09a11a8c209084f65f2ee9d7af4"
},
{
- "id": "rc87-86b83e69599ddc3f",
- "package": "language-service",
- "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
- "line": 45,
- "title": "hsla",
+ "id": "rc87-d8d2599f49b2f417",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-stylesheet-delivery.test.ts",
+ "line": 40,
+ "title": "BH-0004 CLI preserves shared native imports by default",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d5f537399340aa9316a5ea3ebf880d9516c8c77952e98f683685c6cd53b41e62"
+ "sourceDigest": "1560b6c1481c64fbaae8a2e58b70a98013043a97b3736a88d3e436c791521b33"
},
{
- "id": "rc87-ef8d41ae1a5e6bbe",
- "package": "language-service",
- "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
- "line": 49,
- "title": "hwb",
+ "id": "rc87-4f1ecd4ea38ed9fd",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-stylesheet-delivery.test.ts",
+ "line": 57,
+ "title": "BH-0004 CLI watch republishes changed resources and ignores its output files",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "fe48285f170b2e9873004a3a635d32eedf2a87b13d4018a5ef5d0096dce31d89"
+ "sourceDigest": "f46775051a4165027fc3c017450f2b29f206f9440c22a8a61ea2d4d5807acd99"
},
{
- "id": "rc87-3fdf0c577e00aaab",
- "package": "language-service",
- "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
- "line": 53,
- "title": "lab",
+ "id": "rc87-45012ee72b0dadb9",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-watch-new-sources.test.ts",
+ "line": 15,
+ "title": "`BH-0019 watches ${scenario.name} without output feedback`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "268ae85ec3c1a963d8530dca989cca59a3bccbe9a26f28105adcb2d1bcf38cad"
+ "sourceDigest": "c00720f76b673cccf6150c55e7e442fb674b36d7ac7ed7e42d31a417d1aa8f7a"
},
{
- "id": "rc87-a41144119d54c466",
- "package": "language-service",
- "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
- "line": 57,
- "title": "lch",
+ "id": "rc87-45012ee72b0dadb9",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-watch-new-sources.test.ts",
+ "line": 15,
+ "title": "`BH-0019 watches ${scenario.name} without output feedback`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cc6f0fe3f295c6fd491eb3679bb83b7be07cb11fa1c2f52e5490b3ef82d75753"
+ "sourceDigest": "c00720f76b673cccf6150c55e7e442fb674b36d7ac7ed7e42d31a417d1aa8f7a"
},
{
- "id": "rc87-7fd58d32032c969b",
- "package": "language-service",
- "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
- "line": 61,
- "title": "oklab",
+ "id": "rc87-45012ee72b0dadb9",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-watch-new-sources.test.ts",
+ "line": 15,
+ "title": "`BH-0019 watches ${scenario.name} without output feedback`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "646304f08bde3f4dff847d614fdee08ddf7ee1cc59e57c885e54ef85d20bcfb6"
+ "sourceDigest": "c00720f76b673cccf6150c55e7e442fb674b36d7ac7ed7e42d31a417d1aa8f7a"
},
{
- "id": "rc87-1df2a7632a32c6f8",
- "package": "language-service",
- "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
- "line": 65,
- "title": "oklch",
+ "id": "rc87-2828ceb6ba8e17af",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-watch-plan.test.ts",
+ "line": 8,
+ "title": "BH-0019 watch matching agrees with initial discovery and prunes ignored trees",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d043f5f5918c2ed2c2374f18488d68da40824dfafda274a094678a9ac06ad4ad"
+ "sourceDigest": "ad5192f4e1221cb3b9e83fea12d087d000cd57dfc56dcb80db11aaaad22530b2"
},
{
- "id": "rc87-b20762639b83e7be",
- "package": "language-service",
- "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
- "line": 69,
- "title": "hex to hex8",
+ "id": "rc87-f9abb803d808aef5",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-watch-recovery.test.ts",
+ "line": 16,
+ "title": "`BH-0004 CLI watch recovers ${mode} without restart`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d6ae24abc98d8ed92845af7a89f7cc6195b1274ac9d4478abf0804b25379b669"
+ "sourceDigest": "c19324144cd9d4427a26b63d8a3ba055217d5c95a889034b0e8fd7a7e4194ce2"
},
{
- "id": "rc87-facead6345ccc684",
- "package": "language-service",
- "file": "packages/language-service/tests/format-directives.test.ts",
- "line": 22,
- "title": "formats CSS @compose important markers",
+ "id": "rc87-f9abb803d808aef5",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-watch-recovery.test.ts",
+ "line": 16,
+ "title": "`BH-0004 CLI watch recovers ${mode} without restart`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2e2833d8366e04405a9b3a0cecb5b38ce7566d69d45b2bf76d36ae7449651428"
+ "sourceDigest": "c19324144cd9d4427a26b63d8a3ba055217d5c95a889034b0e8fd7a7e4194ce2"
},
{
- "id": "rc87-9dbb94918bc4adc5",
- "package": "language-service",
- "file": "packages/language-service/tests/format-directives.test.ts",
- "line": 27,
- "title": "formats SCSS and LESS directive class lists",
+ "id": "rc87-f9abb803d808aef5",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-watch-recovery.test.ts",
+ "line": 16,
+ "title": "`BH-0004 CLI watch recovers ${mode} without restart`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4d8ad7e81459ddb2169faa3cd8fc071e9a3ec326406b75451eacd1b9ce858302"
+ "sourceDigest": "c19324144cd9d4427a26b63d8a3ba055217d5c95a889034b0e8fd7a7e4194ce2"
},
{
- "id": "rc87-90ca5bc184241810",
- "package": "language-service",
- "file": "packages/language-service/tests/format-directives.test.ts",
- "line": 32,
- "title": "formats CSS-family SFC style blocks only",
+ "id": "rc87-f9abb803d808aef5",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-watch-recovery.test.ts",
+ "line": 16,
+ "title": "`BH-0004 CLI watch recovers ${mode} without restart`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c75cd59350f3f55713619e3d420ae9a4a8235a268655e632ad3f87d329303693"
+ "sourceDigest": "c19324144cd9d4427a26b63d8a3ba055217d5c95a889034b0e8fd7a7e4194ce2"
},
{
- "id": "rc87-8a90304873fc3eed",
- "package": "language-service",
- "file": "packages/language-service/tests/format-directives.test.ts",
- "line": 59,
- "title": "locates SFC style content after matching attribute text",
+ "id": "rc87-f9abb803d808aef5",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-watch-recovery.test.ts",
+ "line": 16,
+ "title": "`BH-0004 CLI watch recovers ${mode} without restart`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b3a274983aa576ed7bde865988a6d8f074460d25916b60871f14c311ba04fc59"
+ "sourceDigest": "c19324144cd9d4427a26b63d8a3ba055217d5c95a889034b0e8fd7a7e4194ce2"
},
{
- "id": "rc87-18ace4bae2758bc8",
- "package": "language-service",
- "file": "packages/language-service/tests/format-directives.test.ts",
- "line": 66,
- "title": "formats safelist quoted class lists",
+ "id": "rc87-f9abb803d808aef5",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-watch-recovery.test.ts",
+ "line": 16,
+ "title": "`BH-0004 CLI watch recovers ${mode} without restart`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1cfdca77be57280f3d38beee30255513d761e48c802b951b57c45a14fe74480c"
+ "sourceDigest": "c19324144cd9d4427a26b63d8a3ba055217d5c95a889034b0e8fd7a7e4194ce2"
},
{
- "id": "rc87-b58a75284244e6bd",
- "package": "language-service",
- "file": "packages/language-service/tests/format-directives.test.ts",
- "line": 71,
- "title": "returns no edits when directive formatting is disabled",
+ "id": "rc87-e0c75fd7a4afcad3",
+ "package": "cli",
+ "file": "packages/cli/tests/bug-hunt-watch.test.ts",
+ "line": 11,
+ "title": "scans a new sibling HTML file after an existing-file change",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7ec986c91ed33a04fe3f5f9b5a374db599f59ea37012419f68d02efb33f27c78"
+ "sourceDigest": "386b3c19a4704d6cc567b17166098c589c2b298cc53050d9e2430a90f1927a15"
},
{
- "id": "rc87-0e3f608860b188eb",
- "package": "language-service",
- "file": "packages/language-service/tests/format-directives.test.ts",
- "line": 76,
- "title": "respects range formatting",
+ "id": "rc87-291a41d80ed69463",
+ "package": "cli",
+ "file": "packages/cli/tests/final-semantics.test.ts",
+ "line": 8,
+ "title": "CLI inspection uses the shared final-language workflow conclusions",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ca26b7c803ec315da88e427b4ff3c04a1cd46f59b631024e4a22d2c1e8124130"
+ "sourceDigest": "99aa9fd2c165e4cdfb3440060b2420997f00ef167671b4f8b3b5b8989742cd62"
},
{
- "id": "rc87-4e00ddecaff40266",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/assignments.test.ts",
- "line": 4,
- "title": "clsx",
+ "id": "rc87-840c0c29d3347ca5",
+ "package": "cli",
+ "file": "packages/cli/tests/migrate.test.ts",
+ "line": 24,
+ "title": "previews by default, writes safe files, and is idempotent",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4883c76ce3a91792220c6443d04f927d9f04dd44d9da0771e04b918bd7a8ac10"
+ "sourceDigest": "48a2fbc524124d95c5411ac39e0b732feaaf8383ca7cf5d3be0d8648dfaca9c1"
},
{
- "id": "rc87-ac9e5f01adc580d7",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/assignments.test.ts",
- "line": 10,
- "title": "styled",
+ "id": "rc87-327e815ac34b5689",
+ "package": "cli",
+ "file": "packages/cli/tests/migrate.test.ts",
+ "line": 37,
+ "title": "does not write dynamic classes, cascade risks, or selector references",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a74a8b45b2e5280f8aae6380947262f7f724c5079c6c32b41d0a88d90cd0dcc0"
+ "sourceDigest": "41ba35e5ae9be8cf74455ff34403f251c0720c229792dfa1c80ce085307f0ed8"
},
{
- "id": "rc87-548b7db2949d68c9",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/assignments.test.ts",
- "line": 16,
- "title": "escaped single quotes",
+ "id": "rc87-819a310b616fe660",
+ "package": "cli",
+ "file": "packages/cli/tests/migrate.test.ts",
+ "line": 52,
+ "title": "fails before writing when the saved configuration cannot be read",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "860efa29263c4eafa69d287622184e76036a3add4435ef9b4cb1bf9f4e1a0c63"
+ "sourceDigest": "8140056368a1d178a7da7ba274de5e5da67b3b7e31a9ef4b48491f517651af37"
},
{
- "id": "rc87-d651874f65b76aeb",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/astro.test.ts",
- "line": 5,
- "title": "class in ternary operator",
+ "id": "rc87-32855c4f068871f9",
+ "package": "cli",
+ "file": "packages/cli/tests/migrate.test.ts",
+ "line": 61,
+ "title": "reads custom RC units and preserves native resolution descriptors",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "608d5e744b2fbed8954f648e92b57f22d6ad3c61f147dd64efc63ec5554923f2"
+ "sourceDigest": "6514305ee027a6d3ec227153fdbc279ae3b62b3f384688202513dc950389f555"
},
{
- "id": "rc87-0ae369e0e22fad63",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/astro.test.ts",
- "line": 11,
- "title": "mixed class assignment formats",
+ "id": "rc87-43b7a194efee9ff0",
+ "package": "cli",
+ "file": "packages/cli/tests/migrate.test.ts",
+ "line": 75,
+ "title": "previews the named RC profile with the saved root size and blocks a mixed unsafe batch",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b78a4df10ea2681d6be2814700924006fd2ae774e73adaa58c418e7b3cb47f75"
+ "sourceDigest": "9ab6974b9cba4ee6cdb402b23c2e0c15f813814a9b2d1319fb0fbecd08c0435d"
},
{
- "id": "rc87-5ee5e860ddbceefa",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/react.test.ts",
- "line": 6,
- "title": "empty string with single quote",
+ "id": "rc87-f8c44218c9d10223",
+ "package": "cli",
+ "file": "packages/cli/tests/migrate.test.ts",
+ "line": 100,
+ "title": "requires an explicit profile and the actual saved package version",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1e50a6555085317c8d0dbf996afb79761f2f8bfa2a6412a1370a725871bfc6bf"
+ "sourceDigest": "20879ebdf87d8332227ea816cf70072620591c83d91888c8016a70af9b774bc5"
},
{
- "id": "rc87-2303a483ad98fab9",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/react.test.ts",
- "line": 12,
- "title": "empty string with double quote",
+ "id": "rc87-9fc371a6b33bfbd3",
+ "package": "cli",
+ "file": "packages/cli/tests/migrate.test.ts",
+ "line": 113,
+ "title": "migrates native RC queries and alpha into a unique entry and can be repeated",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "347418737ccd907598ac887b2abb84cc087662e27435093cb37db46a709ed5ae"
+ "sourceDigest": "70f15bb1562856c2fa369c279426a56308fa65d6bf7501bbe8bf969e60b823f4"
},
{
- "id": "rc87-7bb9256533d8f04d",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/react.test.ts",
- "line": 18,
- "title": "spaced jsx attribute assignment",
+ "id": "rc87-22a41c606397c8cc",
+ "package": "cli",
+ "file": "packages/cli/tests/migrate.test.ts",
+ "line": 128,
+ "title": "native RC requires an entry choice for multiple entries and preserves a batch with parse errors",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "854eb4006a25acc1dd1ff5139756084cf7fd3f43e29de48b666f37a9ddc25ff9"
+ "sourceDigest": "9209f479019ccee2c43d54ca1213f475102e3339a2f1f07cebf1ad86fa42e0bc"
},
{
- "id": "rc87-873ff344e7f0fe38",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/react.test.ts",
- "line": 24,
- "title": "empty binding",
+ "id": "rc87-2293b934b7079a8f",
+ "package": "cli",
+ "file": "packages/cli/tests/migrate.test.ts",
+ "line": 145,
+ "title": "reads imported native functions as context without writing unselected dependencies",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "32ff3a2b200739093858d0bd74a2bf53aa9fa88b71cb39ed469e604b329cddcc"
+ "sourceDigest": "c4b2f9f8b20a1a9d872998197dd196171954b8083e14030de315a5f43e0b4181"
},
{
- "id": "rc87-eff14c30b758e0ca",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/react.test.ts",
- "line": 31,
- "title": "empty string binding with double quote",
+ "id": "rc87-e36f031da16bc91c",
+ "package": "cli",
+ "file": "packages/cli/tests/migrate.test.ts",
+ "line": 159,
+ "title": "migrates rc-managed native components in preview and atomically blocks unsafe references",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f968971ba31f3f45ef2c35a71af3d0db4e3044b24055508f611dadbcd1355101"
+ "sourceDigest": "1df2c5c6266d933666428c0221ad4793c877c2d9076e7299234713dc85f59703"
},
{
- "id": "rc87-fcb06b3020cbf213",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/react.test.ts",
- "line": 37,
- "title": "empty clsx",
+ "id": "rc87-ac99f1b7cb78d494",
+ "package": "cli",
+ "file": "packages/cli/tests/migrate.test.ts",
+ "line": 180,
+ "title": "previews rc-utilities and blocks every write when one typed definition needs review",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e09df084eab54c4860914cab969da361c4c2eae0aa6abd761403e9ee31e05e10"
+ "sourceDigest": "8deefc05c34fd2f40586ca1820e8fe667895e8fb159bdc4de023e61c04eede02"
},
{
- "id": "rc87-bec8eb17001594ce",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/react.test.ts",
- "line": 44,
- "title": "two classes in clsx fn",
+ "id": "rc87-cfc09831a2253644",
+ "package": "cli",
+ "file": "packages/cli/tests/migrate.test.ts",
+ "line": 201,
+ "title": "migrates rc-sizing as one grouped class, preserves preview and blocks competing dimensions",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9c5b060361f2df5ec2771a910d741d1c3af3b483d2e131cfbcd36adf30bc92b0"
+ "sourceDigest": "febefd69d255b390486b6720d27f01d10ce5ae67626ea2f364d748ed2daec099"
},
{
- "id": "rc87-f0a0bb64be303c30",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/react.test.ts",
- "line": 50,
- "title": "quote in clsx fn",
+ "id": "rc87-24bd3b2fe64b1384",
+ "package": "cli",
+ "file": "packages/cli/tests/publication-lock.test.ts",
+ "line": 19,
+ "title": "a sharing violation keeps the choosing register visible and excludes a waiting publisher",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "317573fe944888ee1a1960248adefb712c42ab06b34edcee7abc0e5497087591"
+ "sourceDigest": "b998c720871d2a6b8405cfa3bae29cf1cbd19570b17d24ae46374ce59358ba26"
},
{
- "id": "rc87-9f6878b96b346044",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/react.test.ts",
- "line": 56,
- "title": "template literal and newlines",
+ "id": "rc87-ae1c31deecb1278a",
+ "package": "cli",
+ "file": "packages/cli/tests/publication-lock.test.ts",
+ "line": 52,
+ "title": "transient Windows sharing violations do not leave a live owner register after cleanup",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c0bf4b0967d5145652d781d5d52e35983e85717c725d84a431c199b07eefe47d"
+ "sourceDigest": "9e410b44e37aca4547bb77b8d25320f1d364772e859c3bf2811e4cb6bf3caa30"
},
{
- "id": "rc87-230c08cef98620be",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/react.test.ts",
- "line": 62,
- "title": "template literal expressions use quasi ranges",
+ "id": "rc87-79301724e707d99c",
+ "package": "cli",
+ "file": "packages/cli/tests/publication-lock.test.ts",
+ "line": 63,
+ "title": "`a ${scenario} rename failure never enters the publication or leaves its ticket`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cfaa775f7b16c01f91608ec6885f6c75c8814b5cf71a9ea479ae5aefef23cabd"
+ "sourceDigest": "e147cd060d638ab1d0d94ef8c08d53f9a96e85a8f01a569a36f6e63a43f81a49"
},
{
- "id": "rc87-ee27a4845f2b275c",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/react.test.ts",
- "line": 73,
- "title": "parse failure falls back to regex positions",
+ "id": "rc87-79301724e707d99c",
+ "package": "cli",
+ "file": "packages/cli/tests/publication-lock.test.ts",
+ "line": 63,
+ "title": "`a ${scenario} rename failure never enters the publication or leaves its ticket`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0b0122e0bbb58b7941bd6e1c0387582449b699e928f15e44765c578b6b1f3391"
+ "sourceDigest": "e147cd060d638ab1d0d94ef8c08d53f9a96e85a8f01a569a36f6e63a43f81a49"
},
{
- "id": "rc87-1310d5e947961c12",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/react.test.ts",
- "line": 81,
- "title": "regex fallback ignores class attributes inside JS comments",
+ "id": "rc87-79301724e707d99c",
+ "package": "cli",
+ "file": "packages/cli/tests/publication-lock.test.ts",
+ "line": 63,
+ "title": "`a ${scenario} rename failure never enters the publication or leaves its ticket`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "96babe94ebfe49e0af02a7677a836491950a35883a0f3dbc933509bb9bda95c8"
+ "sourceDigest": "e147cd060d638ab1d0d94ef8c08d53f9a96e85a8f01a569a36f6e63a43f81a49"
},
{
- "id": "rc87-66e7496975afe936",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/strings.test.ts",
- "line": 5,
- "title": "configured class declaration with double quotes",
+ "id": "rc87-5afff731b12da503",
+ "package": "cli",
+ "file": "packages/cli/tests/rc87-core.test.ts",
+ "line": 33,
+ "title": "uses the explicit generate command instead of rc.87 root scan options",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "64cac7b5073c6d28ceee33ea9acc7e07fda6e8d08f889f0e602b602ac91cad00"
+ "sourceDigest": "09feedea3689547173230bf101b59a128fafe5467d72d2ce8ca5c2f77b294155"
},
{
- "id": "rc87-eb7047a6b4027077",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/strings.test.ts",
- "line": 11,
- "title": "configured class declaration with single quotes",
+ "id": "rc87-4b144ace73024a4e",
+ "package": "cli",
+ "file": "packages/cli/tests/rc87-core.test.ts",
+ "line": 42,
+ "title": "does not restore the removed rc.87 extract command shim",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ecabd619f046f6e9297fa63c5e8ea1e1765e997a8e323d0293f95930cdc8e869"
+ "sourceDigest": "36db4d9fa6ca195b9bbe8b190ee8c5d72b0687acfeedb0e35936d30ac69c3bda",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "extract"
+ }
},
{
- "id": "rc87-cf541289d590529b",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/strings.test.ts",
- "line": 17,
- "title": "configured class declaration with literals",
+ "id": "rc87-6dbaed8ad2db027d",
+ "package": "cli",
+ "file": "packages/cli/tests/rc87-core.test.ts",
+ "line": 42,
+ "title": "does not restore the removed rc.87 render command shim",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a1a05b88fd2766abe5a85d5b8c03f705076724bb9f1a5947ee2689743d5e14ee"
+ "sourceDigest": "36db4d9fa6ca195b9bbe8b190ee8c5d72b0687acfeedb0e35936d30ac69c3bda",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "render"
+ }
},
{
- "id": "rc87-73b074f4a5461373",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/strings.test.ts",
- "line": 25,
- "title": "configured class declaration property with double quotes",
+ "id": "rc87-4df6ca0358c81014",
+ "package": "cli",
+ "file": "packages/cli/tests/rc87-core.test.ts",
+ "line": 42,
+ "title": "does not restore the removed rc.87 scan command shim",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f8201002948138d7db94a2158be02289782ebce14be632e043f9426da127ac89"
+ "sourceDigest": "36db4d9fa6ca195b9bbe8b190ee8c5d72b0687acfeedb0e35936d30ac69c3bda",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "scan"
+ }
},
{
- "id": "rc87-84b6f9c93fa6929a",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/styled.test.ts",
- "line": 5,
- "title": "styled template literal",
+ "id": "rc87-25b0e10bf66ab41a",
+ "package": "cli",
+ "file": "packages/cli/tests/rc87-core.test.ts",
+ "line": 49,
+ "title": "publishes only the master-css binary",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "765a461ecad52d3bcb542e2749968012442c25bd6e5d5dbac5ea383945d9c38d"
+ "sourceDigest": "444d23b6d6ccc56c226f0b42297031ad894ddaa2d5ca99a535db00d87c4d325b"
},
{
- "id": "rc87-630dbdbaf7c38227",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/styled.test.ts",
- "line": 11,
- "title": "styled template literal and new lines",
+ "id": "rc87-b11746c9f1518fb7",
+ "package": "compiler",
+ "file": "packages/compiler/tests/browser.test.ts",
+ "line": 33,
+ "title": "browser compileCSSManifest rejects @reference directives",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6484a8dc242633f61205f0ca1e747d8803cc718265290aa636eeb6f7ea7ece5b"
+ "sourceDigest": "3f898904df9d93362c582a30aa9051bf6cc689897e8a8d0877394a927c646964"
},
{
- "id": "rc87-2d8df08b8ca97ddb",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/styled.test.ts",
- "line": 19,
- "title": "styled invoked",
+ "id": "rc87-150de08bc4acefe5",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-build-graph.test.ts",
+ "line": 10,
+ "title": "BH-0004 graph classification preserves a qualified external import and its original source",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "66ed59fc8db69c74c9b9fb333b7e60ac93e6bba3cb89d4f146549624db7c4df1"
+ "sourceDigest": "c52415024970e12bc47bde419bd2302cf80eb4090dcc98bae94135b7e52f2a74"
},
{
- "id": "rc87-6d6efe76f1a32212",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/svelte.test.ts",
- "line": 4,
- "title": "class in ternary operator",
+ "id": "rc87-731d480b43117597",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-build-graph.test.ts",
+ "line": 23,
+ "title": "BH-0004 Node package CSS resolution preserves ownership and is explicitly selected",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3e0ea73aaac4127a3e393dce6dc1393a06d723d8c638dba8c669a1f9bff93549"
+ "sourceDigest": "601f86c9e6df721d01959ef5f3e59f333ae4e82acfaf11aa276ce06e760137f9"
},
{
- "id": "rc87-9a7717460f9c181d",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 26,
- "title": "empty class with single quotes",
+ "id": "rc87-54e93a407dbeee15",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-build-graph.test.ts",
+ "line": 41,
+ "title": "`BH-0004 ${binding} preserves an explicitly shared resource base and rejects conflicting relocation`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cfc701bbb37b5f7042e6a7d8b291f10f3e5e633bd7b5354ac8c5ab468f1097ee"
+ "sourceDigest": "3756760eed81a40f93519eb351217351d97e4e60d5a502ae3c382b199c88d054"
},
{
- "id": "rc87-061192d8223cb847",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 32,
- "title": "empty class with double quotes",
+ "id": "rc87-54e93a407dbeee15",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-build-graph.test.ts",
+ "line": 41,
+ "title": "`BH-0004 ${binding} preserves an explicitly shared resource base and rejects conflicting relocation`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "83c8ae78ad0c5448a7e7d65b3a9d5f3734dc6a4cae40fee9dc7c25028a23c325"
+ "sourceDigest": "3756760eed81a40f93519eb351217351d97e4e60d5a502ae3c382b199c88d054"
},
{
- "id": "rc87-1dee97a2bcd457ab",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 38,
- "title": "one class",
+ "id": "rc87-47792d88850f7c41",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-bundle-transport.test.ts",
+ "line": 9,
+ "title": "BH-0004 native/Wasm bundle transport reconnects compiled imports and relocates original references",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "05e223d143eff06b9d932622493a637a6f48a80f5ef1428da848cf6277b01204"
+ "sourceDigest": "e0aac18ce6ae9ff3b4bc94fa04bd109eecff5c116c99d246d48e3635178c089e"
},
{
- "id": "rc87-513f18187520d4ff",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 44,
- "title": "two classes",
+ "id": "rc87-8aef8382021016d2",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-bundle-transport.test.ts",
+ "line": 41,
+ "title": "`BH-0004 ${binding} bundle errors retain original source and disposed guards`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "62b390824f25381aaf54362aac332c7f7f9c740bbe2cef1726a6af72ab012967"
+ "sourceDigest": "f581408cb5ce89e13bb5f65ecf8b94a092595be89952d2fd2dc1e70f032510c3"
},
{
- "id": "rc87-9259c47e692948f0",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 50,
- "title": "full-width spaces are part of the class token",
+ "id": "rc87-8aef8382021016d2",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-bundle-transport.test.ts",
+ "line": 41,
+ "title": "`BH-0004 ${binding} bundle errors retain original source and disposed guards`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "972e4cdc6608e49a45f47e72ffe74e6c4ec66239dc801e9b2704fd51b482babf"
+ "sourceDigest": "f581408cb5ce89e13bb5f65ecf8b94a092595be89952d2fd2dc1e70f032510c3"
},
{
- "id": "rc87-2fbabc433dfd0402",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 56,
- "title": "valid classes",
+ "id": "rc87-cc6cbf3dbebdb875",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-bundle-transport.test.ts",
+ "line": 62,
+ "title": "BH-0004 sync compiler exposes the same two-phase bundle API",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8e95382a781d1c42d0c96e2e31f049bb2baef5e7f86d4772384a64737ecafd28"
+ "sourceDigest": "0ce057ea0bf27371b3a295191dadbc826a2ba48b4863a581699859bc0653a64a"
},
{
- "id": "rc87-8cc074908a8ea696",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 62,
- "title": "class in CSS @compose",
+ "id": "rc87-941ba13be4969653",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-collection-source-ownership.test.ts",
+ "line": 8,
+ "title": "`collection source selection isolates native CSS and resource ownership: delivery=${deliver}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a30825d6e1158020ffe9a1369e02a5dba24d3d1238a5c7a732d7cfb68c055833"
+ "sourceDigest": "a219c06a5c0a974e025965499e390afbef3c89426db05482edb6f76b9946f99a"
},
{
- "id": "rc87-fb1520c947353b6e",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 68,
- "title": "class in Vue style @compose",
+ "id": "rc87-941ba13be4969653",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-collection-source-ownership.test.ts",
+ "line": 8,
+ "title": "`collection source selection isolates native CSS and resource ownership: delivery=${deliver}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cf03e058706f5e014c56b7b9be7515cc0fd08b0c4ad7de6a23b17a7c23d67372"
+ "sourceDigest": "a219c06a5c0a974e025965499e390afbef3c89426db05482edb6f76b9946f99a"
},
{
- "id": "rc87-d177ab2a1a81605c",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 74,
- "title": "ignores quoted CSS @compose classes",
+ "id": "rc87-0633b4b8ae2b6f73",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-collection-source-ownership.test.ts",
+ "line": 41,
+ "title": "strict registration failure retains both the successful stylesheet and native owners",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2462e76384982a818bb27cfaa8f8730ac7c20d8cf6890051d0d25b5b1ec36ff1"
+ "sourceDigest": "309c93f0163ace1fd80acb15ef67ec5a89c2afb103f8aa7c1c329b3c1c031840"
},
{
- "id": "rc87-d1f8d1aef8c3f395",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 81,
- "title": "quote in class",
+ "id": "rc87-761cc2f7a46fdf85",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-collection-source-ownership.test.ts",
+ "line": 60,
+ "title": "collection emits referenced native resources once without exposing reference utilities",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "094e059ddf0ff10728085c50e30bf4086e30d9a1e1890076a25112ef44fe6eaa"
+ "sourceDigest": "ac36d878c6a82a79e32943967acfe88f84f42cf4d40f571cd0c29cccf8c3f544"
},
{
- "id": "rc87-eb444fdf76aaa863",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 87,
- "title": "group syntax",
+ "id": "rc87-09e663a026897563",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-compiled-stylesheets.test.ts",
+ "line": 12,
+ "title": "`BH-0004 compiled stylesheet boundaries: ${item.id}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c69d612a26a7d074e92d756062a343f0e8144f42176b89994eeed1b2e5527292"
+ "sourceDigest": "16768f00fd04d921c4e45962229a02d401ee244a331805ef7bf599870fa22cd2"
},
{
- "id": "rc87-a8114aeb398ca2a2",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 93,
- "title": "ignores class attributes inside HTML comments",
+ "id": "rc87-e5584cd679ca3fde",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-compiled-stylesheets.test.ts",
+ "line": 31,
+ "title": "BH-0004 shared finalized manifest resolves child compose and revives extraction patterns",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ac12f8cb5ecce6e50b9c4cf717e8a8cc597a47d091b2cc59a40474f3a06a0da4"
+ "sourceDigest": "23fdb1f780146a92fa4a0af92c101fac3b05b24ec4e12ffee919778b0a3bb588"
},
{
- "id": "rc87-948ab1cf0ee72463",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/test.ts",
- "line": 103,
- "title": "nested strings and literals",
+ "id": "rc87-ed3015fb71a39e41",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-compiled-stylesheets.test.ts",
+ "line": 49,
+ "title": "BH-0004 graph compilation reports missing delivery URLs and disposed sessions",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "77b0fd7185ea336ef5a26c078a9613ae26e1d39be49ccc65c239c232e1e98718"
+ "sourceDigest": "afec1ece814420a91ccff71b50cbcbb90d04ea756c5fc50ecabb0cbce7d4f8b9"
},
{
- "id": "rc87-ed2df73b97d5a5cd",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/unescape.test.ts",
- "line": 4,
- "title": "single quote",
+ "id": "rc87-67491abb4163bd00",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-compiled-stylesheets.test.ts",
+ "line": 60,
+ "title": "BH-0004 reference context is explicit and is not merged into the emitted manifest",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "bf48b71d759c114450530285744bba83afd4fba510075d0596e4b276ba5042c4"
+ "sourceDigest": "8b3dcf0e84b99456d796b529abedb61f4a8db70b7c6bc3d676849f3d1d579a41"
},
{
- "id": "rc87-af57d2105f9df063",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/unescape.test.ts",
- "line": 10,
- "title": "escaped backticks",
+ "id": "rc87-b4595e1ed5067a3c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-compiled-stylesheets.test.ts",
+ "line": 77,
+ "title": "BH-0004 native/Wasm agree on explicitly scoped sibling resource delivery",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e2f616fdfc1a1b5aded88069984bd23f9916601cd8a9884d434b12b21d95b841"
+ "sourceDigest": "aaff60f5925e348ab8d23b591ae7400a994f6e1cfb240e142c9b1c43679799ef"
},
{
- "id": "rc87-072c4bf5b8171e66",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/vue.test.ts",
- "line": 5,
- "title": "class in class array",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b45056eaa490164c649aa81fdd53c2931826d1da97ff96a8abf77f4fcbca51ae"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-5d4c9fcd06d50646",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/vue.test.ts",
- "line": 11,
- "title": "class in object syntax",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c9e7bb07c277b871e83bef7f8dee7db52b064f45d2da0f4f14ab2a23d8acb63b"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-ced2120c695078d5",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/vue.test.ts",
- "line": 17,
- "title": "class in ternary operator",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "383d123583052f62b845ea4d69d3d460e539ffb2bede2cee279f2a45eecafa84"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-57068fdc046aae51",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/vue.test.ts",
- "line": 23,
- "title": "class in v-bind",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "14a2feb7f4e2fc2f3e0e1a65de54215dab715054f082f28a25e883013c51853e"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-67cbbbe94506619c",
- "package": "language-service",
- "file": "packages/language-service/tests/get-class-position/vue.test.ts",
- "line": 29,
- "title": "multiple :class assignments",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "28761ff998a5e4ef642c7930a68147d8cef15757feff2f9f09cb5f8226b3715d"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-26d3dd2b5de9afb3",
- "package": "language-service",
- "file": "packages/language-service/tests/inspect-syntax.test.ts",
- "line": 17,
- "title": "text-center",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ae69933d9323a8c064312157e08a7226ef73953e7a5a5dc916fba32435000590"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-eeeb0a34409eabdd",
- "package": "language-service",
- "file": "packages/language-service/tests/inspect-syntax.test.ts",
- "line": 34,
- "title": "hidden",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "551ad7377186160251ffd793def05c34c8bded92f1bdeb6ac0d9895f492bd4af"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-2b92b6714b57c9b0",
- "package": "language-service",
- "file": "packages/language-service/tests/inspect-syntax.test.ts",
- "line": 51,
- "title": "vendor-prefixed native declarations use unprefixed MDN hover syntax",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d40ede586c413feead570b4a672584a9eb3f61052bbd588a3bb4101a6e173ac0"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-747d664e812fd1fe",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-browser.test.ts",
- "line": 46,
- "title": "collects browser semantic tokens for HTML class attributes",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2a6b1d1a7ea15554c3289e33ebd856ef6eda2ee8cd00ffc5800eb3d1d106da3a"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-5e294afb68e500f9",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-browser.test.ts",
- "line": 65,
- "title": "encodes browser role-derived semantic token modifiers",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "038cc253949d37e1e51c5bc23e37af25c98059d1c4c8dd4944932761930f9bd0"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-a1f11a440101fcd3",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-browser.test.ts",
- "line": 84,
- "title": "collects browser semantic tokens only for CSS directive class-list spans",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "012c1e652a243c92a7b358ba9c01fc98de6f2dc9b6602808133d5f0959351d63"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-96e5da5533a2f2f2",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-browser.test.ts",
- "line": 130,
- "title": "does not collect browser semantic tokens for managed syntax without class-list spans",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1a6d6d6842ef1fd1cdf967c624e3845e5ff3457c2623b9c964866fcf507afdd4"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-f924916010f30181",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-browser.test.ts",
- "line": 153,
- "title": "encodes browser semantic tokens",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a1829f7038201b39610af926056ebc1f26f566999e06b39ade3085e73b3d4ad5"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-58c0f707895ac675",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 109,
- "title": "does not restore the rc.87 Shiki default array export",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "58d1408ad681113fd30002667d2179c905b0a696f66a6fa30873968549162aef"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-26a0fc70a4fe84a2",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 115,
- "title": "defines deterministic TextMate grammar scopes for CSS directives",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e7187843a68de3bad508bda887d786c23559a288711c97587ff1fdf2f700b18e"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-44dfe92e02a0a784",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 162,
- "title": "supports Shiki dynamic language imports",
+ "id": "rc87-2428ecc0e468192c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 20,
+ "title": "`BH-0004 default graph output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "80754bd9b7409c8d204ee51a6dc90a93e9e69b95e6decf54757576867e7a5561"
+ "sourceDigest": "b3e1baf742931a5b7734395083de98240b1a34995e478c41c186cf6af4f31ded"
},
{
- "id": "rc87-75bb3596f5f148b0",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 186,
- "title": "registers a real Shiki TextMate injection grammar for CSS directives",
+ "id": "rc87-3d5b98265c1a9113",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 50,
+ "title": "BH-0004 default graph composes separate entries with child-owned references and definitions",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4b7b0d0733dcf636f9e7d33646649a0d0ddb2abe549652b5428104a9dccb962b"
+ "sourceDigest": "faca7a339b0b88b4ca40fbdc140aef1c3869910f44336db1f2b54f5349a6b734"
},
{
- "id": "rc87-3b1814f38ddb99eb",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 220,
- "title": "keeps guide theme snippets correct with TextMate only",
+ "id": "rc87-5a6d6e5cf6f97deb",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 73,
+ "title": "`BH-0004 default graph preserves unpruned native rules ${marker || 'plain stylesheet'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "988048db90a1f3ac536b0cebba0ca2849d19372174b423e5b9f392228a4fc798"
+ "sourceDigest": "aa9cf3fee703325ff9191f82e97a20c83f6659e9d85c00f9cdb3eca319fd86d4"
},
{
- "id": "rc87-54d1064138cdfa5d",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 244,
- "title": "does not attach semantic metadata to guide theme CSS directive syntax",
+ "id": "rc87-5a6d6e5cf6f97deb",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-default-collection-graphs.test.ts",
+ "line": 73,
+ "title": "`BH-0004 default graph preserves unpruned native rules ${marker || 'plain stylesheet'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "89728b8e1a7a930f6fe80cbf8f59fc966e7434577cf7c62b418313c91929ef8f"
+ "sourceDigest": "aa9cf3fee703325ff9191f82e97a20c83f6659e9d85c00f9cdb3eca319fd86d4"
},
{
- "id": "rc87-8d392a681c27d0c2",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 261,
- "title": "does not resolve guide theme CSS directive syntax through semantic scope styles",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "12042c691c7703f79e9c056b63e239446d527ec9215f8ea7e316a94ba0337219"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-e2c56dc4d369487d",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 279,
- "title": "does not create Master Shiki decorations for native-only CSS",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "57dfd17109ec873a93d8095ac457ce735f256e2147f657012e9fe30c12c9e4c2"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-5a8efc063385b50d",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 294,
- "title": "normalizes Shiki language ids separately from class-list languages",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c14a718d5e8b344083c31b9aef627175386a2cfb3bcc61bc788f9357aceac03a"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-6e434d9c797e0734",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 306,
- "title": "creates Shiki decorations from Master CSS semantic tokens",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d3eaea3bbbcff8731825bf214123f891dc44e6e1f4c8d0decfa8bee3508a9849"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-d3e9f43a5067d475",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 366,
- "title": "creates Shiki decorations for CSS directive class-list spans",
- "runner": "vitest",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
+ "runner": "vitest",
"kind": "test",
- "sourceDigest": "495258ab526e870f3f031ee20752c85bbd5e0262245774d14bfb8973e9cd0b6d"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-2abd2947ac845e54",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 451,
- "title": "creates Shiki decorations for raw Master CSS class lists",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "23618e63a338083833f901301ff8bb462a1bf048ba3610152fe992f6730f5ead"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-62f117700b2c33ab",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 475,
- "title": "skips semantic token decorations inside host comments",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7bd31e18c36c85efcfd5834854c1613fefe53f59d57997a6c031dd9f20ce05a3"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-efe4aaa7bc884241",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 486,
- "title": "applies semantic token styles by type and modifier",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "796b91a605afcaa326e393c89a33a741b8475db8b948486b385f11bae3ce325e"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-ecd2faed97890caf",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 519,
- "title": "applies semantic decorations in the Shiki tokens hook",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7f181eed07de7eebb5e8acec7db516a62373df2bdf61dc061bd41f90dd8a8fc8"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-6eb87719e89fec81",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 563,
- "title": "uses semantic token scope styles for selector semantic tokens",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d59beb2ed6a54c71706ba706327cae66fc7da0d151d73931c37d14300df09544"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-99b555d4fc57840e",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 611,
- "title": "uses semantic token scope styles for documentation Master CSS tokens",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "31518d64a8b7020b90db1956b106bcf004d3faaefcde762251e955e72234ec8e"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-5e4c77dcbbfd1c7c",
- "package": "language-service",
- "file": "packages/language-service/tests/rc87-shiki.test.ts",
- "line": 718,
- "title": "uses semantic token scope styles for CSS directive class-list tokens",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5252878a3d8ab8c74835d088e3204acdad15889c1a632e42c1690a47bbad121c"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-03d6b4925067def9",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 51,
- "title": "does not render semantic tokens for native CSS-only documents",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e5d4c9165411bb7130d5a27183b34c4babf73d721c5e022dd3ddedcf11982207"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-00f03cbaa1e53525",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 158,
- "title": "renders CSS document semantic tokens only inside directive class-list ranges",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "63ddc83af15fa97fc549f127a120c9787997fe201cc89947ce2def8036847778"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-3e49f57d2ad93a4d",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 256,
- "title": "renders CSS directives in SCSS-like sources",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6dfcb678343612f5a4fdc1b839dba1a9183d0a5588d08f55a6b5fa3cc240e561"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-caaecc35b3e34863",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 275,
- "title": "renders detailed CSS directive semantic tokens only for class-list syntax",
+ "id": "rc87-02d3ada96c404b3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 14,
+ "title": "`BH-0004 standalone output preserve=${preserveNativeCSS}/native=${includeNativeCSS}/base=${includeMasterBaseCSS}/generated=${includeGeneratedCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2b0531c37cd1bd0b7d03560a58c443f0e29f3cd4c56f0cb2c660ea56304c9068"
+ "sourceDigest": "51fe5df3987e0b0c826dee0e30a2b45318a0721313cbd7bb200d97bc8a9187a8"
},
{
- "id": "rc87-de5eec8d004bdf05",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 352,
- "title": "renders CSS directives in LESS-like sources",
+ "id": "rc87-e95d972c82606e03",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-delivery-output-modes.test.ts",
+ "line": 54,
+ "title": "BH-0004 native/Wasm select native output without losing manifest definitions or local links",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "11378b8a3fad15c199d352b949eaac541c01ae3892de8ccfac4dedd47e177a1f"
+ "sourceDigest": "dcb39778c1644c7a0442429def4d5e5868e9c6f4122a2dcbdfb4b29e049b42dd"
},
{
- "id": "rc87-a1ef27edde39e950",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 374,
- "title": "does not synthesize a closing directive brace for incomplete CSS blocks",
+ "id": "rc87-48484ff44225697b",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-directive-positions.test.ts",
+ "line": 7,
+ "title": "`BH-0004 ${binding} directives and references retain original diagnostic ranges`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5a37ff4c935081eed86e65cf0d2e67b24d123c3ad3511b705b48215e48f2c612"
+ "sourceDigest": "7bca94fec82aeb6a173ca96f10933bed212750d7365e172a1d3b20ae809a9d27"
},
{
- "id": "rc87-a34969c98160685d",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 380,
- "title": "shares class position detection with semantic token spans",
+ "id": "rc87-48484ff44225697b",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-directive-positions.test.ts",
+ "line": 7,
+ "title": "`BH-0004 ${binding} directives and references retain original diagnostic ranges`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3dd660eaa3ca4f23b9c6c79e683593414e19624773bf041bf1b909833a30aa24"
+ "sourceDigest": "7bca94fec82aeb6a173ca96f10933bed212750d7365e172a1d3b20ae809a9d27"
},
{
- "id": "rc87-7aeeb247e8e07626",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 390,
- "title": "renders active semantic tokens for the class context at a position",
+ "id": "rc87-5f184b782facb6d5",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-directive-positions.test.ts",
+ "line": 31,
+ "title": "BH-0004 local stylesheet lowering retains source text for diagnostics",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1231542a9dd95d0d16096bb71e081b76280179155cd833fd40673d9a63838ca6"
+ "sourceDigest": "8f298e6989a24ab20f358068f917f522d7e7d7a8963bcc7dc938a95bab3ffbd6"
},
{
- "id": "rc87-3788b6ce9fd6ce79",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 403,
- "title": "renders active semantic tokens for a class context when the cursor is on whitespace",
+ "id": "rc87-16835d94c42312c8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-emitted-globals-graphs.test.ts",
+ "line": 11,
+ "title": "`BH-0004 emitted globals traverse ${qualifier || 'unqualified'} imports with external descendants`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "65fdb26f5e58780e8f570303eba23c97caba82acf9e1d9eb4199d3b1f97a3a81"
+ "sourceDigest": "897d54c0b5ac58c3db0478b31fc29ec3bc24d3839876784bcc570dc56b47bb58"
},
{
- "id": "rc87-fdecad4c007dbe24",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 418,
- "title": "renders active semantic tokens only for the current class string context",
+ "id": "rc87-16835d94c42312c8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-emitted-globals-graphs.test.ts",
+ "line": 11,
+ "title": "`BH-0004 emitted globals traverse ${qualifier || 'unqualified'} imports with external descendants`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a0ce208c19f244f27d0d609c9322e5629dd08f519b567ed491cbb3dd2e70a091"
+ "sourceDigest": "897d54c0b5ac58c3db0478b31fc29ec3bc24d3839876784bcc570dc56b47bb58"
},
{
- "id": "rc87-00f9c5a1d106f9fd",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 431,
- "title": "skips full embedded semantic tokens in active mode",
+ "id": "rc87-16835d94c42312c8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-emitted-globals-graphs.test.ts",
+ "line": 11,
+ "title": "`BH-0004 emitted globals traverse ${qualifier || 'unqualified'} imports with external descendants`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "78f697761f5406ea5916c9fb45365c22f8471c3802b8cab38fab9705d842c821"
+ "sourceDigest": "897d54c0b5ac58c3db0478b31fc29ec3bc24d3839876784bcc570dc56b47bb58"
},
{
- "id": "rc87-6b50c904c612eec7",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 439,
- "title": "does not render active semantic tokens for CSS directive syntax at a position",
+ "id": "rc87-16835d94c42312c8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-emitted-globals-graphs.test.ts",
+ "line": 11,
+ "title": "`BH-0004 emitted globals traverse ${qualifier || 'unqualified'} imports with external descendants`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6c447a587b8d27b97f8b63766256667413d24526ebd74ffdbf434134b51058a0"
+ "sourceDigest": "897d54c0b5ac58c3db0478b31fc29ec3bc24d3839876784bcc570dc56b47bb58"
},
{
- "id": "rc87-9d75297ee4aa126f",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 449,
- "title": "renders active semantic tokens for CSS directive class-list spans",
+ "id": "rc87-9b478b27be788098",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-emitted-globals-graphs.test.ts",
+ "line": 30,
+ "title": "BH-0004 metadata skips unmanaged inputs and reports missing managed dependencies",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5b551b85f5ea16087c9ded2db9fc4281e9bef91db1e50a3e7b47ea6bf740f85e"
+ "sourceDigest": "d421d9fa6f3c85301d43dd48d37617ada828a788c20d403cf2eaace7090ebd24"
},
{
- "id": "rc87-20d3c1981800c207",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 465,
- "title": "does not render active semantic tokens for custom variant blocks",
+ "id": "rc87-7bcf1906ef43cd79",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-file-delivery.test.ts",
+ "line": 8,
+ "title": "`BH-0004 public file delivery preserves ${condition} with nested external imports`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "47cd93e196238af402c66ff32a5347b3ef1e0faf69ef9202c40f16ffd8f6e9ad"
+ "sourceDigest": "24489054045cac109966f73a580648002e2028342f69d9c2ad785007d80b8a2e"
},
{
- "id": "rc87-c2b0f0a81fac4d9a",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 486,
- "title": "skips embedded semantic tokens when syntax highlighting is off",
+ "id": "rc87-7bcf1906ef43cd79",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-file-delivery.test.ts",
+ "line": 8,
+ "title": "`BH-0004 public file delivery preserves ${condition} with nested external imports`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ec49bfced658e6d3440796718c2ce0fedbe9bb8c55da14003263122408aea36d"
+ "sourceDigest": "24489054045cac109966f73a580648002e2028342f69d9c2ad785007d80b8a2e"
},
{
- "id": "rc87-5ec8a05b46fe4755",
- "package": "language-service",
- "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
- "line": 495,
- "title": "renders CSS directive class-list semantic tokens when embedded highlighting is off",
+ "id": "rc87-7bcf1906ef43cd79",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-file-delivery.test.ts",
+ "line": 8,
+ "title": "`BH-0004 public file delivery preserves ${condition} with nested external imports`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "18ad9f6ee7437ec3b623b40ea574f2887ce4c45922b5dd85ac6c346d8b1cf61e"
+ "sourceDigest": "24489054045cac109966f73a580648002e2028342f69d9c2ad785007d80b8a2e"
},
{
- "id": "rc87-c9b01dcc99e9004b",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 51,
- "title": "renders semantic tokens for class attributes",
+ "id": "rc87-053208c21808237d",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-file-delivery.test.ts",
+ "line": 37,
+ "title": "`BH-0004 file assets retain native compose with preserveNativeCSS=${preserveNativeCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4627a26a7d0f3962c187246ba38321bb4388d968d7d3a3a8f2b1686ce6d6d460"
+ "sourceDigest": "afe02fe98f1b7fee190f80b2c9b5c744e3319e8534955cbb75437fd8d9d4ba89"
},
{
- "id": "rc87-d022dc1dac8072de",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 95,
- "title": "renders semantic tokens for CSS-like values",
+ "id": "rc87-053208c21808237d",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-file-delivery.test.ts",
+ "line": 37,
+ "title": "`BH-0004 file assets retain native compose with preserveNativeCSS=${preserveNativeCSS}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f0da3b11b3d18e75ee6699576b3cb25490d6a3c79c0b03c51ed0d30299d7a688"
+ "sourceDigest": "afe02fe98f1b7fee190f80b2c9b5c744e3319e8534955cbb75437fd8d9d4ba89"
},
{
- "id": "rc87-631f3fb89eb4c73c",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 138,
- "title": "renders semantic tokens for vendor-prefixed native declarations",
+ "id": "rc87-1bf9d3d409384db1",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-file-delivery.test.ts",
+ "line": 64,
+ "title": "BH-0004 file delivery rejects missing resources and URL collisions before publication",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1aa16b88c41972ee85000e400fd125b988087384b6059387799431ded7437e72"
+ "sourceDigest": "42c84233af273a9259b0e3e9ae53569ea11278713d34999f7fbf4be20b3d7025"
},
{
- "id": "rc87-ffb5a2fcaad0b089",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 151,
- "title": "renders semantic tokens for container queries and slash-separated string values",
+ "id": "rc87-986142f68ada7798",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-filesystem-project.test.ts",
+ "line": 10,
+ "title": "`BH-0004 filesystem project ${explicit ? 'explicit entries' : 'discovery'} ${qualifier || 'unqualified'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "11967771223dee77aa9c01193da76f097b17c5b22845e3b56f8aad47402ca4d5"
+ "sourceDigest": "72244d9db81b0efbf2ea3db8e21c407ecd01dc47f5add34481e36e7060ff0055"
},
{
- "id": "rc87-5d1c3d730d7d0abb",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 192,
- "title": "renders semantic tokens for internal styles dogfood directives",
+ "id": "rc87-986142f68ada7798",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-filesystem-project.test.ts",
+ "line": 10,
+ "title": "`BH-0004 filesystem project ${explicit ? 'explicit entries' : 'discovery'} ${qualifier || 'unqualified'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ca2940528d475693112e3d73e16c59a58ada778c05b15ef756af642930e00650"
+ "sourceDigest": "72244d9db81b0efbf2ea3db8e21c407ecd01dc47f5add34481e36e7060ff0055"
},
{
- "id": "rc87-b1ab6103f55858ea",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 213,
- "title": "renders semantic tokens for grouped declarations, strings, units, and important marks",
+ "id": "rc87-986142f68ada7798",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-filesystem-project.test.ts",
+ "line": 10,
+ "title": "`BH-0004 filesystem project ${explicit ? 'explicit entries' : 'discovery'} ${qualifier || 'unqualified'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "87e5a8f2dda30702d487df8e95b3291cbb44766f9276b5fa73f9ad8f7b52ecfa"
+ "sourceDigest": "72244d9db81b0efbf2ea3db8e21c407ecd01dc47f5add34481e36e7060ff0055"
},
{
- "id": "rc87-64e13e03ab519054",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 244,
- "title": "renders native-aligned semantic tokens for grouped classes with selector suffixes",
+ "id": "rc87-986142f68ada7798",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-filesystem-project.test.ts",
+ "line": 10,
+ "title": "`BH-0004 filesystem project ${explicit ? 'explicit entries' : 'discovery'} ${qualifier || 'unqualified'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c42c2da366ff1956368c0261c2157e8374c51e8b02d61e0a27f7aacbd6bcb7eb"
+ "sourceDigest": "72244d9db81b0efbf2ea3db8e21c407ecd01dc47f5add34481e36e7060ff0055"
},
{
- "id": "rc87-61d55a1a7491c541",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 265,
- "title": "renders semantic tokens only for CSS directive class-list spans",
+ "id": "rc87-986142f68ada7798",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-filesystem-project.test.ts",
+ "line": 10,
+ "title": "`BH-0004 filesystem project ${explicit ? 'explicit entries' : 'discovery'} ${qualifier || 'unqualified'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "462def10af34d3d6156c2f9c61b7a08a6ce05bc1f681bc5010a5578d38c53256"
+ "sourceDigest": "72244d9db81b0efbf2ea3db8e21c407ecd01dc47f5add34481e36e7060ff0055"
},
{
- "id": "rc87-34f0fb33ab1bd05b",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 385,
- "title": "does not render semantic tokens for theme directive declarations",
+ "id": "rc87-986142f68ada7798",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-filesystem-project.test.ts",
+ "line": 10,
+ "title": "`BH-0004 filesystem project ${explicit ? 'explicit entries' : 'discovery'} ${qualifier || 'unqualified'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "47b99afe2d8ab17f5bdd8f43f0eaf7f7745a35e9f68504cf1a4d4e2b544a108a"
+ "sourceDigest": "72244d9db81b0efbf2ea3db8e21c407ecd01dc47f5add34481e36e7060ff0055"
},
{
- "id": "rc87-f2e17f86897c494b",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 417,
- "title": "renders semantic tokens only for compose class lists inside managed definition directives",
+ "id": "rc87-986142f68ada7798",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-filesystem-project.test.ts",
+ "line": 10,
+ "title": "`BH-0004 filesystem project ${explicit ? 'explicit entries' : 'discovery'} ${qualifier || 'unqualified'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1a3fa962f29489ee6f2bba786230644bd6ff2258a9556678815c0d633d4cb384"
+ "sourceDigest": "72244d9db81b0efbf2ea3db8e21c407ecd01dc47f5add34481e36e7060ff0055"
},
{
- "id": "rc87-bbe440cb9fdfaea1",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 480,
- "title": "renders CSS directive ranges with quoted semicolons",
+ "id": "rc87-986142f68ada7798",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-filesystem-project.test.ts",
+ "line": 10,
+ "title": "`BH-0004 filesystem project ${explicit ? 'explicit entries' : 'discovery'} ${qualifier || 'unqualified'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a34fea666db4a47db8a55b4694de2aa70a1ddd0266dce42fe93ccc919887d344"
+ "sourceDigest": "72244d9db81b0efbf2ea3db8e21c407ecd01dc47f5add34481e36e7060ff0055"
},
{
- "id": "rc87-b69a9e683d2a16ca",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 513,
- "title": "does not tokenize quoted compose preludes as class lists",
+ "id": "rc87-986142f68ada7798",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-filesystem-project.test.ts",
+ "line": 10,
+ "title": "`BH-0004 filesystem project ${explicit ? 'explicit entries' : 'discovery'} ${qualifier || 'unqualified'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2e7e50be2c128d5d55f4e1ee0a89577c196c8bb16df80ccd2495c700ea936327"
+ "sourceDigest": "72244d9db81b0efbf2ea3db8e21c407ecd01dc47f5add34481e36e7060ff0055"
},
{
- "id": "rc87-a24e8e025a02fc75",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 519,
- "title": "does not render semantic tokens for custom variant directive syntax",
+ "id": "rc87-986142f68ada7798",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-filesystem-project.test.ts",
+ "line": 10,
+ "title": "`BH-0004 filesystem project ${explicit ? 'explicit entries' : 'discovery'} ${qualifier || 'unqualified'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3ec46fd1beb5f4b530e7604fd8443e6b2112a4d1150cc088ba7490ba28f7cc24"
+ "sourceDigest": "72244d9db81b0efbf2ea3db8e21c407ecd01dc47f5add34481e36e7060ff0055"
},
{
- "id": "rc87-c9f581f1db975615",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 551,
- "title": "does not render inline theme modifier semantic tokens",
+ "id": "rc87-986142f68ada7798",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-filesystem-project.test.ts",
+ "line": 10,
+ "title": "`BH-0004 filesystem project ${explicit ? 'explicit entries' : 'discovery'} ${qualifier || 'unqualified'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7a2c97968c1014ce9030ee0bb7cf1f397b6c19891aa5e4e7958da370011fc911"
+ "sourceDigest": "72244d9db81b0efbf2ea3db8e21c407ecd01dc47f5add34481e36e7060ff0055"
},
{
- "id": "rc87-825e34b96ad36c9c",
- "package": "language-service",
- "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
- "line": 558,
- "title": "does not render non-entry @master at-rules as CSS directives",
+ "id": "rc87-986142f68ada7798",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-filesystem-project.test.ts",
+ "line": 10,
+ "title": "`BH-0004 filesystem project ${explicit ? 'explicit entries' : 'discovery'} ${qualifier || 'unqualified'}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "dae5568d1d1735fbe084825320997189710aa70d4c9c44dfb2244c26984a18d2"
+ "sourceDigest": "72244d9db81b0efbf2ea3db8e21c407ecd01dc47f5add34481e36e7060ff0055"
},
{
- "id": "rc87-8879a483358a9352",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 15,
- "title": "hex",
+ "id": "rc87-bc05e82e2cc5f81e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-classification.test.ts",
+ "line": 17,
+ "title": "BH-0004 a qualified parent of an unresolved external import classifies with anonymous layer",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a5a4d99419a9b87b0ed06705fcf6ab36c286275796d50851471a23820667383d"
+ "sourceDigest": "88152d598ae80247761f476b98294a45a18b371288f6c4edda033f6a3ebf49de",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "anonymous layer | @master entry;@import \"./child.css\" layer;"
+ }
},
{
- "id": "rc87-a8914255fe1bb031",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 26,
- "title": "shorthand",
+ "id": "rc87-764c59e73a83144a",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-classification.test.ts",
+ "line": 17,
+ "title": "BH-0004 a qualified parent of an unresolved external import classifies with named layer",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "00ca63e9286fe7b67d77befad83cc3804cf78aef26873b1f821865ae339d8019"
+ "sourceDigest": "88152d598ae80247761f476b98294a45a18b371288f6c4edda033f6a3ebf49de",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "named layer | @master entry;@import \"./child.css\" layer(cards);"
+ }
},
{
- "id": "rc87-51c4303dbed08aa5",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 37,
- "title": "with |",
+ "id": "rc87-4218548e0cdce35d",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-classification.test.ts",
+ "line": 17,
+ "title": "BH-0004 a qualified parent of an unresolved external import classifies with supports and media",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ebc612728a05f0cda965494f32062c78856bf0824c5b8ddcdd3d87fef92460fc"
+ "sourceDigest": "88152d598ae80247761f476b98294a45a18b371288f6c4edda033f6a3ebf49de",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "supports and media | @master entry;@import \"./child.css\" supports(display:grid) screen;"
+ }
},
{
- "id": "rc87-5b9ab1aa4b19b255",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 48,
- "title": "with !",
+ "id": "rc87-8354331589125056",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-classification.test.ts",
+ "line": 31,
+ "title": "BH-0004 local directives declared by an imported file classify the root as local",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d9903648b0a7dbfef03ed3981e4c82315f465bd6fd96e81bca3c2473d7d4bf72"
+ "sourceDigest": "ce18a3bbff3c7308525d6d55a3345a630cb8a3099bb3c6e80c4cc07e435bea58"
},
{
- "id": "rc87-f965453a222c29e7",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 59,
- "title": "should ignore invalid rgb",
+ "id": "rc87-7cb7bcbcac42fd34",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-classification.test.ts",
+ "line": 42,
+ "title": "BH-0004 a local import classifies the same either way",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b0e5e0962429197326d55d55240406e9b1a567e83504ac05bd9ff54ff5f9f2d5"
+ "sourceDigest": "ce2834ca07d45d3090c184c528cc936a1f0aa6a1e88b190c47229b997327999b",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "a local import | @master entry;@import \"./child.css\"; | .b{color:red} | entry | 2"
+ }
},
{
- "id": "rc87-5690a0f15e84e564",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 67,
- "title": "should ignore single #",
+ "id": "rc87-51e94beb8f2740f9",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-classification.test.ts",
+ "line": 42,
+ "title": "BH-0004 a plain entry classifies the same either way",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "aeef85e4ded7941f224ec5076627081c47924253d0ca4097ea1448fa60eb64c5"
+ "sourceDigest": "ce2834ca07d45d3090c184c528cc936a1f0aa6a1e88b190c47229b997327999b",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "a plain entry | @master entry; .a{color:red} | undefined | entry | 1"
+ }
},
{
- "id": "rc87-d9d845eccca912c8",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 75,
- "title": "should ignore utility",
+ "id": "rc87-ac29d6519f072eb8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-classification.test.ts",
+ "line": 42,
+ "title": "BH-0004 a qualified import classifies the same either way",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "23bed998320e5ff72ed42dfe92241a19f956338e05f9770e2ed1de80055336f3"
+ "sourceDigest": "ce2834ca07d45d3090c184c528cc936a1f0aa6a1e88b190c47229b997327999b",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "a qualified import | @master entry;@import \"./child.css\" layer(cards); | .b{color:red} | entry | 2"
+ }
},
{
- "id": "rc87-1ffdb9d4fba950f6",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 83,
- "title": "should ignore number",
+ "id": "rc87-88fe31fbf8dd9712",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-classification.test.ts",
+ "line": 42,
+ "title": "BH-0004 local directives classifies the same either way",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "515162c7127308fa7bedc2204efe1e5e420d9dbfe9c0753a7aea81e620693aaf"
+ "sourceDigest": "ce2834ca07d45d3090c184c528cc936a1f0aa6a1e88b190c47229b997327999b",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "local directives | .a{@variant media(all){padding:2rem;}} | undefined | local | 1"
+ }
},
{
- "id": "rc87-f4db71648850d013",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 91,
- "title": "box-shadow",
+ "id": "rc87-36c7d9fdb2cf5e7a",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-classification.test.ts",
+ "line": 42,
+ "title": "BH-0004 plain css classifies the same either way",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ff89d49a1a3036f10a375aca9229e932bf1a44635d0589bac700513b8f3bd7fd"
+ "sourceDigest": "ce2834ca07d45d3090c184c528cc936a1f0aa6a1e88b190c47229b997327999b",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "plain css | .a{color:red} | undefined | plain | 1"
+ }
},
{
- "id": "rc87-1110d3897316e2eb",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 109,
- "title": "gradient",
+ "id": "rc87-263c818595d3f805",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-classification.test.ts",
+ "line": 61,
+ "title": "BH-0004 a directive diagnostic raised during classification names its file",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7f7640c93b1e2c485b82469583420d78926bf705010164277fdb2833a5a21adf"
+ "sourceDigest": "4acff5bf667cb43adafb8974c764cd23b406da01a6944cb864d615a1d5595003"
},
{
- "id": "rc87-66c793ef174cd3a4",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 127,
- "title": "custom variable",
+ "id": "rc87-19dfc07e199d0663",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 21,
+ "title": "`BH-0004 graph metadata preserves child policies: ${qualifier || 'plain'} external=${external}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1a7805a565fbd03b10ece177e1029162df49df5cf6068ca38aac812b3eb44425"
+ "sourceDigest": "60f41d2a580da3ee531a1167efe9b58113834b0efb2b19266f04b0543193de6d"
},
{
- "id": "rc87-caf9de7721f63aea",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 142,
- "title": "custom variable/alpha",
+ "id": "rc87-19dfc07e199d0663",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 21,
+ "title": "`BH-0004 graph metadata preserves child policies: ${qualifier || 'plain'} external=${external}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0147e53b307a3aad2bc841e6b3eecfc7b68f9865e2fc18f15905f8c8b15ca9d1"
+ "sourceDigest": "60f41d2a580da3ee531a1167efe9b58113834b0efb2b19266f04b0543193de6d"
},
{
- "id": "rc87-a6cd463b30e73912",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 157,
- "title": "variable",
+ "id": "rc87-19dfc07e199d0663",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 21,
+ "title": "`BH-0004 graph metadata preserves child policies: ${qualifier || 'plain'} external=${external}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "776a35665bf77f5b87b12e49b7b8567fbf2619f2a9df8f365d528e9a9e77c375"
+ "sourceDigest": "60f41d2a580da3ee531a1167efe9b58113834b0efb2b19266f04b0543193de6d"
},
{
- "id": "rc87-d361b502b9b59afc",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 168,
- "title": "variable/opacity",
+ "id": "rc87-19dfc07e199d0663",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 21,
+ "title": "`BH-0004 graph metadata preserves child policies: ${qualifier || 'plain'} external=${external}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ad424b833b514af39c23d9d71ad6edaae937936f9806bd0e2ca993d50ff57691"
+ "sourceDigest": "60f41d2a580da3ee531a1167efe9b58113834b0efb2b19266f04b0543193de6d"
},
{
- "id": "rc87-57b578e08b99867e",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 179,
- "title": "CSS color() function",
+ "id": "rc87-19dfc07e199d0663",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 21,
+ "title": "`BH-0004 graph metadata preserves child policies: ${qualifier || 'plain'} external=${external}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "fbcc44a4c4ba702657aac94ff0d27527fc6b697ad682cfbf4fc75718d61dbe68"
+ "sourceDigest": "60f41d2a580da3ee531a1167efe9b58113834b0efb2b19266f04b0543193de6d"
},
{
- "id": "rc87-d1c8e254a28cc136",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 180,
- "title": "CSS color-mix() function",
+ "id": "rc87-19dfc07e199d0663",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 21,
+ "title": "`BH-0004 graph metadata preserves child policies: ${qualifier || 'plain'} external=${external}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "91228c9e58ec416b34c1cdc2cdfe2d7f0def288c1592b13b3d90a64ce8e19a2d"
+ "sourceDigest": "60f41d2a580da3ee531a1167efe9b58113834b0efb2b19266f04b0543193de6d"
},
{
- "id": "rc87-a6dfe05531cc0adc",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 181,
- "title": "click to switch color spaces",
+ "id": "rc87-19dfc07e199d0663",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 21,
+ "title": "`BH-0004 graph metadata preserves child policies: ${qualifier || 'plain'} external=${external}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d2bf5a4f96d6d0c7f7a5b12ec608d02885859eff6db245312b6996dba7aafdfb"
+ "sourceDigest": "60f41d2a580da3ee531a1167efe9b58113834b0efb2b19266f04b0543193de6d"
},
{
- "id": "rc87-9a6201867e0e48f5",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 183,
- "title": "maps out-of-gamut colors into the LSP channel range",
+ "id": "rc87-19dfc07e199d0663",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 21,
+ "title": "`BH-0004 graph metadata preserves child policies: ${qualifier || 'plain'} external=${external}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "552503052416f3a7e0f4c25e12a5b66b11f5dde680ac3eedbbd94e5d268613bc"
+ "sourceDigest": "60f41d2a580da3ee531a1167efe9b58113834b0efb2b19266f04b0543193de6d"
},
{
- "id": "rc87-8314ace3d75a6b46",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 200,
- "title": "rgb",
+ "id": "rc87-19dfc07e199d0663",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 21,
+ "title": "`BH-0004 graph metadata preserves child policies: ${qualifier || 'plain'} external=${external}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "de9410d5b22034ce44ad3df69220d2a7e6c1a10fdb80798e693dbd1b793a3c44"
+ "sourceDigest": "60f41d2a580da3ee531a1167efe9b58113834b0efb2b19266f04b0543193de6d"
},
{
- "id": "rc87-22f4d1aa5a9d6298",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 211,
- "title": "lab",
+ "id": "rc87-19dfc07e199d0663",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 21,
+ "title": "`BH-0004 graph metadata preserves child policies: ${qualifier || 'plain'} external=${external}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "162593126d01d91445bc94b7f02903718acb8089420c7a57aae85e137bf35804"
+ "sourceDigest": "60f41d2a580da3ee531a1167efe9b58113834b0efb2b19266f04b0543193de6d"
},
{
- "id": "rc87-a63a25c15693d547",
- "package": "language-service",
- "file": "packages/language-service/tests/render-syntax-colors.test.ts",
- "line": 222,
- "title": "hsla",
+ "id": "rc87-19dfc07e199d0663",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 21,
+ "title": "`BH-0004 graph metadata preserves child policies: ${qualifier || 'plain'} external=${external}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "15e7a3e0a9f44768d34339639351f1159097266b59dbd28eed87133f5442c5bd"
+ "sourceDigest": "60f41d2a580da3ee531a1167efe9b58113834b0efb2b19266f04b0543193de6d"
},
{
- "id": "rc87-3950d765ff8c7858",
- "package": "language-service",
- "file": "packages/language-service/tests/session.test.ts",
- "line": 45,
- "title": "does not render static theme modifier semantic tokens",
+ "id": "rc87-19dfc07e199d0663",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 21,
+ "title": "`BH-0004 graph metadata preserves child policies: ${qualifier || 'plain'} external=${external}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "aa026b07362abcb20305f1467481ca7788892f66c872447ef8f12bf695a2fc01"
+ "sourceDigest": "60f41d2a580da3ee531a1167efe9b58113834b0efb2b19266f04b0543193de6d"
},
{
- "id": "rc87-09bfa63fa238afeb",
- "package": "language-service",
- "file": "packages/language-service/tests/session.test.ts",
- "line": 57,
- "title": "uses the injected runtime default manifest for completions",
+ "id": "rc87-4f2f13c8f3da3a46",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 38,
+ "title": "BH-0004 metadata discovery does not compile native or managed CSS or load references",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ce68486cb15a9b9270373ef2639c68fb8a7f8297c913663401d681731517d09c"
+ "sourceDigest": "7d36ec415fbbed964a85d6ddbf390baacb58d97604310390dae7da82ef1744e8"
},
{
- "id": "rc87-42028ac139836835",
- "package": "language-service",
- "file": "packages/language-service/tests/session.test.ts",
- "line": 69,
- "title": "uses the injected runtime for hover CSS previews",
+ "id": "rc87-a85ab118f72e5ed4",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 49,
+ "title": "BH-0004 metadata discovery retains import cycles as errors",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1a7a3080c1cd2bce635dbcc487f8387da00076e771c1117e87a317da2563deab"
+ "sourceDigest": "afface263bcc866ccee3cb9770f8ec01778e6600bd3c88cb9ac35cf948648e62"
},
{
- "id": "rc87-f8e97d7288ed2ca0",
- "package": "language-service",
- "file": "packages/language-service/tests/session.test.ts",
- "line": 85,
- "title": "uses the injected runtime variables for document colors",
+ "id": "rc87-27e180bb8d6611ab",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 58,
+ "title": "BH-0004 registration scans the imported stylesheet source directory",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e7190a0ff5b2044e6025612b999479068958695df759b25c3697f3be0d7f0a4a"
+ "sourceDigest": "04318a07b97118e9c212851748fd3a79466434a2a0a5a69c4ae69f7803559114"
},
{
- "id": "rc87-15470ae7d8829a03",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
- "line": 18,
- "title": "@",
+ "id": "rc87-c1e193d3988d0354",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-directive-metadata.test.ts",
+ "line": 76,
+ "title": "BH-0004 registration retains package-owned extraction policy",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b22c63de0e72556b352e49240fbfa3a870e0add504708c50d0f5732218cdb208"
+ "sourceDigest": "a8f9ab86ac43cf7ee3f41cbc7efb85f03fd6a677c215b01723e05f7b2a01e9a0"
},
{
- "id": "rc87-7dd16508181a9829",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
- "line": 19,
- "title": "animate:",
+ "id": "rc87-b493ac7a82825fa9",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-output-mappings.test.ts",
+ "line": 14,
+ "title": "graph output mappings retain original anchors across import, resource and compose output",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "dfbc420e15ddf2d4053587ee78f0afc7c68a97b1593e3ac41c2f08e037415b2d"
+ "sourceDigest": "368db243890104999ea8aca2c3869c304751dc0aceadbff7853b2da859d77eb3"
},
{
- "id": "rc87-fa38eb843bd2c719",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
- "line": 20,
- "title": "animation:fade|",
+ "id": "rc87-4a8186a346a9dc66",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-output-mappings.test.ts",
+ "line": 29,
+ "title": "`graph ${binding} preserves quoted compose marker text and renders the actual rule`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f6e65ca532776eedea16609bf43aa26d04f177d2e64e3268fff04ddf2d08d6b5"
+ "sourceDigest": "863027757196d4249873b7f382ce65e63d970826169561227fd3b16e0e6fe41c"
},
{
- "id": "rc87-a6e757153e82d290",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
- "line": 21,
- "title": "animation:",
+ "id": "rc87-4a8186a346a9dc66",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-output-mappings.test.ts",
+ "line": 29,
+ "title": "`graph ${binding} preserves quoted compose marker text and renders the actual rule`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "46aedda200b8498049408477fd1e5a1c5867b45f7c9fe14e2d0671b71c54a2be"
+ "sourceDigest": "863027757196d4249873b7f382ce65e63d970826169561227fd3b16e0e6fe41c"
},
{
- "id": "rc87-f1d8693e0310c6d8",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
- "line": 22,
- "title": "animation-name:",
+ "id": "rc87-ea218916c8fda1bb",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-output-mappings.test.ts",
+ "line": 41,
+ "title": "`graph ${binding} native suppression preserves composed conditions and their source anchors`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "faac69993e9de5b61bd2c2c73a0fba38a34c1c07ff15e9e6a91f0fe4a38a667b"
+ "sourceDigest": "cdbe549995ab600063f0433bd2db3db123d1f2dec601cf9b8cf6163926799585"
},
{
- "id": "rc87-d3f5e9a6e2cc3714",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
- "line": 23,
- "title": "selector",
+ "id": "rc87-ea218916c8fda1bb",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-graph-output-mappings.test.ts",
+ "line": 41,
+ "title": "`graph ${binding} native suppression preserves composed conditions and their source anchors`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "fc81e66b65ad832f563aa94d21e235d3be0513a2bf20fd75283eb6eb06c71fcd"
+ "sourceDigest": "cdbe549995ab600063f0433bd2db3db123d1f2dec601cf9b8cf6163926799585"
},
{
- "id": "rc87-b6f5ceba350ee0bc",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
- "line": 24,
- "title": "at",
+ "id": "rc87-e7512ad3a53b97b9",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-host-resolution.test.ts",
+ "line": 19,
+ "title": "BH-0004 async host classification and registration preserve transitive definitions and CSS conditions",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a930a7c2141c7d4344b4f8ada7da2a26b1517b0efe06179b58c9add9813be206"
+ "sourceDigest": "08e456d3ee3d7ded2a7baa7f077d76c750bc57914842ca9a52000260ca41794b"
},
{
- "id": "rc87-521663f1f382b057",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/base.test.ts",
- "line": 4,
- "title": "types \" should hint completions",
+ "id": "rc87-7eed52aa921da240",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-host-resolution.test.ts",
+ "line": 36,
+ "title": "BH-0004 undefined uses Node fallback while null retains an explicitly external import",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8acf064b0d7ff765d1b6274193132e2436e249c99cc2b59b857749098c2c0f95"
+ "sourceDigest": "dbbaf4f6f6cc6cc2e56ad0bf03b61fc7227987e9741537429adc7e420a67a09d"
},
{
- "id": "rc87-24c21245d76d0088",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/base.test.ts",
- "line": 5,
- "title": "types should hint completions",
+ "id": "rc87-c8549b66e28199f3",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-host-resolution.test.ts",
+ "line": 48,
+ "title": "BH-0004 missing resolved files report attempted watch dependencies and do not register partial state",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1ba63e85a72d12c20a640d7e91f301c3311db0d684249da8f704c30b2b040e86"
+ "sourceDigest": "6120d96063f790a3954dbce1588b3d453f33c4294b377767c86ebc559451c917"
},
{
- "id": "rc87-c07eebf48224d1b8",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/base.test.ts",
- "line": 6,
- "title": "types dynamic enum key should hint enum values",
+ "id": "rc87-bbc05fee8067571e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-host-resolution.test.ts",
+ "line": 61,
+ "title": "BH-0004 abort during a host resolver prevents registration and further file loading",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9c4a43eb6dcde4f351977461c9b154710c2b235a42c2be1831e3d8565a15aee9"
+ "sourceDigest": "fd2380626b3d6cdbb308a0e0a2c02b04516a86f6bc31f0eef6357729538dddac"
},
{
- "id": "rc87-57eefc7308015abc",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/base.test.ts",
- "line": 11,
- "title": "types any trigger character in \"\" should not hint",
+ "id": "rc87-d16d020f9fd53f9e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-host-resolution.test.ts",
+ "line": 73,
+ "title": "BH-0004 disposal while a resolver is pending prevents registration",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2d76da04b23459743564703084bf7ba07b47131118a5b4f1486edc2311550c95"
+ "sourceDigest": "bce01950e98614c68ce9ecb1f361c8d5cf2ff82758df63b6d3c1a6fc555e8082"
},
{
- "id": "rc87-c9e15e4df08723e1",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/base.test.ts",
- "line": 12,
- "title": "types any trigger character in '' should not hint",
+ "id": "rc87-4d5195a062298e1a",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-host-resolution.test.ts",
+ "line": 85,
+ "title": "BH-0004 host aliases remain project CSS while alternate package export files retain package ownership",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "828483b20dc0558a51f57d58230fc7424907005bf351c59bba805ea5dd7d0ea1"
+ "sourceDigest": "786db59a2f064287f75bedf3ef601a290aa9d6e379406f0aac940d5f1eebf4aa"
},
{
- "id": "rc87-b843ea9bdf6725f1",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/base.test.ts",
- "line": 13,
- "title": "emit class=\"\" should hint completions",
+ "id": "rc87-e5f0c0335ee653d0",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-import-conditions.test.ts",
+ "line": 9,
+ "title": "`${binding}: BH-0004 keeps import conditions through graph and CSS compilation`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "542f265dbd9463ac86f34d1947e4c695677a4ab6b307a832df963443766ea90c"
+ "sourceDigest": "493cfdb5234b9cb99c3ddc53877ca723efa5a764ac5b45eaedf7efbb2d0e0ae0"
},
{
- "id": "rc87-9635777a9790b8a7",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/completion-cache.test.ts",
- "line": 15,
- "title": "returns fresh class completion items from cached skeletons",
+ "id": "rc87-e5f0c0335ee653d0",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-import-conditions.test.ts",
+ "line": 9,
+ "title": "`${binding}: BH-0004 keeps import conditions through graph and CSS compilation`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2293e0a415a11632b545cfb20d171c7feb9f07bd880ef4a6b16a73341d1e0318"
+ "sourceDigest": "493cfdb5234b9cb99c3ddc53877ca723efa5a764ac5b45eaedf7efbb2d0e0ae0"
},
{
- "id": "rc87-d59c62ab999922bf",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/completion-cache.test.ts",
- "line": 27,
- "title": "does not leak selector insertText mutations between requests",
+ "id": "rc87-f0942efe3bc4abcd",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-import-conditions.test.ts",
+ "line": 39,
+ "title": "BH-0004 public file compiler preserves a conditional imported native rule",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "dddf5f59bbe2da87d752062176c9e4cb82b10c7dbe286e799be54ba342506391"
+ "sourceDigest": "c91342cef3f7136b055a093b3a861b4d6f847501966440643faf6b0f0b7a107d"
},
{
- "id": "rc87-c75732260c7ffaac",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/completion-cache.test.ts",
- "line": 42,
- "title": "documentation CSS generation does not mutate language service state",
+ "id": "rc87-1414214a8db16dc8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-local-classification.test.ts",
+ "line": 10,
+ "title": "imported local directives classify and transform a plain root with custom resolver=false",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ad2db45ba9b0b5c58951c1e2b151bb17aa4958109394db9c68d5af3a51cab3ff"
+ "sourceDigest": "bd8c836a79876646deab46fc7de4794838690418e8316a4eafe3a064e7e60b24",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
},
{
- "id": "rc87-ff06546e9fe98883",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/group.test.ts",
- "line": 4,
- "title": "one declaration",
+ "id": "rc87-0240d398d3fd669a",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-local-classification.test.ts",
+ "line": 10,
+ "title": "imported local directives classify and transform a plain root with custom resolver=true",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5790097a319c3facca927bdb8d3c62eb67bbe22b55d9fac844b859567ddf1a72"
+ "sourceDigest": "bd8c836a79876646deab46fc7de4794838690418e8316a4eafe3a064e7e60b24",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
},
{
- "id": "rc87-3fe9e244fa11cd02",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/group.test.ts",
- "line": 5,
- "title": "two declarations",
+ "id": "rc87-eafb92be662fd864",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-local-classification.test.ts",
+ "line": 31,
+ "title": "delivery transform leaves a wholly native graph and its host-owned resources unchanged",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d7c97f5fa58a28fad33493381ed4f655cd8134a0f10cc7a1254d2b30bc9d88e5"
+ "sourceDigest": "8d32faff14a042b1a6a286a150813146784ea1636aae99ad4e2e83ac2937b00b"
},
{
- "id": "rc87-4db7c0ba0f4eabd0",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/group.test.ts",
- "line": 6,
- "title": "should not hint selectors",
+ "id": "rc87-7d38879494d16087",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-policy-output.test.ts",
+ "line": 9,
+ "title": "`BH-0004 consumed policy must not remain in ${qualifier} CSS output`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7ffbf5836ecffd02bf8bbc9ff2cb4ff7dc0ead43a76b40a093aa78338b16a47c"
+ "sourceDigest": "41e625e176116ac7e4d5cf766e2d0a7529a3463b56bf2aaf3ece2c5a2a45adbb"
},
{
- "id": "rc87-75ced5cf66264044",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/group.test.ts",
- "line": 7,
- "title": "should not hint at",
+ "id": "rc87-7d38879494d16087",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-policy-output.test.ts",
+ "line": 9,
+ "title": "`BH-0004 consumed policy must not remain in ${qualifier} CSS output`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9dd5e90d7f8bd5bc9dceefc7fd01c70ae44dffb1e41abfbd35528f464f2fb972"
+ "sourceDigest": "41e625e176116ac7e4d5cf766e2d0a7529a3463b56bf2aaf3ece2c5a2a45adbb"
},
{
- "id": "rc87-469d587d310c427b",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 4,
- "title": "should not hint selectors",
+ "id": "rc87-7d38879494d16087",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-policy-output.test.ts",
+ "line": 9,
+ "title": "`BH-0004 consumed policy must not remain in ${qualifier} CSS output`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9bc28b8a6c25bc3bd396a4c75c4f472fb6629f3c9891b108fa8cf204bf8c20b9"
+ "sourceDigest": "41e625e176116ac7e4d5cf766e2d0a7529a3463b56bf2aaf3ece2c5a2a45adbb"
},
{
- "id": "rc87-96e34a58d6acea7b",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 5,
- "title": "animation delay on invoked",
+ "id": "rc87-7d38879494d16087",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-policy-output.test.ts",
+ "line": 9,
+ "title": "`BH-0004 consumed policy must not remain in ${qualifier} CSS output`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "493a6997462e8b398aa13f72df059f6f113ebf297f4c896500d9a214e7724c7d"
+ "sourceDigest": "41e625e176116ac7e4d5cf766e2d0a7529a3463b56bf2aaf3ece2c5a2a45adbb"
},
{
- "id": "rc87-90548191c604be69",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 6,
- "title": "transition delay on invoked",
+ "id": "rc87-7d38879494d16087",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-policy-output.test.ts",
+ "line": 9,
+ "title": "`BH-0004 consumed policy must not remain in ${qualifier} CSS output`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "05d56a94eccba756f31aca6721266fb843c4362879fc17b53418eed7b1575d78"
+ "sourceDigest": "41e625e176116ac7e4d5cf766e2d0a7529a3463b56bf2aaf3ece2c5a2a45adbb"
},
{
- "id": "rc87-0f9e10e1c10954b3",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 7,
- "title": "starts with @",
+ "id": "rc87-b9ae1fc378b1ed82",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-policy-output.test.ts",
+ "line": 28,
+ "title": "`BH-0004 graph compilation consumes policies before ${qualifier} wrapping`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "82154253a134a296969434d4e8d4e4f9baaf90272381224ea08073cefe2c05c4"
+ "sourceDigest": "04efed1afdbf1386735b45894f220aa7042f043ffb9054c08d3cad72b5b1e729"
},
{
- "id": "rc87-1e6d51e4ae118350",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 8,
- "title": "starts with @d",
+ "id": "rc87-b9ae1fc378b1ed82",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-policy-output.test.ts",
+ "line": 28,
+ "title": "`BH-0004 graph compilation consumes policies before ${qualifier} wrapping`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a71ba8770511fdd2e5e2c5eab9c1c113a11e28554d0bb0053673f1e63e9cc107"
+ "sourceDigest": "04efed1afdbf1386735b45894f220aa7042f043ffb9054c08d3cad72b5b1e729"
},
{
- "id": "rc87-ca650f34085adc13",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 9,
- "title": "removed @ key values",
+ "id": "rc87-b9ae1fc378b1ed82",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-policy-output.test.ts",
+ "line": 28,
+ "title": "`BH-0004 graph compilation consumes policies before ${qualifier} wrapping`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c6f43178ef8db2df741c4177970724b07ca02a681e3ad171af5de10a020523fb"
+ "sourceDigest": "04efed1afdbf1386735b45894f220aa7042f043ffb9054c08d3cad72b5b1e729"
},
{
- "id": "rc87-50ef6b5a29353027",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 10,
- "title": "starts with ~",
+ "id": "rc87-b9ae1fc378b1ed82",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-policy-output.test.ts",
+ "line": 28,
+ "title": "`BH-0004 graph compilation consumes policies before ${qualifier} wrapping`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cd56b6b3107147deb22f352057f1a00359ba2898b6f1190947a31704b597899c"
+ "sourceDigest": "04efed1afdbf1386735b45894f220aa7042f043ffb9054c08d3cad72b5b1e729"
},
{
- "id": "rc87-a0f763fe71e5b53c",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 11,
- "title": "starts with ~d",
+ "id": "rc87-b9ae1fc378b1ed82",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-imported-policy-output.test.ts",
+ "line": 28,
+ "title": "`BH-0004 graph compilation consumes policies before ${qualifier} wrapping`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a2d9059771b8f9b9707b3e6ff322037f560a7179663aa8daa9c4db6ca923617d"
+ "sourceDigest": "04efed1afdbf1386735b45894f220aa7042f043ffb9054c08d3cad72b5b1e729"
},
{
- "id": "rc87-056beba9946e5303",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 12,
- "title": "removed ~ key values",
+ "id": "rc87-ddaebcbcc1edd203",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-inline-bundle.test.ts",
+ "line": 5,
+ "title": "`BH-0004 ${binding} bundle rendering can inline leaves while preserving asset boundaries`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c1b4d53a63d6f4aed85dc3df9466821e9ab852bad2612b7d2b047f6da8bd0176"
+ "sourceDigest": "009c3f3fa4e920464d2f6a62dec5efad3f00129c636cb76aac23fd85a6d876f8"
},
{
- "id": "rc87-6e1c99f8025c3c9e",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 13,
- "title": "f",
+ "id": "rc87-ddaebcbcc1edd203",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-inline-bundle.test.ts",
+ "line": 5,
+ "title": "`BH-0004 ${binding} bundle rendering can inline leaves while preserving asset boundaries`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "854d3c60969a2a21583f8b155479b706f94efacb2d551dab640fbd5e2531360d"
+ "sourceDigest": "009c3f3fa4e920464d2f6a62dec5efad3f00129c636cb76aac23fd85a6d876f8"
},
{
- "id": "rc87-75df69eef10797e4",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 14,
- "title": "retained key alias",
+ "id": "rc87-e889ebb315edb1e5",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-inline-graph-mappings.test.ts",
+ "line": 10,
+ "title": "`${binding} inline graph preserves qualified native compose and original output maps`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5c01a038aadbedf0a0ac2814bcf088f0dd7d57754b715a01f2a0315428419cbb"
+ "sourceDigest": "fb20dbf0e856c37b16f4ba88f1f1567184dd3aa9a3ac9cef1783e0c5e716dc46"
},
{
- "id": "rc87-80c7b58b22a12938",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 15,
- "title": "retained radius corner key alias",
+ "id": "rc87-e889ebb315edb1e5",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-inline-graph-mappings.test.ts",
+ "line": 10,
+ "title": "`${binding} inline graph preserves qualified native compose and original output maps`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "313d963529540462ce5b19ec16ffc647695ab0e659f435df2d46981136b79c79"
+ "sourceDigest": "fb20dbf0e856c37b16f4ba88f1f1567184dd3aa9a3ac9cef1783e0c5e716dc46"
},
{
- "id": "rc87-f194d04e3052969f",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 16,
- "title": "removed radius side key alias",
+ "id": "rc87-ebe5c5337f9a03f7",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-inline-graph-mappings.test.ts",
+ "line": 27,
+ "title": "Node manifest files and references reject qualified global definitions",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "72799e6c6000fe63d1b886186b0b245c711683391f9065a3748b1b5756411429"
+ "sourceDigest": "04f15150082202de5a66aeb6f48ebbea55b45f61f9b3286b9b4f92f9b38117ce"
},
{
- "id": "rc87-3561a642bc7a13da",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 17,
- "title": "native value namespace property",
+ "id": "rc87-8a405f23d5d4d852",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-compose-position.test.ts",
+ "line": 22,
+ "title": "`legacy source ${binding} preserves ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2d381e4d3a9d35a0e011d948f70600c144e6cd10bef7a093542b139bd2d64366"
+ "sourceDigest": "bddf5db38a128332d3f325bb922c5310eb08549c0e7672372c9f097e6b7b7da1"
},
{
- "id": "rc87-e88af0669201d4e6",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 18,
- "title": "removed key alias",
+ "id": "rc87-8a405f23d5d4d852",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-compose-position.test.ts",
+ "line": 22,
+ "title": "`legacy source ${binding} preserves ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1bf489f6fb435923fbef9441cd48b982710f3991d16a8cb3fbe82bf21fbc6dc2"
+ "sourceDigest": "bddf5db38a128332d3f325bb922c5310eb08549c0e7672372c9f097e6b7b7da1"
},
{
- "id": "rc87-af6602bb51df8235",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
- "line": 21,
- "title": "t",
+ "id": "rc87-8a405f23d5d4d852",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-compose-position.test.ts",
+ "line": 22,
+ "title": "`legacy source ${binding} preserves ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "47e48b9b20640b3c5d3d3edbc05151cb4d1ab76f98da50c9a8184766c46573ff"
+ "sourceDigest": "bddf5db38a128332d3f325bb922c5310eb08549c0e7672372c9f097e6b7b7da1"
},
{
- "id": "rc87-f4df6f1142cde91f",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "id": "rc87-8a405f23d5d4d852",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-compose-position.test.ts",
"line": 22,
- "title": "removed t alias",
+ "title": "`legacy source ${binding} preserves ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9887fddc4a7e1a5ca8784b228a761bb5e38dbfa88bfce08bc7d55c8314c2a12b"
+ "sourceDigest": "bddf5db38a128332d3f325bb922c5310eb08549c0e7672372c9f097e6b7b7da1"
},
{
- "id": "rc87-ae92eb4e4657098c",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
- "line": 4,
- "title": "breakpoint",
+ "id": "rc87-8a405f23d5d4d852",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-compose-position.test.ts",
+ "line": 22,
+ "title": "`legacy source ${binding} preserves ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7d14654e2ccac5cdb8e6bc81cfc0c25723d9c4944196caedd287b2b9165f3045"
+ "sourceDigest": "bddf5db38a128332d3f325bb922c5310eb08549c0e7672372c9f097e6b7b7da1"
},
{
- "id": "rc87-a5bd46ef450610bc",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
- "line": 5,
- "title": "&",
+ "id": "rc87-8a405f23d5d4d852",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-compose-position.test.ts",
+ "line": 22,
+ "title": "`legacy source ${binding} preserves ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c3c3cc4497ba6ea21cbcbe2c415025b5a2bc2e99fe4a09df960fa092cbc5ac38"
+ "sourceDigest": "bddf5db38a128332d3f325bb922c5310eb08549c0e7672372c9f097e6b7b7da1"
},
{
- "id": "rc87-d81c07eb5132e4f7",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
- "line": 6,
- "title": "&>",
+ "id": "rc87-944efac2f81aa9f7",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-compose-position.test.ts",
+ "line": 28,
+ "title": "`Node sync source and legacy file preserve ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "27d737c09bbf48043284d4e2f213538bd181a1f7c3f79104ff3b5124bf0a9ac6"
+ "sourceDigest": "913f964838391e25d00ddf12bd8422a689f28fffea34b46508a9779dfa2add20"
},
{
- "id": "rc87-9c9bc20ba9816edd",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
- "line": 7,
- "title": "&>=",
+ "id": "rc87-944efac2f81aa9f7",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-compose-position.test.ts",
+ "line": 28,
+ "title": "`Node sync source and legacy file preserve ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "69d6f218b29a45ebb5fa4ebffa67153d0bcc49f49acd35724c0ec76a4c7f1df7"
+ "sourceDigest": "913f964838391e25d00ddf12bd8422a689f28fffea34b46508a9779dfa2add20"
},
{
- "id": "rc87-5f111aa88efddd0f",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
- "line": 8,
- "title": "&<",
+ "id": "rc87-944efac2f81aa9f7",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-compose-position.test.ts",
+ "line": 28,
+ "title": "`Node sync source and legacy file preserve ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a9836b191a2c552c55722075deabb0728fb7478f3786669a38156a419beb8f23"
+ "sourceDigest": "913f964838391e25d00ddf12bd8422a689f28fffea34b46508a9779dfa2add20"
},
{
- "id": "rc87-6418015e8a03f479",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
- "line": 9,
- "title": "&<=",
+ "id": "rc87-53796fdca07a836c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 10,
+ "title": "`Node project retains imported definitions: ${qualifier || 'unqualified'}, compose=${compose}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "39aaa0c55c5a0c0b8a4b83cdb4f96f1683d58cb01b4310850a901fd836e248b6"
+ "sourceDigest": "52b186b3676b0704d2119eaf76b6988ed7406e7b9563abb23798d432593f5615"
},
{
- "id": "rc87-20fd596cba9ae7be",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
- "line": 12,
- "title": "@",
+ "id": "rc87-53796fdca07a836c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 10,
+ "title": "`Node project retains imported definitions: ${qualifier || 'unqualified'}, compose=${compose}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "be6e0e884390cd1d88d6428373962de2cef3a3f45b670e0172dfedd8365a2b03"
+ "sourceDigest": "52b186b3676b0704d2119eaf76b6988ed7406e7b9563abb23798d432593f5615"
},
{
- "id": "rc87-2b57f9b881f17f74",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
- "line": 41,
- "title": "@>",
+ "id": "rc87-53796fdca07a836c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 10,
+ "title": "`Node project retains imported definitions: ${qualifier || 'unqualified'}, compose=${compose}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1be594b07358ca72d20d8f17cfcd442eafe8f1544e84120b8d1f4243edd90665"
+ "sourceDigest": "52b186b3676b0704d2119eaf76b6988ed7406e7b9563abb23798d432593f5615"
},
{
- "id": "rc87-75a82bc5803f44dc",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/react.test.ts",
- "line": 8,
- "title": "types next class and starts with white space",
+ "id": "rc87-53796fdca07a836c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 10,
+ "title": "`Node project retains imported definitions: ${qualifier || 'unqualified'}, compose=${compose}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "153592a178dfe1b597adf06b0966b3848b4798eb10bfbfa20994dcf8b7ac395c"
+ "sourceDigest": "52b186b3676b0704d2119eaf76b6988ed7406e7b9563abb23798d432593f5615"
},
{
- "id": "rc87-1b21e6b701e0783e",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/react.test.ts",
- "line": 19,
- "title": "types next class and starts with b",
+ "id": "rc87-53796fdca07a836c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 10,
+ "title": "`Node project retains imported definitions: ${qualifier || 'unqualified'}, compose=${compose}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "31beebed229179a274f5f37a88e8178594f45b98814efcbd4a35c31bc863c7f8"
+ "sourceDigest": "52b186b3676b0704d2119eaf76b6988ed7406e7b9563abb23798d432593f5615"
},
{
- "id": "rc87-e048c5438f86d97a",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/react.test.ts",
- "line": 30,
- "title": "types inside spaced jsx attribute assignment",
+ "id": "rc87-53796fdca07a836c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 10,
+ "title": "`Node project retains imported definitions: ${qualifier || 'unqualified'}, compose=${compose}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "74ed0e77208a90f3b91c7aaf1e16574eb65eb4f5333f7f68fc3f0df77a455ce6"
+ "sourceDigest": "52b186b3676b0704d2119eaf76b6988ed7406e7b9563abb23798d432593f5615"
},
{
- "id": "rc87-f7d2988618b16406",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 6,
- "title": ":",
+ "id": "rc87-53796fdca07a836c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 10,
+ "title": "`Node project retains imported definitions: ${qualifier || 'unqualified'}, compose=${compose}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2ece8ea91e78e0833d950c2cfa9e37b750d24684ca8d099a62c3324d7fb3e718"
+ "sourceDigest": "52b186b3676b0704d2119eaf76b6988ed7406e7b9563abb23798d432593f5615"
},
{
- "id": "rc87-0b8c8996977e4736",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 7,
- "title": "two",
+ "id": "rc87-53796fdca07a836c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 10,
+ "title": "`Node project retains imported definitions: ${qualifier || 'unqualified'}, compose=${compose}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "58ec55f8a1cc94209da10704d7288959375040f771a5d72508ed0bc0c18630a9"
+ "sourceDigest": "52b186b3676b0704d2119eaf76b6988ed7406e7b9563abb23798d432593f5615"
},
{
- "id": "rc87-1a5e4f67c7694109",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 8,
- "title": "utility",
+ "id": "rc87-53796fdca07a836c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 10,
+ "title": "`Node project retains imported definitions: ${qualifier || 'unqualified'}, compose=${compose}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "00c86825e3a5993ed9b479e4925036966893d188c8e65cb03f4556a1e571c47d"
+ "sourceDigest": "52b186b3676b0704d2119eaf76b6988ed7406e7b9563abb23798d432593f5615"
},
{
- "id": "rc87-122496d0780f5477",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 9,
- "title": "functional labels",
+ "id": "rc87-53796fdca07a836c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 10,
+ "title": "`Node project retains imported definitions: ${qualifier || 'unqualified'}, compose=${compose}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a6c9b838f31510b43ec39d1028aab949d9d4346fb45fbe553ea68107cbd25080"
+ "sourceDigest": "52b186b3676b0704d2119eaf76b6988ed7406e7b9563abb23798d432593f5615"
},
{
- "id": "rc87-f9a1b4065eec68bf",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 36,
- "title": "should take into account trigger character :",
+ "id": "rc87-53796fdca07a836c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 10,
+ "title": "`Node project retains imported definitions: ${qualifier || 'unqualified'}, compose=${compose}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9fa5f576e16030d7227e579e171e315b83defb9ccd95d466cb736978e66a82c7"
+ "sourceDigest": "52b186b3676b0704d2119eaf76b6988ed7406e7b9563abb23798d432593f5615"
},
{
- "id": "rc87-b8aab6d7ca4db7d9",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 37,
- "title": "should insert functional pseudo-class text without the trigger character",
+ "id": "rc87-53796fdca07a836c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 10,
+ "title": "`Node project retains imported definitions: ${qualifier || 'unqualified'}, compose=${compose}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "afa4d22aa1d254be0e51aedeaa1c1f091acb67688f1b3460e656dc1a6a34b28d"
+ "sourceDigest": "52b186b3676b0704d2119eaf76b6988ed7406e7b9563abb23798d432593f5615"
},
{
- "id": "rc87-5cd7114b83fb17f7",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 38,
- "title": "should take into account trigger character +",
+ "id": "rc87-4d6c992f96616210",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-legacy-project-graphs.test.ts",
+ "line": 35,
+ "title": "Node project merges prior entries while resolving child-owned references and policies",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2f1c409e48925872a18d06c3703c3bd199f5823b89d6415162617d4d57c82a34"
+ "sourceDigest": "90004986fac1f1875c74b796f739a02137db18932e28de3d349c9c5de82f508f"
},
{
- "id": "rc87-c3c5e61bfa6d7bf5",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 39,
- "title": "info",
+ "id": "rc87-ac2fc316a6943365",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-local-transform-delivery.test.ts",
+ "line": 10,
+ "title": "BH-0004 local transform delivers imported compose with host resolver=false",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c9eea07f140c504c10ec5f57a4967eee90cf45f2d1dc0fbf75ba23d74c629d9e"
+ "sourceDigest": "0d1a8947258dc946a17f3c8c249502789441f6e2907879b1d1335533f47d2746",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
},
{
- "id": "rc87-2d474933c8783581",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 61,
- "title": "::",
+ "id": "rc87-f95464fa97d68a55",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-local-transform-delivery.test.ts",
+ "line": 10,
+ "title": "BH-0004 local transform delivers imported compose with host resolver=true",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5eb2d418bbd0297e4e4948cecb5290223805a79f84f4066dbe5359fc6dc40d4f"
+ "sourceDigest": "0d1a8947258dc946a17f3c8c249502789441f6e2907879b1d1335533f47d2746",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
},
{
- "id": "rc87-1042776ba508d17c",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 62,
- "title": "two",
+ "id": "rc87-f7a61e6f1d404458",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-local-transform-delivery.test.ts",
+ "line": 36,
+ "title": "BH-0004 local graph keeps reference globals and deduplicates published globals=false",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f90e9f81f5821426c440fac97aee743f155f377926dde1976e021a356a658b9d"
+ "sourceDigest": "233cea31f4dff38fc62b7d4520290736318241a7eb5afe4e59c444f6f44c1bfd",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
},
{
- "id": "rc87-9eb0fcbe6102684e",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 63,
- "title": "utility",
+ "id": "rc87-d19de752c0d1c652",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-local-transform-delivery.test.ts",
+ "line": 36,
+ "title": "BH-0004 local graph keeps reference globals and deduplicates published globals=true",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "34658cb86e205e1a3f538974498dd8f8050fb0452926d7fe5946b749e45afec0"
+ "sourceDigest": "233cea31f4dff38fc62b7d4520290736318241a7eb5afe4e59c444f6f44c1bfd",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
},
{
- "id": "rc87-c2027174014725bd",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 64,
- "title": "removed aliases",
+ "id": "rc87-d5e62fe213630945",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-native-conditionals.test.ts",
+ "line": 9,
+ "title": "BH-0057 native and Wasm graphs preserve conditional structure and sibling order",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ca5b138c7979a4dfdc8fe4219a189ca572cc0870aa22d889d94626c44b68ac89"
+ "sourceDigest": "f008add6c31ba76811d210ae851a5f133a51854bed91af8a7b2bec914d947a1f"
},
{
- "id": "rc87-fe7687b8403588b6",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 70,
- "title": "should take into account trigger character :",
+ "id": "rc87-13148f9e6cef892c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-native-conditionals.test.ts",
+ "line": 29,
+ "title": "BH-0057 public direct output maps conditional compose to authored selector and class",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5811542944a62704f51236e98bff4e09bb2e29b19f239734d2236f1fac5b6b29"
+ "sourceDigest": "740e6637aa32cc3766a4c3f7ba06154d46a247c790fe07f48338a98b3a5e6099"
},
{
- "id": "rc87-e8feba90aa9178a0",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 71,
- "title": "should take into account trigger character ::",
+ "id": "rc87-be724e1a04cdc816",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-native-conditionals.test.ts",
+ "line": 43,
+ "title": "BH-0057 direct public stylesheet keeps the authored winner inside native media",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "72e72215302fc3d24325ad478620fec88d06e5e4b788cb45c2ce7a23ed422b0e"
+ "sourceDigest": "92c9c6180a88dbcfe3572a4c9ae8a92e67087ae9ea110664458a0ebf8287cfe9"
},
{
- "id": "rc87-9edd2b278fcedd74",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 72,
- "title": "should take into account trigger character +",
+ "id": "rc87-dba1a6468d9d8640",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-native-host-transform.test.ts",
+ "line": 11,
+ "title": "host can explicitly deliver an already transformed native graph with original resource owners",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b8fcb88d08f05f0dbeae38ef617f7d32eb1ff7932d201793fdf3d1262ed79ed4"
+ "sourceDigest": "eacfcfb0031202d703cac49110562744375a85cd06aaf3f4795a982ac513a22d"
},
{
- "id": "rc87-b0ec0121547c0994",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 73,
- "title": "info",
+ "id": "rc87-8f4088af3be286f2",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-node-import-discovery.test.ts",
+ "line": 16,
+ "title": "`BH-0004 actual file compiler: ${name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ac62780ef7b34154c8e184fc3b49738f9685b931751f747b759ec939436b4e02"
+ "sourceDigest": "ebe2985d014af860cd713956012262efa7ce5e8a81b9b58d106de92b9f96a486"
},
{
- "id": "rc87-c47ea7b9ce16f73e",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 92,
- "title": "sorting",
+ "id": "rc87-8f4088af3be286f2",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-node-import-discovery.test.ts",
+ "line": 16,
+ "title": "`BH-0004 actual file compiler: ${name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d6080cc645540d2e1e98f94dd8bd606bdf943d922a9714b429cb3ac14bc40568"
+ "sourceDigest": "ebe2985d014af860cd713956012262efa7ce5e8a81b9b58d106de92b9f96a486"
},
{
- "id": "rc87-a377c59477c00239",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
- "line": 96,
- "title": "types _ should hint",
+ "id": "rc87-8f4088af3be286f2",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-node-import-discovery.test.ts",
+ "line": 16,
+ "title": "`BH-0004 actual file compiler: ${name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4f79082f2c3b1011b611c9bea3a3e85cb8b8dc6c6422101adbe36e3d9400e5dd"
+ "sourceDigest": "ebe2985d014af860cd713956012262efa7ce5e8a81b9b58d106de92b9f96a486"
},
{
- "id": "rc87-6eabdb460350b537",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/styles.test.ts",
- "line": 20,
- "title": "info",
+ "id": "rc87-8f4088af3be286f2",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-node-import-discovery.test.ts",
+ "line": 16,
+ "title": "`BH-0004 actual file compiler: ${name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f1e8506d5f98c70cb78a57b12c87236ae4757f95537657312f7c1c28f765e51e"
+ "sourceDigest": "ebe2985d014af860cd713956012262efa7ce5e8a81b9b58d106de92b9f96a486"
},
{
- "id": "rc87-ca81e2e45d1077cd",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/styles.test.ts",
- "line": 35,
- "title": "types btn: and should not hint",
+ "id": "rc87-8f4088af3be286f2",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-node-import-discovery.test.ts",
+ "line": 16,
+ "title": "`BH-0004 actual file compiler: ${name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8ea77be22f08dffc5522c8e6ecb7c90252bbb18488dd6d3e3c997fcce0aa81c2"
+ "sourceDigest": "ebe2985d014af860cd713956012262efa7ce5e8a81b9b58d106de92b9f96a486"
},
{
- "id": "rc87-1269ac18e6cfde60",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/utilities.test.ts",
- "line": 5,
- "title": "types a",
+ "id": "rc87-8f4088af3be286f2",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-node-import-discovery.test.ts",
+ "line": 16,
+ "title": "`BH-0004 actual file compiler: ${name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e5755685a204585b2537a32085c34bd32dbea5988a8292255a30fa25d4652f39"
+ "sourceDigest": "ebe2985d014af860cd713956012262efa7ce5e8a81b9b58d106de92b9f96a486"
},
{
- "id": "rc87-7c45cd82f6cbc8dc",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/utilities.test.ts",
- "line": 6,
- "title": "hints semantic utilities",
+ "id": "rc87-86521ba523b9dfa8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-node-import-discovery.test.ts",
+ "line": 32,
+ "title": "`BH-0004 ${binding}: dependency analysis and flat graph use identical decoded specifiers`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "99e6663a52cd2f3ef79e321a602bd1307e3291c915ef06b6d6e450f1438a6ec6"
+ "sourceDigest": "444e0d17fca4f271fd60b4c283089f0edc42071f283da1e2948fea39149bf5d1"
},
{
- "id": "rc87-84962704599bb3d2",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/utilities.test.ts",
- "line": 20,
- "title": "info",
- "runner": "vitest",
+ "id": "rc87-86521ba523b9dfa8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-node-import-discovery.test.ts",
+ "line": 32,
+ "title": "`BH-0004 ${binding}: dependency analysis and flat graph use identical decoded specifiers`",
+ "runner": "vitest",
"kind": "test",
- "sourceDigest": "5065d1dbd4c451c5958d04b4934337efe129b0f5da75600a38ac7d5e2307b58c"
+ "sourceDigest": "444e0d17fca4f271fd60b4c283089f0edc42071f283da1e2948fea39149bf5d1"
},
{
- "id": "rc87-f884ce5a8a6921b6",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 9,
- "title": "convert any color spaces to RGB and hint correctly",
+ "id": "rc87-ade04cdc29f1e270",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-node-import-discovery.test.ts",
+ "line": 48,
+ "title": "BH-0004 actual referenced CSS with encoded filename and query keeps context-only definitions",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "675d6b401807fed6c435f841c59ac29eee56c90969af6fa4643e5de7e8445375"
+ "sourceDigest": "c9118638934d74ceb871161c5b68a82117e90f6024f2348cfb6697921f9655c3"
},
{
- "id": "rc87-18f0e4574526b0ba",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 21,
- "title": "should ignore values containing blanks",
+ "id": "rc87-59585c578fd2d756",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-node-import-discovery.test.ts",
+ "line": 64,
+ "title": "BH-0004 unresolved bare package CSS remains available to the host resolver",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "25fded30d9d5bcbded70f1a36bbec5c000789047126130ceb84594a35c28e610"
+ "sourceDigest": "c060f9d2012cac5cb5005ea22f100a9be3f47b3a4425f097f362905c9324ef49"
},
{
- "id": "rc87-05c0696af6f0d72b",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 22,
- "title": "types | delimiter",
+ "id": "rc87-d1acc37c9677b2ac",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-ordered-direct-output.test.ts",
+ "line": 15,
+ "title": "`BH-0057 ${binding} universal direct output preserves a single anonymous layer and order`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c5a10ce78737784e5985eef38610a053af39ce6842e7d8460176746b483bcd0b"
+ "sourceDigest": "35d7bf580e9683bc856e7ab959cd685fb95836f93a4c4ef6919373fcd8d20276"
},
{
- "id": "rc87-078446946f3fbb8a",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 23,
- "title": "types , separator",
+ "id": "rc87-d1acc37c9677b2ac",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-ordered-direct-output.test.ts",
+ "line": 15,
+ "title": "`BH-0057 ${binding} universal direct output preserves a single anonymous layer and order`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "156570abc46492f640cb4e5552e06537697a79253b082014dd01aaa3a6bb1432"
+ "sourceDigest": "35d7bf580e9683bc856e7ab959cd685fb95836f93a4c4ef6919373fcd8d20276"
},
{
- "id": "rc87-7cf6226eb46d7d2d",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 24,
- "title": "ends with @ and not to hint values",
+ "id": "rc87-c5aec167f0a74699",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-ordered-direct-output.test.ts",
+ "line": 25,
+ "title": "ordered output and mappings survive a native/Wasm JSON round trip, including invalid-slot errors",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a0037ddb8a876cf53bcf27c56fedd134d2d72b14152792047de9767444eab36e"
+ "sourceDigest": "af6387348187ce8d005e3aa71645cf5fae22e1dd53050caf5f73cab29f62342c"
},
{
- "id": "rc87-7defe3a971ab58ca",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 25,
- "title": "ends with : and not to hint values",
+ "id": "rc87-2bbd04493460fe6d",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-ordered-direct-output.test.ts",
+ "line": 40,
+ "title": "BH-0004 qualified imports reject global child definitions before publishing output",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ad06f153f81fc8475100c96c481671da21e5720e223c5a10be748b9da2864239"
+ "sourceDigest": "1aaa599a9ce84594893f53f73352d30229be540ac23b5dc0bd6970c2f1b4ccaf"
},
{
- "id": "rc87-6db415706ca589bc",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 28,
- "title": "removed fixed text aliases",
+ "id": "rc87-194045350b0c8c8c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-ordered-direct-output.test.ts",
+ "line": 52,
+ "title": "ordered native-only imported layers retain child and later root mappings",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "77daa15951725088595d0be78a542eb750c001cd967c4d048bc354e6524f8a94"
+ "sourceDigest": "2a5b3952ac244603ef7fae18b891daa09303e7268e090877ffbe0db40377b8a9"
},
{
- "id": "rc87-7122e6a5cf17b63c",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 37,
- "title": "font:",
+ "id": "rc87-3b2ba6dd19c6af32",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-ordered-direct-output.test.ts",
+ "line": 69,
+ "title": "disabling raw native CSS retains composed container context and accurate output maps",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6f6a048ee7682b178559f2b922acbb7a8c1998a72fbe17bea6f2bcf554da3aa9"
+ "sourceDigest": "f672371ce2d82f949bf6e1bf5e99957cbf3a6788dd9119c335f7860d2009d9e2"
},
{
- "id": "rc87-1fb3fce38f10d1bd",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 60,
- "title": "font-style:",
+ "id": "rc87-0073249213c5f198",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-output-source-maps.test.ts",
+ "line": 19,
+ "title": "final CSS maps native selectors and lowered compose to authored UTF-16 locations",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1937d094392561687d5a86b55def4b4faa0f8e3cc8f854fb38c3fe19c54823c5"
+ "sourceDigest": "a02ebf3ccc1878c574e26574d3a3611c951ccbe27df9ee103f0691d529c6e114"
},
{
- "id": "rc87-b684ed0e7142753d",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 81,
- "title": "\"text:c\"",
+ "id": "rc87-00bca289830068a0",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-output-source-maps.test.ts",
+ "line": 28,
+ "title": "rendered graph maps imported compose and native selectors after reference removal",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "aad51afa8bdfe6dc7952416206256107e6dcb8404718043608315a39fe0cd504"
+ "sourceDigest": "57d097f8f7ce3f40597ebe2ad383a8ed5d0f1ff61cff5fca00a0e890e1134813"
},
{
- "id": "rc87-c3b0d1e8bc8a0155",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 82,
- "title": "\"display:b\"",
+ "id": "rc87-766e31be5d3a0ffa",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-output-source-maps.test.ts",
+ "line": 43,
+ "title": "raw Sass output map chains imported partial sources through native printing and compose lowering",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "08ebf6736c1b28fa8e9442374cc68c3b79ad3a62aeb4f722ce2b0fcf75d68310"
+ "sourceDigest": "cf009022f6a81646ba070b046c9a8fdd54fbe6b98ebf4e2bc06b12aa59b41415"
},
{
- "id": "rc87-7a961060d2019b5d",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 91,
- "title": "should hint negative values",
+ "id": "rc87-61efc6d6cc7f9037",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-output-source-maps.test.ts",
+ "line": 57,
+ "title": "expanded lowering diagnostics point to the authored child rather than flattened CSS",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "60b0e24129e9b8bb1b7a98d8ee84081784220f342ca5b7c16dfe9f0a8c822384"
+ "sourceDigest": "b39cd8c7a00b6a5c2c22ba348f5b9584cd9c70a83de0555431a8512364fcb43e"
},
{
- "id": "rc87-f352d74323b6ee7b",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 92,
- "title": "types - to hint number values",
+ "id": "rc87-363a8e13e4c57c84",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-output-source-maps.test.ts",
+ "line": 67,
+ "title": "native and Wasm transports retain identical rule, compose and copied graph mappings",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "76a969fc8bc2fa7ca5de45cd60f9acc940a747bff04270720f469cb6d63fdc2b"
+ "sourceDigest": "429039c1f29b4d4356883e2e1a7c53c32bd61604b9b30ceb16accb96065bb128"
},
{
- "id": "rc87-a65229b7632f6298",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 96,
- "title": "radius alias values use canonical radius utility",
+ "id": "rc87-5cee3213a3897574",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-output-source-maps.test.ts",
+ "line": 86,
+ "title": "invalid host maps keep successful output tied to explicit preprocessed content",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ff18e2e15b4d7a962950cd6e73dcf14cd21bb29594acbeddf6011b905b61bf66"
+ "sourceDigest": "d56a6f18c85eeb04423c7a4c69d95c56f2a37c42a7b467523781ce06bd874b87"
},
{
- "id": "rc87-0d72b4e6a84bcdfe",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 100,
- "title": "native value namespace alias values use canonical property namespace",
+ "id": "rc87-41bd2587170fa20e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-prepared-diagnostic-columns.test.ts",
+ "line": 13,
+ "title": "`prepared diagnostic columns identify an original segment: ${source}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ce814c37c4ddf230433108a838af5452452c575f5a4e90e1b9d8aaa272ec329e"
+ "sourceDigest": "8c100ba3affb5be6aac09c657b2a08160363d0933cbd73a6e2fff5061399182b"
},
{
- "id": "rc87-d5d2acfee3a5fbcc",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 105,
- "title": "background alias values include raw utility color scopes and native values",
+ "id": "rc87-41bd2587170fa20e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-prepared-diagnostic-columns.test.ts",
+ "line": 13,
+ "title": "`prepared diagnostic columns identify an original segment: ${source}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1993c6556c81315564c9263fe2be835fcf1d7853009ad7d0e2732b92f9c1bd83"
+ "sourceDigest": "8c100ba3affb5be6aac09c657b2a08160363d0933cbd73a6e2fff5061399182b"
},
{
- "id": "rc87-6bb7f4fadc4eb03f",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 119,
- "title": "CSS @compose background alias values include raw utility color scopes",
+ "id": "rc87-41bd2587170fa20e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-prepared-diagnostic-columns.test.ts",
+ "line": 13,
+ "title": "`prepared diagnostic columns identify an original segment: ${source}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4c52073c28ae19e1f4ffb49e2bc5864cb6aa204c7b954083e9c124f6fefbfc71"
+ "sourceDigest": "8c100ba3affb5be6aac09c657b2a08160363d0933cbd73a6e2fff5061399182b"
},
{
- "id": "rc87-b209aaf8711b3b50",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 133,
- "title": "vendor-prefixed text-size-adjust values use unprefixed syntax data",
+ "id": "rc87-333f062ac9ae9406",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-prepared-diagnostic-columns.test.ts",
+ "line": 32,
+ "title": "rendered root diagnostics are mapped once through the Sass source map",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "59ed8979ea2f2ce6fead5d374e270b5794ff6967b9fddbf10d7b2a713e711351"
+ "sourceDigest": "b6930f3dc34786ac0cd9fc70ea32baf1d549cfe8c0fa9db5e09a23bd6e21ffd0"
},
{
- "id": "rc87-54da2ac063570d75",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 141,
- "title": "colors",
+ "id": "rc87-655484b8c2c911b1",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-prepared-source-context.test.ts",
+ "line": 20,
+ "title": "`single-source ${syntax} lowering retains an imported partial reference owner`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "12e64b1bbc7fe1f14bd4322c0ec745c66b3f41fe5e2a61dd2e3e6fcf2612314b"
+ "sourceDigest": "e6b27013113d0ce8411efd3f668cd4e35dd1228f1ed35fd16595c02c46902da0"
},
{
- "id": "rc87-dc65cb7fdf53c4e9",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 164,
- "title": "base hue and text color aliases",
+ "id": "rc87-655484b8c2c911b1",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-prepared-source-context.test.ts",
+ "line": 20,
+ "title": "`single-source ${syntax} lowering retains an imported partial reference owner`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "87653808543c8f73a2fc00237742ab30838246c764df325a5eb75d751c399223"
+ "sourceDigest": "e6b27013113d0ce8411efd3f668cd4e35dd1228f1ed35fd16595c02c46902da0"
},
{
- "id": "rc87-bf9105b5b971e40f",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 186,
- "title": "surface aliases",
+ "id": "rc87-23d5e8c0208e8309",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-prepared-source-context.test.ts",
+ "line": 39,
+ "title": "prepared source registers a missing mapped reference before failure and recovers",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6c56c0a121c8addfcc159e656c2424421a39779bb3ec1c9a149e0ee829944b98"
+ "sourceDigest": "b195d140b9b7e6f9c5368f9e0dc9dcf034cbc8f776a2619f679af25dd4e57ae7"
},
{
- "id": "rc87-e761b426e3085ab1",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 200,
- "title": "unitful numeric variables",
+ "id": "rc87-f886f7a53383ae34",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-prepared-source-context.test.ts",
+ "line": 52,
+ "title": "prepared source reports invalid compose at the original partial diagnostic location",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2942c2ad8c6c540199a072637a699c9e7eca325708d34a2bcd69ee2b78c359c9"
+ "sourceDigest": "e2ae8cb47e825be5b331c296372862d40549717140436e83c1945773ad0e4702"
},
{
- "id": "rc87-affd768abd6aa493",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
- "line": 244,
- "title": "fucntions",
+ "id": "rc87-399f8c1a7bde403b",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-preserved-source.test.ts",
+ "line": 14,
+ "title": "`${binding} source preservation allows class lists and rejects explicit pruning`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "582be3231873907be2682127ab0674ff4c3a5d700fc220572f9d92cfb7a2d9b9"
+ "sourceDigest": "367ab9d8d2997e3c0ed29a9c0d2674a70476332ca564ab30434e695e060f2ab3"
},
{
- "id": "rc87-0d60ca3cf071ddf9",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/variables.test.ts",
- "line": 5,
- "title": "positive container",
+ "id": "rc87-399f8c1a7bde403b",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-preserved-source.test.ts",
+ "line": 14,
+ "title": "`${binding} source preservation allows class lists and rejects explicit pruning`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7054eeb232b5e1c7acf5f99af7c8c4d0f011da98d81c211973f6c7b5c90a9ca8"
+ "sourceDigest": "367ab9d8d2997e3c0ed29a9c0d2674a70476332ca564ab30434e695e060f2ab3"
},
{
- "id": "rc87-f8911f5b402819d6",
- "package": "language-service",
- "file": "packages/language-service/tests/suggest-syntax/variables.test.ts",
- "line": 28,
- "title": "negative container",
+ "id": "rc87-883b5649c488f5df",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-preserved-source.test.ts",
+ "line": 25,
+ "title": "`${binding} graph preparation preserves native input and rejects per-file pruning`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a931caf902c21ac4ac350ef2abf7ff7f9ba3a7b85b6fc53474d2e6b1724436a0"
+ "sourceDigest": "e26fb3d77ae971e31645dfaea8fd70cd98bc55b85b89ff8136e3c25fbf532d15"
},
{
- "id": "rc87-89410ae763b4edeb",
- "package": "mcp",
- "file": "packages/mcp/tests/core.test.ts",
- "line": 542,
- "title": "routes Rust crates to Cargo context, risk packs, and scoped validation",
+ "id": "rc87-883b5649c488f5df",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-preserved-source.test.ts",
+ "line": 25,
+ "title": "`${binding} graph preparation preserves native input and rejects per-file pruning`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9ea3934b4c579717378b4e6e35fbb7a36402a0b5e29181a42cedd97a8ce33759"
+ "sourceDigest": "e26fb3d77ae971e31645dfaea8fd70cd98bc55b85b89ff8136e3c25fbf532d15"
},
{
- "id": "rc87-30a8818ec524a89d",
- "package": "next",
- "file": "packages/next/tests/adapter.test.ts",
- "line": 198,
- "title": "does not duplicate globals already emitted by project CSS entries",
+ "id": "rc87-3b49de3bf97d4e9d",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-preserved-source.test.ts",
+ "line": 39,
+ "title": "Node stylesheet preparation preserves raw text and exact UTF-16 selector origins",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9186bac196a774a9af2df9670741ccd75cd686397d6f1189c4aa610f24875162"
+ "sourceDigest": "8444e77376242db216a3d7b71eca766fa671d7fe6b1d48a992fb0fba18c22206"
},
{
- "id": "rc87-80dd1fdb6005c55e",
- "package": "next",
- "file": "packages/next/tests/css-manifest-loader.test.ts",
- "line": 197,
- "title": "loads emitted globals from project CSS entry files",
+ "id": "rc87-41a9f51f2382c0c8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-preserved-source.test.ts",
+ "line": 53,
+ "title": "Wasm stylesheet preparation retains untouched bytes",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "afc0096e436e9cfa4ce499d91f29e46e0724f279b2b2d0d3afe9162e2ac632a8"
+ "sourceDigest": "8cfa25eb69f60bd9e9dea2ebb2a72e92b86c77d43c04a7c42f3e011c00337f7c"
},
{
- "id": "rc87-7972b1e44a0ef1b0",
- "package": "next",
- "file": "packages/next/tests/next-config.test.ts",
- "line": 402,
- "title": "adds CSS manifest loaders without runtime aliases or the adapter when mode is null",
+ "id": "rc87-e7cf889394db2a40",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-project-dependency-observer.test.ts",
+ "line": 10,
+ "title": "`BH-0004 ${kind} project reports missing nested import before failure and recovers`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "166ffffd07951eec70fb394f2aebb1856c28587e3d97079e2c521da88aa91d63"
+ "sourceDigest": "995a820b3e8c5b01ac11e907192800c2cfddd4ae1ca01bef63fa13e68982426e",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "import"
+ }
},
{
- "id": "rc87-36be15cd7e8139e7",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 222,
- "title": "matches the readable preset sources",
+ "id": "rc87-e7cf889394db2a40",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-project-dependency-observer.test.ts",
+ "line": 10,
+ "title": "`BH-0004 ${kind} project reports missing nested import before failure and recovers`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "4363c207da77d9e533870afad8fc4b300dfe8c707ed3f4a7a0b05101048da300"
+ "sourceDigest": "995a820b3e8c5b01ac11e907192800c2cfddd4ae1ca01bef63fa13e68982426e",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "import"
+ }
},
{
- "id": "rc87-3ede4740c64bf3fd",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 248,
- "title": "matches the readable preset native CSS",
+ "id": "rc87-dbdf2cfa41874fe8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-project-dependency-observer.test.ts",
+ "line": 10,
+ "title": "`BH-0004 ${kind} project reports missing nested reference before failure and recovers`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "767cabb827deca81caa716177b71c0dc331948efb5446af6d3a53cdbf8c5c470"
+ "sourceDigest": "995a820b3e8c5b01ac11e907192800c2cfddd4ae1ca01bef63fa13e68982426e",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "reference"
+ }
},
{
- "id": "rc87-4cd87490a2a3ed8c",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 262,
- "title": "matches the CSS-authored preset manifest facets",
+ "id": "rc87-dbdf2cfa41874fe8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-project-dependency-observer.test.ts",
+ "line": 10,
+ "title": "`BH-0004 ${kind} project reports missing nested reference before failure and recovers`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f02a4ccf2004e45966ca3aa7b5d4f9b383d80a9714aba462daa080d37e1106f1"
+ "sourceDigest": "995a820b3e8c5b01ac11e907192800c2cfddd4ae1ca01bef63fa13e68982426e",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "reference"
+ }
},
{
- "id": "rc87-84a357c9610bed8d",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 275,
- "title": "does not publish the removed px inline alias",
+ "id": "rc87-2da8d6687422e961",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-project-dependency-observer.test.ts",
+ "line": 27,
+ "title": "`BH-0004 ${kind} project dependency callback runs before reading and observes shared files once`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7b240b964d92234a421e7e7638626cb5486d8527923af88efc38e79a1715dcc5"
+ "sourceDigest": "891099f57918e0cb3a532bb7f6d1a680f9210ca8753ddab043fccc917e4c5585"
},
{
- "id": "rc87-350a56899da56fc9",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 279,
- "title": "does not publish removed static utility shortcuts",
+ "id": "rc87-2da8d6687422e961",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-project-dependency-observer.test.ts",
+ "line": 27,
+ "title": "`BH-0004 ${kind} project dependency callback runs before reading and observes shared files once`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d69588112c950a31c7eafbcd5fa8b38b4d364df1b3009b1780aea920894c02b3"
+ "sourceDigest": "891099f57918e0cb3a532bb7f6d1a680f9210ca8753ddab043fccc917e4c5585"
},
{
- "id": "rc87-83d60d84c9357cdd",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 288,
- "title": "uses engine default settings when the preset manifest omits settings",
+ "id": "rc87-5d220236f81465ed",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-project-graphs.test.ts",
+ "line": 12,
+ "title": "`BH-0004 project manifests retain definitions through ${condition} with external imports`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "df268e91cef9b1c75ce4b63af34ecc8c4c10566152ce7fb3ddee16517b41e866"
+ "sourceDigest": "00d4e43ab31dfa7826142f7a55ceb5833fd415d8315030501ae8882e1180164e"
},
{
- "id": "rc87-a18680bc41e4bad8",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 298,
- "title": "keeps preset variable alias refs inside registered namespaces",
+ "id": "rc87-5d220236f81465ed",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-project-graphs.test.ts",
+ "line": 12,
+ "title": "`BH-0004 project manifests retain definitions through ${condition} with external imports`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "11c7dbc326117753b964e25f12400b81bbfa5d6513e273bd6c8228f066080baf"
+ "sourceDigest": "00d4e43ab31dfa7826142f7a55ceb5833fd415d8315030501ae8882e1180164e"
},
{
- "id": "rc87-59904b404f4f5ed1",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 311,
- "title": "preserves the compiled default registry",
+ "id": "rc87-5d220236f81465ed",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-project-graphs.test.ts",
+ "line": 12,
+ "title": "`BH-0004 project manifests retain definitions through ${condition} with external imports`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "03c44e2c7a230dcc545bb6c5d8a201263c98183a42ab42f1d31c801fc61b41b4"
+ "sourceDigest": "00d4e43ab31dfa7826142f7a55ceb5833fd415d8315030501ae8882e1180164e"
},
{
- "id": "rc87-9584cce70095a24f",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 339,
- "title": "executes CSS-authored semantic and enum pattern utilities",
+ "id": "rc87-ec5ac4a9bc85bc16",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-project-graphs.test.ts",
+ "line": 50,
+ "title": "BH-0004 project graph preserves explicit entry order",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9dc55931080896a37f0657cab420cef1b62f0b3406c69da8004918fa0b16ae60"
+ "sourceDigest": "2b9e45833e3fa04d299923a7e23a930dd3be1a04198d21dab68af56daadc3d3a"
},
{
- "id": "rc87-3ebe1b6cc45fce07",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 466,
- "title": "removes fixed keyword value aliases while preserving raw ambiguous matches",
+ "id": "rc87-b83c2acffc797a27",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-project-graphs.test.ts",
+ "line": 69,
+ "title": "BH-0004 project graph rejects missing and circular references",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "eaa7fa7c2fc3ff027b622113490a4b381a57561b8de60133e18c8fa826fb6778"
+ "sourceDigest": "dd5ad6f524f4d1b281a074f0095cc93163831822a249b1a095db78672983bdb6"
},
{
- "id": "rc87-7be6202697b1bb36",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 628,
- "title": "prunes pure native coverage and keeps Master CSS native DX utilities",
+ "id": "rc87-db5eeb81c6e4989f",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 15,
+ "title": "`BH-0004 ${mapKind} maps preserve distinct partial references, child=${child}, collection`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8f424d0c85a664c0999d3978aae47c6bc32a296f86545c874d360bf7fcfc0690"
+ "sourceDigest": "4a52d0a3b697e3c377c91fb4a865a9616cb54fa05eb11c7dd3b86980352aa924",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "collection"
+ }
},
{
- "id": "rc87-1e16856b947a8124",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 673,
- "title": "moves native value namespace utilities out of matcher definitions",
+ "id": "rc87-db5eeb81c6e4989f",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 15,
+ "title": "`BH-0004 ${mapKind} maps preserve distinct partial references, child=${child}, collection`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c0d1e47def8c65f47cb9e5b47a82adf5bb0d88cd66edcde8cdf3af6734ad7986"
+ "sourceDigest": "4a52d0a3b697e3c377c91fb4a865a9616cb54fa05eb11c7dd3b86980352aa924",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "collection"
+ }
},
{
- "id": "rc87-cadc1ca56e0d3dfd",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 699,
- "title": "keeps curated key aliases out of utility matcher keys",
+ "id": "rc87-db5eeb81c6e4989f",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 15,
+ "title": "`BH-0004 ${mapKind} maps preserve distinct partial references, child=${child}, collection`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8f9992e046c502777b6e115af84851a3f84ca6dc3cfa85f968ac6e2f8abe76bf"
+ "sourceDigest": "4a52d0a3b697e3c377c91fb4a865a9616cb54fa05eb11c7dd3b86980352aa924",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "collection"
+ }
},
{
- "id": "rc87-e5cbe9f68326daf9",
- "package": "preset",
- "file": "packages/preset/tests/default-manifest.test.ts",
- "line": 719,
- "title": "keeps compiled utility registry indexes stable and addressable",
+ "id": "rc87-db5eeb81c6e4989f",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 15,
+ "title": "`BH-0004 ${mapKind} maps preserve distinct partial references, child=${child}, collection`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "37244e2108692c6b37893747647a72b5bbbae0e3de28249e3ad891b82473f41b"
+ "sourceDigest": "4a52d0a3b697e3c377c91fb4a865a9616cb54fa05eb11c7dd3b86980352aa924",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "collection"
+ }
},
{
- "id": "rc87-f059fc9a9fa3c4e2",
- "package": "preset",
- "file": "packages/preset/tests/design-tokens.test.ts",
- "line": 149,
- "title": "keeps primitive font, spacing, radius, breakpoint, container, color, shadow, and motion tokens",
+ "id": "rc87-db5eeb81c6e4989f",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 15,
+ "title": "`BH-0004 ${mapKind} maps preserve distinct partial references, child=${child}, collection`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "996bd0e20c1bcb4cc7a03f63f53b78e204f2b9bfeb1121e5eef76e92d15ee500"
+ "sourceDigest": "4a52d0a3b697e3c377c91fb4a865a9616cb54fa05eb11c7dd3b86980352aa924",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "collection"
+ }
},
{
- "id": "rc87-b3c5d9a20c8eeb13",
- "package": "preset",
- "file": "packages/preset/tests/design-tokens.test.ts",
- "line": 226,
- "title": "removes canvas, product, and expanded hue role tokens from the default preset",
+ "id": "rc87-db5eeb81c6e4989f",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 15,
+ "title": "`BH-0004 ${mapKind} maps preserve distinct partial references, child=${child}, collection`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c866ae7d9a26488941a52ce83139ff9ba721bdb082cdb259a96ed2c97aeb8b2d"
+ "sourceDigest": "4a52d0a3b697e3c377c91fb4a865a9616cb54fa05eb11c7dd3b86980352aa924",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "collection"
+ }
},
{
- "id": "rc87-6e57a6f78c208e4a",
- "package": "preset",
- "file": "packages/preset/tests/design-tokens.test.ts",
- "line": 232,
- "title": "keeps surface color roles mode-specific",
+ "id": "rc87-bd077c08b849b4b3",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 15,
+ "title": "`BH-0004 ${mapKind} maps preserve distinct partial references, child=${child}, transform`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "75516ba6d74dd01eedae0f607c5859660082faf189b74176e8037e8a8186477f"
+ "sourceDigest": "4a52d0a3b697e3c377c91fb4a865a9616cb54fa05eb11c7dd3b86980352aa924",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "transform"
+ }
},
{
- "id": "rc87-21ac507b79e53def",
- "package": "preset",
- "file": "packages/preset/tests/design-tokens.test.ts",
- "line": 255,
- "title": "keeps shadow tokens separated with subtle mode-specific edges",
+ "id": "rc87-bd077c08b849b4b3",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 15,
+ "title": "`BH-0004 ${mapKind} maps preserve distinct partial references, child=${child}, transform`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a7a1da80b40a3ad778ad800be07de4dfbbc027c32993ef8c58d42a503dfa05ca"
+ "sourceDigest": "4a52d0a3b697e3c377c91fb4a865a9616cb54fa05eb11c7dd3b86980352aa924",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "transform"
+ }
},
{
- "id": "rc87-e0a8a76a5cbfef8a",
- "package": "preset",
- "file": "packages/preset/tests/design-tokens.test.ts",
- "line": 283,
- "title": "keeps base hue, line role, text role, and text hue aliases mode-specific",
+ "id": "rc87-bd077c08b849b4b3",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 15,
+ "title": "`BH-0004 ${mapKind} maps preserve distinct partial references, child=${child}, transform`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ab1738e3a84e88a0567a829cf99c54cf07dc392ec85debffe6d531b76f65dc4c"
+ "sourceDigest": "4a52d0a3b697e3c377c91fb4a865a9616cb54fa05eb11c7dd3b86980352aa924",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "transform"
+ }
},
{
- "id": "rc87-ee982733d7ea8e4a",
- "package": "preset",
- "file": "packages/preset/tests/design-tokens.test.ts",
- "line": 336,
- "title": "precomputes default breakpoint and container at-rule aliases",
+ "id": "rc87-bd077c08b849b4b3",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 15,
+ "title": "`BH-0004 ${mapKind} maps preserve distinct partial references, child=${child}, transform`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2b5cd8f28bd720597cbd89ea7154887e4b8befcd3d1b8ce20e73d58392136fcd"
+ "sourceDigest": "4a52d0a3b697e3c377c91fb4a865a9616cb54fa05eb11c7dd3b86980352aa924",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "transform"
+ }
},
{
- "id": "rc87-f1054506aee041f4",
- "package": "preset",
- "file": "packages/preset/tests/design-tokens.test.ts",
- "line": 347,
- "title": "does not publish synthetic negative number tokens",
+ "id": "rc87-bd077c08b849b4b3",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 15,
+ "title": "`BH-0004 ${mapKind} maps preserve distinct partial references, child=${child}, transform`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "739f8ef6c6232668d203db7370848dcf35d7e135e9dd9f3525bc0123f6dfe7cd"
+ "sourceDigest": "4a52d0a3b697e3c377c91fb4a865a9616cb54fa05eb11c7dd3b86980352aa924",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "transform"
+ }
},
{
- "id": "rc87-95f7ba984215aa9a",
- "package": "preset",
- "file": "packages/preset/tests/design-tokens.test.ts",
- "line": 354,
- "title": "executes built-in registry records with foundation role tokens only",
+ "id": "rc87-bd077c08b849b4b3",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 15,
+ "title": "`BH-0004 ${mapKind} maps preserve distinct partial references, child=${child}, transform`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "80e68e6daf7b34709e4fb7073f8bb095d25dae18d49151510eaf124446ebf99a"
+ "sourceDigest": "4a52d0a3b697e3c377c91fb4a865a9616cb54fa05eb11c7dd3b86980352aa924",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "transform"
+ }
},
{
- "id": "rc87-1fc8a6f10ae2da53",
- "package": "preset",
- "file": "packages/preset/tests/design-tokens.test.ts",
- "line": 411,
- "title": "keeps project text and line role namespaces available",
+ "id": "rc87-e44cd7c4aa7cd98e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 55,
+ "title": "BH-0004 $name reference origins cannot fall back to an unrelated filesystem owner [1: unmapped]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a0626ae1634be0ceb3d02c0c59acdf730aaf48468d880518f71318ab88bb03da"
+ "sourceDigest": "309fc1b584ad219c000be50225cc90f1cb9f529753c590c6cd0b2ddf775958c0",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "unmapped"
+ }
},
{
- "id": "rc87-bfed2500984699c7",
- "package": "runtime",
- "file": "packages/runtime/e2e/class-usages.test.ts",
- "line": 122,
- "title": "moves class subtrees across document and shadow roots without stale counts",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "8970a365485fc67dd78b5d6a72181d20cf218b4cbc70b038372d9496d0e6eec1"
+ "id": "rc87-0ed6670de66e7e3e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 55,
+ "title": "BH-0004 $name reference origins cannot fall back to an unrelated filesystem owner [2: internal]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "309fc1b584ad219c000be50225cc90f1cb9f529753c590c6cd0b2ddf775958c0",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "internal"
+ }
},
{
- "id": "rc87-82aab64164d5d4a8",
- "package": "runtime",
- "file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 266,
- "title": "progressive hydration fetches an external manifest when import attributes are unsupported",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "2ed4cfb0fdbb4e7e3c4fd590b93f2b87649a1f0f782498e094c590fd552613db"
+ "id": "rc87-53f59cf24de9bf6d",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 55,
+ "title": "BH-0004 $name reference origins cannot fall back to an unrelated filesystem owner [3: remote]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "309fc1b584ad219c000be50225cc90f1cb9f529753c590c6cd0b2ddf775958c0",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "remote"
+ }
},
{
- "id": "rc87-0f080221ec60651a",
- "package": "runtime",
- "file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 329,
- "title": "external hydration does not fetch for non-syntax loader construction failures",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "69ff6f4614ba1a53f6630d17720332f38956c60c3d9b23069f77f3bc8f639769"
+ "id": "rc87-ef924550d60a8543",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-reference-source-maps.test.ts",
+ "line": 64,
+ "title": "BH-0004 mapped virtual references require a filesystem base and retain compiler offsets",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6872648d81c794c50ae9e448cadac3feeeb55b5640437926ac1865652e1dcd71"
},
{
- "id": "rc87-81017bda3a0a433d",
- "package": "runtime",
- "file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 384,
- "title": "external hydration does not fetch after a JSON import request fails",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "c44bee73397b53ef689ac4994a2b9e2221a91d9582bb0c8450128225f3aa4a0a"
+ "id": "rc87-12df4a196fd29dc5",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-compose.test.ts",
+ "line": 8,
+ "title": "rendered stylesheet includes lowered native compose declarations",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6916607053364853242a30e60fb780280af8b6f041412ff835308f644642cb24"
},
{
- "id": "rc87-90b45cbedb62f8ad",
- "package": "runtime",
- "file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 429,
- "title": "external hydration reports fallback HTTP failures as structured diagnostics",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "9e55cb2d82857e07d7cfa9026b9a08ffec0a13ba2f8c4e8a89fe7a62d9bb71cc"
+ "id": "rc87-feaff8cb08d405f5",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-compose.test.ts",
+ "line": 16,
+ "title": "rendered stylesheet includes referenced compose without exporting reference definitions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e37f90d0d6bc80b0da6c94fbb30e2b71d8395b1853b38f46d4e538575f580014"
},
{
- "id": "rc87-ce29f729c5b6ac32",
- "package": "runtime",
- "file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
- "line": 551,
- "title": "progressive hydration rejects an invalid external hydration manifest payload",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "e256ef002195234e20283909b0510b38c017c5c846346a5db1db75a8eb91c3e5"
+ "id": "rc87-7fd6d21a2656a744",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-compose.test.ts",
+ "line": 26,
+ "title": "rendered stylesheet preserves native rules alongside lowered rules without duplication",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "74153a3ca83dc4b9eb45f383522e37acc65e52672d6e6c1214ed890a26d019e7"
},
{
- "id": "rc87-51434a1f8203b14b",
- "package": "runtime",
- "file": "packages/runtime/e2e/lifecycle.test.ts",
- "line": 329,
- "title": "merges emittedGlobals from concurrent starts before resolving callers",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "3415cb09ffac449b6690cc92de21ce381e592dd2239c665c2089f06047ca4b87"
+ "id": "rc87-8499c89a21aced8b",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-compose.test.ts",
+ "line": 32,
+ "title": "rendered import graph retains child reference ownership and dependencies",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f9d0aeeba6fd96e1eb45f811b287603dd3627b2195fcc50a837e7ced1e032301"
},
{
- "id": "rc87-fbbf199badd4cf7d",
- "package": "runtime",
- "file": "packages/runtime/e2e/rc87-rendering.test.ts",
- "line": 38,
- "title": "does not expose tooling-only engine inspection helpers",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "ee0edeacdf206a4da070a797f1950fa7691b21f64fc4a21713ab0909e1f7aa56"
+ "id": "rc87-5659a1b940ac1a52",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-compose.test.ts",
+ "line": 44,
+ "title": "rendered missing references register before failure and recover",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4def07752fd63df446e346d55f195e57c1066ad7e87383688d6610b02b5b2914"
},
{
- "id": "rc87-39a77796e0b1f824",
- "package": "runtime",
- "file": "packages/runtime/e2e/rc87-rendering.test.ts",
- "line": 49,
- "title": "destroy on progressive",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "d50a0fde0716aa8090933e103823e6cd560af1e65df83cc82e7c879cc621a61d"
+ "id": "rc87-05b24c163c56cbc6",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-compose.test.ts",
+ "line": 56,
+ "title": "rendered graph parser diagnostics retain imported file positions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "419dc00e8d86a82faf5a96334f92d8bbff84170e4c3b32c83d4bef7f83f12aeb"
},
{
- "id": "rc87-97ab7b679d64361a",
- "package": "runtime",
- "file": "packages/runtime/e2e/rc87-rendering.test.ts",
- "line": 84,
- "title": "disconnect and destroy clear pending mutation additions and removals",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "692f5409198b9752c1f3fc497336f9a94537d8c01d2ca96593936da8e52a4f8b"
+ "id": "rc87-94b7689265d00a7f",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-delivery.test.ts",
+ "line": 11,
+ "title": "`rendered delivery preserves external import boundaries ${qualifier}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "add36d1d7fffcdd861c6706490708363350f671fa5f4127ae7f6be8a8faf9fdf"
},
{
- "id": "rc87-f67818a2528723e4",
- "package": "runtime",
- "file": "packages/runtime/e2e/rc87-rendering.test.ts",
- "line": 133,
- "title": "preserves the strict Rust contract when an external hydration manifest import fails",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "d3e6830e3c6022e1d1d24eb297159eae4d437c9a5341840468445532ef932026"
+ "id": "rc87-94b7689265d00a7f",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-delivery.test.ts",
+ "line": 11,
+ "title": "`rendered delivery preserves external import boundaries ${qualifier}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "add36d1d7fffcdd861c6706490708363350f671fa5f4127ae7f6be8a8faf9fdf"
},
{
- "id": "rc87-7b2b667cfafc37f8",
- "package": "runtime",
- "file": "packages/runtime/e2e/wasm-startup.test.ts",
- "line": 110,
- "title": "disposes an engine that resolves before hydration startup times out",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "691f7a545fe38292211a6511080802b5122d08977147099663a3a61285342cb9"
+ "id": "rc87-94b7689265d00a7f",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-delivery.test.ts",
+ "line": 11,
+ "title": "`rendered delivery preserves external import boundaries ${qualifier}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "add36d1d7fffcdd861c6706490708363350f671fa5f4127ae7f6be8a8faf9fdf"
},
{
- "id": "rc87-335e828d0532b6d2",
- "package": "runtime",
- "file": "packages/runtime/e2e/wasm-startup.test.ts",
- "line": 173,
- "title": "rejects every pending caller and disposes when emitted globals registration fails",
- "runner": "playwright-or-vitest-e2e",
- "kind": "e2e",
- "sourceDigest": "8f9b5e9006d809907f6a6b9a15f7fd87b2f99ae6253cffe6eb559074098a7f49"
+ "id": "rc87-bef899e2190cedfb",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-delivery.test.ts",
+ "line": 33,
+ "title": "rendered delivery preserves host maps, supplied references, native pruning and dependency callbacks",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "73bdd40e0fe5f5f449ba7522c69b364f97a16619ee07602d7fb59d33dffe285c"
},
{
- "id": "rc87-b005654530dfa559",
- "package": "server",
- "file": "packages/server/tests/rc87-rendering.test.ts",
- "line": 23,
- "title": "render ",
+ "id": "rc87-13092f059248c076",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-delivery.test.ts",
+ "line": 59,
+ "title": "rendered delivery retains real Sass dependencies and original output maps",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ad2aa69a7fa39aaf91489a60008d1c76b4ee85df0e594abeb7dbe69c479c3b97"
+ "sourceDigest": "09b210744c340078a562f81ba8b5d005321f9850cf996f53be72afc94163478c"
},
{
- "id": "rc87-72e45c26e6cbfd8b",
- "package": "server",
- "file": "packages/server/tests/rc87-rendering.test.ts",
- "line": 36,
- "title": "should not render the new style element",
+ "id": "rc87-09e5c73a0adcabd3",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-delivery.test.ts",
+ "line": 77,
+ "title": "rendered delivery maps invalid composed tokens back to their Sass partial",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c6019bd6b413bc542434427049cb4b802c985734257f02f8f98e09956830d168"
+ "sourceDigest": "e2795965f9994c3e5a6a56537c65f6feab7bbb043ee368b93e846936d09521f1"
},
{
- "id": "rc87-f92062b7788b8b27",
- "package": "server",
- "file": "packages/server/tests/rc87-rendering.test.ts",
- "line": 51,
- "title": "returns a hydration manifest without changing rendered HTML",
+ "id": "rc87-870d1d9dfef8f3fa",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-delivery.test.ts",
+ "line": 91,
+ "title": "rendered delivery emits generated classes once in the entry and leaves them unmapped",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "be88b178dfed2c506c7eb4a7885622b319bda97afec69988029c504daecaaf23"
+ "sourceDigest": "c88d3d8784a1664a5b3ad5c7200c375c0c5a4d8dd393c2579f56ddeaa24405bf"
},
{
- "id": "rc87-c7c1de220cf317cb",
- "package": "server",
- "file": "packages/server/tests/rc87-rendering.test.ts",
- "line": 64,
- "title": "injects the hydration manifest into an existing head when requested",
+ "id": "rc87-2466d7cacdffd63e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-resource-context.test.ts",
+ "line": 12,
+ "title": "`${mode} rendered resource context emits the new transitive closure without overwriting processed globals`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "38eeaba0172e61c2f180618edeb41a526ff80c825bbd9ddf50a6fcbad8d14b7b"
+ "sourceDigest": "2c93423f5173df66e85753f5ef2bf65edd065fb0ec262aa9ce9dc988e90e70e2"
},
{
- "id": "rc87-7b9e66b4d7c60243",
- "package": "server",
- "file": "packages/server/tests/rc87-rendering.test.ts",
- "line": 76,
- "title": "attaches an external hydration manifest source to style#master-css when requested",
+ "id": "rc87-2466d7cacdffd63e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-resource-context.test.ts",
+ "line": 12,
+ "title": "`${mode} rendered resource context emits the new transitive closure without overwriting processed globals`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "25510aefe210fe963d6eded65942edd048ab0e81dd2f72740697bf5e74a691cf"
+ "sourceDigest": "2c93423f5173df66e85753f5ef2bf65edd065fb0ec262aa9ce9dc988e90e70e2"
},
{
- "id": "rc87-b0218b93c7b226b7",
- "package": "server",
- "file": "packages/server/tests/rc87-rendering.test.ts",
- "line": 92,
- "title": "removes stale inline hydration scripts in external hydration manifest mode",
+ "id": "rc87-00eac329d0e6448b",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-resource-context.test.ts",
+ "line": 40,
+ "title": "delivered graph uses external resource context across qualified child boundaries",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5ddd15a22c1e66c794c74a1a1ec3d01e009becc630a5cde7a50738b71d4a4b77"
+ "sourceDigest": "1dc22c21224f0d928cb6c4137cab0ce84bb6d294f74b11207dbbe0898eb7ce20"
},
{
- "id": "rc87-3870cf70bffbc204",
- "package": "server",
- "file": "packages/server/tests/rc87-rendering.test.ts",
- "line": 106,
- "title": "emits no external hydration manifest pointer for empty generated CSS",
+ "id": "rc87-ef47f88b9f67b5c5",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-rendered-resource-context.test.ts",
+ "line": 57,
+ "title": "zero external counts do not suppress required resources",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c3609310016d9f126625ef3936406f7d3d9a79b30a307148907038b89599eb4a"
+ "sourceDigest": "8501905625a6dec0532108e4f44d6631b019a89b41698b33f226d17881c1a46d"
},
{
- "id": "rc87-4209a04423ae00dc",
- "package": "server",
- "file": "packages/server/tests/rc87-rendering.test.ts",
- "line": 122,
- "title": "creates a head for the injected hydration manifest when missing",
+ "id": "rc87-ca6289aedbb0ab51",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-resource-urls.test.ts",
+ "line": 16,
+ "title": "`BH-0004 ${binding}: original-source resource discovery includes authoring and image-set`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "084db5bb0ea5f974008ed6957188104ead4dbe708047b5addbd7a9e314512b3b"
+ "sourceDigest": "24e73a77a14de7e0c24b86035b8bd75f1dc321c680df85f28e944b278aa8a85f"
},
{
- "id": "rc87-5b9cf5b8ce504959",
- "package": "server",
- "file": "packages/server/tests/rc87-rendering.test.ts",
- "line": 134,
- "title": "replaces an existing hydration manifest script when requested",
+ "id": "rc87-ca6289aedbb0ab51",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-resource-urls.test.ts",
+ "line": 16,
+ "title": "`BH-0004 ${binding}: original-source resource discovery includes authoring and image-set`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9e9a511aa344bbb56bb30212b449ebab3be42b09a56d31ea1077cca9383a984d"
+ "sourceDigest": "24e73a77a14de7e0c24b86035b8bd75f1dc321c680df85f28e944b278aa8a85f"
},
{
- "id": "rc87-083f0c80af0348a1",
- "package": "server",
- "file": "packages/server/tests/rc87-rendering.test.ts",
- "line": 147,
- "title": "can skip returning and injecting the hydration manifest",
+ "id": "rc87-c5ec5f5863e64ffc",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-resource-urls.test.ts",
+ "line": 26,
+ "title": "`BH-0004 ${binding}: relocation retains definition origin across files`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "75e8a2799f4bcd3e8d6fab4e5bbdd2d5195d816138029e484e4fb15142334bc2"
+ "sourceDigest": "c86cb04fccd0bf5c51ac8274ff5923c8917742cab565ea9507214ddd040c849b"
},
{
- "id": "rc87-a68de8240d5d5ab1",
- "package": "server",
- "file": "packages/server/tests/rc87-rendering.test.ts",
- "line": 157,
- "title": "removes an empty master style when hydration manifest injection is requested",
+ "id": "rc87-c5ec5f5863e64ffc",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-resource-urls.test.ts",
+ "line": 26,
+ "title": "`BH-0004 ${binding}: relocation retains definition origin across files`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3e7ee8c9271353c0b5252ee87f21aa9f7968eceb633c8bd586e65c9758943440"
+ "sourceDigest": "c86cb04fccd0bf5c51ac8274ff5923c8917742cab565ea9507214ddd040c849b"
},
{
- "id": "rc87-3f34357167b3a060",
- "package": "server",
- "file": "packages/server/tests/server-renderer.test.ts",
- "line": 129,
- "title": "keeps streamed HTML and the final immutable result on the same complete snapshot",
+ "id": "rc87-1c0aad25e5734951",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-static-retention.test.ts",
+ "line": 9,
+ "title": "`BH-0003: ${entry.id} static graph survives public compile and class lifetimes`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "69b5c9086121e4d8c22e079924245c27b0aac174d5381a4fc231f364cbe98dbf"
+ "sourceDigest": "cfb2b557c1d1814e59f7f4d59e8a46d2d9120834c0b04963fb74aa2f2191f9e2"
},
{
- "id": "rc87-2374f8fb8b086ebb",
- "package": "svelte",
- "file": "packages/svelte/tests/rc87-rendering.test.ts",
- "line": 42,
- "title": "injects collected CSS when the head closes",
+ "id": "rc87-0b0befce8fc6e51e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-diagnostics.test.ts",
+ "line": 33,
+ "title": "`BH-0004 ${binding} original graph diagnostic: ${source}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "370de11c8841ecfac31c56ef0a62ff437f4177f512b41bda925a9d394d82c412"
+ "sourceDigest": "07182b631a1d47c50ef0190a9a1b2f203ed7cf8d39078ae74ac9efec6a82c89f"
},
{
- "id": "rc87-c4d831fe47eaca8d",
- "package": "svelte",
- "file": "packages/svelte/tests/rc87-rendering.test.ts",
- "line": 61,
- "title": "preserves complete Rust stream results when later chunks add classes",
+ "id": "rc87-0b0befce8fc6e51e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-diagnostics.test.ts",
+ "line": 33,
+ "title": "`BH-0004 ${binding} original graph diagnostic: ${source}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "dd9f8c7f17a608076d7391494c6e1c2f9150a5e6d3823277bdd66b049c0f4112"
+ "sourceDigest": "07182b631a1d47c50ef0190a9a1b2f203ed7cf8d39078ae74ac9efec6a82c89f"
},
{
- "id": "rc87-2efcdbec736de191",
- "package": "svelte",
- "file": "packages/svelte/tests/rc87-rendering.test.ts",
- "line": 75,
- "title": "supports an external hydration manifest writer",
+ "id": "rc87-0b0befce8fc6e51e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-diagnostics.test.ts",
+ "line": 33,
+ "title": "`BH-0004 ${binding} original graph diagnostic: ${source}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "47a3d63a198c7da8e7dbedbc3f4e59bbb7db4ed581783416fdebfdf9bed54706"
+ "sourceDigest": "07182b631a1d47c50ef0190a9a1b2f203ed7cf8d39078ae74ac9efec6a82c89f"
},
{
- "id": "rc87-40741f3f92fa5de7",
- "package": "svelte",
- "file": "packages/svelte/tests/rc87-rendering.test.ts",
- "line": 102,
- "title": "does not duplicate emitted global variables and keyframes in streamed CSS",
+ "id": "rc87-0b0befce8fc6e51e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-diagnostics.test.ts",
+ "line": 33,
+ "title": "`BH-0004 ${binding} original graph diagnostic: ${source}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7dbfbb85dc90382000739384df4e4131790178cfe7ad14f245db643769679b0a"
+ "sourceDigest": "07182b631a1d47c50ef0190a9a1b2f203ed7cf8d39078ae74ac9efec6a82c89f"
},
{
- "id": "rc87-5732d85f2647b215",
- "package": "svelte",
- "file": "packages/svelte/tests/rc87-rendering.test.ts",
- "line": 125,
- "title": "writes static external hydration manifests",
+ "id": "rc87-0b0befce8fc6e51e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-diagnostics.test.ts",
+ "line": 33,
+ "title": "`BH-0004 ${binding} original graph diagnostic: ${source}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d8c98793866a19998aac8dde6bf0783f2e72c4180a94dbc61b9433b3564fef7c"
+ "sourceDigest": "07182b631a1d47c50ef0190a9a1b2f203ed7cf8d39078ae74ac9efec6a82c89f"
},
{
- "id": "rc87-ea9b5d2ffe198b2f",
- "package": "svelte",
- "file": "packages/svelte/tests/rc87-rendering.test.ts",
- "line": 156,
- "title": "replaces an existing master style in the current chunk",
+ "id": "rc87-0b0befce8fc6e51e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-diagnostics.test.ts",
+ "line": 33,
+ "title": "`BH-0004 ${binding} original graph diagnostic: ${source}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "78213ea13c1823824e94155520f56cb77ef57fbc37df47b82ebf9a99cdd1163d"
+ "sourceDigest": "07182b631a1d47c50ef0190a9a1b2f203ed7cf8d39078ae74ac9efec6a82c89f"
},
{
- "id": "rc87-b3e92ac7d4b8a66d",
- "package": "svelte",
- "file": "packages/svelte/tests/rc87-rendering.test.ts",
- "line": 166,
- "title": "replaces an existing hydration manifest in the current chunk",
+ "id": "rc87-0b0befce8fc6e51e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-diagnostics.test.ts",
+ "line": 33,
+ "title": "`BH-0004 ${binding} original graph diagnostic: ${source}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "43ff61d46d8f3bbe315b177a93c7840fd42114b58ed1bca75dd9f48eacb406e7"
+ "sourceDigest": "07182b631a1d47c50ef0190a9a1b2f203ed7cf8d39078ae74ac9efec6a82c89f"
},
{
- "id": "rc87-12848f2a85402625",
- "package": "tooling",
- "file": "packages/tooling/tests/language/format-directives.test.ts",
- "line": 39,
- "title": "repairs detached important suffixes in class lists",
+ "id": "rc87-0b0befce8fc6e51e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-diagnostics.test.ts",
+ "line": 33,
+ "title": "`BH-0004 ${binding} original graph diagnostic: ${source}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2380979a97653620692b639320698da49030420bc023a3ab6dad349330a65c57"
+ "sourceDigest": "07182b631a1d47c50ef0190a9a1b2f203ed7cf8d39078ae74ac9efec6a82c89f"
},
{
- "id": "rc87-7f25c87667836705",
- "package": "tooling",
- "file": "packages/tooling/tests/language/rc87-mdn-css-data.test.ts",
- "line": 7,
- "title": "uses unprefixed MDN syntax for vendor-prefixed properties",
+ "id": "rc87-8ac785024e584079",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-diagnostics.test.ts",
+ "line": 47,
+ "title": "collection reports removed directives using the original owner",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6851aa3fc7cd1ba1af3b043766db309ef96d6080a8f164dc42ef8c0374c8b14d"
+ "sourceDigest": "15f6ca82361f0c79b7657455d6c0ad08d6b082b6afa6ae079c466af0c8ae2992"
},
{
- "id": "rc87-8d16095f1bb2625d",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/index.test.ts",
- "line": 62,
- "title": "ignores token, static, invalid, unknown, and component classes",
+ "id": "rc87-d5d709f23ff10ff0",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-preparation.test.ts",
+ "line": 22,
+ "title": "CSS preparation preserves source without loading Sass or requiring a manifest",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e1c59cac6aa177192118d3a8fcfeb29906b1accbefd7c8bdd6db8017928c61f9"
+ "sourceDigest": "c75e9d86ea1c5e95ba50c02f225e71a3ee5d0ec41ce004628924c64ea35a9272"
},
{
- "id": "rc87-244215532a6b1b97",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/index.test.ts",
- "line": 82,
- "title": "suggests static utilities, theme tokens, and property aliases",
+ "id": "rc87-aefe441328a8aa94",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-preparation.test.ts",
+ "line": 32,
+ "title": "`prepare ${syntax} before classification, retain loaded dependencies and original map`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5ca8b17838c3267e44621cd421adbb09f8e642f70859e09a271e0262e193e963"
+ "sourceDigest": "79062b3539f312fa78e4c80c56a8fba3b0d549c874bd6faa8e9aa73039549aa1"
},
{
- "id": "rc87-a0b60499e6dca401",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/index.test.ts",
- "line": 99,
- "title": "suggests static utility aliases from generated declarations",
+ "id": "rc87-aefe441328a8aa94",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-preparation.test.ts",
+ "line": 32,
+ "title": "`prepare ${syntax} before classification, retain loaded dependencies and original map`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "273f3ea408a46c06b49cd8145816ef79dce2e38f1f60ad6a5d2506cc1d83a32a"
+ "sourceDigest": "79062b3539f312fa78e4c80c56a8fba3b0d549c874bd6faa8e9aa73039549aa1"
},
{
- "id": "rc87-a9b9a458af342355",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 90,
- "title": "sorts known classes and keeps unknown classes last",
+ "id": "rc87-bf2f0c1e06173e77",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-preparation.test.ts",
+ "line": 60,
+ "title": "host Sass callback receives preparation options and keeps host importers",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "02fb1c3dd613370325179cd1b19a2c08760263864086e5756409c15852692721"
+ "sourceDigest": "b2adf7d6ee76d16c5ce928b2b9ebb6aa99780726a8006c7c220eacba5019b030"
},
{
- "id": "rc87-6a57aaa786f8a56d",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 97,
- "title": "sorts generated classes into readable property groups",
+ "id": "rc87-296291e7e6a554ac",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-preparation.test.ts",
+ "line": 80,
+ "title": "a virtual style uses its explicit physical base file for Sass and dependencies",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3cf1638fe3e54b4736411adf36fa4a82c63b4aa8f92e35041f00ac77c60c0a7a"
+ "sourceDigest": "4b9799ecd9e05e49925d9e18a126a00fb67fee39c5390964d296ecaf932b6d48"
},
{
- "id": "rc87-e0574b979ff7cdf9",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 161,
- "title": "deduplicates repeated classes",
+ "id": "rc87-1260e21b1aaa2ae5",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-preparation.test.ts",
+ "line": 92,
+ "title": "Sass errors retain original spans and register the root before failure",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "76d2b4535ceb1a6ac1aa5f23f19c7afdab6c033b298d9be430b6d2dd40c7cd6e"
+ "sourceDigest": "aeee5e2197ce016c21b0f08414e49e89cb433f8f843abb837713b41e9ba3fb78"
},
{
- "id": "rc87-bb568f7a54229be6",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 166,
- "title": "generates each unique class once while sorting",
+ "id": "rc87-4c2d4f5b5eacdea5",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-preparation.test.ts",
+ "line": 104,
+ "title": "preparation checks cancellation before loading and after an async compiler returns",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5ddd5253ce4f878cee96cb17dc7bb46bfb38c26346b22ce9a9c079eead337143"
+ "sourceDigest": "857eeb781b2d7b36bee592a41acf9468bdaa02cc1c703d87085e2af917282ebb"
},
{
- "id": "rc87-b44c6ae1eb7b18d0",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 177,
- "title": "sorts class-list text while preserving useful whitespace and raw tokens",
+ "id": "rc87-ae367bcb7743fa20",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-stylesheet-preparation.test.ts",
+ "line": 111,
+ "title": "prepared Sass maps resolve relative references from an imported partial",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f0ae4f17c9d8917c548b755ed6b97d34fa321b6908abd1f12eb01da9983d9d41"
+ "sourceDigest": "db96f23c0b675d7fbfb828313dc52cd2b5e4e5f85d6713468429c43f302412b4"
},
{
- "id": "rc87-72ba4998f06ed12b",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 186,
- "title": "removes and replaces class-list tokens with adjacent whitespace",
+ "id": "rc87-0434676fb88615a7",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-reference-ownership.test.ts",
+ "line": 31,
+ "title": "BH-0004 missing virtual reference reports its attempted path and registration recovers without partial state",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0054c45441735c2b8d466c2c0e71caf7b7a90b332b5d56b60d84cb71d9ae017e"
+ "sourceDigest": "756efa5247437d67c5515755230de0116eba03ae85e6b5044da3e7369b8a3ff0"
},
{
- "id": "rc87-72f61b00a6c4b6c6",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 205,
- "title": "replaces grouped class-list tokens",
+ "id": "rc87-0d322cc73588697c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-reference-ownership.test.ts",
+ "line": 54,
+ "title": "BH-0004 virtual owner participates in indirect reference cycle detection",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c6fd3f6245d07d2c42b0dc2bf518515d739ac7644f21b120cb35f340090e4152"
+ "sourceDigest": "0ee6cc7446ac1ac948b33b21d6a2d994dac1f4547f07566b6c39c59a227d67e2",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "indirect"
+ }
},
{
- "id": "rc87-11505f7eff335482",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 220,
- "title": "reports sort diagnostics with a machine-readable fix",
+ "id": "rc87-22a27c58ec70a75e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-reference-ownership.test.ts",
+ "line": 54,
+ "title": "BH-0004 virtual owner participates in self reference cycle detection",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "842dae41a054d4f5587afa99ab6d87ba8a8ac16d2e73994ec90cf82a89553c46"
+ "sourceDigest": "0ee6cc7446ac1ac948b33b21d6a2d994dac1f4547f07566b6c39c59a227d67e2",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "self"
+ }
},
{
- "id": "rc87-64d11f95bd5d8479",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 241,
- "title": "reports conflict diagnostics with token-relative ranges",
+ "id": "rc87-7275ea78408ae380",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-reference-ownership.test.ts",
+ "line": 66,
+ "title": "BH-0004 original virtual diagnostic identity survives filesystem reference rebasing",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "223c2a7813058a7eae3da65890fc78e3138b3dd248da7566c62072319b405f27"
+ "sourceDigest": "ab7303f5b7c7c26768967bfc809e8e9ac8c13ed080e5746e8aa6980e94ac9408"
},
{
- "id": "rc87-cb9f2a121a551fc0",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 266,
- "title": "reports invalid generated CSS diagnostics with class context",
+ "id": "rc87-35f91f6fa5913e44",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-reference-ownership.test.ts",
+ "line": 77,
+ "title": "`BH-0004 ${location} references use filesystem owners during collection`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "485153ef7e1f96d08de20068d651e74a96c08beb9ac93631b0d22ca9cc37200a",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "collection"
+ }
+ },
+ {
+ "id": "rc87-35f91f6fa5913e44",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-reference-ownership.test.ts",
+ "line": 77,
+ "title": "`BH-0004 ${location} references use filesystem owners during collection`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a0480c79512a601e9401667099b627c0d66249bbe2613c2a5ad488ae0d44ea48"
+ "sourceDigest": "485153ef7e1f96d08de20068d651e74a96c08beb9ac93631b0d22ca9cc37200a",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "collection"
+ }
},
{
- "id": "rc87-030c32e9a5aee148",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 271,
- "title": "reports canonical diagnostics with explicit replacements",
+ "id": "rc87-35f91f6fa5913e44",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-reference-ownership.test.ts",
+ "line": 77,
+ "title": "`BH-0004 ${location} references use filesystem owners during collection`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "71632082354eb74a8a760637de6dcd324e87429391d0dacd4894bcab37103542"
+ "sourceDigest": "485153ef7e1f96d08de20068d651e74a96c08beb9ac93631b0d22ca9cc37200a",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "collection"
+ }
},
{
- "id": "rc87-d69b977b510bca9c",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 279,
- "title": "keeps raw value policy opt-in in combined reports",
+ "id": "rc87-96be4ee94255a624",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-reference-ownership.test.ts",
+ "line": 77,
+ "title": "`BH-0004 ${location} references use filesystem owners during transform`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "faad37e02b1f6d2e23e1ae8f915ce88072dab357487de31d7ec951be6a53e8c7"
+ "sourceDigest": "485153ef7e1f96d08de20068d651e74a96c08beb9ac93631b0d22ca9cc37200a",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "transform"
+ }
},
{
- "id": "rc87-1453f1fd3ba1676d",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 288,
- "title": "reports structural compose fixes with directive scope",
+ "id": "rc87-96be4ee94255a624",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-reference-ownership.test.ts",
+ "line": 77,
+ "title": "`BH-0004 ${location} references use filesystem owners during transform`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f59b0e550a161dff9cf919b3934c39b46ac589b14a1277ce411566dc3757a9da"
+ "sourceDigest": "485153ef7e1f96d08de20068d651e74a96c08beb9ac93631b0d22ca9cc37200a",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "transform"
+ }
},
{
- "id": "rc87-4bf8be89870430d2",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 314,
- "title": "resolves rule presets and explicit rule sets",
+ "id": "rc87-96be4ee94255a624",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-reference-ownership.test.ts",
+ "line": 77,
+ "title": "`BH-0004 ${location} references use filesystem owners during transform`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "30019c2b0b443e3b7db96fce4665650f15c4e52b9c318ecd9da86c11a4eb0a8f"
+ "sourceDigest": "485153ef7e1f96d08de20068d651e74a96c08beb9ac93631b0d22ca9cc37200a",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "transform"
+ }
},
{
- "id": "rc87-3ebacb91094e3417",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 332,
- "title": "maps class diagnostics and safe fixes onto source ranges",
+ "id": "rc87-97d58dc3c26a235f",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-sources.test.ts",
+ "line": 16,
+ "title": "BH-0004 virtual identities and supplied resource bases survive classification, registration and composition",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "93732878bd798ea5289ad7dd29f3405f1c6598adfdd5d8c1eab1d9e1a888c18c"
+ "sourceDigest": "5e13542ab83baffc94c8495948e5302d5b72361133aa7566b9da3b3184aa4b73"
},
{
- "id": "rc87-9bee19d0da7b58a7",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 366,
- "title": "lints and fixes class lists inside mdx fenced html examples",
+ "id": "rc87-ad63504eb12ff2d6",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-sources.test.ts",
+ "line": 38,
+ "title": "BH-0004 empty virtual sources and repeated identities do not read fabricated filenames",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "78b3f4af4367c220f1c116602a656d3cd93ebcf12cdc3ae01e224eb9b592dc2d"
+ "sourceDigest": "01abdf46ac04d8e9faa12a1e6a5129e902d0a565c995a6e237ce3d5ab3c7eae9"
},
{
- "id": "rc87-98b2dff8383faa7a",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 402,
- "title": "passes rule options to source content diagnostics",
+ "id": "rc87-80fd60bd79a2332a",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-sources.test.ts",
+ "line": 44,
+ "title": "BH-0004 virtual relative resources require an explicit source owner and do not register partial state",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "433b2229f35a1e5f057b25ba1e45d588766b74fb8a8b184c6956a26ca55e104f"
+ "sourceDigest": "3adfac9c49ab8011b850f72f5061e423986d0c201b6722fd53ade58e8f5b7867"
},
{
- "id": "rc87-c8bd6d7abfd7d7a1",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 447,
- "title": "applies source fixes until class lists are stable",
+ "id": "rc87-2b945196aacf2638",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-sources.test.ts",
+ "line": 54,
+ "title": "BH-0004 malformed supplied source reports its virtual identity",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "621794d9c802a9b0ad0efc774be4cca58f1169da24be3d3576d99d8ccb92f7ce"
+ "sourceDigest": "533ea5e04949056df9b7c9e0fb7c6779dc61f20aa40bb0b01b7096e124a2bb94"
},
{
- "id": "rc87-9c57169346c7e619",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 455,
- "title": "uses script language ids for cjs and typescript module files",
+ "id": "rc87-7e35fc68208b378a",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-sources.test.ts",
+ "line": 65,
+ "title": "BH-0004 a virtual entry baseFile supplies Node fallback and root resource ownership",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9538f70db244d6bb52aafd57f277c944b1f4019ffbde064a8f28fd4c515f64f7"
+ "sourceDigest": "21916ba1741975e73259f33cf3bee33747f875f00e66663132d9af459e898d83"
},
{
- "id": "rc87-732ba44f61494fd5",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 472,
- "title": "reports and applies structural compose directive fixes when allowed",
+ "id": "rc87-c757e5386fb9ddab",
+ "package": "compiler",
+ "file": "packages/compiler/tests/bug-hunt-virtual-sources.test.ts",
+ "line": 85,
+ "title": "BH-0004 nonabsolute entry source owners fail before graph registration",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "af55980b37eb5efbfa89c60171eb1979d3ee7e385049e1177d557579c3b0d2f6"
+ "sourceDigest": "f2d24d3cfa7b84262e31d41c3d6999721dd770a464c7bb6f4aaddf1eb4bea3ad"
},
{
- "id": "rc87-14d6fefb081e777b",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 501,
- "title": "finds classes with matching declarations and variants",
+ "id": "rc87-8016a6ab85cc3f8a",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/bug-hunt-mjs-discovery.test.ts",
+ "line": 10,
+ "title": "`project inspection discovers ESM classes (${mode})`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8522b01709c8d33285aa665d045fb677e1391106caedd4233cde5744413294a2"
+ "sourceDigest": "52022c72f6894d396289b8c35135173b96d11d347e5d1fe6977b6700c2b772fc"
},
{
- "id": "rc87-f7ef3483bf2664d8",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 508,
- "title": "ignores invalid classes",
+ "id": "rc87-8016a6ab85cc3f8a",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/bug-hunt-mjs-discovery.test.ts",
+ "line": 10,
+ "title": "`project inspection discovers ESM classes (${mode})`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0ac32de460c4d403e2966dcaa7b0bf75e944b87fc3cafdf63ca23f3ba8ab2c0e"
+ "sourceDigest": "52022c72f6894d396289b8c35135173b96d11d347e5d1fe6977b6700c2b772fc"
},
{
- "id": "rc87-282d526cf506251a",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 515,
- "title": "keeps the last conflicting class",
+ "id": "rc87-8016a6ab85cc3f8a",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/bug-hunt-mjs-discovery.test.ts",
+ "line": 10,
+ "title": "`project inspection discovers ESM classes (${mode})`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "8f05c4e2adae222fe4e671a12d80dcc2be309495427d5186a6721f3d2421b286"
+ "sourceDigest": "52022c72f6894d396289b8c35135173b96d11d347e5d1fe6977b6700c2b772fc"
},
{
- "id": "rc87-6aaf7b4ebd1592db",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 525,
- "title": "splits margin axis classes when a later side overrides part of them",
+ "id": "rc87-0765eb555262822c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/bug-hunt-source-attribution.test.ts",
+ "line": 33,
+ "title": "`inspection keeps source ownership: ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "45f0f3082bfe4e5fc4bae108a4d9ef7fdc7a04503662e43da619c2fabadc4332"
+ "sourceDigest": "114084c1ef17e518316268f5e77bae2b3daf540a8eb37088d1ffa0e8b7f5c031"
},
{
- "id": "rc87-b9eadf57639df472",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 534,
- "title": "splits padding shorthand classes when a later axis overrides part of them",
+ "id": "rc87-0765eb555262822c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/bug-hunt-source-attribution.test.ts",
+ "line": 33,
+ "title": "`inspection keeps source ownership: ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "91ae11270fdd9af09aa6d30dd4b21f26bf39f9ee457e61c650ea5ba995584506"
+ "sourceDigest": "114084c1ef17e518316268f5e77bae2b3daf540a8eb37088d1ffa0e8b7f5c031"
},
{
- "id": "rc87-d49bff0f8c8a03d2",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 543,
- "title": "splits shorthand classes when a later side overrides part of them",
+ "id": "rc87-0765eb555262822c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/bug-hunt-source-attribution.test.ts",
+ "line": 33,
+ "title": "`inspection keeps source ownership: ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "57aabffc6d3425692c9f72bea0db33b0e3a3b32eaf64dae02bea0ed30bd84da4"
+ "sourceDigest": "114084c1ef17e518316268f5e77bae2b3daf540a8eb37088d1ffa0e8b7f5c031"
},
{
- "id": "rc87-d44976e7d095dda4",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 552,
- "title": "ignores different variants and fully overridden classes",
+ "id": "rc87-0765eb555262822c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/bug-hunt-source-attribution.test.ts",
+ "line": 33,
+ "title": "`inspection keeps source ownership: ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d1de9fb4c10099bc45d2d75d4b06379d161056faf4f3f221d5ad0e4833446bcf"
+ "sourceDigest": "114084c1ef17e518316268f5e77bae2b3daf540a8eb37088d1ffa0e8b7f5c031"
},
{
- "id": "rc87-1ad1618f25f41b8f",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 558,
- "title": "splits physical inset shorthands when a later side overrides part of them",
+ "id": "rc87-0765eb555262822c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/bug-hunt-source-attribution.test.ts",
+ "line": 33,
+ "title": "`inspection keeps source ownership: ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "00bce601eca379644f6cc37a973c91df6827d1ab669d20df6e3c896a71b8b3c9"
+ "sourceDigest": "114084c1ef17e518316268f5e77bae2b3daf540a8eb37088d1ffa0e8b7f5c031"
},
{
- "id": "rc87-baa9e7413eb7bbbc",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 570,
- "title": "splits radius shorthands when a later corner overrides part of them",
+ "id": "rc87-0765eb555262822c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/bug-hunt-source-attribution.test.ts",
+ "line": 33,
+ "title": "`inspection keeps source ownership: ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "25f0c3f7b40561b2dbe89947ff7dbcef01abbe24f767787d9cb45fbeaa7116c7"
+ "sourceDigest": "114084c1ef17e518316268f5e77bae2b3daf540a8eb37088d1ffa0e8b7f5c031"
},
{
- "id": "rc87-394aa8f74195675b",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 582,
- "title": "splits border width shorthands when a later side overrides part of them",
+ "id": "rc87-0765eb555262822c",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/bug-hunt-source-attribution.test.ts",
+ "line": 33,
+ "title": "`inspection keeps source ownership: ${entry.name}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "c2194f0db65ac6bc43ab0ca035556c41904036d6563031696cbc3e206cfeca2f"
+ "sourceDigest": "114084c1ef17e518316268f5e77bae2b3daf540a8eb37088d1ffa0e8b7f5c031"
},
{
- "id": "rc87-bb96bee81fd864be",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 594,
- "title": "splits border color shorthands when a later side overrides part of them",
+ "id": "rc87-a290432b681f3723",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/bug-hunt-utf8-bytes.test.ts",
+ "line": 4,
+ "title": "BH-0020 native inspection counts UTF-8 CSS bytes independently of text inclusion",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "f3b3a06fcd74321eca90a65bfd6e7ffc90a1785836019eca8b84aff61dfcac14"
+ "sourceDigest": "952b75f45fac784469bb81a83f257a6e96f451f626406c0816bb47b38fafed89"
},
{
- "id": "rc87-f1eb7af9a25f3445",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 603,
- "title": "splits border style shorthands when a later side overrides part of them",
+ "id": "rc87-3cc0c4fde4df62e7",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/index.test.ts",
+ "line": 16,
+ "title": "does not diagnose a registered native sizing class as a removed utility",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "54a1c241908edb8e6645ee827a8014fcc3375eee5700c044a5eef57c4a9da42f"
+ "sourceDigest": "b885fcafb85b3def8e53491c330e538c079c6a719171e32813ccc13777d9a51b"
},
{
- "id": "rc87-410af7eff5cc0b46",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 612,
- "title": "ignores unsupported partial conflict families",
+ "id": "rc87-583c5ac4836d5f14",
+ "package": "compiler",
+ "file": "packages/compiler/tests/diagnostics/index.test.ts",
+ "line": 69,
+ "title": "reports checks for native and managed declarations without rejecting ordinary classes",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d4057495960ca202050c05aaef511931591f6654ad15bfefb18a546f354a1dd7"
+ "sourceDigest": "b4342adc481e180132fd6741ef405ae07d8f4aa1b5520aeb0487d9a4b1f882c1"
},
{
- "id": "rc87-636ce61eb1990f14",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 623,
- "title": "reports invalid generated CSS",
+ "id": "rc87-830f5bf0261253dd",
+ "package": "compiler",
+ "file": "packages/compiler/tests/final-value-policy.test.ts",
+ "line": 8,
+ "title": "preserves invalid managed declarations and checks their expanded result",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "18f594eecab0e881bab938fc766638edc0f61d93c07bcb89c1540433cf507529"
+ "sourceDigest": "d1c2f782029c076805ba534e1f0d85ee4a509b5a75c9122ccf44d709a82c2b5e"
},
{
- "id": "rc87-c94f3c91420faeb6",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 629,
- "title": "reports unknown classes only when requested",
+ "id": "rc87-1306a3f9dfcaba92",
+ "package": "compiler",
+ "file": "packages/compiler/tests/final-value-policy.test.ts",
+ "line": 16,
+ "title": "unknown abilities do not fail strict value checking",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4dcfdb7e7782b1308dc37217f9835ed093fb93c88a03fcedfcb9db803edf7097"
+ },
+ {
+ "id": "rc87-3866d3569cdb0c54",
+ "package": "compiler",
+ "file": "packages/compiler/tests/final-value-policy.test.ts",
+ "line": 22,
+ "title": "preserves valid descriptor values during strict compilation",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "24b4ac9ac6257de59508b63ed27a670a2f711bc33a383e674827141236e67f1a"
+ },
+ {
+ "id": "rc87-3cdc2fa77b97b1bb",
+ "package": "compiler",
+ "file": "packages/compiler/tests/final-value-policy.test.ts",
+ "line": 28,
+ "title": "validates all delivered stylesheets before returning a strict result",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "588fb7f7d582aa5edbc3a572c2c2e956aa16b036a15257226775f632b8809111"
+ },
+ {
+ "id": "rc87-2e6be75c3de30294",
+ "package": "compiler",
+ "file": "packages/compiler/tests/final-value-policy.test.ts",
+ "line": 44,
+ "title": "rejects the removed value-only policy explicitly",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "350973035a18fdad0867b983dc2c0a6dba416c2d8daeb13c6b62bd0318cada49"
+ },
+ {
+ "id": "rc87-4b06005026ea1838",
+ "package": "compiler",
+ "file": "packages/compiler/tests/issues/447.test.ts",
+ "line": 62,
+ "title": "447: compiler and engine binding combinations agree on the language contract",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d7c7cf021ec11d5ea6f7a630409a2662d6d86c4259daac93b1768d87e26c0de4"
+ },
+ {
+ "id": "rc87-42c36fbaa7b95f6d",
+ "package": "compiler",
+ "file": "packages/compiler/tests/issues/447.test.ts",
+ "line": 118,
+ "title": "447: legacy mode settings are rejected consistently by both engine bindings",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "527579b8249c7e6a60f2df0614406545e6450ded27436ba1f5635df77fc8e174"
+ },
+ {
+ "id": "rc87-840efb911913c387",
+ "package": "compiler",
+ "file": "packages/compiler/tests/issues/447.test.ts",
+ "line": 130,
+ "title": "447: saved media mode settings migrate to explicit, executable mode definitions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3827c8ade7133a98dd2723d66385e1a55e0a58117e5b5abf277fb1543fa0056a"
+ },
+ {
+ "id": "rc87-cd75ab8ea440612e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/issues/448.test.ts",
+ "line": 9,
+ "title": "448: native preserves duplicate fallbacks with native declarations in every utility pattern",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7f05e1f5fc46947f28f0274064c102d3adeb825379ca22193c7b5a48e7f05b09",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "native"
+ }
+ },
+ {
+ "id": "rc87-4e8e241680efe543",
+ "package": "compiler",
+ "file": "packages/compiler/tests/issues/448.test.ts",
+ "line": 9,
+ "title": "448: wasm preserves duplicate fallbacks with native declarations in every utility pattern",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7f05e1f5fc46947f28f0274064c102d3adeb825379ca22193c7b5a48e7f05b09",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "wasm"
+ }
+ },
+ {
+ "id": "rc87-7ba84ab8103e2a1d",
+ "package": "compiler",
+ "file": "packages/compiler/tests/issues/448.test.ts",
+ "line": 36,
+ "title": "448: native rejects compose instead of partially expanding known or dynamic targets",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2fa5b5ed47c425c2ac7f95e915e80b0621f91232ad5e8a81b1bb69aca8d6370",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "native"
+ }
+ },
+ {
+ "id": "rc87-c8288cce3a8ca456",
+ "package": "compiler",
+ "file": "packages/compiler/tests/issues/448.test.ts",
+ "line": 36,
+ "title": "448: wasm rejects compose instead of partially expanding known or dynamic targets",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2fa5b5ed47c425c2ac7f95e915e80b0621f91232ad5e8a81b1bb69aca8d6370",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "wasm"
+ }
+ },
+ {
+ "id": "rc87-57d63e63061d2a09",
+ "package": "compiler",
+ "file": "packages/compiler/tests/issues/450.test.ts",
+ "line": 16,
+ "title": "450: native codec reload preserves ordered declarations and resource lifetimes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f3a29f23ff5b64fafd5fa536a6bf41cc84aad02adf7b38c7f0aecc736797cfad",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "native"
+ }
+ },
+ {
+ "id": "rc87-eb148efd1bb671cb",
+ "package": "compiler",
+ "file": "packages/compiler/tests/issues/450.test.ts",
+ "line": 16,
+ "title": "450: wasm codec reload preserves ordered declarations and resource lifetimes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f3a29f23ff5b64fafd5fa536a6bf41cc84aad02adf7b38c7f0aecc736797cfad",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "wasm"
+ }
+ },
+ {
+ "id": "rc87-7d903f740018b0ea",
+ "package": "compiler",
+ "file": "packages/compiler/tests/issues/450.test.ts",
+ "line": 51,
+ "title": "450: native validates execution versions independently of codec serialization",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "31b7d6463df04872259e6bfd24047a2d6a61fd108ed1a969a02d78e2fb57fffa",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "native"
+ }
+ },
+ {
+ "id": "rc87-aae4089d167c2e70",
+ "package": "compiler",
+ "file": "packages/compiler/tests/issues/450.test.ts",
+ "line": 51,
+ "title": "450: wasm validates execution versions independently of codec serialization",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "31b7d6463df04872259e6bfd24047a2d6a61fd108ed1a969a02d78e2fb57fffa",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "wasm"
+ }
+ },
+ {
+ "id": "rc87-962c39ac1ff5b7fa",
+ "package": "compiler",
+ "file": "packages/compiler/tests/project/test.ts",
+ "line": 35,
+ "title": "recognizes CSS requests with Windows extended-length path prefixes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d0b7db2527d74c445fab44496d6db827236a2931c8379847fd04d40ce604553f"
+ },
+ {
+ "id": "rc87-932a5c3096ae418e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/project/test.ts",
+ "line": 52,
+ "title": "normalizes Windows extended-length binding paths for host filesystem access",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "af92b657dacc33694d61c379acad737c722bb96d7a1d81c1d642966e18b3a9cd"
+ },
+ {
+ "id": "rc87-169aa2084c530524",
+ "package": "compiler",
+ "file": "packages/compiler/tests/project/test.ts",
+ "line": 164,
+ "title": "loads CSS manifest resources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5ae7e6ff7a8fd79158bbad2a79ea4ce7c929315272b91fc743ab15b0730d257f"
+ },
+ {
+ "id": "rc87-1ce84bf138cf2c12",
+ "package": "compiler",
+ "file": "packages/compiler/tests/project/test.ts",
+ "line": 224,
+ "title": "loads CSS manifest resources synchronously",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8e76e72af9a15bd08ae14a6dbceac8f82140522e102d98afbbbe1547cc87a6e4"
+ },
+ {
+ "id": "rc87-f3d18cebca3be059",
+ "package": "compiler",
+ "file": "packages/compiler/tests/project/test.ts",
+ "line": 342,
+ "title": "ignores generated stylesheets during implicit discovery but accepts explicit entries",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "90538b287ef1388e10296128a7bef2741d10bf9eeadd6b0c9324549c1f8b432f"
+ },
+ {
+ "id": "rc87-c8e38b5882938dae",
+ "package": "compiler",
+ "file": "packages/compiler/tests/project/test.ts",
+ "line": 478,
+ "title": "reports missing workspace runtime packages without throwing",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f9e332b408f75d8c05889e2845d86071e1e4f6c95eb0af41d22a5da165bcc7ad"
+ },
+ {
+ "id": "rc87-c80932d3a9a18c74",
+ "package": "compiler",
+ "file": "packages/compiler/tests/project/test.ts",
+ "line": 562,
+ "title": "turns CSS manifest results into JSON sources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "00bde77d89a8164bf3c2267325a4e99a02f64c1c91fd26039980bfd409538ed1"
+ },
+ {
+ "id": "rc87-ee8c27b7efe74d86",
+ "package": "compiler",
+ "file": "packages/compiler/tests/project/test.ts",
+ "line": 609,
+ "title": "projects immutable native registrations from imported CSS for tooling",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "00d180176ed729e4dc2c1d7d810da94e77662bac4f28fbed4b4f5d9321b17912"
+ },
+ {
+ "id": "rc87-45082d045895f086",
+ "package": "compiler",
+ "file": "packages/compiler/tests/public-inspection-workflow.test.ts",
+ "line": 13,
+ "title": "public project, codec, query and validation APIs preserve execution context",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2e9ed188a5ae2658524847f181d34f98940056d553c0462b97d54d14e171ad45"
+ },
+ {
+ "id": "rc87-925b8dfc20062fd8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/public-inspection-workflow.test.ts",
+ "line": 49,
+ "title": "canonical suggestions do not replace raw display with a different cascade identity",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "27328116a816dddd2c2a70a6512d90af83073910207c0a964076a5dd8636c5f0"
+ },
+ {
+ "id": "rc87-1b537e25e4bff74b",
+ "package": "compiler",
+ "file": "packages/compiler/tests/public-inspection-workflow.test.ts",
+ "line": 54,
+ "title": "public inspection example distinguishes an empty result, validation states and a failed project",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0096c37198b61a3796e00102cd4410668dac6f712cd4693caf34f2991f45b704"
+ },
+ {
+ "id": "rc87-44566929e4b1c7d6",
+ "package": "compiler",
+ "file": "packages/compiler/tests/reference.test.ts",
+ "line": 128,
+ "title": "references exported CSS authoring packages with compiler-only definition locations",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b2ceb7526c24bdef3e88cba094c15d8e05ed06b87356ebdd8422c50ed5441f65"
+ },
+ {
+ "id": "rc87-8a6b867bac279b03",
+ "package": "compiler",
+ "file": "packages/compiler/tests/selector-literals.test.ts",
+ "line": 5,
+ "title": "preserves selector literals while lowering @compose through native",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5331109d4be2f100b80744db3af5e21bff128d7360d5c2a985e3a763783eadb1",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "native"
+ }
+ },
+ {
+ "id": "rc87-476c332335637dc6",
+ "package": "compiler",
+ "file": "packages/compiler/tests/selector-literals.test.ts",
+ "line": 5,
+ "title": "preserves selector literals while lowering @compose through wasm",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5331109d4be2f100b80744db3af5e21bff128d7360d5c2a985e3a763783eadb1",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "wasm"
+ }
+ },
+ {
+ "id": "rc87-03a34913f5c3d34d",
+ "package": "compiler",
+ "file": "packages/compiler/tests/session.test.ts",
+ "line": 45,
+ "title": "native and Wasm compiler sessions execute the v2 language compiler corpus",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2d4387b2b8a2e795850c637e4b86bb3e383425ac4734fa4bd71c56f8bd37e82"
+ },
+ {
+ "id": "rc87-dd005f4d615e0970",
+ "package": "compiler",
+ "file": "packages/compiler/tests/source-map-paths.test.ts",
+ "line": 21,
+ "title": "`${kind} source maps retain filesystem identity for reference resolution`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "166697cde82da42655f6ff7f6d4ceb8b14201fbbace0f60172bd9d1e439b3561"
+ },
+ {
+ "id": "rc87-dd005f4d615e0970",
+ "package": "compiler",
+ "file": "packages/compiler/tests/source-map-paths.test.ts",
+ "line": 21,
+ "title": "`${kind} source maps retain filesystem identity for reference resolution`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "166697cde82da42655f6ff7f6d4ceb8b14201fbbace0f60172bd9d1e439b3561"
+ },
+ {
+ "id": "rc87-dd005f4d615e0970",
+ "package": "compiler",
+ "file": "packages/compiler/tests/source-map-paths.test.ts",
+ "line": 21,
+ "title": "`${kind} source maps retain filesystem identity for reference resolution`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "166697cde82da42655f6ff7f6d4ceb8b14201fbbace0f60172bd9d1e439b3561"
+ },
+ {
+ "id": "rc87-dd4bff9c6cc453c7",
+ "package": "compiler",
+ "file": "packages/compiler/tests/source-map-paths.test.ts",
+ "line": 26,
+ "title": "`${kind} source maps retain filesystem identity in output and validation`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "36c21751b874f6b5dcb494b414fbb972011a90763fe2065cdcd88b490c0f321f"
+ },
+ {
+ "id": "rc87-dd4bff9c6cc453c7",
+ "package": "compiler",
+ "file": "packages/compiler/tests/source-map-paths.test.ts",
+ "line": 26,
+ "title": "`${kind} source maps retain filesystem identity in output and validation`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "36c21751b874f6b5dcb494b414fbb972011a90763fe2065cdcd88b490c0f321f"
+ },
+ {
+ "id": "rc87-dd4bff9c6cc453c7",
+ "package": "compiler",
+ "file": "packages/compiler/tests/source-map-paths.test.ts",
+ "line": 26,
+ "title": "`${kind} source maps retain filesystem identity in output and validation`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "36c21751b874f6b5dcb494b414fbb972011a90763fe2065cdcd88b490c0f321f"
+ },
+ {
+ "id": "rc87-21888bbc483cf54b",
+ "package": "compiler",
+ "file": "packages/compiler/tests/source-map-paths.test.ts",
+ "line": 34,
+ "title": "`${kind} source maps retain filesystem identity in diagnostics`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5061b93bd06215a820b86874d7383ebe2f5e9d80cfa6050f1d053125fe1f7336"
+ },
+ {
+ "id": "rc87-21888bbc483cf54b",
+ "package": "compiler",
+ "file": "packages/compiler/tests/source-map-paths.test.ts",
+ "line": 34,
+ "title": "`${kind} source maps retain filesystem identity in diagnostics`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5061b93bd06215a820b86874d7383ebe2f5e9d80cfa6050f1d053125fe1f7336"
+ },
+ {
+ "id": "rc87-21888bbc483cf54b",
+ "package": "compiler",
+ "file": "packages/compiler/tests/source-map-paths.test.ts",
+ "line": 34,
+ "title": "`${kind} source maps retain filesystem identity in diagnostics`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5061b93bd06215a820b86874d7383ebe2f5e9d80cfa6050f1d053125fe1f7336"
+ },
+ {
+ "id": "rc87-751eb55eb912e996",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/browser.test.ts",
+ "line": 23,
+ "title": "uses one explicit compiler artifact for compilation and rendering",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a7044a0d8562c447540e804870bde2313a49db3130d14b0412d8f019d0a5c003"
+ },
+ {
+ "id": "rc87-18e6937a515eb06f",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/dependencies.test.ts",
+ "line": 7,
+ "title": "resolves immutable complete import edges without flattening qualified native CSS",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c06946dd06c248a65d3635cba99676a0897ab1859d92a75243fbbaff925947b5"
+ },
+ {
+ "id": "rc87-b85f08140f77689f",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/dependencies.test.ts",
+ "line": 32,
+ "title": "dependency resolution honors cancellation",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b02776ab39a77de4c9b136bde5bf04ae31295873e1ddcd84c81f8aeb418a3b2a"
+ },
+ {
+ "id": "rc87-3933d026aa9b41f4",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/dependencies.test.ts",
+ "line": 37,
+ "title": "identifies reference context without treating native strings as references",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9af6c7ee92c341e5cc9b458aad1b7f52596842970d4c4efe4f9852b37db45cd1"
+ },
+ {
+ "id": "rc87-11991ed7b7391884",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/generated-globals.test.ts",
+ "line": 11,
+ "title": "separates generated globals at the compiler boundary without relocating mode selectors",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "74414ceadfaf6697887c0439166cdfe3575fbbae79d6f566fd60ced967bb8fab"
+ },
+ {
+ "id": "rc87-d380cc7685cab343",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/generated-globals.test.ts",
+ "line": 34,
+ "title": "separation still rejects invalid local declarations atomically under strict validation",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6b46731a0402f4469ae3001e3737ebfba262460b6320b4fd4b4f39d141c81c90"
+ },
+ {
+ "id": "rc87-8d1db0d6ae5bf94e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/output-map-paths.test.ts",
+ "line": 8,
+ "title": "maps an absolute filesystem path as a file URL: entry #.css",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "206a4dc3393e7a7367ac3766979e7b8ade0605ad2a6e7512518cdf06f4942427",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "entry #.css"
+ }
+ },
+ {
+ "id": "rc87-16632e6672948e2e",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/output-map-paths.test.ts",
+ "line": 8,
+ "title": "maps an absolute filesystem path as a file URL: entry.css",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "206a4dc3393e7a7367ac3766979e7b8ade0605ad2a6e7512518cdf06f4942427",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "entry.css"
+ }
+ },
+ {
+ "id": "rc87-f42006573ef3287b",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/output-map-paths.test.ts",
+ "line": 8,
+ "title": "maps an absolute filesystem path as a file URL: entry%20.css",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "206a4dc3393e7a7367ac3766979e7b8ade0605ad2a6e7512518cdf06f4942427",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "entry%20.css"
+ }
+ },
+ {
+ "id": "rc87-57fc54593b07a0b7",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/project-context.test.ts",
+ "line": 28,
+ "title": "native styles receive project tokens, modes, fallbacks and managed animations without an entry or reference",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bac925fccac2994c7d035ebec48d6c427eabc6806a09f1bfabd9183ac8fb3178"
+ },
+ {
+ "id": "rc87-652482d3b0ed8799",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/project-context.test.ts",
+ "line": 43,
+ "title": "host references precede authored references and local definitions, without leaking between calls",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "23dc0dcdde04ce90d2439ded7dbb965d8d948c9ef045f658333b737e23cd696f"
+ },
+ {
+ "id": "rc87-57e6a265037a9a30",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/project-context.test.ts",
+ "line": 56,
+ "title": "standalone transformation remains opt-in and keeps unrelated CSS byte-for-byte",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e39b5e72b6c13c8a3b5657e05119325d227f33c909aa368c74676b2c7b258ea9"
+ },
+ {
+ "id": "rc87-8d84923b168e1f16",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/project-context.test.ts",
+ "line": 70,
+ "title": "separate globals preserve global mode selectors and external emission remains an explicit host assertion",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b31c13068e055a48ffbc5cdef936f7f883e7227b7fa6e2eaf2c34f0eabde163a"
+ },
+ {
+ "id": "rc87-847ea0a0b2ea88f3",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/project-context.test.ts",
+ "line": 81,
+ "title": "definition files retain resource owners and dependencies with delivery=false",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ee068d4385966864d368d06ce751c4fe69cf0068fa0ed5703bda8785f7fc7f98",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-0b1972ef51c72ba9",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/project-context.test.ts",
+ "line": 81,
+ "title": "definition files retain resource owners and dependencies with delivery=true",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ee068d4385966864d368d06ce751c4fe69cf0068fa0ed5703bda8785f7fc7f98",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-f4039c2e8754f948",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/project-context.test.ts",
+ "line": 93,
+ "title": "reference files apply to rendered graphs without recursively referencing themselves",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "25ca638d71745f9619577750e7447bf28bc179d56c7ec1cd5bb57ad341df8e3c"
+ },
+ {
+ "id": "rc87-932ee518b52869b4",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/project-context.test.ts",
+ "line": 104,
+ "title": "direct compilation shares definition files and reports missing inputs before failure",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aa28bf34519d7768a0b15346aac5e2a0499e2a9a9f5af8d295a6819f2df42315"
+ },
+ {
+ "id": "rc87-8462f54b12c66a89",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/project-context.test.ts",
+ "line": 114,
+ "title": "reused compilation observes nested edits, deletion and dependency callbacks",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a402cd50fb9498c4afee8bd5824b415a319147de6ad32fed59e76f41cdd5efe1"
+ },
+ {
+ "id": "rc87-553436b03989bab8",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/project-context.test.ts",
+ "line": 132,
+ "title": "rendered outputs include explicitly referenced resources without exporting definitions, delivery=false",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "595ceb4f9e5c85c1a7475055e74b6ad4f9cfacaea8e992cb0b871c9eee9e6f8a",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-09b64e7fa38414b1",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/project-context.test.ts",
+ "line": 132,
+ "title": "rendered outputs include explicitly referenced resources without exporting definitions, delivery=true",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "595ceb4f9e5c85c1a7475055e74b6ad4f9cfacaea8e992cb0b871c9eee9e6f8a",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-ec1b7a9617b42bdf",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/style.test.ts",
+ "line": 211,
+ "title": "preserves Windows extended-length path prefixes while cleaning style requests",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d4281759295865fedc75dbd25b3e50183e1a476cb0099f50b7f025ae28367d9d"
+ },
+ {
+ "id": "rc87-bee4d1e5c45c7230",
+ "package": "compiler",
+ "file": "packages/compiler/tests/stylesheet/style.test.ts",
+ "line": 541,
+ "title": "tracks default package artifacts as style dependencies",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a0b7dd1f7d1305f28fa477e105435ca920c6db899258da22e373c5323fa6762e"
+ },
+ {
+ "id": "rc87-5c701b5743464388",
+ "package": "create",
+ "file": "packages/create/tests/bug-hunt-multiline-import.test.ts",
+ "line": 9,
+ "title": "keeps Vite config parseable with multiline=false",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "149e865fcd929226c6f57b631ac47918b13f378203a393b191f28b0c61ae93d5",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-bc681a41ad942327",
+ "package": "create",
+ "file": "packages/create/tests/bug-hunt-multiline-import.test.ts",
+ "line": 9,
+ "title": "keeps Vite config parseable with multiline=true",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "149e865fcd929226c6f57b631ac47918b13f378203a393b191f28b0c61ae93d5",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-6a50b8c35320150e",
+ "package": "create",
+ "file": "packages/create/tests/bug-hunt-multiline-import.test.ts",
+ "line": 26,
+ "title": "preserves complete import boundaries and prologues: /* license */ 'use client'; import { defineConfig } from 'vite'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0b143580ace32c56b1c9cc8fe923580c3170e8e2d686334312470f6d62d2ea79",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "/* license */ 'use client'; import { defineConfig } from 'vite'"
+ }
+ },
+ {
+ "id": "rc87-ef70ef962475fc06",
+ "package": "create",
+ "file": "packages/create/tests/bug-hunt-multiline-import.test.ts",
+ "line": 26,
+ "title": "preserves complete import boundaries and prologues: #!/usr/bin/env node 'use client'; import { defineConfig } from 'vite'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0b143580ace32c56b1c9cc8fe923580c3170e8e2d686334312470f6d62d2ea79",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "#!/usr/bin/env node 'use client'; import { defineConfig } from 'vite'"
+ }
+ },
+ {
+ "id": "rc87-3d57db2bc34de1fa",
+ "package": "create",
+ "file": "packages/create/tests/bug-hunt-multiline-import.test.ts",
+ "line": 26,
+ "title": "preserves complete import boundaries and prologues: import { defineConfig } from 'vite'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0b143580ace32c56b1c9cc8fe923580c3170e8e2d686334312470f6d62d2ea79",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "import { defineConfig } from 'vite'"
+ }
+ },
+ {
+ "id": "rc87-5792eb77c78ebd3d",
+ "package": "create",
+ "file": "packages/create/tests/bug-hunt-multiline-import.test.ts",
+ "line": 26,
+ "title": "preserves complete import boundaries and prologues: import { defineConfig } from 'vite'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0b143580ace32c56b1c9cc8fe923580c3170e8e2d686334312470f6d62d2ea79",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "import { defineConfig } from 'vite'"
+ }
+ },
+ {
+ "id": "rc87-5a7542ffbb350aee",
+ "package": "create",
+ "file": "packages/create/tests/bug-hunt-multiline-import.test.ts",
+ "line": 26,
+ "title": "preserves complete import boundaries and prologues: import data from './data.json' /* attributes */ with { type: 'json' } import { defineConfig } from 'vite'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0b143580ace32c56b1c9cc8fe923580c3170e8e2d686334312470f6d62d2ea79",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "import data from './data.json' /* attributes */ with { type: 'json' } import { defineConfig } from 'vite'"
+ }
+ },
+ {
+ "id": "rc87-ca694ae302026f79",
+ "package": "create",
+ "file": "packages/create/tests/bug-hunt-multiline-import.test.ts",
+ "line": 26,
+ "title": "preserves complete import boundaries and prologues: import data from './data.json' with { type: 'json' } import { defineConfig } from 'vite'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0b143580ace32c56b1c9cc8fe923580c3170e8e2d686334312470f6d62d2ea79",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "import data from './data.json' with { type: 'json' } import { defineConfig } from 'vite'"
+ }
+ },
+ {
+ "id": "rc87-18c35f57cf46ef6c",
+ "package": "create",
+ "file": "packages/create/tests/setup-frameworks.test.ts",
+ "line": 729,
+ "title": "does not restore the retired rc.87 @master/css-sv package name",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7a3a53eedf2c34299082bf2e1983714916041593798f6f066a597e55d6ac8504"
+ },
+ {
+ "id": "rc87-fe273e628d8434b2",
+ "package": "create",
+ "file": "packages/create/tests/setup-frameworks.test.ts",
+ "line": 746,
+ "title": "Angular and standalone setup default to CLI static CSS",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "320317a42c154d8795fce1a1b35ce14697b99aa7dc5005cdee0c3f4c1d2d749e"
+ },
+ {
+ "id": "rc87-634b6b8a0406e920",
+ "package": "create",
+ "file": "packages/create/tests/static-shadow.test.ts",
+ "line": 5,
+ "title": "`static shadow setup preserves ${ownStyles || 'empty styles'} and is idempotent`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aa7229e326095cbbda425d5d795a96aaa7909efe438e99ef72f5939719046211"
+ },
+ {
+ "id": "rc87-634b6b8a0406e920",
+ "package": "create",
+ "file": "packages/create/tests/static-shadow.test.ts",
+ "line": 5,
+ "title": "`static shadow setup preserves ${ownStyles || 'empty styles'} and is idempotent`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aa7229e326095cbbda425d5d795a96aaa7909efe438e99ef72f5939719046211"
+ },
+ {
+ "id": "rc87-634b6b8a0406e920",
+ "package": "create",
+ "file": "packages/create/tests/static-shadow.test.ts",
+ "line": 5,
+ "title": "`static shadow setup preserves ${ownStyles || 'empty styles'} and is idempotent`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aa7229e326095cbbda425d5d795a96aaa7909efe438e99ef72f5939719046211"
+ },
+ {
+ "id": "rc87-fe58b5a55056a9b3",
+ "package": "create",
+ "file": "packages/create/tests/static-shadow.test.ts",
+ "line": 16,
+ "title": "explicit runtime setup retains the shadow runtime decorator",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f2aab5925718412ffe7cb485f7983590f1fe9b75e0edd724cc8d4659f80aeef1"
+ },
+ {
+ "id": "rc87-632ac3fcd60a46ac",
+ "package": "css",
+ "file": "packages/css/tests/engine/correctness-regressions.test.ts",
+ "line": 8,
+ "title": "preserves decimal conditions and selector literals through native",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9138bc3f6bcb09ac3c5cb00a7523f1187e59cacdf43e7a8023b3ffc1c8b116ac",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "native"
+ }
+ },
+ {
+ "id": "rc87-a42e8b9b9827b00d",
+ "package": "css",
+ "file": "packages/css/tests/engine/correctness-regressions.test.ts",
+ "line": 8,
+ "title": "preserves decimal conditions and selector literals through wasm",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9138bc3f6bcb09ac3c5cb00a7523f1187e59cacdf43e7a8023b3ffc1c8b116ac",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "wasm"
+ }
+ },
+ {
+ "id": "rc87-8918fc9cb27e127d",
+ "package": "css",
+ "file": "packages/css/tests/engine/execution-state.test.ts",
+ "line": 8,
+ "title": "native executionState returns immutable stored references and current resources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f8f0965f7e9e970c1a45008dec6b89dbf9e0640a0352e3ab10699ce0de5e1b4e",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "native"
+ }
+ },
+ {
+ "id": "rc87-5d112e5fea3c3174",
+ "package": "css",
+ "file": "packages/css/tests/engine/execution-state.test.ts",
+ "line": 8,
+ "title": "wasm executionState returns immutable stored references and current resources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f8f0965f7e9e970c1a45008dec6b89dbf9e0640a0352e3ab10699ce0de5e1b4e",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "wasm"
+ }
+ },
+ {
+ "id": "rc87-5ef4bc6e6ffbf6f3",
+ "package": "css",
+ "file": "packages/css/tests/engine/inspection-contract.test.ts",
+ "line": 8,
+ "title": "native exposes typed syntax status and optional inspection diagnostics",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e7b62213c4e7a4b9e772ecc6aae0900ce82d552f0b23ebab38d1f6fef92591d5",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "native"
+ }
+ },
+ {
+ "id": "rc87-884e9beb4ab3e5f8",
+ "package": "css",
+ "file": "packages/css/tests/engine/inspection-contract.test.ts",
+ "line": 8,
+ "title": "wasm exposes typed syntax status and optional inspection diagnostics",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e7b62213c4e7a4b9e772ecc6aae0900ce82d552f0b23ebab38d1f6fef92591d5",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "wasm"
+ }
+ },
+ {
+ "id": "rc87-e73f741595df4701",
+ "package": "css",
+ "file": "packages/css/tests/engine/rust-engine.test.ts",
+ "line": 145,
+ "title": "uses v2 language engine corpus version 2",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "557fc80450b4bab2c4a09f2664956a92bbd40688fd5d29e448c0f6f2f8e1dd94"
+ },
+ {
+ "id": "rc87-88c290b39b023012",
+ "package": "css",
+ "file": "packages/css/tests/engine/rust-engine.test.ts",
+ "line": 150,
+ "title": "`executes v2 language engine corpus case ${parityCase.id} through native and Wasm sessions`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8886bf506963a278e914f30650755fd15be314f29262c812437c2f40fa8ccb4d"
+ },
+ {
+ "id": "rc87-fe7b1949b4d07e05",
+ "package": "css",
+ "file": "packages/css/tests/engine/rust-engine.test.ts",
+ "line": 367,
+ "title": "registers emitted globals through native and Wasm engines",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "96a3a0153a5f084d22c38419252c3e69430ba3a403fa60a47dd5670e298bd631"
+ },
+ {
+ "id": "rc87-1f6ba6afdba0cb65",
+ "package": "css",
+ "file": "packages/css/tests/facade.test.ts",
+ "line": 11,
+ "title": "@master/css re-exports the manifest-driven engine facade",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a54966c3ba9c6a121163c8a82de178ff936c09a75a73f633168890d7d57cf60e"
+ },
+ {
+ "id": "rc87-f850677b1ac88e1f",
+ "package": "css",
+ "file": "packages/css/tests/rc87-client-types.test.ts",
+ "line": 12,
+ "title": "provides types for Master CSS integration virtual modules",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "682ec82a9aeccde31268272ffeef9be385664765695caa2fb3c284c174928f82"
+ },
+ {
+ "id": "rc87-f0244f94b010a84d",
+ "package": "eslint-config",
+ "file": "packages/eslint-config/tests/test.ts",
+ "line": 33,
+ "title": "ESLint Configuration is valid",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ce197228e9d3d8eac59a0a6374f7b0725b917de2f894ed4a40bcd7dd82b752cf"
+ },
+ {
+ "id": "rc87-b8a559da809b6dde",
+ "package": "eslint-config",
+ "file": "packages/eslint-config/tests/test.ts",
+ "line": 48,
+ "title": "the default configuration does not lint or fix removed directives",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c3151e6c75faf85a05dda243726f3448d979ed0b1e4979947d9010cd6f550a42"
+ },
+ {
+ "id": "rc87-acf93d56d8a1daba",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of \"blo\\ ck\"",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 10,
+ "resolved": true,
+ "value": "\"blo\\ ck\""
+ }
+ },
+ {
+ "id": "rc87-4f6e82f6698b1162",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of \"blo\\ ck\"",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 11,
+ "resolved": true,
+ "value": "\"blo\\ ck\""
+ }
+ },
+ {
+ "id": "rc87-a989c2722aa62481",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of \"blo\\ ck\"",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 12,
+ "resolved": true,
+ "value": "\"blo\\ ck\""
+ }
+ },
+ {
+ "id": "rc87-1b4a67d64e63f85c",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of `\\u0062lock`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 13,
+ "resolved": true,
+ "value": "`\\u0062lock`"
+ }
+ },
+ {
+ "id": "rc87-d0e617eb5c37e4c2",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of `block hidden`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 14,
+ "resolved": true,
+ "value": "`block hidden`"
+ }
+ },
+ {
+ "id": "rc87-57f8ad8988c74b50",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`'\\u{62}lock'`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "String.raw`'\\u{62}lock'`"
+ }
+ },
+ {
+ "id": "rc87-3e0ab06d1bc2ec42",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`\"\\u0062lock\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "String.raw`\"\\u0062lock\"`"
+ }
+ },
+ {
+ "id": "rc87-28c99fb01eea2000",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`\"\\x62lock\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "String.raw`\"\\x62lock\"`"
+ }
+ },
+ {
+ "id": "rc87-9c0ec249dd2c726a",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`\"blo\\ck\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "String.raw`\"blo\\ck\"`"
+ }
+ },
+ {
+ "id": "rc87-5c2c17147ec83ca8",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`\"block\\fhidden\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 9,
+ "resolved": true,
+ "value": "String.raw`\"block\\fhidden\"`"
+ }
+ },
+ {
+ "id": "rc87-4492b274d287f83c",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`\"block\\nhidden\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 6,
+ "resolved": true,
+ "value": "String.raw`\"block\\nhidden\"`"
+ }
+ },
+ {
+ "id": "rc87-ece1678241d838d5",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`\"block\\rhidden\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 8,
+ "resolved": true,
+ "value": "String.raw`\"block\\rhidden\"`"
+ }
+ },
+ {
+ "id": "rc87-e2af99b6b6f01bfa",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`\"block\\thidden\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 7,
+ "resolved": true,
+ "value": "String.raw`\"block\\thidden\"`"
+ }
+ },
+ {
+ "id": "rc87-5f7516e93a1e08a4",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`\"block\\u0020hidden\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "String.raw`\"block\\u0020hidden\"`"
+ }
+ },
+ {
+ "id": "rc87-1c843c4a8b0cc915",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`\"block\\x20hidden\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "String.raw`\"block\\x20hidden\"`"
+ }
+ },
+ {
+ "id": "rc87-a4c58afb034dd7c3",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`\"content:'\\\\b'\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 17,
+ "resolved": true,
+ "value": "String.raw`\"content:'\\\\b'\"`"
+ }
+ },
+ {
+ "id": "rc87-cc724b64528f763f",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`\"content:'\\u{1F600}'\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 15,
+ "resolved": true,
+ "value": "String.raw`\"content:'\\u{1F600}'\"`"
+ }
+ },
+ {
+ "id": "rc87-413f1837d17af8de",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 28,
+ "title": "recognizes the parser cooked value of String.raw`\"content:'\\uD83D\\uDE00'\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c5488b644fe87d5e416471d6501e1f7fc11ed5d27d1e522ecc98b1ad9c837185",
+ "matrix": {
+ "index": 16,
+ "resolved": true,
+ "value": "String.raw`\"content:'\\uD83D\\uDE00'\"`"
+ }
+ },
+ {
+ "id": "rc87-427f6d5a900f260b",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 33,
+ "title": "maps unknown-class diagnostics to the complete raw span String.raw`\\u{1F600}zzz`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58b0ac94e13dba927fc951386f5b6bf3ee2f4ffd4348033c7e6d57c4764d861b",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "String.raw`\\u{1F600}zzz`"
+ }
+ },
+ {
+ "id": "rc87-5da2d80bde4086b3",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 33,
+ "title": "maps unknown-class diagnostics to the complete raw span String.raw`\\u007Azz`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58b0ac94e13dba927fc951386f5b6bf3ee2f4ffd4348033c7e6d57c4764d861b",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "String.raw`\\u007Azz`"
+ }
+ },
+ {
+ "id": "rc87-b2b8e13024142926",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 33,
+ "title": "maps unknown-class diagnostics to the complete raw span String.raw`z\\x7Az`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58b0ac94e13dba927fc951386f5b6bf3ee2f4ffd4348033c7e6d57c4764d861b",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "String.raw`z\\x7Az`"
+ }
+ },
+ {
+ "id": "rc87-e1ea0410ab790065",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 33,
+ "title": "maps unknown-class diagnostics to the complete raw span z\\ zz",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58b0ac94e13dba927fc951386f5b6bf3ee2f4ffd4348033c7e6d57c4764d861b",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "z\\ zz"
+ }
+ },
+ {
+ "id": "rc87-ff4c1f495878f678",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 53,
+ "title": "recognizes legacy octal escapes when the JavaScript parser accepts them",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "38c91787bcec49a6ab24d2bba8eda50ae05b81e357cda7bf573f45708fc3382a"
+ },
+ {
+ "id": "rc87-0ec90e8ce312ee85",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 61,
+ "title": "sorts escaped strings with valid syntax, equivalent classes and stable fixes: clsx(\"fg:white\\ bg-black\")",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2068be30d4f1fe14e204c9327ee3df59c1152dbafe8806a190cf496644f1c5b",
+ "matrix": {
+ "index": 6,
+ "resolved": true,
+ "value": "clsx(\"fg:white\\ bg-black\")"
+ }
+ },
+ {
+ "id": "rc87-0b5d9af3af381672",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 61,
+ "title": "sorts escaped strings with valid syntax, equivalent classes and stable fixes: clsx(` fg:white bg:black `)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2068be30d4f1fe14e204c9327ee3df59c1152dbafe8806a190cf496644f1c5b",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "clsx(` fg:white bg:black `)"
+ }
+ },
+ {
+ "id": "rc87-727696e5d646ed25",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 61,
+ "title": "sorts escaped strings with valid syntax, equivalent classes and stable fixes: clsx(` fg:white\\r\\n bg:black `)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2068be30d4f1fe14e204c9327ee3df59c1152dbafe8806a190cf496644f1c5b",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "clsx(` fg:white\\r\\n bg:black `)"
+ }
+ },
+ {
+ "id": "rc87-5e65aff43a7c8fea",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 61,
+ "title": "sorts escaped strings with valid syntax, equivalent classes and stable fixes: clsx(`fg-white content:'\\${value}' bg-black`)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2068be30d4f1fe14e204c9327ee3df59c1152dbafe8806a190cf496644f1c5b",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "clsx(`fg-white content:'\\${value}' bg-black`)"
+ }
+ },
+ {
+ "id": "rc87-319f5f96819cedc3",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 61,
+ "title": "sorts escaped strings with valid syntax, equivalent classes and stable fixes: String.raw`clsx('fg-white content:\\'a\\\\b\\' bg-black')`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2068be30d4f1fe14e204c9327ee3df59c1152dbafe8806a190cf496644f1c5b",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "String.raw`clsx('fg-white content:\\'a\\\\b\\' bg-black')`"
+ }
+ },
+ {
+ "id": "rc87-0b3686a22b13ae2d",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 61,
+ "title": "sorts escaped strings with valid syntax, equivalent classes and stable fixes: String.raw`clsx(\"fg-white \\u0062g:black\")`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2068be30d4f1fe14e204c9327ee3df59c1152dbafe8806a190cf496644f1c5b",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "String.raw`clsx(\"fg-white \\u0062g:black\")`"
+ }
+ },
+ {
+ "id": "rc87-dcc6696d3bb69345",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 61,
+ "title": "sorts escaped strings with valid syntax, equivalent classes and stable fixes: String.raw`clsx(\"fg:white\\u0020bg:black\")`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2068be30d4f1fe14e204c9327ee3df59c1152dbafe8806a190cf496644f1c5b",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "String.raw`clsx(\"fg:white\\u0020bg:black\")`"
+ }
+ },
+ {
+ "id": "rc87-f4994660937efa2b",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 81,
+ "title": "maps conflict removal and canonical replacement through escaped separators",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7b07f43828871e534b0ad05f8e4cc9a2e7da8e0e3dcdbd3f29216861af774099"
+ },
+ {
+ "id": "rc87-5f9d394ea4692363",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 90,
+ "title": "uses cooked policy values and original ranges for unapproved raw values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ccc5e594b0e3eecef88377a058bbff22c8825ddde270de97dce854163e0a908f"
+ },
+ {
+ "id": "rc87-c517bee011008635",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 98,
+ "title": "recognizes JavaScript expression escapes inside jsx",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7b46b57c4a06fdf7c0f5cf9ced24e7fcf58fecc2b39e96404f23977e55b6fcc4",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "jsx | String.raw`const view =
` | undefined"
+ }
+ },
+ {
+ "id": "rc87-0c00fbbe1889f7c4",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 98,
+ "title": "recognizes JavaScript expression escapes inside svelte",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7b46b57c4a06fdf7c0f5cf9ced24e7fcf58fecc2b39e96404f23977e55b6fcc4",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "svelte | String.raw`
` | svelteParser"
+ }
+ },
+ {
+ "id": "rc87-ab69d7ca2692228e",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 98,
+ "title": "recognizes JavaScript expression escapes inside vue",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7b46b57c4a06fdf7c0f5cf9ced24e7fcf58fecc2b39e96404f23977e55b6fcc4",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "vue | String.raw`
` | vueParser"
+ }
+ },
+ {
+ "id": "rc87-a16a7d2a225fa06c",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 107,
+ "title": "does not apply JavaScript decoding to raw jsx attributes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7c5f9c7565ad7e9346b7a40743a9a21f04e18b4fc7156a0af5e6f4e51e84efb0",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "jsx | String.raw`const view =
` | undefined"
+ }
+ },
+ {
+ "id": "rc87-72f77a3a44de7869",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 107,
+ "title": "does not apply JavaScript decoding to raw svelte attributes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7c5f9c7565ad7e9346b7a40743a9a21f04e18b4fc7156a0af5e6f4e51e84efb0",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "svelte | String.raw`
` | svelteParser"
+ }
+ },
+ {
+ "id": "rc87-5c31c5e6a2819537",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 107,
+ "title": "does not apply JavaScript decoding to raw vue attributes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7c5f9c7565ad7e9346b7a40743a9a21f04e18b4fc7156a0af5e6f4e51e84efb0",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "vue | String.raw`
` | vueParser"
+ }
+ },
+ {
+ "id": "rc87-a103d2f48c1a0f4f",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 117,
+ "title": "preserves template literal line endings when sorting: ",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c21a2a94a5cfb1d7bff417b3dc56e2ebaf4dff59a95a094f390719d492fd8be0",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-770d1c304e6056d1",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 117,
+ "title": "preserves template literal line endings when sorting: ",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c21a2a94a5cfb1d7bff417b3dc56e2ebaf4dff59a95a094f390719d492fd8be0",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-1b6971d883fc60fd",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-javascript-escapes.test.ts",
+ "line": 117,
+ "title": "preserves template literal line endings when sorting: ",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c21a2a94a5cfb1d7bff417b3dc56e2ebaf4dff59a95a094f390719d492fd8be0",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-025ff7b6094e73ee",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 15,
+ "title": "maps raw diagnostic spans with separator and token \u007Azz",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ba6d705a2cf3ebb16c1357d734dcade82d286f1572b0fbde829dbcd06c65cd5e",
+ "matrix": {
+ "index": 7,
+ "resolved": true,
+ "value": " | \u007Azz"
+ }
+ },
+ {
+ "id": "rc87-ac055977b90914f8",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 15,
+ "title": "maps raw diagnostic spans with separator and token 😀zzz",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ba6d705a2cf3ebb16c1357d734dcade82d286f1572b0fbde829dbcd06c65cd5e",
+ "matrix": {
+ "index": 6,
+ "resolved": true,
+ "value": " | 😀zzz"
+ }
+ },
+ {
+ "id": "rc87-9925d0110e241dfd",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 15,
+ "title": "maps raw diagnostic spans with separator and token ≂̸zzz",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ba6d705a2cf3ebb16c1357d734dcade82d286f1572b0fbde829dbcd06c65cd5e",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": " | ≂̸zzz"
+ }
+ },
+ {
+ "id": "rc87-cda585e774689c1a",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 15,
+ "title": "maps raw diagnostic spans with separator and token zzz",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ba6d705a2cf3ebb16c1357d734dcade82d286f1572b0fbde829dbcd06c65cd5e",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": " | zzz"
+ }
+ },
+ {
+ "id": "rc87-14f571ba28b01aea",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 15,
+ "title": "maps raw diagnostic spans with separator and token zzz",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ba6d705a2cf3ebb16c1357d734dcade82d286f1572b0fbde829dbcd06c65cd5e",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": " | zzz"
+ }
+ },
+ {
+ "id": "rc87-5a8131f46ee64fee",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 15,
+ "title": "maps raw diagnostic spans with separator and token zzz",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ba6d705a2cf3ebb16c1357d734dcade82d286f1572b0fbde829dbcd06c65cd5e",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": " | zzz"
+ }
+ },
+ {
+ "id": "rc87-2c8f71527cf8ce69",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 15,
+ "title": "maps raw diagnostic spans with separator 
 and token zzz",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ba6d705a2cf3ebb16c1357d734dcade82d286f1572b0fbde829dbcd06c65cd5e",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "
 | zzz"
+ }
+ },
+ {
+ "id": "rc87-c1a90f42ce7afd39",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 15,
+ "title": "maps raw diagnostic spans with separator 	 and token String.raw`\\u007Azz`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ba6d705a2cf3ebb16c1357d734dcade82d286f1572b0fbde829dbcd06c65cd5e",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "	 | String.raw`\\u007Azz`"
+ }
+ },
+ {
+ "id": "rc87-7e7c08a1aa553625",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 32,
+ "title": "maps diagnostics after a literal CRLF and an astral character in the source prefix",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c3e80555da49f82ee2df371d23e59e03d641dabe9822fa4f60fb6dd08cbaf2dd"
+ },
+ {
+ "id": "rc87-126dc8403f99c669",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 75,
+ "title": "preserves AST class values, attribute boundaries and fix stability for :class='\"fg-white content:'a&b' bg-black\"'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1c257db3e43473b132136a6a95fe8dca4c37288c533c064857e05504bc2466a",
+ "matrix": {
+ "index": 6,
+ "resolved": true,
+ "value": ":class='\"fg-white content:'a&b' bg-black\"'"
+ }
+ },
+ {
+ "id": "rc87-d0bc9f673f6cc92e",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 75,
+ "title": "preserves AST class values, attribute boundaries and fix stability for :class='"fg:white bg:black"'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1c257db3e43473b132136a6a95fe8dca4c37288c533c064857e05504bc2466a",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": ":class='"fg:white bg:black"'"
+ }
+ },
+ {
+ "id": "rc87-ef61fe6b4c9c997f",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 75,
+ "title": "preserves AST class values, attribute boundaries and fix stability for :class=\"'fg-white content:"¬=literal" bg:black'\"",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1c257db3e43473b132136a6a95fe8dca4c37288c533c064857e05504bc2466a",
+ "matrix": {
+ "index": 10,
+ "resolved": true,
+ "value": ":class=\"'fg-white content:"¬=literal" bg:black'\""
+ }
+ },
+ {
+ "id": "rc87-2ad8b0d9053557eb",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 75,
+ "title": "preserves AST class values, attribute boundaries and fix stability for :class=\"'fg-white content:"a&b" bg-black'\"",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1c257db3e43473b132136a6a95fe8dca4c37288c533c064857e05504bc2466a",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": ":class=\"'fg-white content:"a&b" bg-black'\""
+ }
+ },
+ {
+ "id": "rc87-952f59bc951c8540",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 75,
+ "title": "preserves AST class values, attribute boundaries and fix stability for :class=\"['fg:white bg-black', "fg:black bg:white"]\"",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1c257db3e43473b132136a6a95fe8dca4c37288c533c064857e05504bc2466a",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": ":class=\"['fg:white bg-black', "fg:black bg:white"]\""
+ }
+ },
+ {
+ "id": "rc87-779576ed07cb98e9",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 75,
+ "title": "preserves AST class values, attribute boundaries and fix stability for :class=\"'fg:white	bg:black'\"",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1c257db3e43473b132136a6a95fe8dca4c37288c533c064857e05504bc2466a",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": ":class=\"'fg:white	bg:black'\""
+ }
+ },
+ {
+ "id": "rc87-5f4774f66a82eccc",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 75,
+ "title": "preserves AST class values, attribute boundaries and fix stability for :class=\""fg:white bg:black"\"",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1c257db3e43473b132136a6a95fe8dca4c37288c533c064857e05504bc2466a",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": ":class=\""fg:white bg:black"\""
+ }
+ },
+ {
+ "id": "rc87-ebf762dbb0296d52",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 75,
+ "title": "preserves AST class values, attribute boundaries and fix stability for :class=\"`fg-white content:'\\${value}' bg-black`\"",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1c257db3e43473b132136a6a95fe8dca4c37288c533c064857e05504bc2466a",
+ "matrix": {
+ "index": 9,
+ "resolved": true,
+ "value": ":class=\"`fg-white content:'\\${value}' bg-black`\""
+ }
+ },
+ {
+ "id": "rc87-3ba3e51ca2bc40f1",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 75,
+ "title": "preserves AST class values, attribute boundaries and fix stability for :class=\"`fg:white bg:black`\"",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1c257db3e43473b132136a6a95fe8dca4c37288c533c064857e05504bc2466a",
+ "matrix": {
+ "index": 8,
+ "resolved": true,
+ "value": ":class=\"`fg:white bg:black`\""
+ }
+ },
+ {
+ "id": "rc87-b13384afc88e0ad6",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 75,
+ "title": "preserves AST class values, attribute boundaries and fix stability for :class=\"`fg:white
bg-black`\"",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1c257db3e43473b132136a6a95fe8dca4c37288c533c064857e05504bc2466a",
+ "matrix": {
+ "index": 7,
+ "resolved": true,
+ "value": ":class=\"`fg:white
bg-black`\""
+ }
+ },
+ {
+ "id": "rc87-a9902e4cc3f2c8f7",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-attribute-mapping.test.ts",
+ "line": 75,
+ "title": "preserves AST class values, attribute boundaries and fix stability for String.raw`:class=\"'fg:white \\u0062g:black'\"`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1c257db3e43473b132136a6a95fe8dca4c37288c533c064857e05504bc2466a",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "String.raw`:class=\"'fg:white \\u0062g:black'\"`"
+ }
+ },
+ {
+ "id": "rc87-3462d63ed6c07e39",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-escaped-attribute.test.ts",
+ "line": 16,
+ "title": "BH-0015 maps a Vue expression through both HTML entities and JavaScript escapes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "86d37c3539b0e46d258ff5d22d6f7aa36f78aacbecab3cd030c8b2ffb693acf1"
+ },
+ {
+ "id": "rc87-522b4bc301a71c2b",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt-vue-escaped-attribute.test.ts",
+ "line": 27,
+ "title": "BH-0015 fixes the complete Vue source range without leaving entity fragments or invalid syntax",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8474ce1a43bed992e3e8b2961a92b6b7c120991096dfd40f50404e73ce293503"
+ },
+ {
+ "id": "rc87-8edb6d7dbe65f0a2",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/bug-hunt.test.ts",
+ "line": 6,
+ "title": "BH-0015 recognizes cooked JavaScript Unicode escapes in static class strings",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e547f0e5d78e2f1097ec94889f14d680064a78855c10a587e77920004ac3b695"
+ },
+ {
+ "id": "rc87-73e8aaf7f189c771",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/manifest-settings.test.ts",
+ "line": 136,
+ "title": "uses the project manifest for files that have not been written yet",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ed83876a508b4e818cf113cb796e886f45703061648672094edd738a248dca06"
+ },
+ {
+ "id": "rc87-46c202562916fe8f",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/manifest-settings.test.ts",
+ "line": 164,
+ "title": "reloads project manifests between lint runs in the same process",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7a9f8297233cc15e58ad9ac4c2d01657cf68ca11b636cedf238947fb5096afb3"
+ },
+ {
+ "id": "rc87-4af0b8332ae6601d",
+ "package": "eslint-plugin",
+ "file": "packages/eslint-plugin/tests/mdx.test.ts",
+ "line": 129,
+ "title": "`mdx preserves display content: ${name}` / valid[1] / ['```html', 'Old RC example
', '```', '', '``', '', 'Old RC example
', '```', '', '``', '', 'Old RC example
', '```', '', '``', '', 'Old RC example
', '```', '', '``', '', 'Old RC example
', '```', '', '``', '', 'Old RC example
', '```', '', '``', '', 'Old RC example
', '```', '', '``', '', 'Old RC example
', '```', '', '``', '', 'Old RC example
', '```', '', '``', '', 'Old RC example
', '```', '', '``', '', '
Static bound class
",
+ "runner": "eslint-rule-tester",
+ "kind": "test",
+ "sourceDigest": "857072acf0c63a3ae449f1c9739efe37aad866557d46da1f7fa782aceedd2496",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "Static bound class
"
+ }
+ },
+ {
+ "id": "rc87-870a4e96cb0bd891",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-import-errors.test.ts",
+ "line": 6,
+ "title": "BH-0022 plugin returns validation failures in the RPC response",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c14282997f8248cd60194e1d6c782e5f9640b35dffe227274888f905ea36d4d3"
+ },
+ {
+ "id": "rc87-074a7b6f0066243d",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-import-errors.test.ts",
+ "line": 19,
+ "title": "BH-0022 UI rejects the plugin error immediately and accepts a later successful retry",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "dcdc1ae20057b1c6ff170862b9dfbc9e16735187ae0ed50eedfd3c16a8b7a89a"
+ },
+ {
+ "id": "rc87-41b5311b20a7ce87",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-import-modes.test.ts",
+ "line": 52,
+ "title": "BH-0022 definition arrays preserve namespaces, mode values, forward aliases and booleans",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "77e37d102f3357300425b4123908fba54c2d8a097657cc9e43a09e9c6540e80b"
+ },
+ {
+ "id": "rc87-6bc7db84481fc2e6",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-import-modes.test.ts",
+ "line": 87,
+ "title": "BH-0022 legacy objects and object mode sections update existing variables",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ed6a067c767491bcd75b709e48bea3d00a42796a0c341e6cb03819f29fc5b431"
+ },
+ {
+ "id": "rc87-b222dd1d0cb720f5",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-import-modes.test.ts",
+ "line": 95,
+ "title": "BH-0022 rejects unsupported/ambiguous data before Figma mutation: {\"variables\":[{\"key\":\"a\",\"value\":\"$missing\"}]}",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "386bbd5833267260c3d902cec6cfc9c44ea0f330cc61d4d212125eb6d10038b6",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "{\"variables\":[{\"key\":\"a\",\"value\":\"$missing\"}]}"
+ }
+ },
+ {
+ "id": "rc87-98fb151c6692d890",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-import-modes.test.ts",
+ "line": 95,
+ "title": "BH-0022 rejects unsupported/ambiguous data before Figma mutation: {\"variables\":[{\"key\":\"a\",\"value\":\"var(--b)\"},{\"key\":\"b\",\"value\":\"var(--a)\"}]}",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "386bbd5833267260c3d902cec6cfc9c44ea0f330cc61d4d212125eb6d10038b6",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "{\"variables\":[{\"key\":\"a\",\"value\":\"var(--b)\"},{\"key\":\"b\",\"value\":\"var(--a)\"}]}"
+ }
+ },
+ {
+ "id": "rc87-d8acd34d0ab9b584",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-import-modes.test.ts",
+ "line": 95,
+ "title": "BH-0022 rejects unsupported/ambiguous data before Figma mutation: {\"variables\":[{\"key\":\"a\",\"value\":\"var(--missing)\"}]}",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "386bbd5833267260c3d902cec6cfc9c44ea0f330cc61d4d212125eb6d10038b6",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "{\"variables\":[{\"key\":\"a\",\"value\":\"var(--missing)\"}]}"
+ }
+ },
+ {
+ "id": "rc87-4248a82078c87f90",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-import-modes.test.ts",
+ "line": 95,
+ "title": "BH-0022 rejects unsupported/ambiguous data before Figma mutation: {\"variables\":[{\"key\":\"a\",\"value\":[\"red\",\"blue\"]}]}",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "386bbd5833267260c3d902cec6cfc9c44ea0f330cc61d4d212125eb6d10038b6",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "{\"variables\":[{\"key\":\"a\",\"value\":[\"red\",\"blue\"]}]}"
+ }
+ },
+ {
+ "id": "rc87-8b22a706ddd85ddd",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-import-modes.test.ts",
+ "line": 95,
+ "title": "BH-0022 rejects unsupported/ambiguous data before Figma mutation: {\"variables\":[{\"namespace\":\"a\",\"key\":\"b\",\"value\":\"1\"},{\"key\":\"a-b\",\"value\":\"2\"},{\"key\":\"alias\",\"value\":\"var(--a-b)\"}]}",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "386bbd5833267260c3d902cec6cfc9c44ea0f330cc61d4d212125eb6d10038b6",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "{\"variables\":[{\"namespace\":\"a\",\"key\":\"b\",\"value\":\"1\"},{\"key\":\"a-b\",\"value\":\"2\"},{\"key\":\"alias\",\"value\":\"var(--a-b)\"}]}"
+ }
+ },
+ {
+ "id": "rc87-2776dbf430036a8f",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-import-modes.test.ts",
+ "line": 109,
+ "title": "BH-0022 incompatible existing types preserve the variable and its values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "55365dea278593d78f2dad461d96be92be6376f52934f7181a49087a6af4e2ed"
+ },
+ {
+ "id": "rc87-cb92aad663e8d7e4",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-import-modes.test.ts",
+ "line": 119,
+ "title": "BH-0022 opposite alias directions in different modes are not a cycle",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e92eb3a2bd8ce35ced930bb73d889130f155c9f4faf471df2042b332dfacba37"
+ },
+ {
+ "id": "rc87-c814e461d61d3022",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-import-modes.test.ts",
+ "line": 128,
+ "title": "BH-0022 rejects same-mode cycles even when types are already known",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5b18d758d44f4dc41d219ccb44b0e33c35da37ca1c9588727a69fcc4e8d34b60"
+ },
+ {
+ "id": "rc87-17e07b0c9abe710c",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-roundtrip.test.ts",
+ "line": 6,
+ "title": "imports variable names with exportedDefinitions=false",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4ef7ad4c119480488c03e0b90bc09f98d244efede1ae7b8e69b6849c203cd9c7",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-22794f17187cec50",
+ "package": "figma",
+ "file": "packages/figma/tests/bug-hunt-roundtrip.test.ts",
+ "line": 6,
+ "title": "imports variable names with exportedDefinitions=true",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4ef7ad4c119480488c03e0b90bc09f98d244efede1ae7b8e69b6849c203cd9c7",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-a108f780a36f92b4",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-manifest-hmr.test.ts",
+ "line": 5,
+ "title": "`BH-0004 manifest updates retain existing stylesheet consumers (manifest imported: ${importedManifest})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a9abd44d5283692070162d1883e0ee4dd105d15d6143ba284cd896ed87c10802"
+ },
+ {
+ "id": "rc87-a108f780a36f92b4",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-manifest-hmr.test.ts",
+ "line": 5,
+ "title": "`BH-0004 manifest updates retain existing stylesheet consumers (manifest imported: ${importedManifest})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a9abd44d5283692070162d1883e0ee4dd105d15d6143ba284cd896ed87c10802"
+ },
+ {
+ "id": "rc87-d721a105592cce89",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-runtime-input-updates.test.ts",
+ "line": 7,
+ "title": "`runtime HMR retains latest inputs: ${order}, pending=${pending}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5259493e01eb413c6c503ff4dc690483676acb7202210f8457ef67e92750541b"
+ },
+ {
+ "id": "rc87-d721a105592cce89",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-runtime-input-updates.test.ts",
+ "line": 7,
+ "title": "`runtime HMR retains latest inputs: ${order}, pending=${pending}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5259493e01eb413c6c503ff4dc690483676acb7202210f8457ef67e92750541b"
+ },
+ {
+ "id": "rc87-d721a105592cce89",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-runtime-input-updates.test.ts",
+ "line": 7,
+ "title": "`runtime HMR retains latest inputs: ${order}, pending=${pending}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5259493e01eb413c6c503ff4dc690483676acb7202210f8457ef67e92750541b"
+ },
+ {
+ "id": "rc87-d721a105592cce89",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-runtime-input-updates.test.ts",
+ "line": 7,
+ "title": "`runtime HMR retains latest inputs: ${order}, pending=${pending}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5259493e01eb413c6c503ff4dc690483676acb7202210f8457ef67e92750541b"
+ },
+ {
+ "id": "rc87-d721a105592cce89",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-runtime-input-updates.test.ts",
+ "line": 7,
+ "title": "`runtime HMR retains latest inputs: ${order}, pending=${pending}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5259493e01eb413c6c503ff4dc690483676acb7202210f8457ef67e92750541b"
+ },
+ {
+ "id": "rc87-d721a105592cce89",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-runtime-input-updates.test.ts",
+ "line": 7,
+ "title": "`runtime HMR retains latest inputs: ${order}, pending=${pending}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5259493e01eb413c6c503ff4dc690483676acb7202210f8457ef67e92750541b"
+ },
+ {
+ "id": "rc87-2bed21dc2ff9c20a",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 37,
+ "title": "`pending startup followed by manifest HMR publishes latest manifest ${updates.at(-1)}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "038f16d9d8fd84c7111ac6c35077b2c879fb1959485d57861243ed63c06615cf"
+ },
+ {
+ "id": "rc87-2bed21dc2ff9c20a",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 37,
+ "title": "`pending startup followed by manifest HMR publishes latest manifest ${updates.at(-1)}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "038f16d9d8fd84c7111ac6c35077b2c879fb1959485d57861243ed63c06615cf"
+ },
+ {
+ "id": "rc87-b4741ad9e3305552",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 51,
+ "title": "disposing a pending bootstrap never observes its late runtime",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "54cde45005cb7668cf0eeb6835f26f59241f9fe21b0f9ecdd04a7edf45341bcc"
+ },
+ {
+ "id": "rc87-2830af2f3a40348e",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 60,
+ "title": "bootstrap module replacement waits for the disposed module pending start",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "669e2fedf50aef0fc13c4af4bf353ec7096ce6ecd08bec061ea6bc4c8b144198"
+ },
+ {
+ "id": "rc87-dcade4c7ba252b98",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 74,
+ "title": "a failed startup does not poison a later manifest update",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "59c7fb907fbd35ff6b3ab29239ce52a61216dc09435ea80bbd049b2cd4adac17"
+ },
+ {
+ "id": "rc87-56ccfaa74cdbe65e",
+ "package": "internal",
+ "file": "packages/internal/tests/bug-hunt.test.ts",
+ "line": 5,
+ "title": "audit control: failed manifest loads retain watch dependencies and recover",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7d0017d1c69e079763da9011747cb0f75d338ed360e902fa5d47085959d2ec8d"
+ },
+ {
+ "id": "rc87-c3255a639bad7508",
+ "package": "internal",
+ "file": "packages/internal/tests/module.test.ts",
+ "line": 93,
+ "title": "prefers JSON import attributes without calling fetch",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1186e1726c69d143c01523a6a1667897974782d0093e4cb5d02543c348628130"
+ },
+ {
+ "id": "rc87-34bf97d92ae3004c",
+ "package": "internal",
+ "file": "packages/internal/tests/module.test.ts",
+ "line": 105,
+ "title": "falls back to fetch only when import attributes fail to compile",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "82501ee219ea1052023e6765a0c36ec072458af5dc2b77d1804d07cdfb8dc8f0"
+ },
+ {
+ "id": "rc87-28031ac807ec5325",
+ "package": "internal",
+ "file": "packages/internal/tests/module.test.ts",
+ "line": 127,
+ "title": "does not fetch when JSON import evaluation rejects",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "117ef30f49015f6359b576d3d0ba59bbe23179fd9eacb73845c95ced3d6fabd8"
+ },
+ {
+ "id": "rc87-3b0f9e4b3218c695",
+ "package": "internal",
+ "file": "packages/internal/tests/module.test.ts",
+ "line": 139,
+ "title": "does not fetch for non-syntax loader construction errors",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c4d38178c88ee40a720586d80120da002d5e967fdf0760c524da2746af7f77d7"
+ },
+ {
+ "id": "rc87-46f3c89f5237b1b9",
+ "package": "internal",
+ "file": "packages/internal/tests/module.test.ts",
+ "line": 153,
+ "title": "rejects unsuccessful fallback responses",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9afe02024e6e8595625453c6ab9be4bad9c1b5fed8246137612b5f076afaba68"
+ },
+ {
+ "id": "rc87-afd742992acef652",
+ "package": "internal",
+ "file": "packages/internal/tests/workspace-directories.test.ts",
+ "line": 10,
+ "title": "ignores generated Master CSS directories when discovering workspaces",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3db0b040cb15591fc78018bff83d0a7a7ebee1370c855078a860632909dd0646"
+ },
+ {
+ "id": "rc87-1dd729883ed01860",
+ "package": "language-server",
+ "file": "packages/language-server/tests/bug-hunt-manifest-diagnostic-contract.test.ts",
+ "line": 7,
+ "title": "preserves the real compiler diagnostic when manifest loading fails",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "79024f497ebe30c591f45efd593da1768c32c01279d802acf0ec6dfb653d34dd"
+ },
+ {
+ "id": "rc87-89607da4f0a2d19d",
+ "package": "language-server",
+ "file": "packages/language-server/tests/bug-hunt-manifest-diagnostic-contract.test.ts",
+ "line": 31,
+ "title": "`keeps the generic loading code for unstructured ${error.name}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b54f4fe8089568aada612f969bdafd7361b3c874c6970df29473b609bc9ef70c"
+ },
+ {
+ "id": "rc87-89607da4f0a2d19d",
+ "package": "language-server",
+ "file": "packages/language-server/tests/bug-hunt-manifest-diagnostic-contract.test.ts",
+ "line": 31,
+ "title": "`keeps the generic loading code for unstructured ${error.name}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b54f4fe8089568aada612f969bdafd7361b3c874c6970df29473b609bc9ef70c"
+ },
+ {
+ "id": "rc87-bcb0e64af49e5474",
+ "package": "language-server",
+ "file": "packages/language-server/tests/diagnostics.test.ts",
+ "line": 45,
+ "title": "locates SFC diagnostics after matching attribute text",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "375529f697ebb6c23c1014512b9d3ea5955bb83ca99cf923a6c0d43fa2510a7f"
+ },
+ {
+ "id": "rc87-f48cb89be50102f1",
+ "package": "language-server",
+ "file": "packages/language-server/tests/diagnostics.test.ts",
+ "line": 119,
+ "title": "does not report manifest errors when discovery found no entries",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8036951cb96f495a5b888f1380696627be66ba48d3305da17438d5a03ea85fa1"
+ },
+ {
+ "id": "rc87-b61e13bcdf235b9e",
+ "package": "language-server",
+ "file": "packages/language-server/tests/native-sizing.test.ts",
+ "line": 9,
+ "title": "workspace reload updates native class registrations used by inspection",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3027ab08c30647ff00aabd0408d37c3a24d298a8c59950a8db3d92c6ac0954b2"
+ },
+ {
+ "id": "rc87-fd9c9729abac6e7e",
+ "package": "language-server",
+ "file": "packages/language-server/tests/runtime.test.ts",
+ "line": 23,
+ "title": "uses a resolved workspace Master CSS runtime when available",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e7cbeacb37721068389eb827ae81b1e11b9b227635e41cfa8a53039ca89313f0"
+ },
+ {
+ "id": "rc87-cdef278edb6fd717",
+ "package": "language-server",
+ "file": "packages/language-server/tests/runtime.test.ts",
+ "line": 77,
+ "title": "falls back to the bundled runtime when workspace packages are missing",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "060452773b7b8cabb9e95d06b7164929ab4e97b8dd95ed4f98374e5a23fc29ee"
+ },
+ {
+ "id": "rc87-a98aaec72e8ecfcb",
+ "package": "language-server",
+ "file": "packages/language-server/tests/test.ts",
+ "line": 15,
+ "title": "propagates workspace initialization failures",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "be4497e83a491a612db5999bff5fc84ac4979ed97f8d4ee41a6901c77fde85c8"
+ },
+ {
+ "id": "rc87-11deae8ba68864fc",
+ "package": "language-server",
+ "file": "packages/language-server/tests/test.ts",
+ "line": 51,
+ "title": "coordinates concurrent document opens with closes during initialization",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cb4930745d641fd0809cdf5c41e96e377b5ea2970953a82c41bf996421e3e6ad"
+ },
+ {
+ "id": "rc87-8387edc6c1f91e4a",
+ "package": "language-service",
+ "file": "packages/language-service/tests/bug-hunt.test.ts",
+ "line": 8,
+ "title": "audit control: updated documents replace class and color ranges",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "77c4620b65e0b4c844b4ddee45c937b92a533db7cda2c8eae8c5cd05aedf3211"
+ },
+ {
+ "id": "rc87-a073fab1cbdf1519",
+ "package": "language-service",
+ "file": "packages/language-service/tests/document-analysis.test.ts",
+ "line": 8,
+ "title": "document features share analysis until the document or effective settings change",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6a39d5578ca23b858acb6e26ba7a86157115760078505b275c2e691cbe17ff86"
+ },
+ {
+ "id": "rc87-5c8361cf59e26225",
+ "package": "language-service",
+ "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
+ "line": 44,
+ "title": "hex",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "63477ecbccf6e68bb84131eaf81a1e89648150c98a81c52587bdd42c34e6f287"
+ },
+ {
+ "id": "rc87-1351e35d50dd71ca",
+ "package": "language-service",
+ "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
+ "line": 48,
+ "title": "variable",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "939cb736840b8423556a53fc2bae56ccd471a6c17c49d7ccf6103d7fa17490a9"
+ },
+ {
+ "id": "rc87-25685963549be190",
+ "package": "language-service",
+ "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
+ "line": 52,
+ "title": "rgb",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b8a059f5ce86db30c7d25361c22a171006e30c934aecb81b7a2fcbf00751193"
+ },
+ {
+ "id": "rc87-8dcb44d1b93c30fe",
+ "package": "language-service",
+ "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
+ "line": 56,
+ "title": "rgba",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "41bf1ab1c9a4c4c756321eae35a138ad7a706621aef041fd1da8ad248b7e857a"
+ },
+ {
+ "id": "rc87-b817fee1ca2f2e42",
+ "package": "language-service",
+ "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
+ "line": 60,
+ "title": "hsl",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2dbe5c44ec4e6a50ee9310cfbb7e802e78e390c977b31c17d33d6d945087c8b9"
+ },
+ {
+ "id": "rc87-86b83e69599ddc3f",
+ "package": "language-service",
+ "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
+ "line": 64,
+ "title": "hsla",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6ed79303b4eec1a5f4cf917706f5180a23424db4fea2c3204cc057b3e98203a9"
+ },
+ {
+ "id": "rc87-ef8d41ae1a5e6bbe",
+ "package": "language-service",
+ "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
+ "line": 68,
+ "title": "hwb",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "77f9254c67ab320031810775e12371e843196777c95da361e81e346d7b178406"
+ },
+ {
+ "id": "rc87-3fdf0c577e00aaab",
+ "package": "language-service",
+ "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
+ "line": 72,
+ "title": "lab",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5ab5adf90e3e7c3c074609452c135bbd53d97d82030498660aa9ba7844235db4"
+ },
+ {
+ "id": "rc87-a41144119d54c466",
+ "package": "language-service",
+ "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
+ "line": 76,
+ "title": "lch",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "07c0f1c81c213a4ea1176cd7803225ae4317fb60d7f8efa0ddd5c2f472599905"
+ },
+ {
+ "id": "rc87-7fd58d32032c969b",
+ "package": "language-service",
+ "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
+ "line": 80,
+ "title": "oklab",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9309b3c1ff6654a815288764f255d0b4ac63dad4cb88b7f1ef9410f1aeb44359"
+ },
+ {
+ "id": "rc87-1df2a7632a32c6f8",
+ "package": "language-service",
+ "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
+ "line": 84,
+ "title": "oklch",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5bea9610d9674de84e8debc650d32c2bfeccbafd294cbd58c7b0380d96c3ddda"
+ },
+ {
+ "id": "rc87-b20762639b83e7be",
+ "package": "language-service",
+ "file": "packages/language-service/tests/edit-syntax-colors.test.ts",
+ "line": 88,
+ "title": "hex to hex8",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f1351a3cb637a95dadbaf6588dce971ac829c6a45a2d484a482bf7c974ca20f0"
+ },
+ {
+ "id": "rc87-ed9293bc8a2f2f2c",
+ "package": "language-service",
+ "file": "packages/language-service/tests/final-semantics.test.ts",
+ "line": 9,
+ "title": "editor inspection shares the CLI and AI workflow conclusions and keeps CSS in diagnostic hovers",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c9a5201cc897a8a4c1921bbbd69ba3cf359633ad01f2a6ff72d0591d15ecb842"
+ },
+ {
+ "id": "rc87-70829b2f2c141b7d",
+ "package": "language-service",
+ "file": "packages/language-service/tests/format-directives.test.ts",
+ "line": 22,
+ "title": "formats CSS @safelist important markers",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cb007dab09c489beacc475d4c4a8cce5efd26566a4074f7775be5816fb26f863"
+ },
+ {
+ "id": "rc87-9dbb94918bc4adc5",
+ "package": "language-service",
+ "file": "packages/language-service/tests/format-directives.test.ts",
+ "line": 27,
+ "title": "formats SCSS and LESS directive class lists",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "050cc6b2e2009975c195b313e094a3dc6cb5e5be2c759d88b74e389a5c10c1bc"
+ },
+ {
+ "id": "rc87-90ca5bc184241810",
+ "package": "language-service",
+ "file": "packages/language-service/tests/format-directives.test.ts",
+ "line": 32,
+ "title": "formats CSS-family SFC style blocks only",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c21f36d570f269d68c9e3b503f7dd565fdc0cdfacb79f4af7823b04191c3388e"
+ },
+ {
+ "id": "rc87-8a90304873fc3eed",
+ "package": "language-service",
+ "file": "packages/language-service/tests/format-directives.test.ts",
+ "line": 59,
+ "title": "locates SFC style content after matching attribute text",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8ebb2909bb2b30ff5d32c5a2fe09d855378364fb940e7bb1ce8df8e52aaa7f18"
+ },
+ {
+ "id": "rc87-18ace4bae2758bc8",
+ "package": "language-service",
+ "file": "packages/language-service/tests/format-directives.test.ts",
+ "line": 66,
+ "title": "formats safelist quoted class lists",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "321b2d39399443a2945fe81e0ee1ff818b7400133d3d1398e146771625ef298e"
+ },
+ {
+ "id": "rc87-b58a75284244e6bd",
+ "package": "language-service",
+ "file": "packages/language-service/tests/format-directives.test.ts",
+ "line": 71,
+ "title": "returns no edits when directive formatting is disabled",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5b94f0734c1f429d6a84732143b408c1157d64618ab39f0d648f6e0991a7c4d8"
+ },
+ {
+ "id": "rc87-0e3f608860b188eb",
+ "package": "language-service",
+ "file": "packages/language-service/tests/format-directives.test.ts",
+ "line": 76,
+ "title": "respects range formatting",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2b677e346282b8293fabb0da15232d6e078222fa610265928cd598a121d6f4c8"
+ },
+ {
+ "id": "rc87-4e00ddecaff40266",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/assignments.test.ts",
+ "line": 4,
+ "title": "clsx",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4883c76ce3a91792220c6443d04f927d9f04dd44d9da0771e04b918bd7a8ac10"
+ },
+ {
+ "id": "rc87-ac9e5f01adc580d7",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/assignments.test.ts",
+ "line": 10,
+ "title": "styled",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a74a8b45b2e5280f8aae6380947262f7f724c5079c6c32b41d0a88d90cd0dcc0"
+ },
+ {
+ "id": "rc87-548b7db2949d68c9",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/assignments.test.ts",
+ "line": 16,
+ "title": "escaped single quotes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "860efa29263c4eafa69d287622184e76036a3add4435ef9b4cb1bf9f4e1a0c63"
+ },
+ {
+ "id": "rc87-d651874f65b76aeb",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/astro.test.ts",
+ "line": 5,
+ "title": "class in ternary operator",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "608d5e744b2fbed8954f648e92b57f22d6ad3c61f147dd64efc63ec5554923f2"
+ },
+ {
+ "id": "rc87-0ae369e0e22fad63",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/astro.test.ts",
+ "line": 11,
+ "title": "mixed class assignment formats",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "21d98f08144124c32f093988707e1362094cee45d666ab1c58b96cde548a833f"
+ },
+ {
+ "id": "rc87-5ee5e860ddbceefa",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/react.test.ts",
+ "line": 6,
+ "title": "empty string with single quote",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1e50a6555085317c8d0dbf996afb79761f2f8bfa2a6412a1370a725871bfc6bf"
+ },
+ {
+ "id": "rc87-2303a483ad98fab9",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/react.test.ts",
+ "line": 12,
+ "title": "empty string with double quote",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "347418737ccd907598ac887b2abb84cc087662e27435093cb37db46a709ed5ae"
+ },
+ {
+ "id": "rc87-7bb9256533d8f04d",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/react.test.ts",
+ "line": 18,
+ "title": "spaced jsx attribute assignment",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "854eb4006a25acc1dd1ff5139756084cf7fd3f43e29de48b666f37a9ddc25ff9"
+ },
+ {
+ "id": "rc87-873ff344e7f0fe38",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/react.test.ts",
+ "line": 24,
+ "title": "empty binding",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "32ff3a2b200739093858d0bd74a2bf53aa9fa88b71cb39ed469e604b329cddcc"
+ },
+ {
+ "id": "rc87-eff14c30b758e0ca",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/react.test.ts",
+ "line": 31,
+ "title": "empty string binding with double quote",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f968971ba31f3f45ef2c35a71af3d0db4e3044b24055508f611dadbcd1355101"
+ },
+ {
+ "id": "rc87-fcb06b3020cbf213",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/react.test.ts",
+ "line": 37,
+ "title": "empty clsx",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e09df084eab54c4860914cab969da361c4c2eae0aa6abd761403e9ee31e05e10"
+ },
+ {
+ "id": "rc87-bec8eb17001594ce",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/react.test.ts",
+ "line": 44,
+ "title": "two classes in clsx fn",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9c5b060361f2df5ec2771a910d741d1c3af3b483d2e131cfbcd36adf30bc92b0"
+ },
+ {
+ "id": "rc87-f0a0bb64be303c30",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/react.test.ts",
+ "line": 50,
+ "title": "quote in clsx fn",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "317573fe944888ee1a1960248adefb712c42ab06b34edcee7abc0e5497087591"
+ },
+ {
+ "id": "rc87-9f6878b96b346044",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/react.test.ts",
+ "line": 56,
+ "title": "template literal and newlines",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c0bf4b0967d5145652d781d5d52e35983e85717c725d84a431c199b07eefe47d"
+ },
+ {
+ "id": "rc87-230c08cef98620be",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/react.test.ts",
+ "line": 62,
+ "title": "template literal expressions use quasi ranges",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cfaa775f7b16c01f91608ec6885f6c75c8814b5cf71a9ea479ae5aefef23cabd"
+ },
+ {
+ "id": "rc87-ee27a4845f2b275c",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/react.test.ts",
+ "line": 73,
+ "title": "parse failure falls back to regex positions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0b0122e0bbb58b7941bd6e1c0387582449b699e928f15e44765c578b6b1f3391"
+ },
+ {
+ "id": "rc87-1310d5e947961c12",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/react.test.ts",
+ "line": 81,
+ "title": "regex fallback ignores class attributes inside JS comments",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ab511df57f743ba4c0ceca4f8c0ffe8aeac7a275c79ad9f1ef40f2f5033b5294"
+ },
+ {
+ "id": "rc87-66e7496975afe936",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/strings.test.ts",
+ "line": 5,
+ "title": "configured class declaration with double quotes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "64cac7b5073c6d28ceee33ea9acc7e07fda6e8d08f889f0e602b602ac91cad00"
+ },
+ {
+ "id": "rc87-eb7047a6b4027077",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/strings.test.ts",
+ "line": 11,
+ "title": "configured class declaration with single quotes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ecabd619f046f6e9297fa63c5e8ea1e1765e997a8e323d0293f95930cdc8e869"
+ },
+ {
+ "id": "rc87-cf541289d590529b",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/strings.test.ts",
+ "line": 17,
+ "title": "configured class declaration with literals",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a1a05b88fd2766abe5a85d5b8c03f705076724bb9f1a5947ee2689743d5e14ee"
+ },
+ {
+ "id": "rc87-73b074f4a5461373",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/strings.test.ts",
+ "line": 25,
+ "title": "configured class declaration property with double quotes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f8201002948138d7db94a2158be02289782ebce14be632e043f9426da127ac89"
+ },
+ {
+ "id": "rc87-84b6f9c93fa6929a",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/styled.test.ts",
+ "line": 5,
+ "title": "styled template literal",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "765a461ecad52d3bcb542e2749968012442c25bd6e5d5dbac5ea383945d9c38d"
+ },
+ {
+ "id": "rc87-630dbdbaf7c38227",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/styled.test.ts",
+ "line": 11,
+ "title": "styled template literal and new lines",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6484a8dc242633f61205f0ca1e747d8803cc718265290aa636eeb6f7ea7ece5b"
+ },
+ {
+ "id": "rc87-2d8df08b8ca97ddb",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/styled.test.ts",
+ "line": 19,
+ "title": "styled invoked",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "66ed59fc8db69c74c9b9fb333b7e60ac93e6bba3cb89d4f146549624db7c4df1"
+ },
+ {
+ "id": "rc87-6d6efe76f1a32212",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/svelte.test.ts",
+ "line": 4,
+ "title": "class in ternary operator",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3e0ea73aaac4127a3e393dce6dc1393a06d723d8c638dba8c669a1f9bff93549"
+ },
+ {
+ "id": "rc87-9a7717460f9c181d",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 26,
+ "title": "empty class with single quotes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cfc701bbb37b5f7042e6a7d8b291f10f3e5e633bd7b5354ac8c5ab468f1097ee"
+ },
+ {
+ "id": "rc87-061192d8223cb847",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 32,
+ "title": "empty class with double quotes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "83c8ae78ad0c5448a7e7d65b3a9d5f3734dc6a4cae40fee9dc7c25028a23c325"
+ },
+ {
+ "id": "rc87-1dee97a2bcd457ab",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 38,
+ "title": "one class",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "05e223d143eff06b9d932622493a637a6f48a80f5ef1428da848cf6277b01204"
+ },
+ {
+ "id": "rc87-513f18187520d4ff",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 44,
+ "title": "two classes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "62b390824f25381aaf54362aac332c7f7f9c740bbe2cef1726a6af72ab012967"
+ },
+ {
+ "id": "rc87-9259c47e692948f0",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 50,
+ "title": "full-width spaces are part of the class token",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "972e4cdc6608e49a45f47e72ffe74e6c4ec66239dc801e9b2704fd51b482babf"
+ },
+ {
+ "id": "rc87-2fbabc433dfd0402",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 56,
+ "title": "valid classes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f61327d19187cfbbb653f65864d1d2e81103fd1d1cb93f3a71fb4ea5d1f560d2"
+ },
+ {
+ "id": "rc87-8cc074908a8ea696",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 62,
+ "title": "class in CSS @compose",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "374f812ebd3bf7a7c4454c1d88f1fa48848884f954e23951e6799e79e656db70"
+ },
+ {
+ "id": "rc87-fb1520c947353b6e",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 68,
+ "title": "class in Vue style @compose",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b5513004f4c18a288ad44028c5cfbf7408bad64397c20af73037658f0aa6cdb4"
+ },
+ {
+ "id": "rc87-d177ab2a1a81605c",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 74,
+ "title": "ignores quoted CSS @compose classes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "724993c853e92ea6be1d9e2ac302e29e2413e77f3b9404186ae91e5b84d66622"
+ },
+ {
+ "id": "rc87-d1f8d1aef8c3f395",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 81,
+ "title": "quote in class",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "094e059ddf0ff10728085c50e30bf4086e30d9a1e1890076a25112ef44fe6eaa"
+ },
+ {
+ "id": "rc87-eb444fdf76aaa863",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 87,
+ "title": "group syntax",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c69d612a26a7d074e92d756062a343f0e8144f42176b89994eeed1b2e5527292"
+ },
+ {
+ "id": "rc87-a8114aeb398ca2a2",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 93,
+ "title": "ignores class attributes inside HTML comments",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "45a4d0d4f1410e64855987621fbf603d081cc072e6a40511c60b4e2f6c84b4c2"
+ },
+ {
+ "id": "rc87-948ab1cf0ee72463",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/test.ts",
+ "line": 103,
+ "title": "nested strings and literals",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "77b0fd7185ea336ef5a26c078a9613ae26e1d39be49ccc65c239c232e1e98718"
+ },
+ {
+ "id": "rc87-ed2df73b97d5a5cd",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/unescape.test.ts",
+ "line": 4,
+ "title": "single quote",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bf48b71d759c114450530285744bba83afd4fba510075d0596e4b276ba5042c4"
+ },
+ {
+ "id": "rc87-af57d2105f9df063",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/unescape.test.ts",
+ "line": 10,
+ "title": "escaped backticks",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e2f616fdfc1a1b5aded88069984bd23f9916601cd8a9884d434b12b21d95b841"
+ },
+ {
+ "id": "rc87-072c4bf5b8171e66",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/vue.test.ts",
+ "line": 5,
+ "title": "class in class array",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b45056eaa490164c649aa81fdd53c2931826d1da97ff96a8abf77f4fcbca51ae"
+ },
+ {
+ "id": "rc87-5d4c9fcd06d50646",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/vue.test.ts",
+ "line": 11,
+ "title": "class in object syntax",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c9e7bb07c277b871e83bef7f8dee7db52b064f45d2da0f4f14ab2a23d8acb63b"
+ },
+ {
+ "id": "rc87-ced2120c695078d5",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/vue.test.ts",
+ "line": 17,
+ "title": "class in ternary operator",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "383d123583052f62b845ea4d69d3d460e539ffb2bede2cee279f2a45eecafa84"
+ },
+ {
+ "id": "rc87-57068fdc046aae51",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/vue.test.ts",
+ "line": 23,
+ "title": "class in v-bind",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "14a2feb7f4e2fc2f3e0e1a65de54215dab715054f082f28a25e883013c51853e"
+ },
+ {
+ "id": "rc87-67cbbbe94506619c",
+ "package": "language-service",
+ "file": "packages/language-service/tests/get-class-position/vue.test.ts",
+ "line": 29,
+ "title": "multiple :class assignments",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "28761ff998a5e4ef642c7930a68147d8cef15757feff2f9f09cb5f8226b3715d"
+ },
+ {
+ "id": "rc87-26d3dd2b5de9afb3",
+ "package": "language-service",
+ "file": "packages/language-service/tests/inspect-syntax.test.ts",
+ "line": 17,
+ "title": "text-center",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ae69933d9323a8c064312157e08a7226ef73953e7a5a5dc916fba32435000590"
+ },
+ {
+ "id": "rc87-eeeb0a34409eabdd",
+ "package": "language-service",
+ "file": "packages/language-service/tests/inspect-syntax.test.ts",
+ "line": 34,
+ "title": "hidden",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "551ad7377186160251ffd793def05c34c8bded92f1bdeb6ac0d9895f492bd4af"
+ },
+ {
+ "id": "rc87-2b92b6714b57c9b0",
+ "package": "language-service",
+ "file": "packages/language-service/tests/inspect-syntax.test.ts",
+ "line": 51,
+ "title": "vendor-prefixed native declarations use unprefixed MDN hover syntax",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d40ede586c413feead570b4a672584a9eb3f61052bbd588a3bb4101a6e173ac0"
+ },
+ {
+ "id": "rc87-747d664e812fd1fe",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-browser.test.ts",
+ "line": 46,
+ "title": "collects browser semantic tokens for HTML class attributes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9a4522f960667dea72ed4c00708d18278e3146267d05a015f85b81ef6a313e21"
+ },
+ {
+ "id": "rc87-5e294afb68e500f9",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-browser.test.ts",
+ "line": 64,
+ "title": "encodes browser role-derived semantic token modifiers",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fd6bd1a3c283054e0ab487c68fe0712c16ed62b757ddbf7fc0cee22184a92403"
+ },
+ {
+ "id": "rc87-a1f11a440101fcd3",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-browser.test.ts",
+ "line": 83,
+ "title": "collects browser semantic tokens only for CSS directive class-list spans",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8a98c618dc66eef5f5deff5efe72afe6e2e28194ae1ac6b335659d26c2e0afc4"
+ },
+ {
+ "id": "rc87-96e5da5533a2f2f2",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-browser.test.ts",
+ "line": 107,
+ "title": "does not collect browser semantic tokens for managed syntax without class-list spans",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "360c25403c9d0b8f50718ebd4b3ba0abf689fd47c596f3d7cab79efff35b531b"
+ },
+ {
+ "id": "rc87-f924916010f30181",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-browser.test.ts",
+ "line": 130,
+ "title": "encodes browser semantic tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2e6e255c2a4a630f1ddf7e5b04045935da63f6552cb00cfe7df91a906f9be8d5"
+ },
+ {
+ "id": "rc87-58c0f707895ac675",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 109,
+ "title": "does not restore the rc.87 Shiki default array export",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d1408ad681113fd30002667d2179c905b0a696f66a6fa30873968549162aef"
+ },
+ {
+ "id": "rc87-54d1064138cdfa5d",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 243,
+ "title": "does not attach semantic metadata to guide theme CSS directive syntax",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "89728b8e1a7a930f6fe80cbf8f59fc966e7434577cf7c62b418313c91929ef8f"
+ },
+ {
+ "id": "rc87-8d392a681c27d0c2",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 260,
+ "title": "does not resolve guide theme CSS directive syntax through semantic scope styles",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "12042c691c7703f79e9c056b63e239446d527ec9215f8ea7e316a94ba0337219"
+ },
+ {
+ "id": "rc87-e2c56dc4d369487d",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 278,
+ "title": "does not create Master Shiki decorations for native-only CSS",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "57dfd17109ec873a93d8095ac457ce735f256e2147f657012e9fe30c12c9e4c2"
+ },
+ {
+ "id": "rc87-5a8efc063385b50d",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 293,
+ "title": "normalizes Shiki language ids separately from class-list languages",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c14a718d5e8b344083c31b9aef627175386a2cfb3bcc61bc788f9357aceac03a"
+ },
+ {
+ "id": "rc87-6e434d9c797e0734",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 305,
+ "title": "creates Shiki decorations from Master CSS semantic tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3db1b85f0eaa0bb3ff8672b2d0494d954d944f3285b4057dae84a0aec9b35460"
+ },
+ {
+ "id": "rc87-d3e9f43a5067d475",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 359,
+ "title": "creates Shiki decorations for CSS directive class-list spans",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "18ca5a9cff56d761acb43883f730888fe83d399101306c910df4770d33fbca1b"
+ },
+ {
+ "id": "rc87-2abd2947ac845e54",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 438,
+ "title": "creates Shiki decorations for raw Master CSS class lists",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6df3d5ffaa6542cd8f7b0b22a3962ec356537714066e23d11c3e4a3a2a3c9908"
+ },
+ {
+ "id": "rc87-62f117700b2c33ab",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 461,
+ "title": "skips semantic token decorations inside host comments",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6eee4673eb1dfbfbb5429575816cd15779ec61d6b1c8983148ca61e634f94a36"
+ },
+ {
+ "id": "rc87-efe4aaa7bc884241",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 472,
+ "title": "applies semantic token styles by type and modifier",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "25b0bb634553e33d76c5336ecd4f0ef0080a3f9ad13a9fd1f0478e58dbf833d9"
+ },
+ {
+ "id": "rc87-ecd2faed97890caf",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 505,
+ "title": "applies semantic decorations in the Shiki tokens hook",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "70512485e9a74b393a4fa0a83816bd9fbcb256dff987d559503a507f8de5efcf"
+ },
+ {
+ "id": "rc87-6eb87719e89fec81",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 547,
+ "title": "uses semantic token scope styles for selector semantic tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d59beb2ed6a54c71706ba706327cae66fc7da0d151d73931c37d14300df09544"
+ },
+ {
+ "id": "rc87-99b555d4fc57840e",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 595,
+ "title": "uses semantic token scope styles for documentation Master CSS tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "dbd90dff6f48b274b163a3b0e2f8c14cf9a79585226091342930a342dc8dba32"
+ },
+ {
+ "id": "rc87-5e4c77dcbbfd1c7c",
+ "package": "language-service",
+ "file": "packages/language-service/tests/rc87-shiki.test.ts",
+ "line": 687,
+ "title": "uses semantic token scope styles for CSS directive class-list tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b583f7a42a0e2fad7cc7eebc9e782e97b4b2978cd813d4886cf813fe137c4f7"
+ },
+ {
+ "id": "rc87-03d6b4925067def9",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 51,
+ "title": "does not render semantic tokens for native CSS-only documents",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a20fd334358be41dae15f0c1da911afc9f890d53579b0f7d46f6ec39f956d96a"
+ },
+ {
+ "id": "rc87-00f03cbaa1e53525",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 158,
+ "title": "renders CSS document semantic tokens only inside directive class-list ranges",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f88b90d74c9dcdb5ce99e8ea04e638fcc757687b0eceb2b62b4a4dc89cda54ba"
+ },
+ {
+ "id": "rc87-3e49f57d2ad93a4d",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 255,
+ "title": "renders CSS directives in SCSS-like sources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5f5c7a335303658a880512187990830e457b54bcbd08aeb5ca7adbfcf8d2ff13"
+ },
+ {
+ "id": "rc87-caaecc35b3e34863",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 264,
+ "title": "renders detailed CSS directive semantic tokens only for class-list syntax",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eb6c9c144672bb591fe78f632274f78ee506bbe2f8bdb49b5388057186ba8fdf"
+ },
+ {
+ "id": "rc87-de5eec8d004bdf05",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 306,
+ "title": "renders CSS directives in LESS-like sources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "11378b8a3fad15c199d352b949eaac541c01ae3892de8ccfac4dedd47e177a1f"
+ },
+ {
+ "id": "rc87-a1ef27edde39e950",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 328,
+ "title": "does not synthesize a closing directive brace for incomplete CSS blocks",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5a37ff4c935081eed86e65cf0d2e67b24d123c3ad3511b705b48215e48f2c612"
+ },
+ {
+ "id": "rc87-a34969c98160685d",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 334,
+ "title": "shares class position detection with semantic token spans",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b4702223bb5de59eca8158361b1b321d60f59407485285a9e54579d9b5bf44cd"
+ },
+ {
+ "id": "rc87-7aeeb247e8e07626",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 344,
+ "title": "renders active semantic tokens for the class context at a position",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "07781e2deca656f4f74f668c315c92bb2feb325b867d568d77faf4297a3f07b4"
+ },
+ {
+ "id": "rc87-3788b6ce9fd6ce79",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 356,
+ "title": "renders active semantic tokens for a class context when the cursor is on whitespace",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ba525d3631d82d3da32aee32434b7826df14abea668e66c3d73847f4a8a2b767"
+ },
+ {
+ "id": "rc87-fdecad4c007dbe24",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 369,
+ "title": "renders active semantic tokens only for the current class string context",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c08b97488d5eb2ed482e9b3a4c569fa89e94921ea28bad59578d02d692127a57"
+ },
+ {
+ "id": "rc87-00f9c5a1d106f9fd",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 381,
+ "title": "skips full embedded semantic tokens in active mode",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a5cfe72a1c5f400098989118d88260b2ead67df98416c792873be511828f98d0"
+ },
+ {
+ "id": "rc87-6b50c904c612eec7",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 389,
+ "title": "does not render active semantic tokens for CSS directive syntax at a position",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6c447a587b8d27b97f8b63766256667413d24526ebd74ffdbf434134b51058a0"
+ },
+ {
+ "id": "rc87-9d75297ee4aa126f",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 399,
+ "title": "renders active semantic tokens for CSS directive class-list spans",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "220940e436219b76c4da554fdf20dceb986659a291c2186ef78f7e03b7f2f32f"
+ },
+ {
+ "id": "rc87-20d3c1981800c207",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 414,
+ "title": "does not render active semantic tokens for custom variant blocks",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "47cd93e196238af402c66ff32a5347b3ef1e0faf69ef9202c40f16ffd8f6e9ad"
+ },
+ {
+ "id": "rc87-c2b0f0a81fac4d9a",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 435,
+ "title": "skips embedded semantic tokens when syntax highlighting is off",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "33ad25567325671062768eaf254fc8e6dd61616888bfb162d774248aa7296c4c"
+ },
+ {
+ "id": "rc87-5ec8a05b46fe4755",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-css-semantic-tokens.test.ts",
+ "line": 444,
+ "title": "renders CSS directive class-list semantic tokens when embedded highlighting is off",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "072fb8cdf8bce55fb4ca821d621512e445bafc0264725ba7376cd0788b21229c"
+ },
+ {
+ "id": "rc87-c9b01dcc99e9004b",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 51,
+ "title": "renders semantic tokens for class attributes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a83aeb47220e81001d040a060a33f438d65455320e135bac8edb0731e183ef68"
+ },
+ {
+ "id": "rc87-d022dc1dac8072de",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 94,
+ "title": "renders semantic tokens for CSS-like values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6e32674ac22e47b4938f2f8745dfdf0ed362254272e88d4c42516164b12ee108"
+ },
+ {
+ "id": "rc87-631f3fb89eb4c73c",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 137,
+ "title": "renders semantic tokens for vendor-prefixed native declarations",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1aa16b88c41972ee85000e400fd125b988087384b6059387799431ded7437e72"
+ },
+ {
+ "id": "rc87-ffb5a2fcaad0b089",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 150,
+ "title": "renders semantic tokens for container queries and slash-separated string values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e65c003e91f5e6a783b8fdc5667206e72110092f29bf3a2bff889ccf285a0753"
+ },
+ {
+ "id": "rc87-5d1c3d730d7d0abb",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 191,
+ "title": "renders semantic tokens for internal styles dogfood directives",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b6fa2e6d0ea1cdcfd12533f4d70139f21de299504a425ec1c042a99468a3fba0"
+ },
+ {
+ "id": "rc87-b1ab6103f55858ea",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 211,
+ "title": "renders semantic tokens for grouped declarations, strings, units, and important marks",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8a5c97ff920b060e2d59019a253392f1148bba951ae4617354f31a7a348eacb0"
+ },
+ {
+ "id": "rc87-64e13e03ab519054",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 240,
+ "title": "renders native-aligned semantic tokens for grouped classes with selector suffixes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c42c2da366ff1956368c0261c2157e8374c51e8b02d61e0a27f7aacbd6bcb7eb"
+ },
+ {
+ "id": "rc87-61d55a1a7491c541",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 261,
+ "title": "renders semantic tokens only for CSS directive class-list spans",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0fd8167a5bf82b5314f370c8a17e5c9eea4c28ca0f8ee435b25437062a7f24ec"
+ },
+ {
+ "id": "rc87-34f0fb33ab1bd05b",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 297,
+ "title": "does not render semantic tokens for theme directive declarations",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "47b99afe2d8ab17f5bdd8f43f0eaf7f7745a35e9f68504cf1a4d4e2b544a108a"
+ },
+ {
+ "id": "rc87-f2e17f86897c494b",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 329,
+ "title": "renders semantic tokens only for compose class lists inside managed definition directives",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fc56bc20a244befe0f1839fa33ece3a8c941ab42e0694f2797f76746c242ecb9"
+ },
+ {
+ "id": "rc87-bbe440cb9fdfaea1",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 353,
+ "title": "renders CSS directive ranges with quoted semicolons",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "96697de1cfb34f01943b94ac9079d2e0759b61f9804f46656b7113f520b9462f"
+ },
+ {
+ "id": "rc87-b69a9e683d2a16ca",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 372,
+ "title": "does not tokenize quoted compose preludes as class lists",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "981294e8f5e815461eae8482a68c7ffe8745f47b5fcaa5fb19b254a89bd82ac8"
+ },
+ {
+ "id": "rc87-a24e8e025a02fc75",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 378,
+ "title": "does not render semantic tokens for custom variant directive syntax",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6a4a10dc3741c3df728bc4eff79b88a05e1192261acc330f8dc3a6c3edfbc10f"
+ },
+ {
+ "id": "rc87-c9f581f1db975615",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 410,
+ "title": "does not render inline theme modifier semantic tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7a2c97968c1014ce9030ee0bb7cf1f397b6c19891aa5e4e7958da370011fc911"
+ },
+ {
+ "id": "rc87-825e34b96ad36c9c",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-semantic-tokens.test.ts",
+ "line": 417,
+ "title": "does not render non-entry @master at-rules as CSS directives",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "dae5568d1d1735fbe084825320997189710aa70d4c9c44dfb2244c26984a18d2"
+ },
+ {
+ "id": "rc87-8879a483358a9352",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 15,
+ "title": "hex",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a5a4d99419a9b87b0ed06705fcf6ab36c286275796d50851471a23820667383d"
+ },
+ {
+ "id": "rc87-a8914255fe1bb031",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 26,
+ "title": "shorthand",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "00ca63e9286fe7b67d77befad83cc3804cf78aef26873b1f821865ae339d8019"
+ },
+ {
+ "id": "rc87-51c4303dbed08aa5",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 37,
+ "title": "with |",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ebc612728a05f0cda965494f32062c78856bf0824c5b8ddcdd3d87fef92460fc"
+ },
+ {
+ "id": "rc87-5b9ab1aa4b19b255",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 48,
+ "title": "with !",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d9903648b0a7dbfef03ed3981e4c82315f465bd6fd96e81bca3c2473d7d4bf72"
+ },
+ {
+ "id": "rc87-f965453a222c29e7",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 59,
+ "title": "should ignore invalid rgb",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b0e5e0962429197326d55d55240406e9b1a567e83504ac05bd9ff54ff5f9f2d5"
+ },
+ {
+ "id": "rc87-5690a0f15e84e564",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 67,
+ "title": "should ignore single #",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aeef85e4ded7941f224ec5076627081c47924253d0ca4097ea1448fa60eb64c5"
+ },
+ {
+ "id": "rc87-d9d845eccca912c8",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 75,
+ "title": "should ignore utility",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "23bed998320e5ff72ed42dfe92241a19f956338e05f9770e2ed1de80055336f3"
+ },
+ {
+ "id": "rc87-1ffdb9d4fba950f6",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 83,
+ "title": "should ignore number",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "515162c7127308fa7bedc2204efe1e5e420d9dbfe9c0753a7aea81e620693aaf"
+ },
+ {
+ "id": "rc87-f4db71648850d013",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 91,
+ "title": "box-shadow",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1f82fc90e71251f436f9f744bf867117b684523eee8a6ddf9151fca62f82efa2"
+ },
+ {
+ "id": "rc87-1110d3897316e2eb",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 109,
+ "title": "gradient",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8dc1fb6d18b3b159c4c5f5089a63ff8ca291d639e625e5d3c3fc59dac5097953"
+ },
+ {
+ "id": "rc87-66c793ef174cd3a4",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 127,
+ "title": "custom variable",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d3ef646c80b833c0b4a4036ab71bfa4de6ed67ebf03d58517b52b06ba0778925"
+ },
+ {
+ "id": "rc87-caf9de7721f63aea",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 142,
+ "title": "custom variable/alpha",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2e5fddc76b1f3a5810381062bf2993ced0098aeb6e0869da8b1d3b8688c1f862"
+ },
+ {
+ "id": "rc87-a6cd463b30e73912",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 157,
+ "title": "variable",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "776a35665bf77f5b87b12e49b7b8567fbf2619f2a9df8f365d528e9a9e77c375"
+ },
+ {
+ "id": "rc87-d361b502b9b59afc",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 168,
+ "title": "variable/opacity",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ef8153ab0d616e3401f8162fbbd519835cf55545bf994fda9c04d528d70f5056"
+ },
+ {
+ "id": "rc87-57b578e08b99867e",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 179,
+ "title": "CSS color() function",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6fb4509aabf2dbaf3c261af3bb731edd59345ec6b474e21fd5914df6a8344e01"
+ },
+ {
+ "id": "rc87-d1c8e254a28cc136",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 190,
+ "title": "CSS color-mix() function",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f8668c1f4381f9b8c574e56ea9b656d263d18b20f9e6f09bc689808013305a64"
+ },
+ {
+ "id": "rc87-a6dfe05531cc0adc",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 252,
+ "title": "click to switch color spaces",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "341ea0ccab8823a81855ee964d7c2945c1dd19c5246e7dd9912058629cd301cb"
+ },
+ {
+ "id": "rc87-ea75f14ac7430054",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 271,
+ "title": "convert any color spaces to RGB and hint correctly",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6ac7f62a4cdfdaedc0e8b908de15024e9404edae0cff70745c888a362feba6c3"
+ },
+ {
+ "id": "rc87-9a6201867e0e48f5",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 291,
+ "title": "maps out-of-gamut colors into the LSP channel range",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f1281ca6fc9126daab3c558d2ee7811fcbd8fba012d5b65febb98d009f0b6a63"
+ },
+ {
+ "id": "rc87-8314ace3d75a6b46",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 308,
+ "title": "rgb",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "de9410d5b22034ce44ad3df69220d2a7e6c1a10fdb80798e693dbd1b793a3c44"
+ },
+ {
+ "id": "rc87-22f4d1aa5a9d6298",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 319,
+ "title": "lab",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "162593126d01d91445bc94b7f02903718acb8089420c7a57aae85e137bf35804"
+ },
+ {
+ "id": "rc87-a63a25c15693d547",
+ "package": "language-service",
+ "file": "packages/language-service/tests/render-syntax-colors.test.ts",
+ "line": 330,
+ "title": "hsla",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "15e7a3e0a9f44768d34339639351f1159097266b59dbd28eed87133f5442c5bd"
+ },
+ {
+ "id": "rc87-3950d765ff8c7858",
+ "package": "language-service",
+ "file": "packages/language-service/tests/session.test.ts",
+ "line": 45,
+ "title": "does not render static theme modifier semantic tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aa026b07362abcb20305f1467481ca7788892f66c872447ef8f12bf695a2fc01"
+ },
+ {
+ "id": "rc87-09bfa63fa238afeb",
+ "package": "language-service",
+ "file": "packages/language-service/tests/session.test.ts",
+ "line": 57,
+ "title": "uses the injected runtime default manifest for completions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ce68486cb15a9b9270373ef2639c68fb8a7f8297c913663401d681731517d09c"
+ },
+ {
+ "id": "rc87-42028ac139836835",
+ "package": "language-service",
+ "file": "packages/language-service/tests/session.test.ts",
+ "line": 69,
+ "title": "uses the injected runtime for hover CSS previews",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1a7a3080c1cd2bce635dbcc487f8387da00076e771c1117e87a317da2563deab"
+ },
+ {
+ "id": "rc87-f8e97d7288ed2ca0",
+ "package": "language-service",
+ "file": "packages/language-service/tests/session.test.ts",
+ "line": 85,
+ "title": "uses the injected runtime variables for document colors",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fc633a5af4daa7bd81da5da0384f4211c300680bbc0f02c9da8010a219dbd140"
+ },
+ {
+ "id": "rc87-6c23d4d2b1e2a279",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki-grammar.test.ts",
+ "line": 44,
+ "title": "defines deterministic TextMate grammar scopes for CSS directives",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5ede7aa78a168be51957ecb40c5bbbd6fe9974f4e70444de07b1a791daa3499f"
+ },
+ {
+ "id": "rc87-da3dd2c54a4e1ede",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki-grammar.test.ts",
+ "line": 100,
+ "title": "loads the grammar through a dynamic Shiki language import",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b4b2ed5186c4b15a27aa0701502d5179d5145bfdaf779c299c3ef52b54343161"
+ },
+ {
+ "id": "rc87-467f3534d565dc4b",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki-grammar.test.ts",
+ "line": 124,
+ "title": "registers a real Shiki TextMate injection grammar for CSS directives",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "354b739b9da65931bafc2e0b9100dffa14e82bf0038efc797fde28b0d449aa8c"
+ },
+ {
+ "id": "rc87-fa14b3599af3c9e6",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki-grammar.test.ts",
+ "line": 158,
+ "title": "preserves guide theme source through TextMate tokenization",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "88e7e7c043bdde81eb27a1b2f459c82c68f76add7e8b9c5adb113903748ce113"
+ },
+ {
+ "id": "rc87-6d820633adb55bb4",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki-readability.test.ts",
+ "line": 38,
+ "title": "colors every complete Master directive like a native CSS at-rule",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6c0dbcb8c24cc7b08150aa7dcfcd897f3484c0fc409e0f5bb2d8dacdd9492dd5"
+ },
+ {
+ "id": "rc87-f2e0fc8a0dfecc5f",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki-readability.test.ts",
+ "line": 74,
+ "title": "colors query names and keeps nested native at-rules in the CSS grammar",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4cdeb0762a34801b96dcd166358c6e3382660a815484e07f43fd9641c179cd7a"
+ },
+ {
+ "id": "rc87-2215a94422647f17",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki-readability.test.ts",
+ "line": 125,
+ "title": "keeps semantic query colors aligned in CSS, HTML, and TSX",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bdfa269e70bee91076f6eeed93886c392f9acb85ed7d87cc54a90d456e4593d3"
+ },
+ {
+ "id": "rc87-a7d03eca906f9714",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki-readability.test.ts",
+ "line": 149,
+ "title": "ignores unrelated explanations when probing semantic scope colors",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2f89889e70f43772a0f8e2524bd52b20dd39489cd9ef9e407e65be845c8817ad"
+ },
+ {
+ "id": "rc87-2e3efd0d08aade13",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki-session.test.ts",
+ "line": 12,
+ "title": "batch classifies unique classes without requesting CSS inspections or disposing a caller session",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "571e8e287c815362d576c9ac44ca53276fb8262961e910aa452421030476fdee"
+ },
+ {
+ "id": "rc87-a410aee5ee6eb184",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki-session.test.ts",
+ "line": 34,
+ "title": "preserves complete HAST across host languages compared with full inspection classification",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b222c7dbbeee22d1773d741e3ed606a77daa35482f46bd5afe7da62c4332f94b"
+ },
+ {
+ "id": "rc87-444931c51a42a2df",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki.test.ts",
+ "line": 223,
+ "title": "keeps v2 named classes whole in the colors guide example across both themes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5f39e0ebf19d827d47f21b1a029afd744119076262136c60c2300530494e0305"
+ },
+ {
+ "id": "rc87-c2f2383828e3e481",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki.test.ts",
+ "line": 273,
+ "title": "separates named opacity and native values without coloring unrelated text",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "955d0b582a02d744db5aa047c630e4b68a1b5967f6d381c3bcc7c9d0da839ac6"
+ },
+ {
+ "id": "rc87-636ccdbd0e9d93fd",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki.test.ts",
+ "line": 304,
+ "title": "keeps UTF-16 offsets aligned after Unicode and raw escaped class text",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7d782743bb1e4b3c47dcfa89661fab02f252c78e81e3fcedf572ee93a1f36473"
+ },
+ {
+ "id": "rc87-7fdb78a9bb26c8c3",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki.test.ts",
+ "line": 317,
+ "title": "assigns distinct highlight roles to native declaration value parts",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "12668039193c8331609b373b58652a9faba65b21ec3ef877942a31851e76a6ff"
+ },
+ {
+ "id": "rc87-92be143e0ae386a2",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki.test.ts",
+ "line": 545,
+ "title": "wraps each visible line of multiline class values without changing code text",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c67c6587d0ab135e88cf2534d90a16d31c331406b485d1e2ba945fba05b2c96b"
+ },
+ {
+ "id": "rc87-963203f16ed7c16e",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki.test.ts",
+ "line": 576,
+ "title": "keeps caller decoration overlap behavior for multiline class values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bdfcc233faf428e3ff1b9f4e1996a529babf58068aad6eefcda3a5f5db37dac5"
+ },
+ {
+ "id": "rc87-e40a9d268699cde8",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki.test.ts",
+ "line": 595,
+ "title": "keeps host wrappers aligned when an earlier transformer removes source lines",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e9c32eefb122b6eff769dc84c9ae14bfdd7314d6734266ef398884423392f77b"
+ },
+ {
+ "id": "rc87-bb0f4ac7fca45631",
+ "package": "language-service",
+ "file": "packages/language-service/tests/shiki.test.ts",
+ "line": 616,
+ "title": "matches native CSS string body and quote colors in both Shiki themes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b39b2ee9ebc3cc47915d85b968c3f99a3e2a0fb717b2dbb7b4efb5a41fe817cc"
+ },
+ {
+ "id": "rc87-15470ae7d8829a03",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
+ "line": 18,
+ "title": "@",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b22c63de0e72556b352e49240fbfa3a870e0add504708c50d0f5732218cdb208"
+ },
+ {
+ "id": "rc87-d693cf7ad232981d",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
+ "line": 19,
+ "title": "animate-",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f1737e2399a06f7c464cd91b41c41a8c0e6a935bff50694f3c2704e9fc86f1d9"
+ },
+ {
+ "id": "rc87-fa38eb843bd2c719",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
+ "line": 20,
+ "title": "animation:fade|",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f6e65ca532776eedea16609bf43aa26d04f177d2e64e3268fff04ddf2d08d6b5"
+ },
+ {
+ "id": "rc87-a6e757153e82d290",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
+ "line": 21,
+ "title": "animation:",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "46aedda200b8498049408477fd1e5a1c5867b45f7c9fe14e2d0671b71c54a2be"
+ },
+ {
+ "id": "rc87-f1d8693e0310c6d8",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
+ "line": 22,
+ "title": "animation-name:",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "faac69993e9de5b61bd2c2c73a0fba38a34c1c07ff15e9e6a91f0fe4a38a667b"
+ },
+ {
+ "id": "rc87-d3f5e9a6e2cc3714",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
+ "line": 23,
+ "title": "selector",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fc81e66b65ad832f563aa94d21e235d3be0513a2bf20fd75283eb6eb06c71fcd"
+ },
+ {
+ "id": "rc87-b6f5ceba350ee0bc",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/animations.test.ts",
+ "line": 24,
+ "title": "at",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a930a7c2141c7d4344b4f8ada7da2a26b1517b0efe06179b58c9add9813be206"
+ },
+ {
+ "id": "rc87-521663f1f382b057",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/base.test.ts",
+ "line": 15,
+ "title": "types \" should hint completions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8acf064b0d7ff765d1b6274193132e2436e249c99cc2b59b857749098c2c0f95"
+ },
+ {
+ "id": "rc87-24c21245d76d0088",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/base.test.ts",
+ "line": 16,
+ "title": "types should hint completions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1ba63e85a72d12c20a640d7e91f301c3311db0d684249da8f704c30b2b040e86"
+ },
+ {
+ "id": "rc87-c07eebf48224d1b8",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/base.test.ts",
+ "line": 17,
+ "title": "types dynamic enum key should hint enum values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9c4a43eb6dcde4f351977461c9b154710c2b235a42c2be1831e3d8565a15aee9"
+ },
+ {
+ "id": "rc87-57eefc7308015abc",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/base.test.ts",
+ "line": 22,
+ "title": "types any trigger character in \"\" should not hint",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "715de1b96e64911ea8e435c73f3e344e6fbe323fc47dfbd94a33f3f43b7fc0dd"
+ },
+ {
+ "id": "rc87-c9e15e4df08723e1",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/base.test.ts",
+ "line": 26,
+ "title": "types any trigger character in '' should not hint",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "73157af4fccbcbc3121f4c78532af17d97d77a086ecaa1be70c33ca893eb8846"
+ },
+ {
+ "id": "rc87-b843ea9bdf6725f1",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/base.test.ts",
+ "line": 30,
+ "title": "emit class=\"\" should hint completions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9a5fd67a848a77f346f05850853d1e13dbd5ce46fe8fd9e830efba38df4e696d"
+ },
+ {
+ "id": "rc87-9635777a9790b8a7",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/completion-cache.test.ts",
+ "line": 15,
+ "title": "returns fresh class completion items from cached skeletons",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2293e0a415a11632b545cfb20d171c7feb9f07bd880ef4a6b16a73341d1e0318"
+ },
+ {
+ "id": "rc87-d59c62ab999922bf",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/completion-cache.test.ts",
+ "line": 27,
+ "title": "does not leak selector insertText mutations between requests",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "dddf5f59bbe2da87d752062176c9e4cb82b10c7dbe286e799be54ba342506391"
+ },
+ {
+ "id": "rc87-c75732260c7ffaac",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/completion-cache.test.ts",
+ "line": 42,
+ "title": "documentation CSS generation does not mutate language service state",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cc4bbc888a40aa90572ddd3f17475c328035f6d62b7ecea59c039a658104b56c"
+ },
+ {
+ "id": "rc87-ff06546e9fe98883",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/group.test.ts",
+ "line": 4,
+ "title": "one declaration",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5790097a319c3facca927bdb8d3c62eb67bbe22b55d9fac844b859567ddf1a72"
+ },
+ {
+ "id": "rc87-3fe9e244fa11cd02",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/group.test.ts",
+ "line": 5,
+ "title": "two declarations",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d7c97f5fa58a28fad33493381ed4f655cd8134a0f10cc7a1254d2b30bc9d88e5"
+ },
+ {
+ "id": "rc87-4db7c0ba0f4eabd0",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/group.test.ts",
+ "line": 6,
+ "title": "should not hint selectors",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7ffbf5836ecffd02bf8bbc9ff2cb4ff7dc0ead43a76b40a093aa78338b16a47c"
+ },
+ {
+ "id": "rc87-75ced5cf66264044",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/group.test.ts",
+ "line": 7,
+ "title": "should not hint at",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9dd5e90d7f8bd5bc9dceefc7fd01c70ae44dffb1e41abfbd35528f464f2fb972"
+ },
+ {
+ "id": "rc87-469d587d310c427b",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 4,
+ "title": "should not hint selectors",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9bc28b8a6c25bc3bd396a4c75c4f472fb6629f3c9891b108fa8cf204bf8c20b9"
+ },
+ {
+ "id": "rc87-96e34a58d6acea7b",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 5,
+ "title": "animation delay on invoked",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "493a6997462e8b398aa13f72df059f6f113ebf297f4c896500d9a214e7724c7d"
+ },
+ {
+ "id": "rc87-90548191c604be69",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 6,
+ "title": "transition delay on invoked",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "05d56a94eccba756f31aca6721266fb843c4362879fc17b53418eed7b1575d78"
+ },
+ {
+ "id": "rc87-0f9e10e1c10954b3",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 7,
+ "title": "starts with @",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "82154253a134a296969434d4e8d4e4f9baaf90272381224ea08073cefe2c05c4"
+ },
+ {
+ "id": "rc87-1e6d51e4ae118350",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 8,
+ "title": "starts with @d",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a71ba8770511fdd2e5e2c5eab9c1c113a11e28554d0bb0053673f1e63e9cc107"
+ },
+ {
+ "id": "rc87-ca650f34085adc13",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 9,
+ "title": "removed @ key values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c6f43178ef8db2df741c4177970724b07ca02a681e3ad171af5de10a020523fb"
+ },
+ {
+ "id": "rc87-50ef6b5a29353027",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 10,
+ "title": "starts with ~",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cd56b6b3107147deb22f352057f1a00359ba2898b6f1190947a31704b597899c"
+ },
+ {
+ "id": "rc87-a0f763fe71e5b53c",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 11,
+ "title": "starts with ~d",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2d9059771b8f9b9707b3e6ff322037f560a7179663aa8daa9c4db6ca923617d"
+ },
+ {
+ "id": "rc87-056beba9946e5303",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 12,
+ "title": "removed ~ key values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c1b4d53a63d6f4aed85dc3df9466821e9ab852bad2612b7d2b047f6da8bd0176"
+ },
+ {
+ "id": "rc87-6e1c99f8025c3c9e",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 13,
+ "title": "f",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "854d3c60969a2a21583f8b155479b706f94efacb2d551dab640fbd5e2531360d"
+ },
+ {
+ "id": "rc87-75df69eef10797e4",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 14,
+ "title": "retained key alias",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5c01a038aadbedf0a0ac2814bcf088f0dd7d57754b715a01f2a0315428419cbb"
+ },
+ {
+ "id": "rc87-80c7b58b22a12938",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 15,
+ "title": "retained radius corner key alias",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "313d963529540462ce5b19ec16ffc647695ab0e659f435df2d46981136b79c79"
+ },
+ {
+ "id": "rc87-f194d04e3052969f",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 16,
+ "title": "removed radius side key alias",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "72799e6c6000fe63d1b886186b0b245c711683391f9065a3748b1b5756411429"
+ },
+ {
+ "id": "rc87-3561a642bc7a13da",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 17,
+ "title": "native value namespace property",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2d381e4d3a9d35a0e011d948f70600c144e6cd10bef7a093542b139bd2d64366"
+ },
+ {
+ "id": "rc87-e88af0669201d4e6",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 18,
+ "title": "removed key alias",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1bf489f6fb435923fbef9441cd48b982710f3991d16a8cb3fbe82bf21fbc6dc2"
+ },
+ {
+ "id": "rc87-af6602bb51df8235",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 21,
+ "title": "t",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "47e48b9b20640b3c5d3d3edbc05151cb4d1ab76f98da50c9a8184766c46573ff"
+ },
+ {
+ "id": "rc87-f4df6f1142cde91f",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/keys.test.ts",
+ "line": 22,
+ "title": "removed t alias",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9887fddc4a7e1a5ca8784b228a761bb5e38dbfa88bfce08bc7d55c8314c2a12b"
+ },
+ {
+ "id": "rc87-ae92eb4e4657098c",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
+ "line": 4,
+ "title": "breakpoint",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7d14654e2ccac5cdb8e6bc81cfc0c25723d9c4944196caedd287b2b9165f3045"
+ },
+ {
+ "id": "rc87-12bf3caef87c9a68",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
+ "line": 6,
+ "title": "`does not suggest retired condition shorthand ${suffix}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "70f0ad12c2f31ba8131875ac9b6d82142ad32606a71789e2a1585034b070b7d5"
+ },
+ {
+ "id": "rc87-12bf3caef87c9a68",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
+ "line": 6,
+ "title": "`does not suggest retired condition shorthand ${suffix}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "70f0ad12c2f31ba8131875ac9b6d82142ad32606a71789e2a1585034b070b7d5"
+ },
+ {
+ "id": "rc87-12bf3caef87c9a68",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
+ "line": 6,
+ "title": "`does not suggest retired condition shorthand ${suffix}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "70f0ad12c2f31ba8131875ac9b6d82142ad32606a71789e2a1585034b070b7d5"
+ },
+ {
+ "id": "rc87-12bf3caef87c9a68",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
+ "line": 6,
+ "title": "`does not suggest retired condition shorthand ${suffix}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "70f0ad12c2f31ba8131875ac9b6d82142ad32606a71789e2a1585034b070b7d5"
+ },
+ {
+ "id": "rc87-12bf3caef87c9a68",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
+ "line": 6,
+ "title": "`does not suggest retired condition shorthand ${suffix}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "70f0ad12c2f31ba8131875ac9b6d82142ad32606a71789e2a1585034b070b7d5"
+ },
+ {
+ "id": "rc87-12bf3caef87c9a68",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
+ "line": 6,
+ "title": "`does not suggest retired condition shorthand ${suffix}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "70f0ad12c2f31ba8131875ac9b6d82142ad32606a71789e2a1585034b070b7d5"
+ },
+ {
+ "id": "rc87-3bd1ee21a1202065",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
+ "line": 8,
+ "title": "registered mode",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d5077b25430c56c1d769de02448fe7328f5d4dcfe043f82d68b53e8ef9885883"
+ },
+ {
+ "id": "rc87-20fd596cba9ae7be",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/media.test.ts",
+ "line": 11,
+ "title": "@",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e9308fce2ab49684342a602bc169c921121e5f24818d1671c2247c104a0432a6"
+ },
+ {
+ "id": "rc87-75a82bc5803f44dc",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/react.test.ts",
+ "line": 8,
+ "title": "types next class and starts with white space",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "153592a178dfe1b597adf06b0966b3848b4798eb10bfbfa20994dcf8b7ac395c"
+ },
+ {
+ "id": "rc87-1b21e6b701e0783e",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/react.test.ts",
+ "line": 19,
+ "title": "types next class and starts with b",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "31beebed229179a274f5f37a88e8178594f45b98814efcbd4a35c31bc863c7f8"
+ },
+ {
+ "id": "rc87-e048c5438f86d97a",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/react.test.ts",
+ "line": 30,
+ "title": "types inside spaced jsx attribute assignment",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "74ed0e77208a90f3b91c7aaf1e16574eb65eb4f5333f7f68fc3f0df77a455ce6"
+ },
+ {
+ "id": "rc87-f7d2988618b16406",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 6,
+ "title": ":",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2ece8ea91e78e0833d950c2cfa9e37b750d24684ca8d099a62c3324d7fb3e718"
+ },
+ {
+ "id": "rc87-0b8c8996977e4736",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 7,
+ "title": "two",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58ec55f8a1cc94209da10704d7288959375040f771a5d72508ed0bc0c18630a9"
+ },
+ {
+ "id": "rc87-1a5e4f67c7694109",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 8,
+ "title": "utility",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "00c86825e3a5993ed9b479e4925036966893d188c8e65cb03f4556a1e571c47d"
+ },
+ {
+ "id": "rc87-122496d0780f5477",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 9,
+ "title": "functional labels",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a6c9b838f31510b43ec39d1028aab949d9d4346fb45fbe553ea68107cbd25080"
+ },
+ {
+ "id": "rc87-f9a1b4065eec68bf",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 36,
+ "title": "should take into account trigger character :",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9fa5f576e16030d7227e579e171e315b83defb9ccd95d466cb736978e66a82c7"
+ },
+ {
+ "id": "rc87-b8aab6d7ca4db7d9",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 37,
+ "title": "should insert functional pseudo-class text without the trigger character",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "afa4d22aa1d254be0e51aedeaa1c1f091acb67688f1b3460e656dc1a6a34b28d"
+ },
+ {
+ "id": "rc87-5cd7114b83fb17f7",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 38,
+ "title": "should take into account trigger character +",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2f1c409e48925872a18d06c3703c3bd199f5823b89d6415162617d4d57c82a34"
+ },
+ {
+ "id": "rc87-c3c5e61bfa6d7bf5",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 39,
+ "title": "info",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c9eea07f140c504c10ec5f57a4967eee90cf45f2d1dc0fbf75ba23d74c629d9e"
+ },
+ {
+ "id": "rc87-2d474933c8783581",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 61,
+ "title": "::",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5eb2d418bbd0297e4e4948cecb5290223805a79f84f4066dbe5359fc6dc40d4f"
+ },
+ {
+ "id": "rc87-1042776ba508d17c",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 62,
+ "title": "two",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f90e9f81f5821426c440fac97aee743f155f377926dde1976e021a356a658b9d"
+ },
+ {
+ "id": "rc87-9eb0fcbe6102684e",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 63,
+ "title": "utility",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "34658cb86e205e1a3f538974498dd8f8050fb0452926d7fe5946b749e45afec0"
+ },
+ {
+ "id": "rc87-c2027174014725bd",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 64,
+ "title": "removed aliases",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ca5b138c7979a4dfdc8fe4219a189ca572cc0870aa22d889d94626c44b68ac89"
+ },
+ {
+ "id": "rc87-fe7687b8403588b6",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 70,
+ "title": "should take into account trigger character :",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5811542944a62704f51236e98bff4e09bb2e29b19f239734d2236f1fac5b6b29"
+ },
+ {
+ "id": "rc87-e8feba90aa9178a0",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 71,
+ "title": "should take into account trigger character ::",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "72e72215302fc3d24325ad478620fec88d06e5e4b788cb45c2ce7a23ed422b0e"
+ },
+ {
+ "id": "rc87-9edd2b278fcedd74",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 72,
+ "title": "should take into account trigger character +",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b8fcb88d08f05f0dbeae38ef617f7d32eb1ff7932d201793fdf3d1262ed79ed4"
+ },
+ {
+ "id": "rc87-b0ec0121547c0994",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 73,
+ "title": "info",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ac62780ef7b34154c8e184fc3b49738f9685b931751f747b759ec939436b4e02"
+ },
+ {
+ "id": "rc87-c47ea7b9ce16f73e",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 92,
+ "title": "sorting",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d6080cc645540d2e1e98f94dd8bd606bdf943d922a9714b429cb3ac14bc40568"
+ },
+ {
+ "id": "rc87-a377c59477c00239",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 96,
+ "title": "types _ should hint",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "60c36a20fc7cc0f8b0cfd747b141af8f7c863cb400c2c1a8344d28b7cfe2d02d"
+ },
+ {
+ "id": "rc87-c9270876780637b8",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/selectors.test.ts",
+ "line": 100,
+ "title": "reserves native colon entries and suggests display states through an explicit declaration",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "26e742e668b678d0010f621ce2c15e7a581bbc3aa506e8f41739e77471e74cca"
+ },
+ {
+ "id": "rc87-6eabdb460350b537",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/styles.test.ts",
+ "line": 20,
+ "title": "info",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f1e8506d5f98c70cb78a57b12c87236ae4757f95537657312f7c1c28f765e51e"
+ },
+ {
+ "id": "rc87-ca81e2e45d1077cd",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/styles.test.ts",
+ "line": 35,
+ "title": "types btn: and should not hint",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8ea77be22f08dffc5522c8e6ecb7c90252bbb18488dd6d3e3c997fcce0aa81c2"
+ },
+ {
+ "id": "rc87-1269ac18e6cfde60",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/utilities.test.ts",
+ "line": 5,
+ "title": "types a",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e5755685a204585b2537a32085c34bd32dbea5988a8292255a30fa25d4652f39"
+ },
+ {
+ "id": "rc87-7c45cd82f6cbc8dc",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/utilities.test.ts",
+ "line": 6,
+ "title": "hints semantic utilities",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0669e621dd7c031525bc62a278c605ae5b98d73294a96e839864e06e1e6da466"
+ },
+ {
+ "id": "rc87-84962704599bb3d2",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/utilities.test.ts",
+ "line": 20,
+ "title": "info",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5065d1dbd4c451c5958d04b4934337efe129b0f5da75600a38ac7d5e2307b58c"
+ },
+ {
+ "id": "rc87-f11a32c085e7811c",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 12,
+ "title": "does not insert unencoded whitespace into values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "71497406e6b460ac74fae91a49c878e80f495b99926ff554aff8cc187d6f7362"
+ },
+ {
+ "id": "rc87-23b73002b475e802",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 13,
+ "title": "continues native border values after a space delimiter",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ea4ac4cdc11bd00bde5d0586ce848d478bcda35979cde2b791dd13bcb0e0bec2"
+ },
+ {
+ "id": "rc87-7edc7a64e67ab5b8",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 14,
+ "title": "continues native shadow values after a comma",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ab5c6bb65e4a532afe592a3573081568490642a796065191371d4ca4a3442c7f"
+ },
+ {
+ "id": "rc87-6c2cb1f289198b13",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 15,
+ "title": "offers conditions after a named style",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b2451df417e94cb36ceb19c036bc89fd06c18caec7a0ee0e452adc1a25ccc462"
+ },
+ {
+ "id": "rc87-4edbc5987d8baad7",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 16,
+ "title": "offers states after a named style",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d07435654e2519f3f8cc19c352479b739443f63eddadd41b8e0c4e5873cf4f7b"
+ },
+ {
+ "id": "rc87-990b10cfaf0d0a59",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 19,
+ "title": "describes the token identity and actual CSS",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a291535c643e18404f625efcf03e1e4706a4e4f00897f8828deebd4c2281183b"
+ },
+ {
+ "id": "rc87-edd107800bfb1ef8",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 27,
+ "title": "keeps native font values separate from font tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3dc86106e79fc98c4851c9350465c089a3b2c9823acb33e974b4fcf4eb7ed77b"
+ },
+ {
+ "id": "rc87-bf5f22ae35315309",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 32,
+ "title": "offers registered full prefixes and aliases",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eb2afdac408080ab3a012888f93551044625c1d941f48bc7a2481a679e94be25"
+ },
+ {
+ "id": "rc87-7cf624b89279df26",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 38,
+ "title": "does not suggest negative sizes or nonnumeric tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3874f1b3a280da5f24be34b76ec6f8c93f13262cae0615d5ab156c616e01876b"
+ },
+ {
+ "id": "rc87-263a00a3d9b70377",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 43,
+ "title": "keeps custom colors out of native value completion",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2ffd48168f7be659428ffb06ccfdc72d386ee55bab736698bb1579bf627b919"
+ },
+ {
+ "id": "rc87-7213bd9c9f7ec8fb",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 49,
+ "title": "offers named colors inside safelist",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0b5b337b1f80e38a51cc510391f74d8902ea1d2242665a83072ddc319702ccdc"
+ },
+ {
+ "id": "rc87-449ecffc360e72db",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 60,
+ "title": "documents the native property without shorthand inference",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "82935d319b9c48e7a847f4244b6cbc65b46590444431837475be6c35fe2f1465"
+ },
+ {
+ "id": "rc87-a2738826fb3deb59",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 66,
+ "title": "continues typing a native keyword",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "85f76ec13d1a39315950f111d9f0374d7f4ccd0ff69b2b0c48554e4021fcdcea"
+ },
+ {
+ "id": "rc87-108b72fc5fe0c9d4",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 69,
+ "title": "uses native syntax data for vendor-prefixed properties",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "16a287a0f27f8ac1eb10c16699819dea8553903affaeeb92e965023de51555e5"
+ },
+ {
+ "id": "rc87-d9e7a355f622c16c",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 77,
+ "title": "sorts color shades numerically and keeps their base hue",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ce489893a9969b16fc451241847c556ceac2a1c80f2e2da07c3274233846e1d1"
+ },
+ {
+ "id": "rc87-650fe2edd8c23880",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 83,
+ "title": "preserves namespace fallback aliases",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "84e8a9b31ea22a4ccb261149bbb0226acdebda4c159e4c28853f84fd25d289ad"
+ },
+ {
+ "id": "rc87-829ed0ee0b7b1259",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 89,
+ "title": "limits surface tokens to the registered namespace",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "11833beb854d8b4d68acb653da443533e4721fcc785d6f68e0bae9538e90dd48"
+ },
+ {
+ "id": "rc87-faee1311d8c18884",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/values.test.ts",
+ "line": 94,
+ "title": "compares unitful values for suggestions without rewriting declarations",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eee3a5298b29320469b9ba52a00e92f21400cfab46cfd05f5eafe7318540bdf1"
+ },
+ {
+ "id": "rc87-0d60ca3cf071ddf9",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/variables.test.ts",
+ "line": 5,
+ "title": "positive container",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7cd4a38f38f044f102ff7596470ca0ef50f5727fce9b8027ee61946d7ef88c6f"
+ },
+ {
+ "id": "rc87-e24b1196422e5924",
+ "package": "language-service",
+ "file": "packages/language-service/tests/suggest-syntax/variables.test.ts",
+ "line": 28,
+ "title": "only eligible properties offer negative numeric tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6613cbff7a9d55021d10eb37eb9371d0242b89230572b2776fc7bba2ad64952c"
+ },
+ {
+ "id": "rc87-f07f361dc972d63d",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-byte-surfaces.test.ts",
+ "line": 9,
+ "title": "BH-0020 directive formatting reports UTF-8 sizes in content and file previews",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5954b2d0f273abb62e0a57bf70c3d5b33f63e50a971d290d01305d90c3606159"
+ },
+ {
+ "id": "rc87-d2dc75bf7e745e62",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-byte-surfaces.test.ts",
+ "line": 31,
+ "title": "BH-0020 rendered CSS bytes count UTF-8 Unicode output",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f55c91ea782e48f33630083c8efa01e3a2c46731315c5580dd3f2da6da652863"
+ },
+ {
+ "id": "rc87-e325e357596d4c78",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-mjs-discovery.test.ts",
+ "line": 11,
+ "title": "`${operation} finds ESM source (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1c66a9bdad43b9f19ae5476a3a64fd59b6420566970457897fffa6f39da72949"
+ },
+ {
+ "id": "rc87-e325e357596d4c78",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-mjs-discovery.test.ts",
+ "line": 11,
+ "title": "`${operation} finds ESM source (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1c66a9bdad43b9f19ae5476a3a64fd59b6420566970457897fffa6f39da72949"
+ },
+ {
+ "id": "rc87-e325e357596d4c78",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-mjs-discovery.test.ts",
+ "line": 11,
+ "title": "`${operation} finds ESM source (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1c66a9bdad43b9f19ae5476a3a64fd59b6420566970457897fffa6f39da72949"
+ },
+ {
+ "id": "rc87-e325e357596d4c78",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-mjs-discovery.test.ts",
+ "line": 11,
+ "title": "`${operation} finds ESM source (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1c66a9bdad43b9f19ae5476a3a64fd59b6420566970457897fffa6f39da72949"
+ },
+ {
+ "id": "rc87-e325e357596d4c78",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-mjs-discovery.test.ts",
+ "line": 11,
+ "title": "`${operation} finds ESM source (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1c66a9bdad43b9f19ae5476a3a64fd59b6420566970457897fffa6f39da72949"
+ },
+ {
+ "id": "rc87-e325e357596d4c78",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-mjs-discovery.test.ts",
+ "line": 11,
+ "title": "`${operation} finds ESM source (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1c66a9bdad43b9f19ae5476a3a64fd59b6420566970457897fffa6f39da72949"
+ },
+ {
+ "id": "rc87-e325e357596d4c78",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-mjs-discovery.test.ts",
+ "line": 11,
+ "title": "`${operation} finds ESM source (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1c66a9bdad43b9f19ae5476a3a64fd59b6420566970457897fffa6f39da72949"
+ },
+ {
+ "id": "rc87-e325e357596d4c78",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-mjs-discovery.test.ts",
+ "line": 11,
+ "title": "`${operation} finds ESM source (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1c66a9bdad43b9f19ae5476a3a64fd59b6420566970457897fffa6f39da72949"
+ },
+ {
+ "id": "rc87-e325e357596d4c78",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-mjs-discovery.test.ts",
+ "line": 11,
+ "title": "`${operation} finds ESM source (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1c66a9bdad43b9f19ae5476a3a64fd59b6420566970457897fffa6f39da72949"
+ },
+ {
+ "id": "rc87-03d2b4b5d4a17a41",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-bytes.test.ts",
+ "line": 8,
+ "title": "counts UTF-8 preview bytes for 😀 → ",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9705e338d65a4a042c9b7a3b4d05c8c5acedd0867c60b160e9a8aac536b5c883",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "😀 | "
+ }
+ },
+ {
+ "id": "rc87-1b4b16e47f4f2ad4",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-bytes.test.ts",
+ "line": 8,
+ "title": "counts UTF-8 preview bytes for a → bb",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9705e338d65a4a042c9b7a3b4d05c8c5acedd0867c60b160e9a8aac536b5c883",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "a | bb"
+ }
+ },
+ {
+ "id": "rc87-426c38fb105f205a",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-bytes.test.ts",
+ "line": 8,
+ "title": "counts UTF-8 preview bytes for é → 😀",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9705e338d65a4a042c9b7a3b4d05c8c5acedd0867c60b160e9a8aac536b5c883",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "é | 😀"
+ }
+ },
+ {
+ "id": "rc87-7f6dc093cfd228f0",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-bytes.test.ts",
+ "line": 8,
+ "title": "counts UTF-8 preview bytes for 中文 → é 😀",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9705e338d65a4a042c9b7a3b4d05c8c5acedd0867c60b160e9a8aac536b5c883",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "中文 | é 😀"
+ }
+ },
+ {
+ "id": "rc87-eb5debdb6d9aba88",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-bytes.test.ts",
+ "line": 28,
+ "title": "BH-0020 aggregates changed UTF-8 files including new files without counting unchanged files",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "67447f61db027dabd9da5699fc734902cf845206a91b30f3950104b1bca76c4d"
+ },
+ {
+ "id": "rc87-5056bb3eff4e9cff",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-concurrency.test.ts",
+ "line": 22,
+ "title": "keeps a new writable file identity stable through a directory alias",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f1f57ad79cc8ac8c3233910d773568606cc65ba41237a41c16e3560373b058ff"
+ },
+ {
+ "id": "rc87-752c12a0c6ca65a3",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-concurrency.test.ts",
+ "line": 35,
+ "title": "accepts exactly one simultaneous use of a preview token",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ffb188065263b6428bd2ddf311e886e1ae175985029c69820561ea83a23cb87f"
+ },
+ {
+ "id": "rc87-08a6c7d8494cf8a2",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-concurrency.test.ts",
+ "line": 46,
+ "title": "rejects stale competing previews for existing files across contexts",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "09f11dfba4cbad80ec19b5377a2e539174718de6dec6d7f1430b79c7a69ef428",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "existing"
+ }
+ },
+ {
+ "id": "rc87-f2d9c78df68ef410",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-concurrency.test.ts",
+ "line": 46,
+ "title": "rejects stale competing previews for hardlink files across contexts",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "09f11dfba4cbad80ec19b5377a2e539174718de6dec6d7f1430b79c7a69ef428",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "hardlink"
+ }
+ },
+ {
+ "id": "rc87-822c065a1fe006fb",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-concurrency.test.ts",
+ "line": 46,
+ "title": "rejects stale competing previews for new files across contexts",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "09f11dfba4cbad80ec19b5377a2e539174718de6dec6d7f1430b79c7a69ef428",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "new"
+ }
+ },
+ {
+ "id": "rc87-6ff0b9ead8b82138",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-concurrency.test.ts",
+ "line": 46,
+ "title": "rejects stale competing previews for symlink files across contexts",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "09f11dfba4cbad80ec19b5377a2e539174718de6dec6d7f1430b79c7a69ef428",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "symlink"
+ }
+ },
+ {
+ "id": "rc87-3bf2483abde94e04",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-concurrency.test.ts",
+ "line": 70,
+ "title": "validates every file before writing when competing multi-file previews use opposite orders",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7c8d5dddf76e4b18629fd2b17353b9921cb4d87d793d311ad5c371fbe739e47b"
+ },
+ {
+ "id": "rc87-7dceb54799fa36d2",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-concurrency.test.ts",
+ "line": 84,
+ "title": "applies independent files in different roots and releases the gate after a stale error",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8bf9486bc2eae973d8185a780c03ba8ed54831c23c3c1b06b90e797154e36a55"
+ },
+ {
+ "id": "rc87-6584a7e4ae0dd61d",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-concurrency.test.ts",
+ "line": 99,
+ "title": "does not revive a token after dispose while waiting",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "02bbd87c555936f4964b67cc88545e262ac7249cba1f59c558c51fa6723cf390",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "dispose"
+ }
+ },
+ {
+ "id": "rc87-6c3c23b082022954",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-concurrency.test.ts",
+ "line": 99,
+ "title": "does not revive a token after expire while waiting",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "02bbd87c555936f4964b67cc88545e262ac7249cba1f59c558c51fa6723cf390",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "expire"
+ }
+ },
+ {
+ "id": "rc87-b90bd37be26c9db5",
+ "package": "mcp",
+ "file": "packages/mcp/tests/bug-hunt-preview-concurrency.test.ts",
+ "line": 126,
+ "title": "times out a contender without stealing a live lock and releases its own register",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6f36eb2a4f209e1a58dda8720aeb528beb274a6577870c7c6f59f04814ea9d9c"
+ },
+ {
+ "id": "rc87-89410ae763b4edeb",
+ "package": "mcp",
+ "file": "packages/mcp/tests/core.test.ts",
+ "line": 560,
+ "title": "routes Rust crates to Cargo context, risk packs, and scoped validation",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9ea3934b4c579717378b4e6e35fbb7a36402a0b5e29181a42cedd97a8ce33759"
+ },
+ {
+ "id": "rc87-15a240d4d9e73507",
+ "package": "mcp",
+ "file": "packages/mcp/tests/final-semantics.test.ts",
+ "line": 9,
+ "title": "AI inspection workflows preserve project context, statuses and complete alternatives",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c3d2e584dfef9648dc4db5f87e2722e40c1bedc15706eade5e084fc83992b322"
+ },
+ {
+ "id": "rc87-3929635386fae0b3",
+ "package": "mcp",
+ "file": "packages/mcp/tests/output-schema.test.ts",
+ "line": 10,
+ "title": "tools/list schemas validate success and errors without hidden refinements",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4439c3eed7c9035617c44972cff1630b1ddad9cdced2d8055efc1c292345bdf0"
+ },
+ {
+ "id": "rc87-138b9019b8bfba54",
+ "package": "mcp",
+ "file": "packages/mcp/tests/semantic-context.test.ts",
+ "line": 21,
+ "title": "distinguishes missing entries from failed entries without selecting a preset",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6d5a86f56d7022ee6ccaa210dac94dc1372c1109d5bf155d9fa0759b4c257f4f"
+ },
+ {
+ "id": "rc87-ffb065c6ddd75768",
+ "package": "mcp",
+ "file": "packages/mcp/tests/semantic-context.test.ts",
+ "line": 34,
+ "title": "explicit preset context reports matching separately from validity and browser support",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6771447eddb4a3dc210a04c8d4c0e2acf93c5e6ad5bef2f8933823de9e6d38f0"
+ },
+ {
+ "id": "rc87-1aff1db8e24dfa23",
+ "package": "mcp",
+ "file": "packages/mcp/tests/semantic-context.test.ts",
+ "line": 53,
+ "title": "keeps complete ambiguity alternatives in both structured and JSON output",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "19a745a6c7e6d6238c5a7ccb39c970591673997a1d22f0fabc740d95163314c5"
+ },
+ {
+ "id": "rc87-7c2bf08c46783b94",
+ "package": "mcp",
+ "file": "packages/mcp/tests/semantic-context.test.ts",
+ "line": 65,
+ "title": "does not warn about retired builtins for registered project CSS classes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c8c08828d081e43e7de64f75f188e538f1c315af1c459850af5db2f5e5da2a85"
+ },
+ {
+ "id": "rc87-3c2a2a3e0b2cb1e9",
+ "package": "next",
+ "file": "packages/next/tests/adapter.test.ts",
+ "line": 210,
+ "title": "pre-renders CSS without publishing hydration resources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "53bf24d3072c8461a595f2dca20d2020b052d67fbd8ff54af111aa33633e0ba5"
+ },
+ {
+ "id": "rc87-30a8818ec524a89d",
+ "package": "next",
+ "file": "packages/next/tests/adapter.test.ts",
+ "line": 223,
+ "title": "does not duplicate globals already emitted by project CSS entries",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "43c7f5ee4702036b993a59be84b1635337de465d618550973b38c79a6a2cd4f1"
+ },
+ {
+ "id": "rc87-896d17067098657c",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-entry-reference-build-state.test.ts",
+ "line": 6,
+ "title": "`Next build completion preserves entry reference metadata, imported=${child}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "18d8902d6861502a97e515552e3740c41be81e1641c5e7fa1ef94a4034a0490d"
+ },
+ {
+ "id": "rc87-896d17067098657c",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-entry-reference-build-state.test.ts",
+ "line": 6,
+ "title": "`Next build completion preserves entry reference metadata, imported=${child}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "18d8902d6861502a97e515552e3740c41be81e1641c5e7fa1ef94a4034a0490d"
+ },
+ {
+ "id": "rc87-7f29625a14474115",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-graph-classification.test.ts",
+ "line": 29,
+ "title": "BH-0004 an entry importing an external-importing child through a named layer compiles",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0771d19a1c2878cfe686e56e453b485b3db3fb87af5afc810c0250842f820ffc",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "a named layer | layer(cards)"
+ }
+ },
+ {
+ "id": "rc87-4329c8e09a8c900d",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-graph-classification.test.ts",
+ "line": 29,
+ "title": "BH-0004 an entry importing an external-importing child through an anonymous layer compiles",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0771d19a1c2878cfe686e56e453b485b3db3fb87af5afc810c0250842f820ffc",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "an anonymous layer | layer"
+ }
+ },
+ {
+ "id": "rc87-b54a73d01192103e",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-graph-classification.test.ts",
+ "line": 29,
+ "title": "BH-0004 an entry importing an external-importing child through supports and media compiles",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0771d19a1c2878cfe686e56e453b485b3db3fb87af5afc810c0250842f820ffc",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "supports and media | supports(display:grid) screen"
+ }
+ },
+ {
+ "id": "rc87-4ed49967c9b21459",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-loader-graph-delivery.test.ts",
+ "line": 24,
+ "title": "`general Next loader publishes retained ${kind} graph`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "19fb0c8c47858b05537c0b159439aa1c13f0487f7d92144dc7811a5c032688be"
+ },
+ {
+ "id": "rc87-4ed49967c9b21459",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-loader-graph-delivery.test.ts",
+ "line": 24,
+ "title": "`general Next loader publishes retained ${kind} graph`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "19fb0c8c47858b05537c0b159439aa1c13f0487f7d92144dc7811a5c032688be"
+ },
+ {
+ "id": "rc87-49fd20eadffaaa17",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-loader-graph-delivery.test.ts",
+ "line": 66,
+ "title": "general Next delivered entry retains original native declaration source maps",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "68e46d37318afc0e6a087bd7e32b88d95171fc8f0fe0b24d0111e54f87d98f7c"
+ },
+ {
+ "id": "rc87-5cbaf87ce52c7412",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-loader-graph-delivery.test.ts",
+ "line": 83,
+ "title": "`general Next ${syntax} delivered entry retains imported partial ownership and map`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eb40e104072695358d4d3af07d9381bef56f80b4055fb2246f8ef4a6c0074811"
+ },
+ {
+ "id": "rc87-5cbaf87ce52c7412",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-loader-graph-delivery.test.ts",
+ "line": 83,
+ "title": "`general Next ${syntax} delivered entry retains imported partial ownership and map`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eb40e104072695358d4d3af07d9381bef56f80b4055fb2246f8ef4a6c0074811"
+ },
+ {
+ "id": "rc87-4c67a51c573060ff",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-output-source-maps.test.ts",
+ "line": 30,
+ "title": "Next injected package entry retains pure CSS authoring lines in its callback map",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ed0a1c7a8982e13270a82ae5b5235a3efb196e367c34b1bfdd54549be7700205"
+ },
+ {
+ "id": "rc87-18a6ddb199356466",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-output-source-maps.test.ts",
+ "line": 38,
+ "title": "`Next ${syntax} output map retains original root after additionalData`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a310085ab5f83bab66a49c74734cab638b9bd3efef0fa41db6288abcd70fd99e"
+ },
+ {
+ "id": "rc87-18a6ddb199356466",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-output-source-maps.test.ts",
+ "line": 38,
+ "title": "`Next ${syntax} output map retains original root after additionalData`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a310085ab5f83bab66a49c74734cab638b9bd3efef0fa41db6288abcd70fd99e"
+ },
+ {
+ "id": "rc87-9b152ed8b3776071",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-output-source-maps.test.ts",
+ "line": 48,
+ "title": "Next output map distinguishes imported Sass and injected CSS origins",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f0bda78c8ddbf0157d3a2c3c9bd7550ec6c779af415d71b09e335f0d4a4602c6"
+ },
+ {
+ "id": "rc87-c3b99e5c42c17928",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-output-source-maps.test.ts",
+ "line": 58,
+ "title": "Next preprocessed Webpack input chains the supplied Sass map through lowering",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "df9b13b720fee09b6b98cdbee72a2e2410f525b8e39f22c5b43e474461dc8307"
+ },
+ {
+ "id": "rc87-d861f2536d6c0acd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-output-source-maps.test.ts",
+ "line": 67,
+ "title": "Next native CSS passes its existing host map through unchanged",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "24ac7feeb6fff3056a19d097ba89da8eb0d6dc487f76756a078ebd07f331cf61"
+ },
+ {
+ "id": "rc87-35e99a02e8a15610",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 49,
+ "title": "`native Next loader resource hooks: ${introduction} -> ${processing}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fb068251d974aedb48b40dde8cd1cf8dcc4181f7a3317f7cf91b865eb5e38f5f"
+ },
+ {
+ "id": "rc87-35e99a02e8a15610",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 49,
+ "title": "`native Next loader resource hooks: ${introduction} -> ${processing}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fb068251d974aedb48b40dde8cd1cf8dcc4181f7a3317f7cf91b865eb5e38f5f"
+ },
+ {
+ "id": "rc87-35e99a02e8a15610",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 49,
+ "title": "`native Next loader resource hooks: ${introduction} -> ${processing}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fb068251d974aedb48b40dde8cd1cf8dcc4181f7a3317f7cf91b865eb5e38f5f"
+ },
+ {
+ "id": "rc87-35e99a02e8a15610",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 49,
+ "title": "`native Next loader resource hooks: ${introduction} -> ${processing}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fb068251d974aedb48b40dde8cd1cf8dcc4181f7a3317f7cf91b865eb5e38f5f"
+ },
+ {
+ "id": "rc87-35e99a02e8a15610",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 49,
+ "title": "`native Next loader resource hooks: ${introduction} -> ${processing}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fb068251d974aedb48b40dde8cd1cf8dcc4181f7a3317f7cf91b865eb5e38f5f"
+ },
+ {
+ "id": "rc87-35e99a02e8a15610",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 49,
+ "title": "`native Next loader resource hooks: ${introduction} -> ${processing}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fb068251d974aedb48b40dde8cd1cf8dcc4181f7a3317f7cf91b865eb5e38f5f"
+ },
+ {
+ "id": "rc87-35e99a02e8a15610",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 49,
+ "title": "`native Next loader resource hooks: ${introduction} -> ${processing}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fb068251d974aedb48b40dde8cd1cf8dcc4181f7a3317f7cf91b865eb5e38f5f"
+ },
+ {
+ "id": "rc87-35e99a02e8a15610",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 49,
+ "title": "`native Next loader resource hooks: ${introduction} -> ${processing}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fb068251d974aedb48b40dde8cd1cf8dcc4181f7a3317f7cf91b865eb5e38f5f"
+ },
+ {
+ "id": "rc87-35e99a02e8a15610",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 49,
+ "title": "`native Next loader resource hooks: ${introduction} -> ${processing}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fb068251d974aedb48b40dde8cd1cf8dcc4181f7a3317f7cf91b865eb5e38f5f"
+ },
+ {
+ "id": "rc87-b12a45e95da82416",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 97,
+ "title": "prepare, helpers, messages, native dependencies and receiver identity survive",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2e56765977359e5ac94d3fd9b595509c28a1f180a63f1a283b2c525cb4914a86"
+ },
+ {
+ "id": "rc87-b092cca7ac234ca9",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 131,
+ "title": "ordinary Once keeps its original receiver and user errors remain identical",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "07138d4da82d33008f26e52ce9935a377c339805ce35896d3756c2220286ef04"
+ },
+ {
+ "id": "rc87-3696b29cfbb23aee",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 139,
+ "title": "compiler bridge errors retain their resource owner",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b154ac733e85a21b2ae810f948a43ba88ecfe0f450e3ce2d7da5cab31850e9c"
+ },
+ {
+ "id": "rc87-dc55f06846d32425",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 145,
+ "title": "legacy function plugin runs once with original Result and unbound receiver",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6eb5a8f718b583a5758055b9b402992f73dd2e39bb89f58534b371cd8cac6c79"
+ },
+ {
+ "id": "rc87-6d6cebc40cd73138",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 159,
+ "title": "concurrent Results share frozen host plugins but keep request resources isolated",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "35b5ec1a49178887665459d923d70620ee9b59e838508c81525cda673af87822"
+ },
+ {
+ "id": "rc87-4a986e832986bcf1",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-request-plugins.test.ts",
+ "line": 182,
+ "title": "Document roots receive their own lifecycle without repeating prepare",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1033cb75e6e001efb86b732a905d984bd8ba2660e6b845bc2ac4a5eb990d9d7a"
+ },
+ {
+ "id": "rc87-a58b3a0a4b8ab9e8",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-resource-host.test.ts",
+ "line": 51,
+ "title": "installed Next PostCSS loader chain emits late resources once, keeps user deletions and rebases allocated resource URLs",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "09eb2cceb1f1ff4446e966696c93d77e63881e560050cc27eea3d2d5e25759aa"
+ },
+ {
+ "id": "rc87-4bc215ed0eb3170b",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-resource-policy.test.ts",
+ "line": 25,
+ "title": "`processed resource history preserves native PostCSS intent: ${mutation}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6be8069b2c7872d903c41850f6e77e5f4d0420170cfa3a7b76a54ca9298136b9"
+ },
+ {
+ "id": "rc87-4bc215ed0eb3170b",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-resource-policy.test.ts",
+ "line": 25,
+ "title": "`processed resource history preserves native PostCSS intent: ${mutation}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6be8069b2c7872d903c41850f6e77e5f4d0420170cfa3a7b76a54ca9298136b9"
+ },
+ {
+ "id": "rc87-4bc215ed0eb3170b",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-resource-policy.test.ts",
+ "line": 25,
+ "title": "`processed resource history preserves native PostCSS intent: ${mutation}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6be8069b2c7872d903c41850f6e77e5f4d0420170cfa3a7b76a54ca9298136b9"
+ },
+ {
+ "id": "rc87-4bc215ed0eb3170b",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-resource-policy.test.ts",
+ "line": 25,
+ "title": "`processed resource history preserves native PostCSS intent: ${mutation}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6be8069b2c7872d903c41850f6e77e5f4d0420170cfa3a7b76a54ca9298136b9"
+ },
+ {
+ "id": "rc87-801d8e91c6f12dcd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-resource-policy.test.ts",
+ "line": 64,
+ "title": "new globals carry ownership and root history prevents child re-emission",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7239637e067344b269893704ac82110c4927fa466ff497355c8236766f645a7a"
+ },
+ {
+ "id": "rc87-c20e33257908a199",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-resource-policy.test.ts",
+ "line": 81,
+ "title": "allocated resource rebasing preserves query and fragment; other file identities stay opaque",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cb572af46da31b98f5925a54a160a017df8cb045f5707b42413fe6ad26fa1ffb"
+ },
+ {
+ "id": "rc87-09f1dd4aadf0744b",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-postcss-resource-policy.test.ts",
+ "line": 87,
+ "title": "sibling roots share only the entry history: each emits an identical late definition once",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "95ca14e4a0100e269f14311691d936bd2ef9d710803d5bdad81426bc548eae8a"
+ },
+ {
+ "id": "rc87-d684da18c523c48c",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-preprocessed-stylesheet.test.ts",
+ "line": 11,
+ "title": "`Next preserves the host Sass preprocessing boundary, preprocessed=${preprocessed}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "872074804eab749d4cae9ce926e6e18356d830b870407d0c654d7940dce18539"
+ },
+ {
+ "id": "rc87-d684da18c523c48c",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-preprocessed-stylesheet.test.ts",
+ "line": 11,
+ "title": "`Next preserves the host Sass preprocessing boundary, preprocessed=${preprocessed}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "872074804eab749d4cae9ce926e6e18356d830b870407d0c654d7940dce18539"
+ },
+ {
+ "id": "rc87-3f788e17236de27e",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-raw-sass-context.test.ts",
+ "line": 26,
+ "title": "`Next raw ${syntax} retains partial reference and edit dependencies`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "db21c8d75137883446fd8025582c3dbe8c3dffd437459c90553f217c4f43dd97"
+ },
+ {
+ "id": "rc87-3f788e17236de27e",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-raw-sass-context.test.ts",
+ "line": 26,
+ "title": "`Next raw ${syntax} retains partial reference and edit dependencies`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "db21c8d75137883446fd8025582c3dbe8c3dffd437459c90553f217c4f43dd97"
+ },
+ {
+ "id": "rc87-82b757bc65970cc3",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-raw-sass-context.test.ts",
+ "line": 39,
+ "title": "Next raw Sass uses configured implementation, load paths and additional data",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4bc0e805bef1f90c15d2c42c64d97ef594a49e8bafbc1f1d7a56b20438847009"
+ },
+ {
+ "id": "rc87-0428e536c0798169",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-raw-sass-context.test.ts",
+ "line": 49,
+ "title": "Next registers missing mapped CSS reference before error and recovers on creation",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "356201e3e3167f9b2e83417a1c2e01f1a09bc6e1f4c5929785ff21426c3129c4"
+ },
+ {
+ "id": "rc87-93ec4978a613d1ab",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-raw-sass-context.test.ts",
+ "line": 59,
+ "title": "Next reports invalid compose in the original Sass partial",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4b2002e14a3692cb5e30fcd1a7cc5190a345a9bf62a8df9edea74a8d7003f9de"
+ },
+ {
+ "id": "rc87-fa0433d1679a2ae2",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-raw-sass-context.test.ts",
+ "line": 66,
+ "title": "Next watches a Sass partial that throws before loadedUrls are returned",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "890e6baa92498159aff7769d12cd7d0140629d927a0a1fb57a035f53b4816ced"
+ },
+ {
+ "id": "rc87-88bce3edcb7646bd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 22,
+ "title": "`BH-0048 Next ${backend} pending runtime start: ${scenario}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "476af5e80cbb02df5aaec81ec5854f9bcbb76b5eafb8afe6343f727e747ba30f"
+ },
+ {
+ "id": "rc87-88bce3edcb7646bd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 22,
+ "title": "`BH-0048 Next ${backend} pending runtime start: ${scenario}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "476af5e80cbb02df5aaec81ec5854f9bcbb76b5eafb8afe6343f727e747ba30f"
+ },
+ {
+ "id": "rc87-88bce3edcb7646bd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 22,
+ "title": "`BH-0048 Next ${backend} pending runtime start: ${scenario}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "476af5e80cbb02df5aaec81ec5854f9bcbb76b5eafb8afe6343f727e747ba30f"
+ },
+ {
+ "id": "rc87-88bce3edcb7646bd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 22,
+ "title": "`BH-0048 Next ${backend} pending runtime start: ${scenario}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "476af5e80cbb02df5aaec81ec5854f9bcbb76b5eafb8afe6343f727e747ba30f"
+ },
+ {
+ "id": "rc87-88bce3edcb7646bd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 22,
+ "title": "`BH-0048 Next ${backend} pending runtime start: ${scenario}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "476af5e80cbb02df5aaec81ec5854f9bcbb76b5eafb8afe6343f727e747ba30f"
+ },
+ {
+ "id": "rc87-88bce3edcb7646bd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 22,
+ "title": "`BH-0048 Next ${backend} pending runtime start: ${scenario}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "476af5e80cbb02df5aaec81ec5854f9bcbb76b5eafb8afe6343f727e747ba30f"
+ },
+ {
+ "id": "rc87-88bce3edcb7646bd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 22,
+ "title": "`BH-0048 Next ${backend} pending runtime start: ${scenario}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "476af5e80cbb02df5aaec81ec5854f9bcbb76b5eafb8afe6343f727e747ba30f"
+ },
+ {
+ "id": "rc87-88bce3edcb7646bd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 22,
+ "title": "`BH-0048 Next ${backend} pending runtime start: ${scenario}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "476af5e80cbb02df5aaec81ec5854f9bcbb76b5eafb8afe6343f727e747ba30f"
+ },
+ {
+ "id": "rc87-88bce3edcb7646bd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 22,
+ "title": "`BH-0048 Next ${backend} pending runtime start: ${scenario}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "476af5e80cbb02df5aaec81ec5854f9bcbb76b5eafb8afe6343f727e747ba30f"
+ },
+ {
+ "id": "rc87-88bce3edcb7646bd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 22,
+ "title": "`BH-0048 Next ${backend} pending runtime start: ${scenario}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "476af5e80cbb02df5aaec81ec5854f9bcbb76b5eafb8afe6343f727e747ba30f"
+ },
+ {
+ "id": "rc87-14a8d4b1fe715fa4",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-directive-terminators.test.ts",
+ "line": 14,
+ "title": "`Next preserves Sass directive terminators: ${syntax}, explicitCompressed=${explicitCompressed}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "840850210ffe7bc61da082bb09c4b3090c427a1255d93a33460851bded1c275c"
+ },
+ {
+ "id": "rc87-14a8d4b1fe715fa4",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-directive-terminators.test.ts",
+ "line": 14,
+ "title": "`Next preserves Sass directive terminators: ${syntax}, explicitCompressed=${explicitCompressed}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "840850210ffe7bc61da082bb09c4b3090c427a1255d93a33460851bded1c275c"
+ },
+ {
+ "id": "rc87-14a8d4b1fe715fa4",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-directive-terminators.test.ts",
+ "line": 14,
+ "title": "`Next preserves Sass directive terminators: ${syntax}, explicitCompressed=${explicitCompressed}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "840850210ffe7bc61da082bb09c4b3090c427a1255d93a33460851bded1c275c"
+ },
+ {
+ "id": "rc87-14a8d4b1fe715fa4",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-directive-terminators.test.ts",
+ "line": 14,
+ "title": "`Next preserves Sass directive terminators: ${syntax}, explicitCompressed=${explicitCompressed}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "840850210ffe7bc61da082bb09c4b3090c427a1255d93a33460851bded1c275c"
+ },
+ {
+ "id": "rc87-19c1bc462c7d1414",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-directive-terminators.test.ts",
+ "line": 38,
+ "title": "Next preserves the Sass options callback receiver and arguments",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "abaaddb826e76ede8c9fc917ef487e9a782960e46dbc034c3340f70ffd99ccae"
+ },
+ {
+ "id": "rc87-4bd373ae4dfc066b",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-source-offsets.test.ts",
+ "line": 26,
+ "title": "`Next ${syntax} additionalData keeps root diagnostic line`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ce870bb6566141dd505d0040cd6be34b99428e26e65c2f4af15a6998c56acaa"
+ },
+ {
+ "id": "rc87-4bd373ae4dfc066b",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-source-offsets.test.ts",
+ "line": 26,
+ "title": "`Next ${syntax} additionalData keeps root diagnostic line`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ce870bb6566141dd505d0040cd6be34b99428e26e65c2f4af15a6998c56acaa"
+ },
+ {
+ "id": "rc87-7ed77a0e133a85ce",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-source-offsets.test.ts",
+ "line": 36,
+ "title": "Next additionalData does not shift imported partial diagnostics",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "298c946476029d6b76c36d7cbbfa9dc2746efb549bf82fbf22159f3f7a0b3a6e"
+ },
+ {
+ "id": "rc87-b6d90e0c1ffe53bd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-source-offsets.test.ts",
+ "line": 45,
+ "title": "`Next ${syntax} reports Sass errors against authored root after injection`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3361cc4e2c2bfbcde5df8220d5c1550b6ff3f4358d2767356dbf9831f5c85fe5"
+ },
+ {
+ "id": "rc87-b6d90e0c1ffe53bd",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-source-offsets.test.ts",
+ "line": 45,
+ "title": "`Next ${syntax} reports Sass errors against authored root after injection`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3361cc4e2c2bfbcde5df8220d5c1550b6ff3f4358d2767356dbf9831f5c85fe5"
+ },
+ {
+ "id": "rc87-a40074fa232f7772",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-source-offsets.test.ts",
+ "line": 55,
+ "title": "Next labels compiler errors in injected Sass as injected content",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c20762d07877c1dfb5e5f97e8a735992706dc534037d4ba7f74eb18c6458fd2e"
+ },
+ {
+ "id": "rc87-64cc5a89d5e66501",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-source-offsets.test.ts",
+ "line": 63,
+ "title": "Next labels Sass errors in injected content without negative locations",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3e3fa488a83e5bc50d22a948d7c0eb44ac39445c85a71e6a43578f26f6319a02"
+ },
+ {
+ "id": "rc87-b7b2d302381fe351",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-source-offsets.test.ts",
+ "line": 70,
+ "title": "`Next ${syntax} entry preserves imported partial reference ownership`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a71507cba15720f1a8a78be9e4e4c8d85e7e86c5370463ea0a01c44b2659862d"
+ },
+ {
+ "id": "rc87-b7b2d302381fe351",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-sass-source-offsets.test.ts",
+ "line": 70,
+ "title": "`Next ${syntax} entry preserves imported partial reference ownership`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a71507cba15720f1a8a78be9e4e4c8d85e7e86c5370463ea0a01c44b2659862d"
+ },
+ {
+ "id": "rc87-eeb53976909f9e2a",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-static-asset-publication.test.ts",
+ "line": 34,
+ "title": "`static publication delivers resource owners and fresh immutable bytes: nested=${nested}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "59a7d6a90d57dde3ee948e2b95d0c5fa3030ca44ae7c03a6b211892b9ba73048"
+ },
+ {
+ "id": "rc87-eeb53976909f9e2a",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-static-asset-publication.test.ts",
+ "line": 34,
+ "title": "`static publication delivers resource owners and fresh immutable bytes: nested=${nested}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "59a7d6a90d57dde3ee948e2b95d0c5fa3030ca44ae7c03a6b211892b9ba73048"
+ },
+ {
+ "id": "rc87-2fd43ef15aa64ac6",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-static-asset-publication.test.ts",
+ "line": 72,
+ "title": "static preparation rejects output failures and retries after the failure is removed",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8581d8ac87be90e4ee867836aebd5dfb438c8c5e45c7f4b9702e8a2305efdca8"
+ },
+ {
+ "id": "rc87-7af87b1f5e5cacf4",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-static-asset-publication.test.ts",
+ "line": 92,
+ "title": "static CSS loader reports newly discovered resource dependencies in the same invocation",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "89e4f60f45ca4383cd41a89cb2194f8dad72c30a5a51d1dbd339d0d094a4f77c"
+ },
+ {
+ "id": "rc87-1df08c3668c57be4",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-static-asset-publication.test.ts",
+ "line": 114,
+ "title": "a configuration change during composition rejects the older publisher",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4997443a08b30472b0bc34cb9f199818195ac519e42d250ae8c3553d6cc88c03"
+ },
+ {
+ "id": "rc87-3ffff62f115d0510",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-turbopack-css-module.test.ts",
+ "line": 22,
+ "title": "`Turbopack preserves CSS Module type for .module.${extension}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5d00a01352f4c522fe1b7c082a94838d4e0c1078af40ca85e2bf2438cedd4a14"
+ },
+ {
+ "id": "rc87-3ffff62f115d0510",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-turbopack-css-module.test.ts",
+ "line": 22,
+ "title": "`Turbopack preserves CSS Module type for .module.${extension}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5d00a01352f4c522fe1b7c082a94838d4e0c1078af40ca85e2bf2438cedd4a14"
+ },
+ {
+ "id": "rc87-3ffff62f115d0510",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-turbopack-css-module.test.ts",
+ "line": 22,
+ "title": "`Turbopack preserves CSS Module type for .module.${extension}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5d00a01352f4c522fe1b7c082a94838d4e0c1078af40ca85e2bf2438cedd4a14"
+ },
+ {
+ "id": "rc87-70ece16823eaf37e",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-turbopack-css-module.test.ts",
+ "line": 28,
+ "title": "`Turbopack handles imported directives in .module.${extension} once`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1219e467af3980cc193c68a5603a9508465becf0b5af910c7fcf8806eb1a64f"
+ },
+ {
+ "id": "rc87-70ece16823eaf37e",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-turbopack-css-module.test.ts",
+ "line": 28,
+ "title": "`Turbopack handles imported directives in .module.${extension} once`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e1219e467af3980cc193c68a5603a9508465becf0b5af910c7fcf8806eb1a64f"
+ },
+ {
+ "id": "rc87-6b9a4212936ded62",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-turbopack-css-module.test.ts",
+ "line": 34,
+ "title": "Turbopack keeps global Sass global and forwards configured options",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bfe960e1e958693fdb3964e20d03a497c7578df1b2e4ac3f8734894edef2a60d"
+ },
+ {
+ "id": "rc87-22ec46d1aef13960",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-turbopack-css-module.test.ts",
+ "line": 40,
+ "title": "Turbopack supplies project context to native CSS Modules without a directive gate",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ea50f1dd406fc82b8c4b47b669f943c442618464e5b1ecd1ad415b30ced96f60"
+ },
+ {
+ "id": "rc87-7c7e0caf2c6c56f6",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-turbopack-global-animations.test.ts",
+ "line": 28,
+ "title": "general loader keeps global animation references unscoped and emits their keyframes for CSS Modules",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1aca23618e74df4868de60687d15824b61038f8f81531a0a58a7123ae4a70bee"
+ },
+ {
+ "id": "rc87-02b0d910fe126eec",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-css-pipeline.test.ts",
+ "line": 7,
+ "title": "`BH-0051 preserves Next CSS processing, sass=${sass}, lightning=${lightning}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "16644f28478e9b5a8a7024ac82026a6e216e9ef620a4a4a26c9f2b974bc25ac6"
+ },
+ {
+ "id": "rc87-02b0d910fe126eec",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-css-pipeline.test.ts",
+ "line": 7,
+ "title": "`BH-0051 preserves Next CSS processing, sass=${sass}, lightning=${lightning}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "16644f28478e9b5a8a7024ac82026a6e216e9ef620a4a4a26c9f2b974bc25ac6"
+ },
+ {
+ "id": "rc87-02b0d910fe126eec",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-css-pipeline.test.ts",
+ "line": 7,
+ "title": "`BH-0051 preserves Next CSS processing, sass=${sass}, lightning=${lightning}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "16644f28478e9b5a8a7024ac82026a6e216e9ef620a4a4a26c9f2b974bc25ac6"
+ },
+ {
+ "id": "rc87-02b0d910fe126eec",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-css-pipeline.test.ts",
+ "line": 7,
+ "title": "`BH-0051 preserves Next CSS processing, sass=${sass}, lightning=${lightning}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "16644f28478e9b5a8a7024ac82026a6e216e9ef620a4a4a26c9f2b974bc25ac6"
+ },
+ {
+ "id": "rc87-24fae567763f97ff",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-css-pipeline.test.ts",
+ "line": 42,
+ "title": "BH-0051 preserves user rules, nested host conditions and manifest JavaScript route",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "67d51c712c0d9d986056b40b7396a7bcb20f2207544a8f3898cd5e4b7c724a0c"
+ },
+ {
+ "id": "rc87-a45efc80b81a67cf",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-virtual-modules.test.ts",
+ "line": 23,
+ "title": "`Next resolves ${id} before Webpack URI dispatch`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "80f081c7cdf9df2eed245d0bb6b3fbdc88092cf0ccf499e3071dd78347789058"
+ },
+ {
+ "id": "rc87-a45efc80b81a67cf",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-virtual-modules.test.ts",
+ "line": 23,
+ "title": "`Next resolves ${id} before Webpack URI dispatch`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "80f081c7cdf9df2eed245d0bb6b3fbdc88092cf0ccf499e3071dd78347789058"
+ },
+ {
+ "id": "rc87-a45efc80b81a67cf",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-virtual-modules.test.ts",
+ "line": 23,
+ "title": "`Next resolves ${id} before Webpack URI dispatch`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "80f081c7cdf9df2eed245d0bb6b3fbdc88092cf0ccf499e3071dd78347789058"
+ },
+ {
+ "id": "rc87-043ce585d7785179",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-virtual-modules.test.ts",
+ "line": 28,
+ "title": "`Next virtual handling preserves unrelated request ${id}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "376d0c6a2dc4299155746eb594c11e05f9fccafc7f441048f49373b54d7efff2"
+ },
+ {
+ "id": "rc87-043ce585d7785179",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-virtual-modules.test.ts",
+ "line": 28,
+ "title": "`Next virtual handling preserves unrelated request ${id}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "376d0c6a2dc4299155746eb594c11e05f9fccafc7f441048f49373b54d7efff2"
+ },
+ {
+ "id": "rc87-043ce585d7785179",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-virtual-modules.test.ts",
+ "line": 28,
+ "title": "`Next virtual handling preserves unrelated request ${id}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "376d0c6a2dc4299155746eb594c11e05f9fccafc7f441048f49373b54d7efff2"
+ },
+ {
+ "id": "rc87-043ce585d7785179",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-virtual-modules.test.ts",
+ "line": 28,
+ "title": "`Next virtual handling preserves unrelated request ${id}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "376d0c6a2dc4299155746eb594c11e05f9fccafc7f441048f49373b54d7efff2"
+ },
+ {
+ "id": "rc87-043ce585d7785179",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-virtual-modules.test.ts",
+ "line": 28,
+ "title": "`Next virtual handling preserves unrelated request ${id}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "376d0c6a2dc4299155746eb594c11e05f9fccafc7f441048f49373b54d7efff2"
+ },
+ {
+ "id": "rc87-7f0a9ce9e174f543",
+ "package": "next",
+ "file": "packages/next/tests/bug-hunt-webpack-virtual-modules.test.ts",
+ "line": 32,
+ "title": "Next virtual handling tolerates a cancelled resolution",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b20f93ac2394df6980405e8f21c0c88f36f291e8ca11b285507abc84dc202758"
+ },
+ {
+ "id": "rc87-a5f146d3088816a4",
+ "package": "next",
+ "file": "packages/next/tests/css-manifest-import-loader.test.ts",
+ "line": 131,
+ "title": "rebuilds tracked ESM inputs after source changes and output cleanup",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d4f539b6dea54ae7be2064ea1b63b505cd1cf8bc446369772831919206372bac"
+ },
+ {
+ "id": "rc87-80dd1fdb6005c55e",
+ "package": "next",
+ "file": "packages/next/tests/css-manifest-loader.test.ts",
+ "line": 189,
+ "title": "loads emitted globals from project CSS entry files",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "afc0096e436e9cfa4ce499d91f29e46e0724f279b2b2d0d3afe9162e2ac632a8"
+ },
+ {
+ "id": "rc87-7fb8270b968ef94c",
+ "package": "next",
+ "file": "packages/next/tests/dev-hmr-e2e.test.ts",
+ "line": 212,
+ "title": "updates a direct generated CSS import when sources change or appear (turbo)",
+ "runner": "vitest",
+ "kind": "e2e",
+ "sourceDigest": "7ffbd30b05a9cd6dfba5ea08874465176619f43dadb2421e8ca844ef2994c633"
+ },
+ {
+ "id": "rc87-e05f1f92acdaebe0",
+ "package": "next",
+ "file": "packages/next/tests/dev-hmr-e2e.test.ts",
+ "line": 251,
+ "title": "updates separated Module theme resources while preserving ancestor inheritance (webpack)",
+ "runner": "vitest",
+ "kind": "e2e",
+ "sourceDigest": "287e27bbbd696675b7369aa09ddc57709b6449f35fd6fdab2abfc82cd498e9e2"
+ },
+ {
+ "id": "rc87-7c0685837aa0907a",
+ "package": "next",
+ "file": "packages/next/tests/dev-hmr-e2e.test.ts",
+ "line": 284,
+ "title": "updates Master CSS without a full reload (webpack)",
+ "runner": "vitest",
+ "kind": "e2e",
+ "sourceDigest": "fda02e7fe62b04cf782009d7331fd772511b2b1699794f1d1131ec3b6a559626",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "webpack"
+ }
+ },
+ {
+ "id": "rc87-d012229f6d1cf113",
+ "package": "next",
+ "file": "packages/next/tests/next-config.test.ts",
+ "line": 108,
+ "title": "routes native CSS and CSS Modules through the project context without a directive gate",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "608ec471796e5ef2c5ae2409abb48691e89e49c3ba74f4f039ef2c67641d7f78"
+ },
+ {
+ "id": "rc87-548692469ade06a2",
+ "package": "next",
+ "file": "packages/next/tests/next-config.test.ts",
+ "line": 310,
+ "title": "provides an array of instrumentation modules to Next hydration for both bundlers",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "44a849ab3097c8dd75de6a7eb890e57a036b7efc85b9b31d562c8c5a0254a978"
+ },
+ {
+ "id": "rc87-fb47b4bcdb3a4d2a",
+ "package": "next",
+ "file": "packages/next/tests/next-config.test.ts",
+ "line": 424,
+ "title": "rejects runtime switches that contradict the selected mode",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f16af5a88e77dda7b5f7d060d64ab4633fa92db4d3eb9ddd61f53f90b5fdcce3"
+ },
+ {
+ "id": "rc87-77249ec58d2152da",
+ "package": "next",
+ "file": "packages/next/tests/playground.test.ts",
+ "line": 56,
+ "title": "defaults to static CSS without browser runtime assets in webpack",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "635d148b8503594cfeba08bc758b270b8afcef8013d830e772159fe2e3a46677",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "webpack"
+ }
+ },
+ {
+ "id": "rc87-d12956adda4f003e",
+ "package": "next",
+ "file": "packages/next/tests/sass-source-context.test.ts",
+ "line": 12,
+ "title": "`Sass maps subtract additional data for equivalent file URL encodings: ${filename}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e58c296448ef648ad8326ebf0f866bbb1f970127625025b88438f5e12f98f3d2"
+ },
+ {
+ "id": "rc87-d12956adda4f003e",
+ "package": "next",
+ "file": "packages/next/tests/sass-source-context.test.ts",
+ "line": 12,
+ "title": "`Sass maps subtract additional data for equivalent file URL encodings: ${filename}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e58c296448ef648ad8326ebf0f866bbb1f970127625025b88438f5e12f98f3d2"
+ },
+ {
+ "id": "rc87-d12956adda4f003e",
+ "package": "next",
+ "file": "packages/next/tests/sass-source-context.test.ts",
+ "line": 12,
+ "title": "`Sass maps subtract additional data for equivalent file URL encodings: ${filename}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e58c296448ef648ad8326ebf0f866bbb1f970127625025b88438f5e12f98f3d2"
+ },
+ {
+ "id": "rc87-71e2f856b0a2a6cc",
+ "package": "next",
+ "file": "packages/next/tests/sass-source-context.test.ts",
+ "line": 22,
+ "title": "`Sass errors subtract additional data for equivalent file URL encodings: ${filename}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "94573d8689394a7418dc316f5052b626538e1d3a446a7c117e5405eff178b902"
+ },
+ {
+ "id": "rc87-71e2f856b0a2a6cc",
+ "package": "next",
+ "file": "packages/next/tests/sass-source-context.test.ts",
+ "line": 22,
+ "title": "`Sass errors subtract additional data for equivalent file URL encodings: ${filename}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "94573d8689394a7418dc316f5052b626538e1d3a446a7c117e5405eff178b902"
+ },
+ {
+ "id": "rc87-71e2f856b0a2a6cc",
+ "package": "next",
+ "file": "packages/next/tests/sass-source-context.test.ts",
+ "line": 22,
+ "title": "`Sass errors subtract additional data for equivalent file URL encodings: ${filename}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "94573d8689394a7418dc316f5052b626538e1d3a446a7c117e5405eff178b902"
+ },
+ {
+ "id": "rc87-ee1ed047e5cd852e",
+ "package": "next",
+ "file": "packages/next/tests/sass-source-context.test.ts",
+ "line": 35,
+ "title": "Sass errors from a distinct virtual source keep their original location",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5fc6d8e0cc6c92530769443fa47ccf593890d3d6cbe22e8a72457bc2834957fb"
+ },
+ {
+ "id": "rc87-5386ace31e635301",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 34,
+ "title": "verified unchanged inputs skip registration, reconciliation, composition and CSS writes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c9a0e1f5ee10acb6ed3252b018d9db4e0e0cf7d720c534eff18633b5627da852"
+ },
+ {
+ "id": "rc87-f2c2d8c1535af85f",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 49,
+ "title": "class edits reuse the stylesheet collection, while CSS and processed inputs invalidate it",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "208de719020a6faa2ce5ec00ce3eed0c47621e913d9c1fa376c45489a7d3bba1"
+ },
+ {
+ "id": "rc87-ea5728910e983954",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 72,
+ "title": "new CSS entries invalidate publication reuse even with unchanged markup",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b6e364d94efe28f73e3db9728ed1ed8522a8a8ef8424ef42416d4593de04a6e1"
+ },
+ {
+ "id": "rc87-413e9efe165921a2",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 83,
+ "title": "`rebuilds a disposable publication cache: ${failure}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "756e9445dca7853550dd70b02b1b3884c4afe8fccb44aedcfe83c64860e886c9"
+ },
+ {
+ "id": "rc87-413e9efe165921a2",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 83,
+ "title": "`rebuilds a disposable publication cache: ${failure}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "756e9445dca7853550dd70b02b1b3884c4afe8fccb44aedcfe83c64860e886c9"
+ },
+ {
+ "id": "rc87-413e9efe165921a2",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 83,
+ "title": "`rebuilds a disposable publication cache: ${failure}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "756e9445dca7853550dd70b02b1b3884c4afe8fccb44aedcfe83c64860e886c9"
+ },
+ {
+ "id": "rc87-413e9efe165921a2",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 83,
+ "title": "`rebuilds a disposable publication cache: ${failure}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "756e9445dca7853550dd70b02b1b3884c4afe8fccb44aedcfe83c64860e886c9"
+ },
+ {
+ "id": "rc87-413e9efe165921a2",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 83,
+ "title": "`rebuilds a disposable publication cache: ${failure}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "756e9445dca7853550dd70b02b1b3884c4afe8fccb44aedcfe83c64860e886c9"
+ },
+ {
+ "id": "rc87-413e9efe165921a2",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 83,
+ "title": "`rebuilds a disposable publication cache: ${failure}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "756e9445dca7853550dd70b02b1b3884c4afe8fccb44aedcfe83c64860e886c9"
+ },
+ {
+ "id": "rc87-413e9efe165921a2",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 83,
+ "title": "`rebuilds a disposable publication cache: ${failure}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "756e9445dca7853550dd70b02b1b3884c4afe8fccb44aedcfe83c64860e886c9"
+ },
+ {
+ "id": "rc87-be7ff267bf2415a8",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 107,
+ "title": "a fresh process uses the publication without compiling and retains all dependency hooks",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cd9047ce3582133e553fa76e008bfe5eaab2c886270405bd54427a1245af0c75"
+ },
+ {
+ "id": "rc87-967df7d54e8e3dad",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 130,
+ "title": "an edit during cache verification retries instead of accepting the old publication",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a11fdfe1b67fb97d11b70f8f7f525b0380362e609626c39070df26b1a2393040"
+ },
+ {
+ "id": "rc87-dd00861e82ebe601",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 144,
+ "title": "same-mtime ignore changes invalidate the scanner policy as well as publication reuse",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4e29689380224355932d4d6c7c56a8f15a5ede03e51a0efaafcfaba23dd2fba1"
+ },
+ {
+ "id": "rc87-09680deaea2a5c53",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 158,
+ "title": "explicit source globs conservatively rebuild to discover new ignored inputs",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "96c693833fba4b18549d205c3568df413050b4d88d148ceffe84dc41c85e3920"
+ },
+ {
+ "id": "rc87-f0d995fc3e4146aa",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 170,
+ "title": "concurrent module notifications perform one composition for the shared current source set",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "68fae025fef80a2644ba9c691144956ea8bfb737ac52dff514a4a3d2a8a74549"
+ },
+ {
+ "id": "rc87-0ad02f6dc749f6d1",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 180,
+ "title": "replacement, shared references and last-reference deletion agree with a fresh build",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9959a3ae09340b14853b4c381c1adbda862453e6272a408cbebbd21143fbe9bf"
+ },
+ {
+ "id": "rc87-8444b6a2a9ac5535",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 204,
+ "title": "independent workers compile one changed snapshot once and subsequent publishers reuse it",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "48c0a744ba3ec16b4d05c5e53829a8c6d94ec39ba2fda79cc81b53cdcc4d4d02"
+ },
+ {
+ "id": "rc87-e536a145bf424848",
+ "package": "next",
+ "file": "packages/next/tests/static-cache.test.ts",
+ "line": 230,
+ "title": "package CSS entry changes invalidate cached resolution even when old files remain unchanged",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1cc7c30e35a1d3e78b3a96bc359ec0fd40efab7f8d0630d019e97ca9028c3279"
+ },
+ {
+ "id": "rc87-a761e6b9726e84d2",
+ "package": "next",
+ "file": "packages/next/tests/static-local-css-e2e.test.ts",
+ "line": 14,
+ "title": "delivers project theme variables without @reference in Next static-local-css --turbo mode",
+ "runner": "vitest",
+ "kind": "e2e",
+ "sourceDigest": "b9a98efc92f2ef40a8ce1bce624f9120bcebb2e945469654e370377a4add6e0b",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static-local-css | --turbo | false"
+ }
+ },
+ {
+ "id": "rc87-be7d8e765ed90815",
+ "package": "next",
+ "file": "packages/next/tests/static-local-css-e2e.test.ts",
+ "line": 14,
+ "title": "delivers project theme variables without @reference in Next static-local-css --webpack mode",
+ "runner": "vitest",
+ "kind": "e2e",
+ "sourceDigest": "b9a98efc92f2ef40a8ce1bce624f9120bcebb2e945469654e370377a4add6e0b",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "static-local-css | --webpack | false"
+ }
+ },
+ {
+ "id": "rc87-122f744f3f491f03",
+ "package": "next",
+ "file": "packages/next/tests/static-local-css-e2e.test.ts",
+ "line": 14,
+ "title": "delivers project theme variables without @reference in Next static-module-reference --turbo mode",
+ "runner": "vitest",
+ "kind": "e2e",
+ "sourceDigest": "b9a98efc92f2ef40a8ce1bce624f9120bcebb2e945469654e370377a4add6e0b",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "static-module-reference | --turbo | true"
+ }
+ },
+ {
+ "id": "rc87-e3109819ed67770d",
+ "package": "next",
+ "file": "packages/next/tests/static-local-css-e2e.test.ts",
+ "line": 14,
+ "title": "delivers project theme variables without @reference in Next static-module-reference --webpack mode",
+ "runner": "vitest",
+ "kind": "e2e",
+ "sourceDigest": "b9a98efc92f2ef40a8ce1bce624f9120bcebb2e945469654e370377a4add6e0b",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "static-module-reference | --webpack | true"
+ }
+ },
+ {
+ "id": "rc87-60de182ebbd72e74",
+ "package": "next",
+ "file": "packages/next/tests/static-queue.test.ts",
+ "line": 10,
+ "title": "coalesces notifications only until capture; later notifications wait for a fresh round",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "70b5778827a5200d172f15dab0a9e835d4a10d7e082f6c3c5833a84bca81559f"
+ },
+ {
+ "id": "rc87-871312d51eade37a",
+ "package": "next",
+ "file": "packages/next/tests/static-queue.test.ts",
+ "line": 36,
+ "title": "explicit stylesheet inputs remain ordered and a failed operation does not poison the queue",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1352f7c8c7b464316287410184cfc4e1f341d967c787d12bcb8f8960b9a6595d"
+ },
+ {
+ "id": "rc87-8d6747c1e808d33d",
+ "package": "next",
+ "file": "packages/next/tests/static-snapshot-reads.test.ts",
+ "line": 15,
+ "title": "one immutable read supplies both extraction and fingerprint; later snapshots reread bytes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1a4135d3fa9f58f29e893ed6707429798af9ed33db4ab74d59867f91c0c729c2"
+ },
+ {
+ "id": "rc87-feaf315cedfb5e35",
+ "package": "next",
+ "file": "packages/next/tests/static-snapshot-reads.test.ts",
+ "line": 36,
+ "title": "a stable edit keeps four verification snapshots but reads each TSX only once per snapshot",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c1b5931146865912a5098e3b219c152be0bc8814b8cf71ee356a1c32415d5f0d"
+ },
+ {
+ "id": "rc87-799d78ab04cf33b5",
+ "package": "next",
+ "file": "packages/next/tests/static-snapshot-reads.test.ts",
+ "line": 60,
+ "title": "does not walk the actual bundler output tree during complete input discovery",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f4228c37ac61f559b240d4bf3f8a7958fcf1d129e857d2f1d48afb8eb69dd422"
+ },
+ {
+ "id": "rc87-00018c0d7b9b10eb",
+ "package": "next",
+ "file": "packages/next/tests/static-snapshot.test.ts",
+ "line": 29,
+ "title": "independent static workers publish the full current source set across edits and failures",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a955d277cfcbff67fbaafb74b410c218bac3bbf6d52c01b7d345f7d55168e0c1"
+ },
+ {
+ "id": "rc87-e71466e11366c6f4",
+ "package": "next",
+ "file": "packages/next/tests/static-snapshot.test.ts",
+ "line": 80,
+ "title": "a source edit during composition retries with a complete fresh snapshot",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9d284d1ed3ee10c07ac3fd215a2d985df633a4f60095e52872867b9641ed5976"
+ },
+ {
+ "id": "rc87-ff0c3a650cc27b96",
+ "package": "next",
+ "file": "packages/next/tests/static-state.test.ts",
+ "line": 9,
+ "title": "versioned RegExp transport preserves flags and changes the configuration fingerprint",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1aa98f943304aaf4d60626232a24e0fea1971240702cfdaaa56eb844d439e8b1"
+ },
+ {
+ "id": "rc87-4538ff2dcff0f1be",
+ "package": "next",
+ "file": "packages/next/tests/static-state.test.ts",
+ "line": 19,
+ "title": "publication lock serializes independent callers and releases after failure",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a35ac1d9e107eb1719e90d781f2956fce6172a02d161895e5ee63b1c62b29911"
+ },
+ {
+ "id": "rc87-e963ccb66120edfb",
+ "package": "next",
+ "file": "packages/next/tests/static-state.test.ts",
+ "line": 42,
+ "title": "independent processes serialize publication and safely race abandoned-lock recovery",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8aa193f62810d7178420c9275047ab5c143300e57fe2bd4d0c944acd93285d76"
+ },
+ {
+ "id": "rc87-6730b5946a14a412",
+ "package": "next",
+ "file": "packages/next/tests/static-state.test.ts",
+ "line": 65,
+ "title": "processed stylesheet inputs invalidate when their host dependencies change",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5d841e3198ad66d68ceb55a74e0701c61ae42d18c623176a1541a45267e8de26"
+ },
+ {
+ "id": "rc87-7fa910196a8216fc",
+ "package": "next",
+ "file": "packages/next/tests/static-watch.test.ts",
+ "line": 4,
+ "title": "publication bookkeeping never feeds back into the project watcher; CSS and state remain inputs",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9860a15d1be1b52670d3f37fbb993a3c1c84e0d9bc6b54041a79a779460363aa"
+ },
+ {
+ "id": "rc87-b6be39c85a280a13",
+ "package": "next",
+ "file": "packages/next/tests/static-watch.test.ts",
+ "line": 15,
+ "title": "preserves user glob ignores without converting their semantics",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1775405b4fbd911f5017649eeb956eedc7cd87fc257b848c5f9c34f7d1655f59"
+ },
+ {
+ "id": "rc87-ef3e1fe185ffa452",
+ "package": "next",
+ "file": "packages/next/tests/static.test.ts",
+ "line": 118,
+ "title": "keeps Webpack module watches and lets generated CSS discover new sources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7e9a2e585e1d3ed7527e63f63e58055c786a1020a68cdb7d01c86bc9e1ee32c1"
+ },
+ {
+ "id": "rc87-acee3da5c2af9e00",
+ "package": "next",
+ "file": "packages/next/tests/static.test.ts",
+ "line": 184,
+ "title": "publishes complete CSS in independent workers before source loaders run, including MDX",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "608ecbdb4147bdf395fb03f5be66f0a05698e7bf611f57e2a1578199c7c3ba85"
+ },
+ {
+ "id": "rc87-95124d620ab37fe6",
+ "package": "next",
+ "file": "packages/next/tests/stylesheet-loader.test.ts",
+ "line": 38,
+ "title": "passes published static sidecars through without rebuilding the project manifest",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8c244f6cfe4f065c126a647e0c56285da9e4bb2a31b379b2087722a4b757ea41"
+ },
+ {
+ "id": "rc87-b29de2202d24aaca",
+ "package": "next",
+ "file": "packages/next/tests/stylesheet-loader.test.ts",
+ "line": 51,
+ "title": "relocates global token URLs through the resource delivery graph",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3dd75fb9a606823fbfd9059f7bdb8ab360956f4ab97230cd281adf710a5c51e1"
+ },
+ {
+ "id": "rc87-d53823160d53dc11",
+ "package": "next",
+ "file": "packages/next/tests/stylesheet-loader.test.ts",
+ "line": 68,
+ "title": "shares global resources across Modules and republishes referenced changes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9b2b2cfd122d312fddf7ad988b01a231efe87492afd4ecef23758e1f54f5a13c"
+ },
+ {
+ "id": "rc87-1ef081d606075249",
+ "package": "next",
+ "file": "packages/next/tests/stylesheet-loader.test.ts",
+ "line": 190,
+ "title": "lowers referenced mode directives in a locally imported stylesheet",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e156aa7e33af488b909b6887453dec2e579bdbfb5673b3686724f0d08cf964af"
+ },
+ {
+ "id": "rc87-a450e38c18b5dfab",
+ "package": "next",
+ "file": "packages/next/tests/stylesheet-loader.test.ts",
+ "line": 208,
+ "title": "emits mode variables used by native CSS in referenced button.css",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a9c7ee8a056979ba437c0db1e0a72b85c749c0018ed17abf9cbf32baa01c3479",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "button.css"
+ }
+ },
+ {
+ "id": "rc87-c60634dac0cf893c",
+ "package": "next",
+ "file": "packages/next/tests/stylesheet-loader.test.ts",
+ "line": 208,
+ "title": "emits mode variables used by native CSS in referenced button.module.css",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a9c7ee8a056979ba437c0db1e0a72b85c749c0018ed17abf9cbf32baa01c3479",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "button.module.css"
+ }
+ },
+ {
+ "id": "rc87-6a462448ca49354c",
+ "package": "nuxt",
+ "file": "packages/nuxt/tests/bug-hunt-progressive.test.ts",
+ "line": 9,
+ "title": "loads its client manifest and handles new runtime classes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ed16a8ddc981f4a0909fea33ef8077416bb02c0db36d1924c2600db646e7781e"
+ },
+ {
+ "id": "rc87-706cbc97e661481f",
+ "package": "nuxt",
+ "file": "packages/nuxt/tests/bug-hunt-theme.test.ts",
+ "line": 11,
+ "title": "BH-0036 compiles theme variables before runtime uses emitted globals",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eaa1cf6d7aa0789758a0a27e6188303081d35468954606b640dcb02c625e2ee4"
+ },
+ {
+ "id": "rc87-1d63e20879efa548",
+ "package": "nuxt",
+ "file": "packages/nuxt/tests/static.test.ts",
+ "line": 34,
+ "title": "delivers referenced native variables through a scoped Vue style",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c95e428822745d325176934ac54dfab2a04efdf32c850c9301032b8417639c7c"
+ },
+ {
+ "id": "rc87-36be15cd7e8139e7",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 223,
+ "title": "matches the readable preset sources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e2b854854ad4044d0178e2c2f97659066502eb70f5bf591aee7e40ebe7cf8ccc"
+ },
+ {
+ "id": "rc87-3ede4740c64bf3fd",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 249,
+ "title": "matches the readable preset native CSS",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "767cabb827deca81caa716177b71c0dc331948efb5446af6d3a53cdbf8c5c470"
+ },
+ {
+ "id": "rc87-4cd87490a2a3ed8c",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 263,
+ "title": "matches the CSS-authored preset manifest facets",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f02a4ccf2004e45966ca3aa7b5d4f9b383d80a9714aba462daa080d37e1106f1"
+ },
+ {
+ "id": "rc87-84a357c9610bed8d",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 276,
+ "title": "does not publish the removed px inline alias",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7b240b964d92234a421e7e7638626cb5486d8527923af88efc38e79a1715dcc5"
+ },
+ {
+ "id": "rc87-07991bc7097ea090",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 280,
+ "title": "only publishes the full starting-style variant",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "967c0cead846feceda620537a252d2fff52dc5a1be8cd9e874e278431e00faf3"
+ },
+ {
+ "id": "rc87-350a56899da56fc9",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 291,
+ "title": "does not publish removed static utility shortcuts",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d69588112c950a31c7eafbcd5fa8b38b4d364df1b3009b1780aea920894c02b3"
+ },
+ {
+ "id": "rc87-edd718980dcd1cf4",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 300,
+ "title": "uses explicit preset mode branches without global engine mode settings",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8f2215808be0f59c27c7f9e97da1e1e932094cbc1d2a071b54ccbdbd02e6ef06"
+ },
+ {
+ "id": "rc87-a18680bc41e4bad8",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 310,
+ "title": "keeps preset variable alias refs inside registered namespaces",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "11c7dbc326117753b964e25f12400b81bbfa5d6513e273bd6c8228f066080baf"
+ },
+ {
+ "id": "rc87-59904b404f4f5ed1",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 323,
+ "title": "preserves the compiled default registry",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1e2a3082a855f41845da5e5dfa4d646dd0fc84d9f96099c825dc9808d58ce909"
+ },
+ {
+ "id": "rc87-9584cce70095a24f",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 349,
+ "title": "executes CSS-authored semantic and enum pattern utilities",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "82070dcec4ecb2f28b1dc2fe6bf09db58b63d1e8582ff9711b7fb14fe9de3155"
+ },
+ {
+ "id": "rc87-4f83502f04c08d6d",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 464,
+ "title": "keeps named tokens separate from native declaration values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "10b18de7d179c63a441cea5352aa8f023cbc748b180a2ea280ad1db70e7b1a10"
+ },
+ {
+ "id": "rc87-b6722055df147670",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 615,
+ "title": "preserves native declarations and explicit property aliases",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "00d5e6070946a9f66adf1c501f681ead771dba67db56d9a73b9d9b0f5af70768"
+ },
+ {
+ "id": "rc87-1e16856b947a8124",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 644,
+ "title": "moves native value namespace utilities out of matcher definitions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c3ffba66e967d926eec040c590bc780f9c2fd88a3df8313108950ced70936759"
+ },
+ {
+ "id": "rc87-cadc1ca56e0d3dfd",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 668,
+ "title": "keeps curated key aliases out of utility matcher keys",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "517adb02dc768fa78740c90dee4fc0c2c1b9712cb04ae039a2d1e8a84e3908a7"
+ },
+ {
+ "id": "rc87-e5cbe9f68326daf9",
+ "package": "preset",
+ "file": "packages/preset/tests/default-manifest.test.ts",
+ "line": 686,
+ "title": "keeps compiled utility registry indexes stable and addressable",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "31df05e403d05c4e05f0eb11892221490235ae9d8d279580e39065c20c7d5612"
+ },
+ {
+ "id": "rc87-f059fc9a9fa3c4e2",
+ "package": "preset",
+ "file": "packages/preset/tests/design-tokens.test.ts",
+ "line": 149,
+ "title": "keeps primitive font, spacing, radius, breakpoint, container, color, shadow, and motion tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "996bd0e20c1bcb4cc7a03f63f53b78e204f2b9bfeb1121e5eef76e92d15ee500"
+ },
+ {
+ "id": "rc87-b3c5d9a20c8eeb13",
+ "package": "preset",
+ "file": "packages/preset/tests/design-tokens.test.ts",
+ "line": 226,
+ "title": "removes canvas, product, and expanded hue role tokens from the default preset",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c866ae7d9a26488941a52ce83139ff9ba721bdb082cdb259a96ed2c97aeb8b2d"
+ },
+ {
+ "id": "rc87-6e57a6f78c208e4a",
+ "package": "preset",
+ "file": "packages/preset/tests/design-tokens.test.ts",
+ "line": 232,
+ "title": "keeps surface color roles mode-specific",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "75516ba6d74dd01eedae0f607c5859660082faf189b74176e8037e8a8186477f"
+ },
+ {
+ "id": "rc87-21ac507b79e53def",
+ "package": "preset",
+ "file": "packages/preset/tests/design-tokens.test.ts",
+ "line": 255,
+ "title": "keeps shadow tokens separated with subtle mode-specific edges",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a7a1da80b40a3ad778ad800be07de4dfbbc027c32993ef8c58d42a503dfa05ca"
+ },
+ {
+ "id": "rc87-e0a8a76a5cbfef8a",
+ "package": "preset",
+ "file": "packages/preset/tests/design-tokens.test.ts",
+ "line": 283,
+ "title": "keeps base hue, line role, text role, and text hue aliases mode-specific",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ab1738e3a84e88a0567a829cf99c54cf07dc392ec85debffe6d531b76f65dc4c"
+ },
+ {
+ "id": "rc87-ee982733d7ea8e4a",
+ "package": "preset",
+ "file": "packages/preset/tests/design-tokens.test.ts",
+ "line": 336,
+ "title": "precomputes default breakpoint and container at-rule aliases",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2b5cd8f28bd720597cbd89ea7154887e4b8befcd3d1b8ce20e73d58392136fcd"
+ },
+ {
+ "id": "rc87-f1054506aee041f4",
+ "package": "preset",
+ "file": "packages/preset/tests/design-tokens.test.ts",
+ "line": 347,
+ "title": "does not publish synthetic negative number tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "739f8ef6c6232668d203db7370848dcf35d7e135e9dd9f3525bc0123f6dfe7cd"
+ },
+ {
+ "id": "rc87-95f7ba984215aa9a",
+ "package": "preset",
+ "file": "packages/preset/tests/design-tokens.test.ts",
+ "line": 354,
+ "title": "executes built-in registry records with foundation role tokens only",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2a55504216baaac65ef753688fab3825a60b658df103a25dfd5c51271ae57028"
+ },
+ {
+ "id": "rc87-1fc8a6f10ae2da53",
+ "package": "preset",
+ "file": "packages/preset/tests/design-tokens.test.ts",
+ "line": 409,
+ "title": "keeps project text and line role namespaces available",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f35cfdbf134451d671adfd89a918f92b6854678505b9416f79a3269b243cf826"
+ },
+ {
+ "id": "rc87-8bb45c2a6b3fc4f2",
+ "package": "preset",
+ "file": "packages/preset/tests/natural-colors.test.ts",
+ "line": 20,
+ "title": "`${family} has thirteen fixed colors and both mode-aware aliases`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "696164678a0b81cd7e4fac8204495373ee25f62c9a590bc715ab385fc5f779ae"
+ },
+ {
+ "id": "rc87-e409003e1b434b55",
+ "package": "preset",
+ "file": "packages/preset/tests/natural-colors.test.ts",
+ "line": 44,
+ "title": "the public theme entry includes every token from the internal color source",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cff28294fb93a930db6c3e18416b630d60b4fb690992b2a50de1520f3f2970a9"
+ },
+ {
+ "id": "rc87-97ba1b751f507b0f",
+ "package": "preset",
+ "file": "packages/preset/tests/natural-colors.test.ts",
+ "line": 49,
+ "title": "fixed colors, text aliases, borders, gradients and alpha use the Rust engine",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fcb52a0b4d38b86c60622b340c3541b45a695ccc4422b969a0f76409164fc95b"
+ },
+ {
+ "id": "rc87-ef052529ebde0da6",
+ "package": "preset",
+ "file": "packages/preset/tests/natural-colors.test.ts",
+ "line": 67,
+ "title": "every fixed shade is emitted on demand, including both endpoints",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cf59e71f3218e61d769c5f997713b4448f6aaaf20d79d01a06b23850f759d881"
+ },
+ {
+ "id": "rc87-8423a423a2cdb601",
+ "package": "preset",
+ "file": "packages/preset/tests/natural-colors.test.ts",
+ "line": 79,
+ "title": "olive follows the preset while a literal retains the native CSS olive color",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "43fb79d5db5dacda23c1346d9dfb66b51be7aea1bab8ed0d3c40c6d7db6f9de8"
+ },
+ {
+ "id": "rc87-a23469813c89fa44",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/bug-hunt-frame.test.ts",
+ "line": 6,
+ "title": "BH-0009 tracks class updates in a same-origin iframe Document root",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "a8e0e89815b0e9c4f4fe3b441f1b0eb2884dc6241dfd16045ad8ca1229fb1ec9"
+ },
+ {
+ "id": "rc87-30836a75e15b36eb",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/bug-hunt-frame.test.ts",
+ "line": 34,
+ "title": "`BH-0009 handles iframe ${kind} subtree addition, attributes, moves and removal`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "14e5c661c818200d1e76ee1503a90bcd36c1454bd732d92826a809d20e4db41c"
+ },
+ {
+ "id": "rc87-30836a75e15b36eb",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/bug-hunt-frame.test.ts",
+ "line": 34,
+ "title": "`BH-0009 handles iframe ${kind} subtree addition, attributes, moves and removal`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "14e5c661c818200d1e76ee1503a90bcd36c1454bd732d92826a809d20e4db41c"
+ },
+ {
+ "id": "rc87-4f9a650de0bd5062",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/bug-hunt-global-csp.test.ts",
+ "line": 7,
+ "title": "BH-0008 built global runtime hydrates and updates under CSP without unsafe-eval",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "07d7185d943ee7619d4c0a6b587fdaac09ce465829535a14edbbce425bef9cb6"
+ },
+ {
+ "id": "rc87-63e9905fad0d4cfc",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/bug-hunt-hydration.test.ts",
+ "line": 4,
+ "title": "BH-0008: external hydration works with modules and Wasm allowed but unsafe-eval denied",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "7458b8e81471613364242020d2047b7dbfeed1397cb69db338a20f4a3b9199fb"
+ },
+ {
+ "id": "rc87-0305f053565d8a17",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/bug-hunt-static-retention.test.ts",
+ "line": 5,
+ "title": "`BH-0003: static dependency remains through DOM removal and explicit rule deletion, inline=${inline}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "8bd0410bab8c6404bcf1b21ffe57fff9f4f39e78a8da0702cf3de17da8a93863"
+ },
+ {
+ "id": "rc87-0305f053565d8a17",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/bug-hunt-static-retention.test.ts",
+ "line": 5,
+ "title": "`BH-0003: static dependency remains through DOM removal and explicit rule deletion, inline=${inline}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "8bd0410bab8c6404bcf1b21ffe57fff9f4f39e78a8da0702cf3de17da8a93863"
+ },
+ {
+ "id": "rc87-bfed2500984699c7",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/class-usages.test.ts",
+ "line": 122,
+ "title": "moves class subtrees across document and shadow roots without stale counts",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "8ad691efd55389dbce920c3a967178832992b201f7bc79b4877495ff04bef567"
+ },
+ {
+ "id": "rc87-1b9df17f2fade4e8",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 24,
+ "title": "refresh creates rules for previously unknown DOM classes and removes obsolete rules",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "e77272a69aaeaccc04d2631c39f9208b496662f52c5eea38346f369477268206"
+ },
+ {
+ "id": "rc87-55f56081a15461cf",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 42,
+ "title": "`refresh preserves pending DOM additions when the manifest is ${invalid ? 'invalid' : 'valid'}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "307e04f0baac8b94e82c1585807f203875ecf8ea2d3c9e874f6a7aa175237051"
+ },
+ {
+ "id": "rc87-55f56081a15461cf",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 42,
+ "title": "`refresh preserves pending DOM additions when the manifest is ${invalid ? 'invalid' : 'valid'}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "307e04f0baac8b94e82c1585807f203875ecf8ea2d3c9e874f6a7aa175237051"
+ },
+ {
+ "id": "rc87-819bf67184b15473",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 61,
+ "title": "`hydration validates utility CSSOM positions: ${change}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "e340f69b2f98f8369d8ba01f14a5b31518df5c1b49213dd4784feb62d6ef4302"
+ },
+ {
+ "id": "rc87-819bf67184b15473",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 61,
+ "title": "`hydration validates utility CSSOM positions: ${change}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "e340f69b2f98f8369d8ba01f14a5b31518df5c1b49213dd4784feb62d6ef4302"
+ },
+ {
+ "id": "rc87-819bf67184b15473",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 61,
+ "title": "`hydration validates utility CSSOM positions: ${change}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "e340f69b2f98f8369d8ba01f14a5b31518df5c1b49213dd4784feb62d6ef4302"
+ },
+ {
+ "id": "rc87-819bf67184b15473",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 61,
+ "title": "`hydration validates utility CSSOM positions: ${change}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "e340f69b2f98f8369d8ba01f14a5b31518df5c1b49213dd4784feb62d6ef4302"
+ },
+ {
+ "id": "rc87-819bf67184b15473",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 61,
+ "title": "`hydration validates utility CSSOM positions: ${change}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "e340f69b2f98f8369d8ba01f14a5b31518df5c1b49213dd4784feb62d6ef4302"
+ },
+ {
+ "id": "rc87-c022a954a50772a4",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 87,
+ "title": "hydrates shared resource dependencies from actual server output without fallback",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "aebbe14dda3caf8ed8c8a9041f42d1af9a8fc06310613aa426c2ab5a9d562c81"
+ },
+ {
+ "id": "rc87-6c8b1b2b6133da08",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 113,
+ "title": "reordered theme buckets cannot silently change the dark-mode cascade",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "a89dfed784bf8beba7dcedb1f0ed0d64ddadf71a9112c2ce1046e563bbcb7ae2"
+ },
+ {
+ "id": "rc87-271cea710c3f6ee0",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 134,
+ "title": "decimal media queries and quoted attribute values match in the browser",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "0a1beeae8d7b0dc9e7c3e0627a543baa38a50555e61bcfa944c302e5cccd6bf4"
+ },
+ {
+ "id": "rc87-bfbcaa76b9d6a1a2",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 149,
+ "title": "`hydration validates multiple CSSOM nodes per rule across all utility layers: ${change}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "2a750b64008b52a74d680f8b31770c2abf423d230a4a76650e465f915e8d78b7"
+ },
+ {
+ "id": "rc87-bfbcaa76b9d6a1a2",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 149,
+ "title": "`hydration validates multiple CSSOM nodes per rule across all utility layers: ${change}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "2a750b64008b52a74d680f8b31770c2abf423d230a4a76650e465f915e8d78b7"
+ },
+ {
+ "id": "rc87-bfbcaa76b9d6a1a2",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 149,
+ "title": "`hydration validates multiple CSSOM nodes per rule across all utility layers: ${change}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "2a750b64008b52a74d680f8b31770c2abf423d230a4a76650e465f915e8d78b7"
+ },
+ {
+ "id": "rc87-bfbcaa76b9d6a1a2",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 149,
+ "title": "`hydration validates multiple CSSOM nodes per rule across all utility layers: ${change}`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "2a750b64008b52a74d680f8b31770c2abf423d230a4a76650e465f915e8d78b7"
+ },
+ {
+ "id": "rc87-d4e137ee14c0beca",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/correctness-regressions.test.ts",
+ "line": 186,
+ "title": "hydration rejects CSSOM nodes dropped by the browser",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "34f9f2ad9c6522691603e8f0769aa97cb56ed11ea2ed4c9bea7a58ac254bdc2b"
+ },
+ {
+ "id": "rc87-697e41798ac737e0",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/execution-state.test.ts",
+ "line": 5,
+ "title": "runtime synchronizes warm ensures, deletions and globals with batched execution state",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "37776e1ceb30db6c95c703b8bfe4e054623290bdef2970ebdd0b4ad1cd958835"
+ },
+ {
+ "id": "rc87-476b5813bb66b78c",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/final-semantic-modes.test.ts",
+ "line": 33,
+ "title": "`${mode}: explicit mode branches, inheritance and repeated query wrappers`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "75f8d996314017754f55023611b9a562bbb132fdb40e5402ce2e67e48d3aff66"
+ },
+ {
+ "id": "rc87-476b5813bb66b78c",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/final-semantic-modes.test.ts",
+ "line": 33,
+ "title": "`${mode}: explicit mode branches, inheritance and repeated query wrappers`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "75f8d996314017754f55023611b9a562bbb132fdb40e5402ce2e67e48d3aff66"
+ },
+ {
+ "id": "rc87-476b5813bb66b78c",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/final-semantic-modes.test.ts",
+ "line": 33,
+ "title": "`${mode}: explicit mode branches, inheritance and repeated query wrappers`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "75f8d996314017754f55023611b9a562bbb132fdb40e5402ce2e67e48d3aff66"
+ },
+ {
+ "id": "rc87-476b5813bb66b78c",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/final-semantic-modes.test.ts",
+ "line": 33,
+ "title": "`${mode}: explicit mode branches, inheritance and repeated query wrappers`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "75f8d996314017754f55023611b9a562bbb132fdb40e5402ce2e67e48d3aff66"
+ },
+ {
+ "id": "rc87-25df0f8f677a5177",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/final-semantic-modes.test.ts",
+ "line": 70,
+ "title": "explicit host mode guards apply to shadow descendants without crossing boundaries",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "2c6c476b053fa4f7aae0c04baecbfe6496c2b5b432794449acb40059830009a0"
+ },
+ {
+ "id": "rc87-a0b78ca12b27b6ba",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/freeze-cascade-matrix.test.ts",
+ "line": 35,
+ "title": "`${mode}: value priority respects native importance and layer boundaries`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "7ccf32ed5616a665b5e352c7f7f4907a585358fddfa6ea5dca515f63c159f7df"
+ },
+ {
+ "id": "rc87-a0b78ca12b27b6ba",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/freeze-cascade-matrix.test.ts",
+ "line": 35,
+ "title": "`${mode}: value priority respects native importance and layer boundaries`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "7ccf32ed5616a665b5e352c7f7f4907a585358fddfa6ea5dca515f63c159f7df"
+ },
+ {
+ "id": "rc87-a0b78ca12b27b6ba",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/freeze-cascade-matrix.test.ts",
+ "line": 35,
+ "title": "`${mode}: value priority respects native importance and layer boundaries`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "7ccf32ed5616a665b5e352c7f7f4907a585358fddfa6ea5dca515f63c159f7df"
+ },
+ {
+ "id": "rc87-a0b78ca12b27b6ba",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/freeze-cascade-matrix.test.ts",
+ "line": 35,
+ "title": "`${mode}: value priority respects native importance and layer boundaries`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "7ccf32ed5616a665b5e352c7f7f4907a585358fddfa6ea5dca515f63c159f7df"
+ },
+ {
+ "id": "rc87-5d560f8098718cfe",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
+ "line": 251,
+ "title": "progressive hydration uses JSON modules without constructing a loader or calling fetch",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "22139a697fb9443140839e8cdbf4b2e0a6d87a2b1abac6a6881eddef7605f815"
+ },
+ {
+ "id": "rc87-3c3c79a9bd560910",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
+ "line": 314,
+ "title": "external hydration rejects an unsupported JSON module manifest without fetch",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "8e16ef448200605295b4cef7e27260dd8ac3539d5f31802e877f5b3c7650539b"
+ },
+ {
+ "id": "rc87-81017bda3a0a433d",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
+ "line": 368,
+ "title": "external hydration does not fetch after a JSON import request fails",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "c44bee73397b53ef689ac4994a2b9e2221a91d9582bb0c8450128225f3aa4a0a"
+ },
+ {
+ "id": "rc87-ac48cb8b3e2fe23a",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
+ "line": 413,
+ "title": "external hydration reports HTTP failures as structured diagnostics",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "d9b1311a89b160b48de9405c1fec16db5c07e98def140decbcbc954a1175dc76"
+ },
+ {
+ "id": "rc87-ce29f729c5b6ac32",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/hydration-edge-cases.test.ts",
+ "line": 528,
+ "title": "progressive hydration rejects an invalid external hydration manifest payload",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "e256ef002195234e20283909b0510b38c017c5c846346a5db1db75a8eb91c3e5"
+ },
+ {
+ "id": "rc87-10b3696972544403",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/layer-index.test.ts",
+ "line": 4,
+ "title": "1,000 single-node insertions avoid repeated key searches and prefix reads",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "a100c72146feec4da029335976ab1242d66691de9a7c21765ccfec40fad1324f"
+ },
+ {
+ "id": "rc87-2f28d9cbea566ff2",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/layer-index.test.ts",
+ "line": 30,
+ "title": "mixed node counts preserve CSSOM order across middle and tail changes, refresh and reset",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "323146e1c22e089443bb197b3228ee6d665743d7b1b07aeed6b26b4fe90bcdfd"
+ },
+ {
+ "id": "rc87-08700a1f1b64f3a1",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/layer-index.test.ts",
+ "line": 80,
+ "title": "shared rule ownership only updates referring classes",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "42874918eaaca752fea75fb2d8e5e180af92c530efa2fa54622b9c8509cac725"
+ },
+ {
+ "id": "rc87-51434a1f8203b14b",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/lifecycle.test.ts",
+ "line": 331,
+ "title": "merges emittedGlobals from concurrent starts before resolving callers",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "edfa0a00675afaa691fbcec031a0184fe64a49ddaa5f675b934d8b02d022cc3b"
+ },
+ {
+ "id": "rc87-8dc9191031f91a2a",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/named-token-contract.test.ts",
+ "line": 32,
+ "title": "`${mode} preserves named and native value priorities, groups and shorthand resets`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "ef1b23629487e2c19e91c4919bef5fccdc15a50be0edd5937ef8bcb4d3c34bf3"
+ },
+ {
+ "id": "rc87-8dc9191031f91a2a",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/named-token-contract.test.ts",
+ "line": 32,
+ "title": "`${mode} preserves named and native value priorities, groups and shorthand resets`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "ef1b23629487e2c19e91c4919bef5fccdc15a50be0edd5937ef8bcb4d3c34bf3"
+ },
+ {
+ "id": "rc87-8dc9191031f91a2a",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/named-token-contract.test.ts",
+ "line": 32,
+ "title": "`${mode} preserves named and native value priorities, groups and shorthand resets`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "ef1b23629487e2c19e91c4919bef5fccdc15a50be0edd5937ef8bcb4d3c34bf3"
+ },
+ {
+ "id": "rc87-8dc9191031f91a2a",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/named-token-contract.test.ts",
+ "line": 32,
+ "title": "`${mode} preserves named and native value priorities, groups and shorthand resets`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "ef1b23629487e2c19e91c4919bef5fccdc15a50be0edd5937ef8bcb4d3c34bf3"
+ },
+ {
+ "id": "rc87-068deef5cbf138d2",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/named-token-contract.test.ts",
+ "line": 80,
+ "title": "native resolution descriptors survive runtime compilation",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "1144d51dadc0c8c2aff465a159ffbe4c084b48dfa2f09d16a936575e6cde68df"
+ },
+ {
+ "id": "rc87-f9b343471120fb0c",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/native-boundaries.test.ts",
+ "line": 24,
+ "title": "`${mode}: native streams, literal ampersand, selector lists and equivalent-query cascade`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "d358c57590277568419bef86c43e244d0b0113b10f582ad0e4bf79fa8f1005be"
+ },
+ {
+ "id": "rc87-f9b343471120fb0c",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/native-boundaries.test.ts",
+ "line": 24,
+ "title": "`${mode}: native streams, literal ampersand, selector lists and equivalent-query cascade`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "d358c57590277568419bef86c43e244d0b0113b10f582ad0e4bf79fa8f1005be"
+ },
+ {
+ "id": "rc87-f9b343471120fb0c",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/native-boundaries.test.ts",
+ "line": 24,
+ "title": "`${mode}: native streams, literal ampersand, selector lists and equivalent-query cascade`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "d358c57590277568419bef86c43e244d0b0113b10f582ad0e4bf79fa8f1005be"
+ },
+ {
+ "id": "rc87-f9b343471120fb0c",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/native-boundaries.test.ts",
+ "line": 24,
+ "title": "`${mode}: native streams, literal ampersand, selector lists and equivalent-query cascade`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "d358c57590277568419bef86c43e244d0b0113b10f582ad0e4bf79fa8f1005be"
+ },
+ {
+ "id": "rc87-109ebb3348b8c2d7",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/native-boundaries.test.ts",
+ "line": 60,
+ "title": "old hydration priorities are rejected before hydration",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "67d4feae75a38daaf9328bd9e2fce977d28466dcaa0647b5220ad64846a14282"
+ },
+ {
+ "id": "rc87-bcce1a0d58d9967c",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/native-components-compose.test.ts",
+ "line": 10,
+ "title": "`${mode}: ordered fallbacks and native components retain the browser cascade`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "c6611d70758b9851a4154d135e5a1c9bb1da97021d18c378552e4751862718cc"
+ },
+ {
+ "id": "rc87-bcce1a0d58d9967c",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/native-components-compose.test.ts",
+ "line": 10,
+ "title": "`${mode}: ordered fallbacks and native components retain the browser cascade`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "c6611d70758b9851a4154d135e5a1c9bb1da97021d18c378552e4751862718cc"
+ },
+ {
+ "id": "rc87-bcce1a0d58d9967c",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/native-components-compose.test.ts",
+ "line": 10,
+ "title": "`${mode}: ordered fallbacks and native components retain the browser cascade`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "c6611d70758b9851a4154d135e5a1c9bb1da97021d18c378552e4751862718cc"
+ },
+ {
+ "id": "rc87-bcce1a0d58d9967c",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/native-components-compose.test.ts",
+ "line": 10,
+ "title": "`${mode}: ordered fallbacks and native components retain the browser cascade`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "c6611d70758b9851a4154d135e5a1c9bb1da97021d18c378552e4751862718cc"
+ },
+ {
+ "id": "rc87-fbbf199badd4cf7d",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/rc87-rendering.test.ts",
+ "line": 38,
+ "title": "does not expose tooling-only engine inspection helpers",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "ee0edeacdf206a4da070a797f1950fa7691b21f64fc4a21713ab0909e1f7aa56"
+ },
+ {
+ "id": "rc87-39a77796e0b1f824",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/rc87-rendering.test.ts",
+ "line": 49,
+ "title": "destroy on progressive",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "838d36bdd01523d4ea5a81349aedeaa14fd93ed46ee0c657470ceb364f6e3c0b"
+ },
+ {
+ "id": "rc87-97ab7b679d64361a",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/rc87-rendering.test.ts",
+ "line": 84,
+ "title": "disconnect and destroy clear pending mutation additions and removals",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "8c3e3ca3bd19a9d220ad65ecf43f621e1eb5f5119554171be6aeb459138da77b"
+ },
+ {
+ "id": "rc87-f67818a2528723e4",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/rc87-rendering.test.ts",
+ "line": 133,
+ "title": "preserves the strict Rust contract when an external hydration manifest import fails",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "d3e6830e3c6022e1d1d24eb297159eae4d437c9a5341840468445532ef932026"
+ },
+ {
+ "id": "rc87-8bcc5929d196ead8",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/sizing-resolution-contract.test.ts",
+ "line": 15,
+ "title": "`${mode}: independent alias replacement and explicit paired dimensions survive hydration and updates`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "702792a0524c09e8feaa59ef8b39c76aa13a3f9979a2db749d3f7a54ab7d3343"
+ },
+ {
+ "id": "rc87-8bcc5929d196ead8",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/sizing-resolution-contract.test.ts",
+ "line": 15,
+ "title": "`${mode}: independent alias replacement and explicit paired dimensions survive hydration and updates`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "702792a0524c09e8feaa59ef8b39c76aa13a3f9979a2db749d3f7a54ab7d3343"
+ },
+ {
+ "id": "rc87-8bcc5929d196ead8",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/sizing-resolution-contract.test.ts",
+ "line": 15,
+ "title": "`${mode}: independent alias replacement and explicit paired dimensions survive hydration and updates`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "702792a0524c09e8feaa59ef8b39c76aa13a3f9979a2db749d3f7a54ab7d3343"
+ },
+ {
+ "id": "rc87-8bcc5929d196ead8",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/sizing-resolution-contract.test.ts",
+ "line": 15,
+ "title": "`${mode}: independent alias replacement and explicit paired dimensions survive hydration and updates`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "702792a0524c09e8feaa59ef8b39c76aa13a3f9979a2db749d3f7a54ab7d3343"
+ },
+ {
+ "id": "rc87-ab18e9960cb9d6f7",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/utility-definition-contract.test.ts",
+ "line": 11,
+ "title": "`${mode}: fixed utility intent, replacement and vendor reset semantics`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "6a542e6817db8b1c8be3c53a320938c7c7991884fc86b2aa1b4c1a8418aa2777"
+ },
+ {
+ "id": "rc87-ab18e9960cb9d6f7",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/utility-definition-contract.test.ts",
+ "line": 11,
+ "title": "`${mode}: fixed utility intent, replacement and vendor reset semantics`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "6a542e6817db8b1c8be3c53a320938c7c7991884fc86b2aa1b4c1a8418aa2777"
+ },
+ {
+ "id": "rc87-ab18e9960cb9d6f7",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/utility-definition-contract.test.ts",
+ "line": 11,
+ "title": "`${mode}: fixed utility intent, replacement and vendor reset semantics`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "6a542e6817db8b1c8be3c53a320938c7c7991884fc86b2aa1b4c1a8418aa2777"
+ },
+ {
+ "id": "rc87-ab18e9960cb9d6f7",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/utility-definition-contract.test.ts",
+ "line": 11,
+ "title": "`${mode}: fixed utility intent, replacement and vendor reset semantics`",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "6a542e6817db8b1c8be3c53a320938c7c7991884fc86b2aa1b4c1a8418aa2777"
+ },
+ {
+ "id": "rc87-7b2b667cfafc37f8",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/wasm-startup.test.ts",
+ "line": 110,
+ "title": "disposes an engine that resolves before hydration startup times out",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "691f7a545fe38292211a6511080802b5122d08977147099663a3a61285342cb9"
+ },
+ {
+ "id": "rc87-335e828d0532b6d2",
+ "package": "runtime",
+ "file": "packages/runtime/e2e/wasm-startup.test.ts",
+ "line": 173,
+ "title": "rejects every pending caller and disposes when emitted globals registration fails",
+ "runner": "playwright-or-vitest-e2e",
+ "kind": "e2e",
+ "sourceDigest": "8f9b5e9006d809907f6a6b9a15f7fd87b2f99ae6253cffe6eb559074098a7f49"
+ },
+ {
+ "id": "rc87-8b30595dc3f1ef9a",
+ "package": "server",
+ "file": "packages/server/tests/batching.test.ts",
+ "line": 23,
+ "title": "deduplicates decoded classes in first appearance order without changing HTML entities",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3f626742ec952a8ba682f611fe9fd4bad30f9afb9de7bfc2fdb64ca7ad570458"
+ },
+ {
+ "id": "rc87-503af8ae9dd5b4d3",
+ "package": "server",
+ "file": "packages/server/tests/bug-hunt.test.ts",
+ "line": 9,
+ "title": "BH-0005: HTML character references form browser class separators",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d030d2af36ea9dfe36e34cd7a739a0ed218a096974c8ffa4a5bd7615687adf82"
+ },
+ {
+ "id": "rc87-6b44d660dacba6eb",
+ "package": "server",
+ "file": "packages/server/tests/bug-hunt.test.ts",
+ "line": 15,
+ "title": "BH-0005 decodes attribute references once with ASCII separators: block hidden",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d55172741abc7b93ff72cf61a44599d231c9add4f9c641a157e21a8736271f3",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "block hidden | block | hidden"
+ }
+ },
+ {
+ "id": "rc87-ad8f4a9ae4cfe154",
+ "package": "server",
+ "file": "packages/server/tests/bug-hunt.test.ts",
+ "line": 15,
+ "title": "BH-0005 decodes attribute references once with ASCII separators: ©=1 ©",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d55172741abc7b93ff72cf61a44599d231c9add4f9c641a157e21a8736271f3",
+ "matrix": {
+ "index": 6,
+ "resolved": true,
+ "value": "©=1 © | ©=1 | ©"
+ }
+ },
+ {
+ "id": "rc87-42872f9a1c4b01d1",
+ "package": "server",
+ "file": "packages/server/tests/bug-hunt.test.ts",
+ "line": 15,
+ "title": "BH-0005 decodes attribute references once with ASCII separators: ≂̸ ",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d55172741abc7b93ff72cf61a44599d231c9add4f9c641a157e21a8736271f3",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "≂̸ | ≂̸ | "
+ }
+ },
+ {
+ "id": "rc87-ce42de7e289c384e",
+ "package": "server",
+ "file": "packages/server/tests/bug-hunt.test.ts",
+ "line": 15,
+ "title": "BH-0005 decodes attribute references once with ASCII separators: block hidden",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d55172741abc7b93ff72cf61a44599d231c9add4f9c641a157e21a8736271f3",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "block hidden | block hidden"
+ }
+ },
+ {
+ "id": "rc87-1ad3a2f6d452cc4b",
+ "package": "server",
+ "file": "packages/server/tests/bug-hunt.test.ts",
+ "line": 15,
+ "title": "BH-0005 decodes attribute references once with ASCII separators: block hidden",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d55172741abc7b93ff72cf61a44599d231c9add4f9c641a157e21a8736271f3",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "block hidden | block hidden"
+ }
+ },
+ {
+ "id": "rc87-57aa739378ccd57f",
+ "package": "server",
+ "file": "packages/server/tests/bug-hunt.test.ts",
+ "line": 15,
+ "title": "BH-0005 decodes attribute references once with ASCII separators: block hidden",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d55172741abc7b93ff72cf61a44599d231c9add4f9c641a157e21a8736271f3",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "block hidden | block hidden"
+ }
+ },
+ {
+ "id": "rc87-2e114cf802240f13",
+ "package": "server",
+ "file": "packages/server/tests/bug-hunt.test.ts",
+ "line": 15,
+ "title": "BH-0005 decodes attribute references once with ASCII separators: block
hidden	flex",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d55172741abc7b93ff72cf61a44599d231c9add4f9c641a157e21a8736271f3",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "block
hidden	flex | block | hidden | flex"
+ }
+ },
+ {
+ "id": "rc87-f8bd9b221239acce",
+ "package": "server",
+ "file": "packages/server/tests/bug-hunt.test.ts",
+ "line": 28,
+ "title": "BH-0006: escaped class content cannot create executable HTML elements",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6d875b72242febca2818288985773a9325612e51f31323dda4ddb088254244cd"
+ },
+ {
+ "id": "rc87-07bdf7004f3360fc",
+ "package": "server",
+ "file": "packages/server/tests/bug-hunt.test.ts",
+ "line": 36,
+ "title": "BH-0007: static resources render even when HTML has no class attributes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8605a0f652b52e5617e7dabadc64750918e8a95438efad73714adb89b00db0ca"
+ },
+ {
+ "id": "rc87-b005654530dfa559",
+ "package": "server",
+ "file": "packages/server/tests/rc87-rendering.test.ts",
+ "line": 23,
+ "title": "render ",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c76e8a72e18650b6c330726a0e196333baa088f118ee740178f4feac57a44e9e"
+ },
+ {
+ "id": "rc87-72e45c26e6cbfd8b",
+ "package": "server",
+ "file": "packages/server/tests/rc87-rendering.test.ts",
+ "line": 36,
+ "title": "should not render the new style element",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0bec2e95ff48d1164965a73e38b898b772063477e37157ad0074da98e1374d43"
+ },
+ {
+ "id": "rc87-f92062b7788b8b27",
+ "package": "server",
+ "file": "packages/server/tests/rc87-rendering.test.ts",
+ "line": 51,
+ "title": "returns a hydration manifest without changing rendered HTML",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "be88b178dfed2c506c7eb4a7885622b319bda97afec69988029c504daecaaf23"
+ },
+ {
+ "id": "rc87-c7c1de220cf317cb",
+ "package": "server",
+ "file": "packages/server/tests/rc87-rendering.test.ts",
+ "line": 64,
+ "title": "injects the hydration manifest into an existing head when requested",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "38eeaba0172e61c2f180618edeb41a526ff80c825bbd9ddf50a6fcbad8d14b7b"
+ },
+ {
+ "id": "rc87-7b9e66b4d7c60243",
+ "package": "server",
+ "file": "packages/server/tests/rc87-rendering.test.ts",
+ "line": 76,
+ "title": "attaches an external hydration manifest source to style#master-css when requested",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "25510aefe210fe963d6eded65942edd048ab0e81dd2f72740697bf5e74a691cf"
+ },
+ {
+ "id": "rc87-b0218b93c7b226b7",
+ "package": "server",
+ "file": "packages/server/tests/rc87-rendering.test.ts",
+ "line": 92,
+ "title": "removes stale inline hydration scripts in external hydration manifest mode",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5ddd15a22c1e66c794c74a1a1ec3d01e009becc630a5cde7a50738b71d4a4b77"
+ },
+ {
+ "id": "rc87-3870cf70bffbc204",
+ "package": "server",
+ "file": "packages/server/tests/rc87-rendering.test.ts",
+ "line": 106,
+ "title": "emits no external hydration manifest pointer for empty generated CSS",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c3609310016d9f126625ef3936406f7d3d9a79b30a307148907038b89599eb4a"
+ },
+ {
+ "id": "rc87-4209a04423ae00dc",
+ "package": "server",
+ "file": "packages/server/tests/rc87-rendering.test.ts",
+ "line": 122,
+ "title": "creates a head for the injected hydration manifest when missing",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "084db5bb0ea5f974008ed6957188104ead4dbe708047b5addbd7a9e314512b3b"
+ },
+ {
+ "id": "rc87-5b9cf5b8ce504959",
+ "package": "server",
+ "file": "packages/server/tests/rc87-rendering.test.ts",
+ "line": 134,
+ "title": "replaces an existing hydration manifest script when requested",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9e9a511aa344bbb56bb30212b449ebab3be42b09a56d31ea1077cca9383a984d"
+ },
+ {
+ "id": "rc87-083f0c80af0348a1",
+ "package": "server",
+ "file": "packages/server/tests/rc87-rendering.test.ts",
+ "line": 147,
+ "title": "can skip returning and injecting the hydration manifest",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "75e8a2799f4bcd3e8d6fab4e5bbdd2d5195d816138029e484e4fb15142334bc2"
+ },
+ {
+ "id": "rc87-a68de8240d5d5ab1",
+ "package": "server",
+ "file": "packages/server/tests/rc87-rendering.test.ts",
+ "line": 157,
+ "title": "removes an empty master style when hydration manifest injection is requested",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3e7ee8c9271353c0b5252ee87f21aa9f7968eceb633c8bd586e65c9758943440"
+ },
+ {
+ "id": "rc87-3f34357167b3a060",
+ "package": "server",
+ "file": "packages/server/tests/server-renderer.test.ts",
+ "line": 129,
+ "title": "keeps streamed HTML and the final immutable result on the same complete snapshot",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d880ec782a014da6800927b23eaf63fa3cf90982c6085cbd169f963ab610211b"
+ },
+ {
+ "id": "rc87-2374f8fb8b086ebb",
+ "package": "svelte",
+ "file": "packages/svelte/tests/rc87-rendering.test.ts",
+ "line": 42,
+ "title": "injects collected CSS when the head closes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "964709ebd924ead24043beb63a924a20eee417556225bc944ed6173059e27560"
+ },
+ {
+ "id": "rc87-c4d831fe47eaca8d",
+ "package": "svelte",
+ "file": "packages/svelte/tests/rc87-rendering.test.ts",
+ "line": 61,
+ "title": "preserves complete Rust stream results when later chunks add classes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3427fdbaa2202b154aa54a0f02aad6be93d98b1865147566cb408cad4e1dc9c9"
+ },
+ {
+ "id": "rc87-2efcdbec736de191",
+ "package": "svelte",
+ "file": "packages/svelte/tests/rc87-rendering.test.ts",
+ "line": 75,
+ "title": "supports an external hydration manifest writer",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "47a3d63a198c7da8e7dbedbc3f4e59bbb7db4ed581783416fdebfdf9bed54706"
+ },
+ {
+ "id": "rc87-40741f3f92fa5de7",
+ "package": "svelte",
+ "file": "packages/svelte/tests/rc87-rendering.test.ts",
+ "line": 102,
+ "title": "does not duplicate emitted global variables and keyframes in streamed CSS",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b3f45aa394abea75633588ea55370bfe6ff511abf3356def2e8a18f85411e966"
+ },
+ {
+ "id": "rc87-5732d85f2647b215",
+ "package": "svelte",
+ "file": "packages/svelte/tests/rc87-rendering.test.ts",
+ "line": 125,
+ "title": "writes static external hydration manifests",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d8c98793866a19998aac8dde6bf0783f2e72c4180a94dbc61b9433b3564fef7c"
+ },
+ {
+ "id": "rc87-ea9b5d2ffe198b2f",
+ "package": "svelte",
+ "file": "packages/svelte/tests/rc87-rendering.test.ts",
+ "line": 156,
+ "title": "replaces an existing master style in the current chunk",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "78213ea13c1823824e94155520f56cb77ef57fbc37df47b82ebf9a99cdd1163d"
+ },
+ {
+ "id": "rc87-b3e92ac7d4b8a66d",
+ "package": "svelte",
+ "file": "packages/svelte/tests/rc87-rendering.test.ts",
+ "line": 166,
+ "title": "replaces an existing hydration manifest in the current chunk",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "43ff61d46d8f3bbe315b177a93c7840fd42114b58ed1bca75dd9f48eacb406e7"
+ },
+ {
+ "id": "rc87-660652c7b4a58d82",
+ "package": "svelte",
+ "file": "packages/svelte/tests/theme-reference-e2e.test.ts",
+ "line": 15,
+ "title": "delivers project definitions through each Svelte route that loads their scoped style",
+ "runner": "vitest",
+ "kind": "e2e",
+ "sourceDigest": "a0bcc694a9d9f220bf0b4af9c887436ec7922220238555a5efa843e753f89550"
+ },
+ {
+ "id": "rc87-3ef891c70c0519ef",
+ "package": "svelte",
+ "file": "packages/svelte/tests/theme-reference-e2e.test.ts",
+ "line": 87,
+ "title": "hot-updates added and edited entries, then reloads after an entry is deleted",
+ "runner": "vitest",
+ "kind": "e2e",
+ "sourceDigest": "c21afea9b4743eba6dd469a26dcfc605a9a75ba4aa0830438927582274000b90"
+ },
+ {
+ "id": "rc87-c5d92e2b7c6bc814",
+ "package": "svelte",
+ "file": "packages/svelte/tests/vite.test.ts",
+ "line": 9,
+ "title": "defaults to static and keeps runtime explicit",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "164e8760c25122b58e485f2bad1ad473b3a7a25cf93ddb76cebb5b9e8410e9e1"
+ },
+ {
+ "id": "rc87-fdb7bbd79639d966",
+ "package": "tooling",
+ "file": "packages/tooling/tests/language/bug-hunt-host-offsets.test.ts",
+ "line": 7,
+ "title": "`${binding}: BH-0013/0014 Unicode boundaries and escaped semantic ranges`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "20e1ecc73f49f9561f8d3a4da0656fe63f1652cb0c1393f945be43972c4c20b9"
+ },
+ {
+ "id": "rc87-fdb7bbd79639d966",
+ "package": "tooling",
+ "file": "packages/tooling/tests/language/bug-hunt-host-offsets.test.ts",
+ "line": 7,
+ "title": "`${binding}: BH-0013/0014 Unicode boundaries and escaped semantic ranges`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "20e1ecc73f49f9561f8d3a4da0656fe63f1652cb0c1393f945be43972c4c20b9"
+ },
+ {
+ "id": "rc87-8dc6b50f80531803",
+ "package": "tooling",
+ "file": "packages/tooling/tests/language/bug-hunt.test.ts",
+ "line": 4,
+ "title": "BH-0014 semantic tokens retain raw source offsets after escaped quotes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fe3b913d6e6bad01073801c226db33e9d7b846559302454b905f9304a211e584"
+ },
+ {
+ "id": "rc87-d3aef45247181523",
+ "package": "tooling",
+ "file": "packages/tooling/tests/language/bug-hunt.test.ts",
+ "line": 14,
+ "title": "audit control: Unicode CRLF formatting preserves text and is idempotent",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9e97521dc797d9d5709afd0abe6b1a0c32df22bc9ee07a0846f814d5071c9d4b"
+ },
+ {
+ "id": "rc87-fc115dba73c329e6",
+ "package": "tooling",
+ "file": "packages/tooling/tests/language/create-language-session.test.ts",
+ "line": 27,
+ "title": "matches the full tooling session and keeps earlier document results immutable",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ea6360540a9caefd64057595ca5971541d449fcfa5316b75bf6aade5ec84a7e8"
+ },
+ {
+ "id": "rc87-805faab9f33a5089",
+ "package": "tooling",
+ "file": "packages/tooling/tests/language/create-language-session.test.ts",
+ "line": 52,
+ "title": "disposes idempotently and rejects cached results after disposal",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4d31bb235b54ee32bd8ba709ceada285170160b30b3e11adc58406f96e2b6de8"
+ },
+ {
+ "id": "rc87-206c2868d6b8b3a8",
+ "package": "tooling",
+ "file": "packages/tooling/tests/language/create-language-session.test.ts",
+ "line": 64,
+ "title": "keeps native and Wasm v2 semantic token ranges identical",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ec47e8abe4dd072779e8e22eb1530f6af28d43f934e715729d79baaaf8ad3a14"
+ },
+ {
+ "id": "rc87-daa1537f24993876",
+ "package": "tooling",
+ "file": "packages/tooling/tests/language/format-directives.test.ts",
+ "line": 33,
+ "title": "formats safelist class lists and repairs detached important suffixes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "71365f741765f34c820ce7bfe2ab43ba70a27c2fbbf306a5c6bf7fa5d99ae1f5"
+ },
+ {
+ "id": "rc87-7f25c87667836705",
+ "package": "tooling",
+ "file": "packages/tooling/tests/language/rc87-mdn-css-data.test.ts",
+ "line": 7,
+ "title": "uses unprefixed MDN syntax for vendor-prefixed properties",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6851aa3fc7cd1ba1af3b043766db309ef96d6080a8f164dc42ef8c0374c8b14d"
+ },
+ {
+ "id": "rc87-55043b3945fae7fa",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/bug-hunt.test.ts",
+ "line": 5,
+ "title": "audit control: source fixes converge and preserve Unicode surrounding markup",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1365188c1fb42be93d9a70bf83acce396f634c26edd8b6e0ec4b5879058dad24"
+ },
+ {
+ "id": "rc87-8d16095f1bb2625d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/index.test.ts",
+ "line": 62,
+ "title": "ignores token, static, invalid, unknown, and component classes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "910a80211b599125889e01f058276e99a05e7d85ddbd9090e91759a3df8b73e0"
+ },
+ {
+ "id": "rc87-bb6d9ae07d5f9a61",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/index.test.ts",
+ "line": 82,
+ "title": "suggests property aliases without replacing literals or changing priority",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2df0f3f79e3843d97e6be4b141a8112e98bd8dbe2d651fb8936cb8e4987fb94"
+ },
+ {
+ "id": "rc87-83f87094c258022d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/index.test.ts",
+ "line": 97,
+ "title": "keeps native values and only shortens equivalent property names",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "19580f0425fc28cbcc8c68999ce6173eb9f6eddee37a7536c2d10bd35a9475d7"
+ },
+ {
+ "id": "rc87-aa12f9f68cf9b0ce",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/index.test.ts",
+ "line": 133,
+ "title": "does not autofix entity-decoded MDX class lists using decoded offsets",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ef83cae9e88d4caa4bdcbc1b8c6fb6934217a06764ce2c3b3c9ecee84eb031f2"
+ },
+ {
+ "id": "rc87-a9b9a458af342355",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 85,
+ "title": "sorts known classes and keeps unknown classes last",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1733419f153efd98d73c238b1a215ace68d1b2558ef914123a54427638d6d3bd"
+ },
+ {
+ "id": "rc87-6a57aaa786f8a56d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 92,
+ "title": "sorts generated classes into readable property groups",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "38faf97e0e171a10eab5a3d6edc61e8b9e259db2a644be5b4ba6f953ccaea091"
+ },
+ {
+ "id": "rc87-e0574b979ff7cdf9",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 156,
+ "title": "deduplicates repeated classes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c9707553fb3197a83d234535ee302be70775be351525378749e4e895f3d98164"
+ },
+ {
+ "id": "rc87-bb568f7a54229be6",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 161,
+ "title": "generates each unique class once while sorting",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "db6352f99eb826a4979ca66c07c1f6307538997c3bf9bf3453d505e187f09be5"
+ },
+ {
+ "id": "rc87-b44c6ae1eb7b18d0",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 172,
+ "title": "sorts class-list text while preserving useful whitespace and raw tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f2ca15274f3027cfacc5a4496f3a2031087fa8041232e485033f3da9f5dd3c9c"
+ },
+ {
+ "id": "rc87-72ba4998f06ed12b",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 181,
+ "title": "removes and replaces class-list tokens with adjacent whitespace",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "82266fea3d7f98506a53d099aedc00499aaccb0490df1bb1df51c70c61635848"
+ },
+ {
+ "id": "rc87-72f61b00a6c4b6c6",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 200,
+ "title": "replaces grouped class-list tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d588498a8e5522eb1c1f40a513c68a3015934518c9dd730a4b4e5f266a605048"
+ },
+ {
+ "id": "rc87-11505f7eff335482",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 215,
+ "title": "reports sort diagnostics with a machine-readable fix",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "77b4f4822420900815ed07d4722235cd930283c86f31c3f2695349226a948596"
+ },
+ {
+ "id": "rc87-64d11f95bd5d8479",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 236,
+ "title": "reports conflict diagnostics with token-relative ranges",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "24de48b42bd6213542da86a72392021e28b5ec3928b167f1b8ed637d1c2d15da"
+ },
+ {
+ "id": "rc87-cb9f2a121a551fc0",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 246,
+ "title": "reports invalid generated CSS diagnostics with class context",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "20acded54aff09cbcf3759e82876dfe455128198c7a10c238dc036b4f0e0e298"
+ },
+ {
+ "id": "rc87-030c32e9a5aee148",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 251,
+ "title": "reports canonical diagnostics with explicit replacements",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cb6513e611e08e038d4576d7507f46b1787c190985678db8483b2c34a0b96e34"
+ },
+ {
+ "id": "rc87-d69b977b510bca9c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 257,
+ "title": "keeps raw value policy opt-in in combined reports",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f97772de8e6c2d2d85935e479220a54c3cca581f6e9cbeb277f71659fc2e9465"
+ },
+ {
+ "id": "rc87-4bf8be89870430d2",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 268,
+ "title": "resolves rule presets and explicit rule sets",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "30019c2b0b443e3b7db96fce4665650f15c4e52b9c318ecd9da86c11a4eb0a8f"
+ },
+ {
+ "id": "rc87-3ebacb91094e3417",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 286,
+ "title": "maps class diagnostics and safe fixes onto source ranges",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "06b9d3635fc55d0a2916dc4104225ae30efb37a1d8565ca16818cdcd02db7c5d"
+ },
+ {
+ "id": "rc87-ceaece3299e9753a",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 320,
+ "title": "leaves MDX fenced examples untouched",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e013858786c08fbaea1c2385790185f4558fdfe4e6cf0962cce055b6a8439f66"
+ },
+ {
+ "id": "rc87-98b2dff8383faa7a",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 326,
+ "title": "passes rule options to source content diagnostics",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "069a5cdf9acc4839e9eb18ea4bdfa5d720bfb1b2fc2573f3d80caac4edf1dca5"
+ },
+ {
+ "id": "rc87-c8bd6d7abfd7d7a1",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 367,
+ "title": "applies source fixes until class lists are stable",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d3db9bcb6b84464c222b04e19067c1d18ba7c686c01fe79d3bae50c9d6c15838"
+ },
+ {
+ "id": "rc87-9c57169346c7e619",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 375,
+ "title": "uses script language ids for cjs and typescript module files",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "59f737a75d1e93d7f370f0895ed82c3b3e5715a3551e2f003ee0b958eb41d5aa"
+ },
+ {
+ "id": "rc87-f65daebbdf305fb8",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 392,
+ "title": "leaves removed compose statements to compiler diagnostics",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "195e44bc33d440952833fa011b5b18ae2ec1f787f3919ea1848c9c01a7e764aa"
+ },
+ {
+ "id": "rc87-14d6fefb081e777b",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 401,
+ "title": "finds classes with matching declarations and variants",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8522b01709c8d33285aa665d045fb677e1391106caedd4233cde5744413294a2"
+ },
+ {
+ "id": "rc87-f7ef3483bf2664d8",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 408,
+ "title": "ignores invalid classes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ac32de460c4d403e2966dcaa7b0bf75e944b87fc3cafdf63ca23f3ba8ab2c0e"
+ },
+ {
+ "id": "rc87-d215b4200f8ee14f",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 415,
+ "title": "keeps the last rule in generated CSS regardless of input order",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "894acac23ada139d3870edce6faba951f40c3baa0762a6e373b18b6c4e7e33fe"
+ },
+ {
+ "id": "rc87-61894a023ac87b65",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 425,
+ "title": "does not automatically split margin axis classes when a later side overrides part of them",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "016f4b0c3573006300c55c0c10f49dfa0ebe7eb79786514d199d7836fa5129b6"
+ },
+ {
+ "id": "rc87-7e82f7322712b82f",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 430,
+ "title": "does not automatically split padding shorthand classes when a later axis overrides part of them",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bb0abd592cf7cac30ffed9297577d8afb90d081d7896fc0b4582124bdd5972d0"
+ },
+ {
+ "id": "rc87-38e4badab0bfe669",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 435,
+ "title": "does not automatically split shorthand classes when a later side overrides part of them",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f5c1f4f01ec724f6b79e0fc5d97712dbbc9d75fb3cb462440f21f6d6313bd8df"
+ },
+ {
+ "id": "rc87-d44976e7d095dda4",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 440,
+ "title": "ignores different variants and fully overridden classes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5449690d503744fe32d1dacdbcc26196b809784519117c2682c05190286aeecc"
+ },
+ {
+ "id": "rc87-6f3284e2513825f8",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 446,
+ "title": "does not automatically split physical inset shorthands when a later side overrides part of them",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "603150d2713be4f106e1fe1f3124b9d0f10b4e2287dffe5d34be4fed68fb63e7"
+ },
+ {
+ "id": "rc87-d4d7eafe0e69a556",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 452,
+ "title": "does not automatically split radius shorthands when a later corner overrides part of them",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7b9122a453da7632a10329296a3dff21b732ba4a5f3ed0d80cf46fb1051cf463"
+ },
+ {
+ "id": "rc87-df24ee105f0a5014",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 458,
+ "title": "does not automatically split border width shorthands when a later side overrides part of them",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "21373fce45d87fb6e0583daf06b1163d0d0928d3e4f1ab2738cbd1382634a8a2"
+ },
+ {
+ "id": "rc87-8b4f62a4e012cfd5",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 464,
+ "title": "does not automatically split border color shorthands when a later side overrides part of them",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "87ab5e31a0ad56a799a62bdb65cfc98f856320c75648ec644aeae264acc14f00"
+ },
+ {
+ "id": "rc87-bf28eb6d42519e6a",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 469,
+ "title": "does not automatically split border style shorthands when a later side overrides part of them",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "688bb9f473e5ffe39b7c5dff2732f171a8ad4a652fa474999801b2b015acd5da"
+ },
+ {
+ "id": "rc87-410af7eff5cc0b46",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 474,
+ "title": "ignores unsupported partial conflict families",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3a755b28afcd6a3e1441e596ce19393809d7dfa1f49c112905b27006d8dc3bfc"
+ },
+ {
+ "id": "rc87-636ce61eb1990f14",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 485,
+ "title": "reports invalid generated CSS",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "dd3535a958aeba2352d9057ddbf98b20b3786e76b4eaf5f618f93a0e796d6c06"
+ },
+ {
+ "id": "rc87-c94f3c91420faeb6",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 491,
+ "title": "reports unknown classes only when requested",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6806cf7b85d924ece478b836121f26596752f2ed830744492db0eb8178cd1eed"
+ },
+ {
+ "id": "rc87-6582c96d8ec40c31",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 504,
+ "title": "preserves unknown native properties without an unknown-class diagnostic",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "18828f984893986f0cab5901beff45da50edeaf820f8ee522da33b1383cf5459"
+ },
+ {
+ "id": "rc87-1ba90e7b63e41533",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 509,
+ "title": "escapes quoted class names in diagnostic messages",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "060e45479fb8ccfd6b751648a76218318b2414f0814def59f04eeee264a9cacb"
+ },
+ {
+ "id": "rc87-317b76a355e86cff",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 517,
+ "title": "reports raw values in token-backed utilities",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fda01e34857b612f5b34fe5e6796a84ad5c8ad05dc7170f127063246fd72c071"
+ },
+ {
+ "id": "rc87-0094ec74c2d24d05",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 525,
+ "title": "allows raw values by property, key, pattern, or full opt-out",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "744fe744d92583c3ef16454b75e4fd6f974427051a2067b1b9ea44392edd509c"
+ },
+ {
+ "id": "rc87-7a883fc118f46b36",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 532,
+ "title": "applies raw value allowed patterns to individual multi-value segments",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1e7cf7caddb0eba41f956245f6e056d631f9282aefc6659d4ebabcf38dc491be"
+ },
+ {
+ "id": "rc87-bb3a21159f32bf1c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 545,
+ "title": "uses active manifest tokens without treating registry fields as token namespaces",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "127ba997a2e0a8c0dcde1352a47316dd1b6970c0940a88b6cfb0dff9781d7abf"
+ },
+ {
+ "id": "rc87-4f5ef5d4d64a5ea3",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 554,
+ "title": "preserves literal multi-value declarations",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a3b74cbfcaa334f20e35f6a89da44a18726d627f4e556b838eab32b3ad854903"
+ },
+ {
+ "id": "rc87-f926eef657f05e3b",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 560,
+ "title": "preserves explicit variable references and their priority",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8bf270bec449662ba928c2989221afed18b53207893e2622987a4a23b0fd06a0"
+ },
+ {
+ "id": "rc87-f46356091faebd7b",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 566,
+ "title": "preserves condition suffix order when reordering changes rule priority",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "73fc58f1fb50956df4a9180092d83112f5a71e056a1b80b73e696469ebdc2848"
+ },
+ {
+ "id": "rc87-f3813b8bd9d0471f",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 574,
+ "title": "combines condition order independently with canonical suggestion options",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6937b181eaa90f5923783399f088eb410e98c8a20db364b2b019ce295151307a"
+ },
+ {
+ "id": "rc87-d8d4b6718f3ce1c3",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 598,
+ "title": "uses custom manifest modes, breakpoints, tokens, and utilities",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f844267a79c440ec0317fee96e5cbc77081d8893dfa649be32932a5707bc251c"
+ },
+ {
+ "id": "rc87-7511928ca6b0f912",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 604,
+ "title": "does not treat custom variants or component utilities as utilities-only canonical targets",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "570aaa7124a60953c81a825fdd8dd71369d7f8d0c0db911bfa5a5cf78be65feb"
+ },
+ {
+ "id": "rc87-3caf39eb5dca447f",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 610,
+ "title": "ignores manifest-carried key alias and native namespace registry fields",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3391db6e1e8dc8b55104cd4bb15831813ac7f85355040a308be04444cf4b39c3"
+ },
+ {
+ "id": "rc87-97bef49b9c8db82b",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 615,
+ "title": "does not suggest partial multi-value or unknown variable tokens",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7b227594b6bbebcec038dd1d75bca0f51ae54fc4cc5359b158038c620539cd9f"
+ },
+ {
+ "id": "rc87-b141c6793d84641a",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 620,
+ "title": "does not suggest unsafe condition or selector suffix order",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c78f68726fb6a51363e9a21f465a0333d2defcdd2637beb5c06c3c782454a2f6"
+ },
+ {
+ "id": "rc87-7ca88abe7a8847ab",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 630,
+ "title": "respects canonical suggestion options",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f7e6c682c7665be347956cfa953293fb90515de1238a6354b9f1dc131344981a"
+ },
+ {
+ "id": "rc87-ac4e18ce6d91e9cb",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 654,
+ "title": "does not suggest component-layer semantic utilities",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "56ca39b84b2e70b215032956cc14eb049932210b724fa3afacb2ad4e5fc27d8b"
+ },
+ {
+ "id": "rc87-a90bfe79ed190c73",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 671,
+ "title": "does not automatically merge size composition utilities",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "daaa1614b580104e16ed7c96399d889056e16e18a5c2b9b1414d08d46067603f"
+ },
+ {
+ "id": "rc87-9118de5e70aabeb6",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 678,
+ "title": "does not automatically merge min and max size composition utilities",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9fc628c29c9ab6a4690a0ec380872709c4e17f6bd233b2446e916057ab30ea65"
+ },
+ {
+ "id": "rc87-0756cb35cdcb868a",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 683,
+ "title": "does not automatically merge spacing axis composition utilities",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f34701dcfe3ab20f776d517f3a227cfae825003a091c8d44998122e1afa7d9b3"
+ },
+ {
+ "id": "rc87-0b2e3ad4b916ca9a",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 691,
+ "title": "does not automatically merge spacing axis composition after canonicalization",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4f83745779eefaf989e777af995a0f9f69abea88bafd8b7454c8eb33a507904f"
+ },
+ {
+ "id": "rc87-64ce8830e93b0fb9",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 697,
+ "title": "does not suggest unsafe composition groups",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b471ad5169bcccd9c9169c4fa20c27e1d19704d50787bf48c5b4a536dd6506d1"
+ },
+ {
+ "id": "rc87-871ad5d224724e7a",
+ "package": "tooling",
+ "file": "packages/tooling/tests/lint/rc87-index.test.ts",
+ "line": 712,
+ "title": "exports default lint target settings",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a118d72c77c191c8fc37fce685e5266de8d9f8f7de485c5b9df7859a72d4de03"
+ },
+ {
+ "id": "rc87-297eaadc93aab54e",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "--arbitrary:calc(1px + 1s) reports unknown without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 28,
+ "resolved": true,
+ "value": "--arbitrary | calc(1px + 1s) | unknown"
+ }
+ },
+ {
+ "id": "rc87-b72eb9c17cb73119",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "border-width:calc(1px + 10%) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 7,
+ "resolved": true,
+ "value": "border-width | calc(1px + 10%) | invalid"
+ }
+ },
+ {
+ "id": "rc87-1e8f61680cd7e58d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "future-property:calc(1px + 10%) reports unknown without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 25,
+ "resolved": true,
+ "value": "future-property | calc(1px + 10%) | unknown"
+ }
+ },
+ {
+ "id": "rc87-fa657ceb0b7890f4",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "future-property:calc(1px + 1s) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 26,
+ "resolved": true,
+ "value": "future-property | calc(1px + 1s) | invalid"
+ }
+ },
+ {
+ "id": "rc87-99ecbb73247d1b37",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "opacity:calc(.5 + 10%) reports unknown without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 15,
+ "resolved": true,
+ "value": "opacity | calc(.5 + 10%) | unknown"
+ }
+ },
+ {
+ "id": "rc87-d9f4840093bb94ec",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "opacity:sin(10%) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 14,
+ "resolved": true,
+ "value": "opacity | sin(10%) | invalid"
+ }
+ },
+ {
+ "id": "rc87-9de7a94e84529e76",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "opacity:sin(1px) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 13,
+ "resolved": true,
+ "value": "opacity | sin(1px) | invalid"
+ }
+ },
+ {
+ "id": "rc87-c9f7009b2d33d463",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "rotate:atan2(1px, 2rem) reports valid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 16,
+ "resolved": true,
+ "value": "rotate | atan2(1px, 2rem) | valid"
+ }
+ },
+ {
+ "id": "rc87-b4a28388d2ee5bc9",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "rotate:atan2(1px, 2s) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 17,
+ "resolved": true,
+ "value": "rotate | atan2(1px, 2s) | invalid"
+ }
+ },
+ {
+ "id": "rc87-ffdfb881b90cf5dd",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "transform:translateX(calc(1px + 10%)) reports valid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 27,
+ "resolved": true,
+ "value": "transform | translateX(calc(1px + 10%)) | valid"
+ }
+ },
+ {
+ "id": "rc87-fabc6b7ee4758c7b",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc((1px + 2rem) / 2) reports valid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "width | calc((1px + 2rem) / 2) | valid"
+ }
+ },
+ {
+ "id": "rc87-a8838979ea31a7fd",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(1px * 1px / 1px) reports valid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "width | calc(1px * 1px / 1px) | valid"
+ }
+ },
+ {
+ "id": "rc87-89d37da383ab7e2c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(1px * 1px) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "width | calc(1px * 1px) | invalid"
+ }
+ },
+ {
+ "id": "rc87-91e5908e305d28a3",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(1px * sin(30deg)) reports valid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 12,
+ "resolved": true,
+ "value": "width | calc(1px * sin(30deg)) | valid"
+ }
+ },
+ {
+ "id": "rc87-85cdebbb4c718515",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(1px / 1px) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "width | calc(1px / 1px) | invalid"
+ }
+ },
+ {
+ "id": "rc87-2169b1ba8744b24c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(1px + 10%) reports valid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 6,
+ "resolved": true,
+ "value": "width | calc(1px + 10%) | valid"
+ }
+ },
+ {
+ "id": "rc87-4fb72de932325e55",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(1px + 1s) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "width | calc(1px + 1s) | invalid"
+ }
+ },
+ {
+ "id": "rc87-353fe6aad438fce4",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(1px + 2future) reports unknown without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 23,
+ "resolved": true,
+ "value": "width | calc(1px + 2future) | unknown"
+ }
+ },
+ {
+ "id": "rc87-ce904a0b0058dcb3",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(1px + future(2)) reports unknown without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 21,
+ "resolved": true,
+ "value": "width | calc(1px + future(2)) | unknown"
+ }
+ },
+ {
+ "id": "rc87-f1e06dbd10a33bb7",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(1px +) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 24,
+ "resolved": true,
+ "value": "width | calc(1px +) | invalid"
+ }
+ },
+ {
+ "id": "rc87-4e528da85399e671",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(calc(1px * 1px) / 1px) reports valid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "width | calc(calc(1px * 1px) / 1px) | valid"
+ }
+ },
+ {
+ "id": "rc87-8a5b7a0e23aff21d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(var(--x) + (1px + 1s)) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 19,
+ "resolved": true,
+ "value": "width | calc(var(--x) + (1px + 1s)) | invalid"
+ }
+ },
+ {
+ "id": "rc87-8c37f0fe54bae9b8",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(var(--x) + 1px + 1s) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 20,
+ "resolved": true,
+ "value": "width | calc(var(--x) + 1px + 1s) | invalid"
+ }
+ },
+ {
+ "id": "rc87-c3eb7a42d2484f58",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:calc(var(--x) + 1px) reports unknown without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 18,
+ "resolved": true,
+ "value": "width | calc(var(--x) + 1px) | unknown"
+ }
+ },
+ {
+ "id": "rc87-a2b145caaa093aaa",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:clamp(1px, 2rem, 10vw) reports valid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 9,
+ "resolved": true,
+ "value": "width | clamp(1px, 2rem, 10vw) | valid"
+ }
+ },
+ {
+ "id": "rc87-1f995dc371d8e7c7",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:future(calc(1px)) reports unknown without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 22,
+ "resolved": true,
+ "value": "width | future(calc(1px)) | unknown"
+ }
+ },
+ {
+ "id": "rc87-2381af383919cd1c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:min(1px, 2s) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 8,
+ "resolved": true,
+ "value": "width | min(1px, 2s) | invalid"
+ }
+ },
+ {
+ "id": "rc87-a975be94c14f6c2e",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:round(1px) reports invalid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 10,
+ "resolved": true,
+ "value": "width | round(1px) | invalid"
+ }
+ },
+ {
+ "id": "rc87-f905f03c73324794",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 4,
+ "title": "width:round(up, 1px, 2px) reports valid without computing values",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8b5550c0e616eb80c8cbedbddba730f5441c371c82c376fdfb713fd55ae670ab",
+ "matrix": {
+ "index": 11,
+ "resolved": true,
+ "value": "width | round(up, 1px, 2px) | valid"
+ }
+ },
+ {
+ "id": "rc87-59fc57e196e2aebf",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-types.test.ts",
+ "line": 38,
+ "title": "checks property context without applying ordinary grammars to descriptors",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f24a5d7cef6fb081d093896df3b8d0175b0bbd98977e82044f668dc5f9d0ba0b"
+ },
+ {
+ "id": "rc87-12d284198bd35c0c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 5,
+ "title": "diagnoses calc(1px + )",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d67e28366f15ce4c4a3852026c5ac767f43fd6bc7adc42c01e400bdcda7cc435",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "calc(1px + )"
+ }
+ },
+ {
+ "id": "rc87-bfcff67f83f82534",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 5,
+ "title": "diagnoses calc(var(--size) + )",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d67e28366f15ce4c4a3852026c5ac767f43fd6bc7adc42c01e400bdcda7cc435",
+ "matrix": {
+ "index": 8,
+ "resolved": true,
+ "value": "calc(var(--size) + )"
+ }
+ },
+ {
+ "id": "rc87-bd9f1e1ed83feca2",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 5,
+ "title": "diagnoses clamp(1px,2px)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d67e28366f15ce4c4a3852026c5ac767f43fd6bc7adc42c01e400bdcda7cc435",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "clamp(1px,2px)"
+ }
+ },
+ {
+ "id": "rc87-d11cdcdac3388c23",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 5,
+ "title": "diagnoses log()",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d67e28366f15ce4c4a3852026c5ac767f43fd6bc7adc42c01e400bdcda7cc435",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "log()"
+ }
+ },
+ {
+ "id": "rc87-4e4224eec87f28ad",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 5,
+ "title": "diagnoses log(1,2,3)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d67e28366f15ce4c4a3852026c5ac767f43fd6bc7adc42c01e400bdcda7cc435",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "log(1,2,3)"
+ }
+ },
+ {
+ "id": "rc87-5a71244d11ffacdf",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 5,
+ "title": "diagnoses min(1px,,2px)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d67e28366f15ce4c4a3852026c5ac767f43fd6bc7adc42c01e400bdcda7cc435",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "min(1px,,2px)"
+ }
+ },
+ {
+ "id": "rc87-8a5ee28f4e9c8cd5",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 5,
+ "title": "diagnoses min(calc(1px + ),var(--size))",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d67e28366f15ce4c4a3852026c5ac767f43fd6bc7adc42c01e400bdcda7cc435",
+ "matrix": {
+ "index": 9,
+ "resolved": true,
+ "value": "min(calc(1px + ),var(--size))"
+ }
+ },
+ {
+ "id": "rc87-7680972ee7e24058",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 5,
+ "title": "diagnoses pow(2)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d67e28366f15ce4c4a3852026c5ac767f43fd6bc7adc42c01e400bdcda7cc435",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "pow(2)"
+ }
+ },
+ {
+ "id": "rc87-6b9a8f3cb0f9d491",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 5,
+ "title": "diagnoses round(up,,2px)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d67e28366f15ce4c4a3852026c5ac767f43fd6bc7adc42c01e400bdcda7cc435",
+ "matrix": {
+ "index": 6,
+ "resolved": true,
+ "value": "round(up,,2px)"
+ }
+ },
+ {
+ "id": "rc87-054996a168cfbb70",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 5,
+ "title": "diagnoses sin(1,2)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d67e28366f15ce4c4a3852026c5ac767f43fd6bc7adc42c01e400bdcda7cc435",
+ "matrix": {
+ "index": 7,
+ "resolved": true,
+ "value": "sin(1,2)"
+ }
+ },
+ {
+ "id": "rc87-8fc55c98ecedcea9",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 8,
+ "title": "retains calc(1px / 1px * 2px)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aa3ae8fa248f87d02a96b514def9547d96669dbe2fab777526a8c27300ae29de",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "calc(1px / 1px * 2px)"
+ }
+ },
+ {
+ "id": "rc87-5f3a684dd12a5a1c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 8,
+ "title": "retains calc(1px + 2px)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aa3ae8fa248f87d02a96b514def9547d96669dbe2fab777526a8c27300ae29de",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "calc(1px + 2px)"
+ }
+ },
+ {
+ "id": "rc87-7ebfa42c24ed1f95",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 8,
+ "title": "retains calc(log(2)*1px)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aa3ae8fa248f87d02a96b514def9547d96669dbe2fab777526a8c27300ae29de",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "calc(log(2)*1px)"
+ }
+ },
+ {
+ "id": "rc87-7549ce2a6c582ea7",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 8,
+ "title": "retains clamp(1px,2px,3px)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aa3ae8fa248f87d02a96b514def9547d96669dbe2fab777526a8c27300ae29de",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "clamp(1px,2px,3px)"
+ }
+ },
+ {
+ "id": "rc87-d75cbe4a70ecdb57",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 8,
+ "title": "retains min(1px,2px)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aa3ae8fa248f87d02a96b514def9547d96669dbe2fab777526a8c27300ae29de",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "min(1px,2px)"
+ }
+ },
+ {
+ "id": "rc87-058c8466938fd72b",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 8,
+ "title": "retains round(up,2px,1px)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aa3ae8fa248f87d02a96b514def9547d96669dbe2fab777526a8c27300ae29de",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "round(up,2px,1px)"
+ }
+ },
+ {
+ "id": "rc87-858eb1447fc4dcbd",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 11,
+ "title": "does not infer calc(--future())",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8fb82b89fd310989adc4a50094535b8109d6a5e0e38debbfc5c134bac93720f9",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "calc(--future())"
+ }
+ },
+ {
+ "id": "rc87-5188a2762732269c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 11,
+ "title": "does not infer calc(1future + 1px)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8fb82b89fd310989adc4a50094535b8109d6a5e0e38debbfc5c134bac93720f9",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "calc(1future + 1px)"
+ }
+ },
+ {
+ "id": "rc87-3d93afa32bf00866",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 11,
+ "title": "does not infer calc(var(--size))",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8fb82b89fd310989adc4a50094535b8109d6a5e0e38debbfc5c134bac93720f9",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "calc(var(--size))"
+ }
+ },
+ {
+ "id": "rc87-752e7a1c7a2078d0",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 11,
+ "title": "does not infer clamp(var(--args))",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8fb82b89fd310989adc4a50094535b8109d6a5e0e38debbfc5c134bac93720f9",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "clamp(var(--args))"
+ }
+ },
+ {
+ "id": "rc87-eb91ea8e29b4922f",
+ "package": "tooling",
+ "file": "packages/tooling/tests/math-validation.test.ts",
+ "line": 14,
+ "title": "does not impose property grammar on custom property token streams",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f0a1221fb811a7c9201524184634cbcbcc90ae5bbee596b46f65f7e69e8ba9fa"
+ },
+ {
+ "id": "rc87-2242e36aebe2c8d5",
+ "package": "tooling",
+ "file": "packages/tooling/tests/removed-utilities.test.ts",
+ "line": 6,
+ "title": "validator and editor report removed builtins without changing generation",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b4cd58141fc8612d165d2c45b441bb714926733dd165a67989316e50efa71cd7"
+ },
+ {
+ "id": "rc87-aeed5a8f315cbcb0",
+ "package": "tooling",
+ "file": "packages/tooling/tests/removed-utilities.test.ts",
+ "line": 17,
+ "title": "custom size definitions including empty ones have no removed-builtin hint [1: {\"rules\":[]}]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "291d6ac0eaac22b5769a90352c9185a53f7fc6b7818d79657b9433d8cbba099e",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "{\"rules\":[]}"
+ }
+ },
+ {
+ "id": "rc87-aa247b565f6d3cab",
+ "package": "tooling",
+ "file": "packages/tooling/tests/removed-utilities.test.ts",
+ "line": 17,
+ "title": "custom size definitions including empty ones have no removed-builtin hint [2: {\"rules\":[{\"declarations\":{\"width\":\"null\",\"height\":\"null\"}}]}]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "291d6ac0eaac22b5769a90352c9185a53f7fc6b7818d79657b9433d8cbba099e",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "{\"rules\":[{\"declarations\":{\"width\":\"null\",\"height\":\"null\"}}]}"
+ }
+ },
+ {
+ "id": "rc87-6a947569f63ef9df",
+ "package": "tooling",
+ "file": "packages/tooling/tests/removed-utilities.test.ts",
+ "line": 28,
+ "title": "explicit native registrations suppress advice without changing engine results",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f7fec26a3e35186b989ce49c82182a014fe9ae279f5dfea00a4c5b63fbcd3a9f"
+ },
+ {
+ "id": "rc87-992cb1447bb56c5c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/adapters.test.ts",
+ "line": 7,
+ "title": "does not restore the removed custom source adapter registry",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "92b284ea4c7771748e106a79910f74e556f64c1659938782e47795a490421d25"
+ },
+ {
+ "id": "rc87-3bcabc82a8c8141c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/adapters.test.ts",
+ "line": 23,
+ "title": "uses built-in source adapters from @master/css-source by default",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5927325de540a2c6b6eaec86cfbc1f7fccb676361ad7b84cf3e0e2370cc0e663"
+ },
+ {
+ "id": "rc87-65994259280caed3",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-binding.test.ts",
+ "line": 10,
+ "title": "BH-0026 selected Wasm loader failures are not silently replaced by native execution",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c12c3b0c417f65f76508cec1f2adf8e595a338dc0453fa2589bff6da52b11901"
+ },
+ {
+ "id": "rc87-c4242908325c1217",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-binding.test.ts",
+ "line": 18,
+ "title": "BH-0026 explicit native load failures do not fall back to available Wasm",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ca167af5f78a1abc3e522f8c6a81f9ea7e18079aeb18642dc0c5bae77f44ef6"
+ },
+ {
+ "id": "rc87-ea3617e1f56149ba",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-binding.test.ts",
+ "line": 26,
+ "title": "BH-0026 real Wasm scanner survives reset and can deliberately switch to native",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "29d02ce2d0950b606ffb73450f8173f3c935d3f2422dde1e35171f2ef409388c"
+ },
+ {
+ "id": "rc87-0042829e75e67120",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-source-result.test.ts",
+ "line": 11,
+ "title": "`scanSource retains full input candidates on cache hits and repeated files (${binding})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "95fb23023cb4c4b410edf97d738da6af0e5656a985bd33cd38c6bc7beafc204f"
+ },
+ {
+ "id": "rc87-0042829e75e67120",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-source-result.test.ts",
+ "line": 11,
+ "title": "`scanSource retains full input candidates on cache hits and repeated files (${binding})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "95fb23023cb4c4b410edf97d738da6af0e5656a985bd33cd38c6bc7beafc204f"
+ },
+ {
+ "id": "rc87-c5c22560ad558791",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-source-result.test.ts",
+ "line": 26,
+ "title": "`existing boolean scan and module filters keep behavior (${binding})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "193d16cc4045240445eb03e2178ab5a41cbff9d192a70f75cbbba126d64ad55f"
+ },
+ {
+ "id": "rc87-c5c22560ad558791",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-source-result.test.ts",
+ "line": 26,
+ "title": "`existing boolean scan and module filters keep behavior (${binding})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "193d16cc4045240445eb03e2178ab5a41cbff9d192a70f75cbbba126d64ad55f"
+ },
+ {
+ "id": "rc87-45734407f9ea6457",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-source-result.test.ts",
+ "line": 41,
+ "title": "`candidate ownership stays distinct from native, safelist and blocklist classification (${binding})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2f284fdfbc346a6fc2ad0bd726be7aa74359571de5fbd131019151e7480a81af"
+ },
+ {
+ "id": "rc87-45734407f9ea6457",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-source-result.test.ts",
+ "line": 41,
+ "title": "`candidate ownership stays distinct from native, safelist and blocklist classification (${binding})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2f284fdfbc346a6fc2ad0bd726be7aa74359571de5fbd131019151e7480a81af"
+ },
+ {
+ "id": "rc87-e6e287f178a8258d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-source-result.test.ts",
+ "line": 60,
+ "title": "`asynchronous adapters and reset preserve each source result (${binding})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b9648254b7732c464e2423682ad933ca39df76db75f6f5e12c0376f631254dd1"
+ },
+ {
+ "id": "rc87-e6e287f178a8258d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-source-result.test.ts",
+ "line": 60,
+ "title": "`asynchronous adapters and reset preserve each source result (${binding})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b9648254b7732c464e2423682ad933ca39df76db75f6f5e12c0376f631254dd1"
+ },
+ {
+ "id": "rc87-2afc026dbe4a054d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-source-result.test.ts",
+ "line": 78,
+ "title": "overlapping snapshots and updates converge to the latest owner contents",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e0430896bb325149467112c959d3cf03a6c4ff8873b7b1e56ee7a634ab0df1e5"
+ },
+ {
+ "id": "rc87-e8b4be97e7260cde",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt-source-result.test.ts",
+ "line": 97,
+ "title": "failed source and snapshot parsing preserve successful virtual-source ancestry",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eb62c50a5d10f8c01f447fdf97bf3dd58632ff5a71858774096a97433bc1630f"
+ },
+ {
+ "id": "rc87-0f9575654fed2f09",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt.test.ts",
+ "line": 4,
+ "title": "BH-0012 scans native ESM module class strings",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b06addba42e89a2742faf02de2a82183086250083e3c299cea9b7ec9c0e88069"
+ },
+ {
+ "id": "rc87-bcb1be2fc616415c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt.test.ts",
+ "line": 14,
+ "title": "audit control: replaced sources are cleared by reset and can be rescanned",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "72d7a63f78b55437a5887b6dd652b4c2feae5c6ad8151877b043d6f608109233"
+ },
+ {
+ "id": "rc87-5064a5b51ac9611d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt.test.ts",
+ "line": 30,
+ "title": "BH-0012 module filtering for component.css yields supported=false",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d0daa09428f6858061e1648165e3750f93994abd7c398fe8ab82a915ba449e7",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "component.css | false"
+ }
+ },
+ {
+ "id": "rc87-2fa589f3b0a10fcc",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt.test.ts",
+ "line": 30,
+ "title": "BH-0012 module filtering for component.json yields supported=false",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d0daa09428f6858061e1648165e3750f93994abd7c398fe8ab82a915ba449e7",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "component.json | false"
+ }
+ },
+ {
+ "id": "rc87-a6988d9199e6c0d6",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt.test.ts",
+ "line": 30,
+ "title": "BH-0012 module filtering for component.mjs?import yields supported=true",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d0daa09428f6858061e1648165e3750f93994abd7c398fe8ab82a915ba449e7",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "component.mjs?import | true"
+ }
+ },
+ {
+ "id": "rc87-e56ffbcf0bb2b068",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt.test.ts",
+ "line": 30,
+ "title": "BH-0012 module filtering for component.mjs?type=script yields supported=true",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d0daa09428f6858061e1648165e3750f93994abd7c398fe8ab82a915ba449e7",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "component.mjs?type=script | true"
+ }
+ },
+ {
+ "id": "rc87-474c9beb849498e4",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt.test.ts",
+ "line": 30,
+ "title": "BH-0012 module filtering for component.mjs?type=style yields supported=false",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d0daa09428f6858061e1648165e3750f93994abd7c398fe8ab82a915ba449e7",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "component.mjs?type=style | false"
+ }
+ },
+ {
+ "id": "rc87-e1e07365857fc46f",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/bug-hunt.test.ts",
+ "line": 30,
+ "title": "BH-0012 module filtering for component.wasm yields supported=false",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0d0daa09428f6858061e1648165e3750f93994abd7c398fe8ab82a915ba449e7",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "component.wasm | false"
+ }
+ },
+ {
+ "id": "rc87-0133f93a9b46e79d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/cache.test.ts",
+ "line": 62,
+ "title": "same class across many files is processed once",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ba7c4a5aa8ed679e4abfef571eccc53b2d12437c2194f25ff982387b4e794552"
+ },
+ {
+ "id": "rc87-e6c30c06d8609abf",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/lifecycle.test.ts",
+ "line": 43,
+ "title": "dispose invalidates a pending init and emits before removing listeners",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5fc5a1f7d6a021c81f10db65e02a64394446a7141c0d3f8e3b78eadab1cec76c"
+ },
+ {
+ "id": "rc87-bae34e2e297b6361",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/lifecycle.test.ts",
+ "line": 71,
+ "title": "only the latest reset can commit its session and manifest",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3d23ec7388c8ab5f03c47acd85225284bae901a22138ed49940b9f978f4178e0"
+ },
+ {
+ "id": "rc87-b0bef2727a7d10c2",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/native-support-order.test.ts",
+ "line": 9,
+ "title": "native scanner keeps native validation aligned across files",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1783997c0ba2385682bbd8302b13656f5c4f728f5742334a831f14e20907b3f0",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "native"
+ }
+ },
+ {
+ "id": "rc87-07d767d717a84db8",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/native-support-order.test.ts",
+ "line": 9,
+ "title": "wasm scanner keeps native validation aligned across files",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1783997c0ba2385682bbd8302b13656f5c4f728f5742334a831f14e20907b3f0",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "wasm"
+ }
+ },
+ {
+ "id": "rc87-bb6b06cdbeed7860",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/performance-cache.test.ts",
+ "line": 12,
+ "title": "native skips extraction, validation and snapshots for cached sources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "631c0e43832ae9775c4ee7e99796e76f303bbfa269568b350bc5a878f6afe99a",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "native"
+ }
+ },
+ {
+ "id": "rc87-c36f832e7a97dac5",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/performance-cache.test.ts",
+ "line": 12,
+ "title": "wasm skips extraction, validation and snapshots for cached sources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "631c0e43832ae9775c4ee7e99796e76f303bbfa269568b350bc5a878f6afe99a",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "wasm"
+ }
+ },
+ {
+ "id": "rc87-2661c5b7db378c23",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/performance-cache.test.ts",
+ "line": 50,
+ "title": "caches html extraction including complete candidates and empty results",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "59a90a15847cba2b1e922cf095c64cfbc8f6cf7a38595628f446fd775d358865",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "html"
+ }
+ },
+ {
+ "id": "rc87-744dc7e0d7937c7c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/performance-cache.test.ts",
+ "line": 50,
+ "title": "caches svelte extraction including complete candidates and empty results",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "59a90a15847cba2b1e922cf095c64cfbc8f6cf7a38595628f446fd775d358865",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "svelte"
+ }
+ },
+ {
+ "id": "rc87-32a68777287c1be9",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/performance-cache.test.ts",
+ "line": 50,
+ "title": "caches tsx extraction including complete candidates and empty results",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "59a90a15847cba2b1e922cf095c64cfbc8f6cf7a38595628f446fd775d358865",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "tsx"
+ }
+ },
+ {
+ "id": "rc87-01a957b89bac5de8",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/performance-cache.test.ts",
+ "line": 50,
+ "title": "caches vue extraction including complete candidates and empty results",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "59a90a15847cba2b1e922cf095c64cfbc8f6cf7a38595628f446fd775d358865",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "vue"
+ }
+ },
+ {
+ "id": "rc87-caf6c273eafdc742",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/performance-cache.test.ts",
+ "line": 79,
+ "title": "adapter failure leaves the source retryable",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "204d07a0d09e7e681f4cd13b6286830475e2606989263e2006e5c44b7d6dc94b"
+ },
+ {
+ "id": "rc87-d2058958766a94dd",
+ "package": "tooling",
+ "file": "packages/tooling/tests/scanner/source-policy.test.ts",
+ "line": 7,
+ "title": "workspace and nested ignores, explicit inputs and output boundaries use one policy",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "050d8d12ed42217b953a367b3abc90e593d24b3f51755f3fa49f2ac64f98f11b"
+ },
+ {
+ "id": "rc87-f50c8413b0c77846",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/bug-hunt-html-references.test.ts",
+ "line": 10,
+ "title": "`BH-0010 ${binding} HTML references reach scanner CSS without splitting nonbreaking space`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e5915dc88dc81ab913032ed8aed2b1b2b376490f57b990a8318340ea972a3680"
+ },
+ {
+ "id": "rc87-f50c8413b0c77846",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/bug-hunt-html-references.test.ts",
+ "line": 10,
+ "title": "`BH-0010 ${binding} HTML references reach scanner CSS without splitting nonbreaking space`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e5915dc88dc81ab913032ed8aed2b1b2b376490f57b990a8318340ea972a3680"
+ },
+ {
+ "id": "rc87-ad9598df97bf294d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/bug-hunt-svelte-branches.test.ts",
+ "line": 47,
+ "title": "`BH-0011 extracts ${name} without falling back to arbitrary source text`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a4b62ef3d8bcb8691d5d9c619998454f84a363a355e52daac1e16e97716ef19d"
+ },
+ {
+ "id": "rc87-ad9598df97bf294d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/bug-hunt-svelte-branches.test.ts",
+ "line": 47,
+ "title": "`BH-0011 extracts ${name} without falling back to arbitrary source text`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a4b62ef3d8bcb8691d5d9c619998454f84a363a355e52daac1e16e97716ef19d"
+ },
+ {
+ "id": "rc87-ad9598df97bf294d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/bug-hunt-svelte-branches.test.ts",
+ "line": 47,
+ "title": "`BH-0011 extracts ${name} without falling back to arbitrary source text`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a4b62ef3d8bcb8691d5d9c619998454f84a363a355e52daac1e16e97716ef19d"
+ },
+ {
+ "id": "rc87-ad9598df97bf294d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/bug-hunt-svelte-branches.test.ts",
+ "line": 47,
+ "title": "`BH-0011 extracts ${name} without falling back to arbitrary source text`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a4b62ef3d8bcb8691d5d9c619998454f84a363a355e52daac1e16e97716ef19d"
+ },
+ {
+ "id": "rc87-ad9598df97bf294d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/bug-hunt-svelte-branches.test.ts",
+ "line": 47,
+ "title": "`BH-0011 extracts ${name} without falling back to arbitrary source text`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a4b62ef3d8bcb8691d5d9c619998454f84a363a355e52daac1e16e97716ef19d"
+ },
+ {
+ "id": "rc87-ad9598df97bf294d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/bug-hunt-svelte-branches.test.ts",
+ "line": 47,
+ "title": "`BH-0011 extracts ${name} without falling back to arbitrary source text`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a4b62ef3d8bcb8691d5d9c619998454f84a363a355e52daac1e16e97716ef19d"
+ },
+ {
+ "id": "rc87-ad9598df97bf294d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/bug-hunt-svelte-branches.test.ts",
+ "line": 47,
+ "title": "`BH-0011 extracts ${name} without falling back to arbitrary source text`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a4b62ef3d8bcb8691d5d9c619998454f84a363a355e52daac1e16e97716ef19d"
+ },
+ {
+ "id": "rc87-27c2bff8d713ac8d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/bug-hunt-svelte-branches.test.ts",
+ "line": 54,
+ "title": "BH-0011 scanner emits classes from nested Svelte alternatives",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fdded4096fbc8bf9d1baf160b07312b1ab64e915752f9e9a6edea4dc6196e397"
+ },
+ {
+ "id": "rc87-8c9323bc1bdbe908",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/bug-hunt.test.ts",
+ "line": 5,
+ "title": "BH-0010 decodes HTML class character references before extraction",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1eef82be6766b938fde7cf6f01cb78353fd45ac30fe459b2c95777e8fd5be7c7"
+ },
+ {
+ "id": "rc87-9d3d50e96725f3ec",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/bug-hunt.test.ts",
+ "line": 10,
+ "title": "BH-0011 extracts classes in both Svelte conditional branches",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4a05fb565c157a5bdff463a0a230b9ece5983ad76e02e222e9e640c5c2780cc2"
+ },
+ {
+ "id": "rc87-1537d7c76a2c3912",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/html-attribute-mapping.test.ts",
+ "line": 9,
+ "title": "`${binding} maps HTML attributes without changing existing extraction results`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e4576765e9bd1728e089c0f1e4471a75a922a6c4641f1171da91304475a2bcf1"
+ },
+ {
+ "id": "rc87-1537d7c76a2c3912",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/html-attribute-mapping.test.ts",
+ "line": 9,
+ "title": "`${binding} maps HTML attributes without changing existing extraction results`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e4576765e9bd1728e089c0f1e4471a75a922a6c4641f1171da91304475a2bcf1"
+ },
+ {
+ "id": "rc87-a74f7c207366d7a4",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/html-attribute-mapping.test.ts",
+ "line": 25,
+ "title": "public tooling session returns frozen HTML mappings and enforces disposal",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "21432e8bc409331b094edf20ea25dd7b29c37ba6d4ed1f72993baf8deaeee138"
+ },
+ {
+ "id": "rc87-6a8243594102db50",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
+ "line": 18,
+ "title": "exports class candidate extraction",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3824fbea478a57f4b0ccc59b301a787f2eaaf1befdfc7bf2f79e370821c4f185"
+ },
+ {
+ "id": "rc87-7a7db9b49e1ad043",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
+ "line": 22,
+ "title": "ignores module specifiers, require calls, dynamic imports, and common directives with Oxc",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c003230a3845c4ff0bb1894733b653dbc86619d1325a6e3a4326bce148b14462"
+ },
+ {
+ "id": "rc87-1dbb1927bb3218dc",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
+ "line": 36,
+ "title": "extracts class attributes and script strings from HTML",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ba36a720fab631e35f2b6c72691a71d6bf01100cae8bcf8a1ea21d80c32e7b63"
+ },
+ {
+ "id": "rc87-c86aee8c537cd4bc",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
+ "line": 53,
+ "title": "does not load optional framework parsers for barrel-only helpers",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cc51de0735fbe88cf49448979133435fecb687947dc43d191d002019de86b5d2"
+ },
+ {
+ "id": "rc87-47501ea3a7231dfb",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
+ "line": 61,
+ "title": "extracts template, script, and script setup classes from Vue SFCs",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5c52778907d89dbadf1d45486b85c13e7e8328f123b3d1e3c07a7fc61675e631"
+ },
+ {
+ "id": "rc87-0d95d7b6ece22b02",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
+ "line": 80,
+ "title": "extracts markup, module script, instance script, and class directive classes from Svelte files",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8ec79d541995b5886f1a736b0d9a241dcb94524bfcaac231fad198a0f449c1a5"
+ },
+ {
+ "id": "rc87-eb4976e91589f224",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
+ "line": 99,
+ "title": "parses TypeScript in Svelte scripts and class expressions without treating it as JavaScript",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b216a9c9458f55c3b7a8ff6ab09182ec1a3075a932caa9dfaac557818dae3919"
+ },
+ {
+ "id": "rc87-b0f1d39e722c24b7",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
+ "line": 113,
+ "title": "extracts frontmatter, script, and markup classes from Astro files while ignoring styles",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "dcce55ba2e4eb591a4af5d6c6f5966475978f6478f1779a3f72d08724fcced2b"
+ },
+ {
+ "id": "rc87-96cc1016e9dd5d83",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
+ "line": 132,
+ "title": "reports missing framework parsers without raw fallback",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ce5541d93a71a5fb4e93bbb46c8ba77faa840826d6e89bcac1cb43ae50290c17"
+ },
+ {
+ "id": "rc87-d7dfb8fbf1682634",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
+ "line": 152,
+ "title": "matches adapters with global regular expressions consistently",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "647d160474788021bd5b40cdedb6cbe70fbae593ebfbcc37b0214daea5cd5bec"
+ },
+ {
+ "id": "rc87-c59b8ef1021392cb",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-extract-class-candidates.test.ts",
+ "line": 4,
+ "title": "extracts class candidates from mixed source strings",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0dff332193be8f48d0a2f3494255644617e38be05db7e08fc7aceb77be722901"
+ },
+ {
+ "id": "rc87-64fb1e21e03ab479",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-extract-class-candidates.test.ts",
+ "line": 24,
+ "title": "keeps grouped class candidates before downstream validation",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ea19ea0b875b57a70af0ebd0777471cb2d2daf2ae08ad62f0c010e9cd9976563"
+ },
+ {
+ "id": "rc87-4c343a89ca5f6475",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/rc87-extract-class-candidates.test.ts",
+ "line": 31,
+ "title": "keeps native custom property declarations without legacy dollar assignments",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cd822818b5a5195f71e550ae9cdf7d15a861f18f36de555a23b4ef611350c897"
+ },
+ {
+ "id": "rc87-8471601240020bd3",
+ "package": "tooling",
+ "file": "packages/tooling/tests/source/session.test.ts",
+ "line": 34,
+ "title": "extracts static classes from JavaScript and TypeScript syntax with Oxc",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "304fa1a099326237c61402b170ad5583a20ac8d53d50bc85cae9b14a7c2bdf70"
+ },
+ {
+ "id": "rc87-d0fb7d8c458dd210",
+ "package": "tooling",
+ "file": "packages/tooling/tests/validator/css.test.ts",
+ "line": 16,
+ "title": "does not reject values whose var() or env() substitution is unknown",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "47dfd19ac681a1f713e510776991dc2c98e5c09f1d52d0760786437253791c77"
+ },
+ {
+ "id": "rc87-fbfb3abbf431c27a",
+ "package": "tooling",
+ "file": "packages/tooling/tests/validator/rc87-validator.test.ts",
+ "line": 38,
+ "title": "validate an invalid CSS property value",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "256cbcd7f70f24602d805698d3e6a2b4ca30ff55105679673403ce8a97a4d5f8"
+ },
+ {
+ "id": "rc87-a7b959d019373410",
+ "package": "tooling",
+ "file": "packages/tooling/tests/validator/rc87-validator.test.ts",
+ "line": 43,
+ "title": "validate valid classes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ae9b8979917b1e9a1d157ec8d3a793fa0f6648d3895718019bad020088bf9f79"
+ },
+ {
+ "id": "rc87-5dcc469ccbe6bd0d",
+ "package": "tooling",
+ "file": "packages/tooling/tests/validator/rc87-validator.test.ts",
+ "line": 59,
+ "title": "create rules by class",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9be44c10ba92f3fad53b0e2e2cc70ba2df86d9ee6e39a28094a9bdc81f6b4061"
+ },
+ {
+ "id": "rc87-9060545b63c0f3f2",
+ "package": "tooling",
+ "file": "packages/tooling/tests/validator/rc87-validator.test.ts",
+ "line": 64,
+ "title": "validates native CSS declarations through @eslint/css-tree",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "44dbb0f4fdab71921e04af1ed71d475324d741a5b68e2a8b68ab1519ab53ba01"
+ },
+ {
+ "id": "rc87-1068ef0c8cf9bd7a",
+ "package": "tooling",
+ "file": "packages/tooling/tests/validator/rc87-validator.test.ts",
+ "line": 84,
+ "title": "fairly irregular classes can be ignored very well",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e100d51e8cc5666877545e55bb37e18fdf1d2a7c5da8a8eed548c24e9de0e3c5"
+ },
+ {
+ "id": "rc87-d442dbf36521ae0f",
+ "package": "tooling",
+ "file": "packages/tooling/tests/validator/test.ts",
+ "line": 75,
+ "title": "records only checks performed on emitted CSS",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a689191b6631114bd9ced00df18feafffaa09d31b7401cf5b71fd99c2f43f06c"
+ },
+ {
+ "id": "rc87-6d3930507c9722db",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "--data:{\"x\": [1, 2]} is unknown",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "--data | {\"x\": [1, 2]} | unknown"
+ }
+ },
+ {
+ "id": "rc87-bb3b2e014ba046e9",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "--money:$100 is unknown",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "--money | $100 | unknown"
+ }
+ },
+ {
+ "id": "rc87-ae2c86dab4345a50",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "--pipe:a|b is unknown",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "--pipe | a|b | unknown"
+ }
+ },
+ {
+ "id": "rc87-44c2ec9967fafd66",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "color:red is valid",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 8,
+ "resolved": true,
+ "value": "color | red | valid"
+ }
+ },
+ {
+ "id": "rc87-46b21b46f9921db1",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "content:\"a|b\" is valid",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 18,
+ "resolved": true,
+ "value": "content | \"a|b\" | valid"
+ }
+ },
+ {
+ "id": "rc87-3f82f6831cae22af",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "display:future-layout is unknown",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 15,
+ "resolved": true,
+ "value": "display | future-layout | unknown"
+ }
+ },
+ {
+ "id": "rc87-4ac8ce7739255ed0",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "font:16px is invalid",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "font | 16px | invalid"
+ }
+ },
+ {
+ "id": "rc87-186480d35b812d97",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "future-property:future-value is unknown",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 14,
+ "resolved": true,
+ "value": "future-property | future-value | unknown"
+ }
+ },
+ {
+ "id": "rc87-b40f453129b73102",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "future-property:repeat(foo) is unknown",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 17,
+ "resolved": true,
+ "value": "future-property | repeat(foo) | unknown"
+ }
+ },
+ {
+ "id": "rc87-c964ae3f72a9c2f4",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "grid-template-columns:repeat(2.5,minmax(0,1fr)) is invalid",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "grid-template-columns | repeat(2.5,minmax(0,1fr)) | invalid"
+ }
+ },
+ {
+ "id": "rc87-ee6086b3714199b7",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "grid-template-columns:repeat(3,minmax(0,1fr)) is valid",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 7,
+ "resolved": true,
+ "value": "grid-template-columns | repeat(3,minmax(0,1fr)) | valid"
+ }
+ },
+ {
+ "id": "rc87-77f06fe35717399b",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "grid-template-columns:repeat(foo,minmax(0,1fr)) is invalid",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 6,
+ "resolved": true,
+ "value": "grid-template-columns | repeat(foo,minmax(0,1fr)) | invalid"
+ }
+ },
+ {
+ "id": "rc87-1119665ab2b1f50c",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "padding:env(safe-area-inset-top) is unknown",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 11,
+ "resolved": true,
+ "value": "padding | env(safe-area-inset-top) | unknown"
+ }
+ },
+ {
+ "id": "rc87-026fe3c271eff916",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "padding:future-spacing is unknown",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 16,
+ "resolved": true,
+ "value": "padding | future-spacing | unknown"
+ }
+ },
+ {
+ "id": "rc87-968229bff633a094",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "padding:red is invalid",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "padding | red | invalid"
+ }
+ },
+ {
+ "id": "rc87-2aac51cdef21cc00",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "padding:var(--spacing) is unknown",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 10,
+ "resolved": true,
+ "value": "padding | var(--spacing) | unknown"
+ }
+ },
+ {
+ "id": "rc87-efba957764cc679f",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "view-transition-scope:all is valid",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 9,
+ "resolved": true,
+ "value": "view-transition-scope | all | valid"
+ }
+ },
+ {
+ "id": "rc87-96cdc5672727b1fe",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "width:--space(2) is unknown",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 12,
+ "resolved": true,
+ "value": "width | --space(2) | unknown"
+ }
+ },
+ {
+ "id": "rc87-0f6a88a396ff6df3",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 6,
+ "title": "width:2future is unknown",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1726c0fd2d8b69e23ddd86ab6562b81ff206a66d0656660ba84c2c61ff882a28",
+ "matrix": {
+ "index": 13,
+ "resolved": true,
+ "value": "width | 2future | unknown"
+ }
+ },
+ {
+ "id": "rc87-3de387bc5c0d24a5",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 30,
+ "title": "checks descriptor grammars in their native at-rule context",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6939486df040e71f43756d5511105179b03b736716464ed60789d2bc563296d1"
+ },
+ {
+ "id": "rc87-a4ce1f8c1070e25a",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 41,
+ "title": "uses the current CSS grammar without changing generated declarations",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c629533f095218f2d6762df91ea1ac2ac900272eace41fda875f384a470361b2"
+ },
+ {
+ "id": "rc87-b5d8f089c2f270c5",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 51,
+ "title": "checks every declaration in managed and conditional rules",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e3bd51a41464d457c7c633058cc48c1b41c7ef8b4af4f9bf70795bd657f563f0"
+ },
+ {
+ "id": "rc87-b859255303848168",
+ "package": "tooling",
+ "file": "packages/tooling/tests/value-validation.test.ts",
+ "line": 63,
+ "title": "checks custom-property structure separately from its unknown value grammar",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "31f899a1844ef254ebefd331d42267358f08354157a28abf33d314a796ac9277"
+ },
+ {
+ "id": "rc87-a1d2ec93056a5bc2",
+ "package": "vite",
+ "file": "packages/vite/tests/bug-hunt-final-css-hash.test.ts",
+ "line": 18,
+ "title": "BH-0045 hashes the exact final CSS bytes before naming the asset",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "926d56148e1731a6d38d505514e75e04d06f212484013651e214fbd85fb4629e"
+ },
+ {
+ "id": "rc87-df7f986a891be5b4",
+ "package": "vite",
+ "file": "packages/vite/tests/bug-hunt-final-css-hash.test.ts",
+ "line": 31,
+ "title": "BH-0045 gives custom filename callbacks the final CSS and preserves fixed filenames",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6f015c5052995378b01fa88651d80f82bb0fef5189a32f0224efdd8ad8918854"
+ },
+ {
+ "id": "rc87-8ba5fab3a69de6bd",
+ "package": "vite",
+ "file": "packages/vite/tests/bug-hunt-final-css-hash.test.ts",
+ "line": 40,
+ "title": "BH-0045 leaves non-managed CSS and non-CSS asset patterns unchanged",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ea0a4f8e74f27a0989a1971a1b98f903a88de9aa63d78499045e0c2769b8b387"
+ },
+ {
+ "id": "rc87-174760fbfe5b9d4b",
+ "package": "vite",
+ "file": "packages/vite/tests/bug-hunt-final-css-hash.test.ts",
+ "line": 47,
+ "title": "BH-0045 uses one finished extraction for naming and publication",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cade0108f1b000b5ccfc989421ead1545aaccfd303294c083eed2e3049da543c"
+ },
+ {
+ "id": "rc87-2923eb2b7e4c83c6",
+ "package": "vite",
+ "file": "packages/vite/tests/bug-hunt-hydration-url-matrix.test.ts",
+ "line": 7,
+ "title": "BH-0016 resolves each emitted manifest for $mode / $base / $assetsDir [1: {\"base\":\"./\",\"assetsDir\":\"assets\",\"mode\":\"progressive\"}]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "be12f62a0f06caecf479a89a84727c3310da5058882ad6dd5735c80ab9aebc86",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "{\"base\":\"./\",\"assetsDir\":\"assets\",\"mode\":\"progressive\"}"
+ }
+ },
+ {
+ "id": "rc87-a709810c6c02b9ef",
+ "package": "vite",
+ "file": "packages/vite/tests/bug-hunt-hydration-url-matrix.test.ts",
+ "line": 7,
+ "title": "BH-0016 resolves each emitted manifest for $mode / $base / $assetsDir [2: {\"base\":\"\",\"assetsDir\":\"custom/files\",\"mode\":\"progressive\"}]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "be12f62a0f06caecf479a89a84727c3310da5058882ad6dd5735c80ab9aebc86",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "{\"base\":\"\",\"assetsDir\":\"custom/files\",\"mode\":\"progressive\"}"
+ }
+ },
+ {
+ "id": "rc87-f244d989d1a173b6",
+ "package": "vite",
+ "file": "packages/vite/tests/bug-hunt-hydration-url-matrix.test.ts",
+ "line": 7,
+ "title": "BH-0016 resolves each emitted manifest for $mode / $base / $assetsDir [3: {\"base\":\"./\",\"assetsDir\":\"\",\"mode\":\"progressive\"}]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "be12f62a0f06caecf479a89a84727c3310da5058882ad6dd5735c80ab9aebc86",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "{\"base\":\"./\",\"assetsDir\":\"\",\"mode\":\"progressive\"}"
+ }
+ },
+ {
+ "id": "rc87-e1c7fa12540ccda2",
+ "package": "vite",
+ "file": "packages/vite/tests/bug-hunt-hydration-url-matrix.test.ts",
+ "line": 7,
+ "title": "BH-0016 resolves each emitted manifest for $mode / $base / $assetsDir [4: {\"base\":\"/app/\",\"assetsDir\":\"assets\",\"mode\":\"progressive\"}]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "be12f62a0f06caecf479a89a84727c3310da5058882ad6dd5735c80ab9aebc86",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "{\"base\":\"/app/\",\"assetsDir\":\"assets\",\"mode\":\"progressive\"}"
+ }
+ },
+ {
+ "id": "rc87-d2f827e9999952dc",
+ "package": "vite",
+ "file": "packages/vite/tests/bug-hunt-hydration-url-matrix.test.ts",
+ "line": 7,
+ "title": "BH-0016 resolves each emitted manifest for $mode / $base / $assetsDir [5: {\"base\":\"https://cdn.example.test/app/\",\"assetsDir\":\"assets\",\"mode\":\"progressive\"}]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "be12f62a0f06caecf479a89a84727c3310da5058882ad6dd5735c80ab9aebc86",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "{\"base\":\"https://cdn.example.test/app/\",\"assetsDir\":\"assets\",\"mode\":\"progressive\"}"
+ }
+ },
+ {
+ "id": "rc87-f31bbd0944cbe4fc",
+ "package": "vite",
+ "file": "packages/vite/tests/bug-hunt-hydration-url-matrix.test.ts",
+ "line": 7,
+ "title": "BH-0016 resolves each emitted manifest for $mode / $base / $assetsDir [6: {\"base\":\"./\",\"assetsDir\":\"custom/files\",\"mode\":\"pre-render\"}]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "be12f62a0f06caecf479a89a84727c3310da5058882ad6dd5735c80ab9aebc86",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "{\"base\":\"./\",\"assetsDir\":\"custom/files\",\"mode\":\"pre-render\"}"
+ }
+ },
+ {
+ "id": "rc87-ccb1784ebac539b6",
+ "package": "vite",
+ "file": "packages/vite/tests/bug-hunt-relative-hydration.test.ts",
+ "line": 7,
+ "title": "BH-0016 nested HTML resolves its hydration asset when base is relative",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a765d516a575a9e8afe4b932be819b272721575bb8dd348ca10dc3720630c1a7"
+ },
+ {
+ "id": "rc87-1c078025fdaedc4c",
+ "package": "vite",
+ "file": "packages/vite/tests/core.test.ts",
+ "line": 27,
+ "title": "static mode registers the shared scanner and style entry pipeline",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7243301b470fbbf7e7ddc4642e591340f9b03b221e7ac4b031397232bef6b9e9"
+ },
+ {
+ "id": "rc87-d7224028340ddd79",
+ "package": "vite",
+ "file": "packages/vite/tests/modes/scanner.test.ts",
+ "line": 59,
+ "title": "reinitializes the scanner for a later build environment",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "92f5f0fb2663f2ad324b23022c177ecd94d0a52ed9775c5d341c91f843cdc09c"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-b69bb88f03e31fc3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 15,
+ "title": "`failed ${failure} bounds recovery material to one run (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "58d15b1fc43fe3c2c742a12a3bf1383d43de041bfa1b8bc389cf75f96fa73354"
+ },
+ {
+ "id": "rc87-35333eab5b332a32",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 40,
+ "title": "`custom build environment initialization and watch ownership survive (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7ea75543ddbacc54addab8ba46b1d9e6bba552dc7dec4b7efb71ca375a3662d5"
+ },
+ {
+ "id": "rc87-35333eab5b332a32",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 40,
+ "title": "`custom build environment initialization and watch ownership survive (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7ea75543ddbacc54addab8ba46b1d9e6bba552dc7dec4b7efb71ca375a3662d5"
+ },
+ {
+ "id": "rc87-35333eab5b332a32",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 40,
+ "title": "`custom build environment initialization and watch ownership survive (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7ea75543ddbacc54addab8ba46b1d9e6bba552dc7dec4b7efb71ca375a3662d5"
+ },
+ {
+ "id": "rc87-35333eab5b332a32",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 40,
+ "title": "`custom build environment initialization and watch ownership survive (${mode})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7ea75543ddbacc54addab8ba46b1d9e6bba552dc7dec4b7efb71ca375a3662d5"
+ },
+ {
+ "id": "rc87-2c944c6858c5b15f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 72,
+ "title": "`configuration bounds recovery material when a peer ${failure} fails (shared=${shared})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c2e510551e54ab890b015a7cdfc61f7c57ed2db3119ce0cccd4c2db5a60a2fd9"
+ },
+ {
+ "id": "rc87-2c944c6858c5b15f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 72,
+ "title": "`configuration bounds recovery material when a peer ${failure} fails (shared=${shared})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c2e510551e54ab890b015a7cdfc61f7c57ed2db3119ce0cccd4c2db5a60a2fd9"
+ },
+ {
+ "id": "rc87-2c944c6858c5b15f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 72,
+ "title": "`configuration bounds recovery material when a peer ${failure} fails (shared=${shared})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c2e510551e54ab890b015a7cdfc61f7c57ed2db3119ce0cccd4c2db5a60a2fd9"
+ },
+ {
+ "id": "rc87-2c944c6858c5b15f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-config-recovery.test.ts",
+ "line": 72,
+ "title": "`configuration bounds recovery material when a peer ${failure} fails (shared=${shared})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c2e510551e54ab890b015a7cdfc61f7c57ed2db3119ce0cccd4c2db5a60a2fd9"
+ },
+ {
+ "id": "rc87-a0db63b50ff4b70f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 43,
+ "title": "`build recovery replaces failures and forgets successful dependencies in ${mode} (managed=${managed})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f77a4564086fb549a5742d160bda63d33f8cd87defe3b099c59861a766e91b3f"
+ },
+ {
+ "id": "rc87-a0db63b50ff4b70f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 43,
+ "title": "`build recovery replaces failures and forgets successful dependencies in ${mode} (managed=${managed})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f77a4564086fb549a5742d160bda63d33f8cd87defe3b099c59861a766e91b3f"
+ },
+ {
+ "id": "rc87-a0db63b50ff4b70f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 43,
+ "title": "`build recovery replaces failures and forgets successful dependencies in ${mode} (managed=${managed})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f77a4564086fb549a5742d160bda63d33f8cd87defe3b099c59861a766e91b3f"
+ },
+ {
+ "id": "rc87-a0db63b50ff4b70f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 43,
+ "title": "`build recovery replaces failures and forgets successful dependencies in ${mode} (managed=${managed})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f77a4564086fb549a5742d160bda63d33f8cd87defe3b099c59861a766e91b3f"
+ },
+ {
+ "id": "rc87-a0db63b50ff4b70f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 43,
+ "title": "`build recovery replaces failures and forgets successful dependencies in ${mode} (managed=${managed})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f77a4564086fb549a5742d160bda63d33f8cd87defe3b099c59861a766e91b3f"
+ },
+ {
+ "id": "rc87-a0db63b50ff4b70f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 43,
+ "title": "`build recovery replaces failures and forgets successful dependencies in ${mode} (managed=${managed})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f77a4564086fb549a5742d160bda63d33f8cd87defe3b099c59861a766e91b3f"
+ },
+ {
+ "id": "rc87-a0db63b50ff4b70f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 43,
+ "title": "`build recovery replaces failures and forgets successful dependencies in ${mode} (managed=${managed})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f77a4564086fb549a5742d160bda63d33f8cd87defe3b099c59861a766e91b3f"
+ },
+ {
+ "id": "rc87-a0db63b50ff4b70f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 43,
+ "title": "`build recovery replaces failures and forgets successful dependencies in ${mode} (managed=${managed})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f77a4564086fb549a5742d160bda63d33f8cd87defe3b099c59861a766e91b3f"
+ },
+ {
+ "id": "rc87-7e215072c64d36cb",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 70,
+ "title": "closing a failed build releases its polling and owned cache files",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c3e362816fb683cef65b6b6ab3862eea9763e24bf6ada0ae9e311136bca26505"
+ },
+ {
+ "id": "rc87-8075c6301fb13a57",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 81,
+ "title": "build recovery respects excluded dependencies",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "87907ad47545b44cdef9eb87c92290e0fc5acde893d44bdaaa1976180d07bc5c"
+ },
+ {
+ "id": "rc87-5aeac096ee298974",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 92,
+ "title": "`watch filters allow reference recovery with ${filter.name}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "284dc7039c784e7b9585f57e986df2ee604bbfc3eb9de06e020aa259136a6f83"
+ },
+ {
+ "id": "rc87-5aeac096ee298974",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 92,
+ "title": "`watch filters allow reference recovery with ${filter.name}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "284dc7039c784e7b9585f57e986df2ee604bbfc3eb9de06e020aa259136a6f83"
+ },
+ {
+ "id": "rc87-93640fd98aebea5a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-failure-lifecycle.test.ts",
+ "line": 102,
+ "title": "a watch filter that accepts no recovery location allocates nothing",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b19c121ee9b2c74f5d103946ccffac3d8f0578875ec990f70ee3329acf1abc83"
+ },
+ {
+ "id": "rc87-76e283e73d32cbb3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-recovery-ownership.test.ts",
+ "line": 19,
+ "title": "a configuration error leaves recovery files for the next run to reclaim",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eb63510cf740b18e1250555dd58fcb3bd67df3242bc5632bb5388c1b15c588c8"
+ },
+ {
+ "id": "rc87-ec6bea78dc2785a5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-recovery-ownership.test.ts",
+ "line": 34,
+ "title": "closing one build owner preserves recovery for another already started owner",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "25dc3ecc768edaf1cac2311d492e5fafb6eee1b6654932d8f68f5482039f3563"
+ },
+ {
+ "id": "rc87-7c33c820e1b993aa",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-build-recovery-ownership.test.ts",
+ "line": 62,
+ "title": "independent plugin configurations sharing a cache directory release only their own files",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b59bc8896ec3bebecd4e0eedfbcffcae48e0dd481b66fb6d00a2a8c146054747"
+ },
+ {
+ "id": "rc87-5dc43cc0c100ab72",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-css-modules.test.ts",
+ "line": 30,
+ "title": "BH-0004 managed CSS Modules preserve named/default exports and global selectors",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "07da5b429d8c7218044e28fbec8804006a219ab8db401aaf9f6ea93aaf6da967"
+ },
+ {
+ "id": "rc87-780bd3a098e48d66",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-css-modules.test.ts",
+ "line": 38,
+ "title": "BH-0004 managed CSS Modules keep cross-file composed exports and CSS",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6b7e728f24510c71a0fa7d94cd1fad9a17ae99722202dd52284f414a84b1cc41"
+ },
+ {
+ "id": "rc87-21a532f0ac752396",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-css-modules.test.ts",
+ "line": 45,
+ "title": "`BH-0004 ${extension} Modules retain referenced scoped CSS under default pruning`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ee0fe41b2b89b42779c2b7959675d0f0ee614a9177aa06e1fc653f86ab943ea2"
+ },
+ {
+ "id": "rc87-21a532f0ac752396",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-css-modules.test.ts",
+ "line": 45,
+ "title": "`BH-0004 ${extension} Modules retain referenced scoped CSS under default pruning`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ee0fe41b2b89b42779c2b7959675d0f0ee614a9177aa06e1fc653f86ab943ea2"
+ },
+ {
+ "id": "rc87-aa94135e718b6c0d",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-css-modules.test.ts",
+ "line": 51,
+ "title": "BH-0004 CSS Modules localsConvention applies to exported names",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "929ecd69dbad3e676fb94eac00ae1e098edd6f4c76931e1dc8a97f66f8f287dd"
+ },
+ {
+ "id": "rc87-fe4fd8855b74e11d",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-css-modules.test.ts",
+ "line": 57,
+ "title": "BH-0004 disabling CSS Modules keeps the native CSS entry path",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "88242ed811b54166eaea6189e5788f7946e23740ad2b0c2b75c673d84434bd27"
+ },
+ {
+ "id": "rc87-81ca85f9b6d8a6ef",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-css-modules.test.ts",
+ "line": 63,
+ "title": "BH-0004 managed CSS Modules inline requests keep the scoped stylesheet string",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fe17eedf9999a6cd9ddb1278c1625197c5d62d2493bbbe8b9d4a86b21ae54865"
+ },
+ {
+ "id": "rc87-0bfdd390af24441b",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-css-modules.test.ts",
+ "line": 70,
+ "title": "BH-0004 CSS Modules compiler errors retain authored directive locations",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "cc091182eb14243899e66c3ff0884040ad456ace47903afa08d41d4e6f4ead73"
+ },
+ {
+ "id": "rc87-77568348a69ca22f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-css-modules.test.ts",
+ "line": 76,
+ "title": "BH-0004 unattributed composed Module content does not invent an original filename",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4dd29b5fb258e59b2307e59ac006133721d1a97ca6761974d020b6f75a96d43e"
+ },
+ {
+ "id": "rc87-8835390585eed0fc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-custom-environment-close.test.ts",
+ "line": 14,
+ "title": "'BH-0004 remaining environments load fresh styles after closing client (managed=' + managed + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bfacb3af79149e0e8a6ee5072aaada90193c5658936cad6a76a759209e7be67d",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "client"
+ }
+ },
+ {
+ "id": "rc87-8835390585eed0fc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-custom-environment-close.test.ts",
+ "line": 14,
+ "title": "'BH-0004 remaining environments load fresh styles after closing client (managed=' + managed + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bfacb3af79149e0e8a6ee5072aaada90193c5658936cad6a76a759209e7be67d",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "client"
+ }
+ },
+ {
+ "id": "rc87-48bee736331aa82c",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-custom-environment-close.test.ts",
+ "line": 14,
+ "title": "'BH-0004 remaining environments load fresh styles after closing edge (managed=' + managed + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bfacb3af79149e0e8a6ee5072aaada90193c5658936cad6a76a759209e7be67d",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "edge"
+ }
+ },
+ {
+ "id": "rc87-48bee736331aa82c",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-custom-environment-close.test.ts",
+ "line": 14,
+ "title": "'BH-0004 remaining environments load fresh styles after closing edge (managed=' + managed + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bfacb3af79149e0e8a6ee5072aaada90193c5658936cad6a76a759209e7be67d",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "edge"
+ }
+ },
+ {
+ "id": "rc87-abf503c09fa0f3af",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-custom-environment-close.test.ts",
+ "line": 14,
+ "title": "'BH-0004 remaining environments load fresh styles after closing ssr (managed=' + managed + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bfacb3af79149e0e8a6ee5072aaada90193c5658936cad6a76a759209e7be67d",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "ssr"
+ }
+ },
+ {
+ "id": "rc87-abf503c09fa0f3af",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-custom-environment-close.test.ts",
+ "line": 14,
+ "title": "'BH-0004 remaining environments load fresh styles after closing ssr (managed=' + managed + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bfacb3af79149e0e8a6ee5072aaada90193c5658936cad6a76a759209e7be67d",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "ssr"
+ }
+ },
+ {
+ "id": "rc87-67924fae3f031c29",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-graph-environments.test.ts",
+ "line": 50,
+ "title": "retained graphs survive idle environment replacement mode=$mode perEnvironment=$perEnvironment [dynamic]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "979d90a5f9929205b6e7c0ab31669b01a2f03fc685d22faf8f90e65852033bd9",
+ "matrix": {
+ "index": 0,
+ "resolved": false,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-cbb0cffd6825a639",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-graph-environments.test.ts",
+ "line": 87,
+ "title": "retained graph restart mode=$mode middleware=$middleware [dynamic]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e761f9149ce236d6a0ae32f5cbc128bfbe76625e92b2d984778027ce7c53061f",
+ "matrix": {
+ "index": 0,
+ "resolved": false,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-f6f7bdc64978b900",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-resource-lifecycle.test.ts",
+ "line": 7,
+ "title": "shared plugin roots retain resource delivery as another root or SSR environment closes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "474b483671ad9c6821871c69c431241e1c4c219c32976acbd5d45d550fe65f7c"
+ },
+ {
+ "id": "rc87-91bd2794ec364ed2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-resource-lifecycle.test.ts",
+ "line": 53,
+ "title": "published CSS and resource versions remain readable after a new graph is composed",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0dff501929ea06b9dfd470759145f071a422b0d55611c03a0d33c5876c6627b4"
+ },
+ {
+ "id": "rc87-994d4f69358177b5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-resource-paths.test.ts",
+ "line": 11,
+ "title": "development resource path mode=$mode name=$name [dynamic]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b66cb50832bf8c1ea06bcb34c7d41117b4944b59dc162349a36a8d497f80f7fb",
+ "matrix": {
+ "index": 0,
+ "resolved": false,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-7200e4c3b5a90c70",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-resource-recovery.test.ts",
+ "line": 8,
+ "title": "resource deletion and restoration recover development CSS in pre-render",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "94ddf4f75a2eb718ae951121ffef9b4709d5d3dd6bc662c8a99e57e56dc9f301",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-6f5e39fb0d3fecba",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-resource-recovery.test.ts",
+ "line": 8,
+ "title": "resource deletion and restoration recover development CSS in progressive",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "94ddf4f75a2eb718ae951121ffef9b4709d5d3dd6bc662c8a99e57e56dc9f301",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-00cbbacb34339ac7",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-resource-recovery.test.ts",
+ "line": 8,
+ "title": "resource deletion and restoration recover development CSS in runtime",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "94ddf4f75a2eb718ae951121ffef9b4709d5d3dd6bc662c8a99e57e56dc9f301",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-7deb858b8936a077",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-resource-recovery.test.ts",
+ "line": 8,
+ "title": "resource deletion and restoration recover development CSS in static",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "94ddf4f75a2eb718ae951121ffef9b4709d5d3dd6bc662c8a99e57e56dc9f301",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-7181b41250cc94c7",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-stylesheet-graphs.test.ts",
+ "line": 7,
+ "title": "BH-0004 dev delivers qualified child CSS and resources in pre-render",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1a635bfd4a467b265a706f5603e903fc35787d2f55cc02f207219532c7d87512",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-09c65f095995699a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-stylesheet-graphs.test.ts",
+ "line": 7,
+ "title": "BH-0004 dev delivers qualified child CSS and resources in progressive",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1a635bfd4a467b265a706f5603e903fc35787d2f55cc02f207219532c7d87512",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-875015098e15f4c9",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-stylesheet-graphs.test.ts",
+ "line": 7,
+ "title": "BH-0004 dev delivers qualified child CSS and resources in runtime",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1a635bfd4a467b265a706f5603e903fc35787d2f55cc02f207219532c7d87512",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-97fc189c94c034d8",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-dev-stylesheet-graphs.test.ts",
+ "line": 7,
+ "title": "BH-0004 dev delivers qualified child CSS and resources in static",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1a635bfd4a467b265a706f5603e903fc35787d2f55cc02f207219532c7d87512",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-1ef500dbf010836a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-environment-replacement.test.ts",
+ "line": 14,
+ "title": "`BH-0004 idle replacement survives old environments closing (managed=${managed}, perEnvironment=${perEnvironment})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "54dab83a53604d5b928aaa530c4b0844f1b7ee202a84e028c03a79fde9a6bc6d"
+ },
+ {
+ "id": "rc87-1ef500dbf010836a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-environment-replacement.test.ts",
+ "line": 14,
+ "title": "`BH-0004 idle replacement survives old environments closing (managed=${managed}, perEnvironment=${perEnvironment})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "54dab83a53604d5b928aaa530c4b0844f1b7ee202a84e028c03a79fde9a6bc6d"
+ },
+ {
+ "id": "rc87-1ef500dbf010836a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-environment-replacement.test.ts",
+ "line": 14,
+ "title": "`BH-0004 idle replacement survives old environments closing (managed=${managed}, perEnvironment=${perEnvironment})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "54dab83a53604d5b928aaa530c4b0844f1b7ee202a84e028c03a79fde9a6bc6d"
+ },
+ {
+ "id": "rc87-1ef500dbf010836a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-environment-replacement.test.ts",
+ "line": 14,
+ "title": "`BH-0004 idle replacement survives old environments closing (managed=${managed}, perEnvironment=${perEnvironment})`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "54dab83a53604d5b928aaa530c4b0844f1b7ee202a84e028c03a79fde9a6bc6d"
+ },
+ {
+ "id": "rc87-07129aeb1d827c8c",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-environment-replacement.test.ts",
+ "line": 50,
+ "title": "BH-0004 environment startup attaches HMR listeners once (perEnvironment=false)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "71616b2e00a080e42149386d5bfc15e033a082509ec22d41f481f17bb2925331",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-3b32a967f04d7b25",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-environment-replacement.test.ts",
+ "line": 50,
+ "title": "BH-0004 environment startup attaches HMR listeners once (perEnvironment=true)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "71616b2e00a080e42149386d5bfc15e033a082509ec22d41f481f17bb2925331",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-11f51401d02bae24",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-environment-replacement.test.ts",
+ "line": 73,
+ "title": "BH-0004 late server environment startup preserves client Sass dependencies (perEnvironment=false)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "42155ca68f2e2236432010e68de47c8b0e6541f0b45ce306f4dd109186b3d26c",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-9f36048a6ae6ed6a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-environment-replacement.test.ts",
+ "line": 73,
+ "title": "BH-0004 late server environment startup preserves client Sass dependencies (perEnvironment=true)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "42155ca68f2e2236432010e68de47c8b0e6541f0b45ce306f4dd109186b3d26c",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-9cb74a0f82bfb50a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 25,
+ "title": "'BH-0004 reconciles failed dependency without delivered watcher events in pre-render (resource=' + resource + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "590d9a7d824f3f5b2a8759fd768606d197b87a3b1c214fe0c7bd4166a75ebf6f",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-9cb74a0f82bfb50a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 25,
+ "title": "'BH-0004 reconciles failed dependency without delivered watcher events in pre-render (resource=' + resource + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "590d9a7d824f3f5b2a8759fd768606d197b87a3b1c214fe0c7bd4166a75ebf6f",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-96c1c5d61872a87f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 25,
+ "title": "'BH-0004 reconciles failed dependency without delivered watcher events in progressive (resource=' + resource + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "590d9a7d824f3f5b2a8759fd768606d197b87a3b1c214fe0c7bd4166a75ebf6f",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-96c1c5d61872a87f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 25,
+ "title": "'BH-0004 reconciles failed dependency without delivered watcher events in progressive (resource=' + resource + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "590d9a7d824f3f5b2a8759fd768606d197b87a3b1c214fe0c7bd4166a75ebf6f",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-ae0a96911ff365f4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 25,
+ "title": "'BH-0004 reconciles failed dependency without delivered watcher events in runtime (resource=' + resource + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "590d9a7d824f3f5b2a8759fd768606d197b87a3b1c214fe0c7bd4166a75ebf6f",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-ae0a96911ff365f4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 25,
+ "title": "'BH-0004 reconciles failed dependency without delivered watcher events in runtime (resource=' + resource + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "590d9a7d824f3f5b2a8759fd768606d197b87a3b1c214fe0c7bd4166a75ebf6f",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-77cdc6f6695b4741",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 25,
+ "title": "'BH-0004 reconciles failed dependency without delivered watcher events in static (resource=' + resource + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "590d9a7d824f3f5b2a8759fd768606d197b87a3b1c214fe0c7bd4166a75ebf6f",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-77cdc6f6695b4741",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 25,
+ "title": "'BH-0004 reconciles failed dependency without delivered watcher events in static (resource=' + resource + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "590d9a7d824f3f5b2a8759fd768606d197b87a3b1c214fe0c7bd4166a75ebf6f",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-350ddd32abe14521",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 62,
+ "title": "BH-0004 failed dependency reconciliation respects closing client",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a6dc4fe99f6c19211ae48d281efef6d42dfca0fdd1bbd0b226420c11cf991334",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "client"
+ }
+ },
+ {
+ "id": "rc87-3395e55d16b76433",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 62,
+ "title": "BH-0004 failed dependency reconciliation respects closing server",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a6dc4fe99f6c19211ae48d281efef6d42dfca0fdd1bbd0b226420c11cf991334",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "server"
+ }
+ },
+ {
+ "id": "rc87-c17ee9622bae2064",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 62,
+ "title": "BH-0004 failed dependency reconciliation respects closing ssr",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a6dc4fe99f6c19211ae48d281efef6d42dfca0fdd1bbd0b226420c11cf991334",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "ssr"
+ }
+ },
+ {
+ "id": "rc87-9aaee9e568779f60",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 79,
+ "title": "BH-0004 pending reconciliations remain isolated across servers (shared=false)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e85cab58fb064992bb237506ddb6be653862d25cb4b52ef72b7ede4a7938cbef",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-1a5105657edf3bf4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 79,
+ "title": "BH-0004 pending reconciliations remain isolated across servers (shared=true)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e85cab58fb064992bb237506ddb6be653862d25cb4b52ef72b7ede4a7938cbef",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-7a12ef5891bf50f8",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 91,
+ "title": "BH-0004 unchanged failures are not retried continuously and corrected contents recover",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "61be987d071113d16f586145e3882a8893fa4bb81d6a7953c276603f33fc6ee0"
+ },
+ {
+ "id": "rc87-084f45c2291290d2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 108,
+ "title": "BH-0004 a successful edit drops obsolete failed dependency reconciliation",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "66d83abc8652bda9c35353b32e04e8bd1980fb5791eebdd5d8491b2b0d6caa27"
+ },
+ {
+ "id": "rc87-fa6f4d110c313b94",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 127,
+ "title": "BH-0004 reconciliation respects watch configuration: disabled",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6bdf86a0eabb631df724e5c743046214d1b7a2d29966691d74c873f1635e8463",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "disabled"
+ }
+ },
+ {
+ "id": "rc87-8c5d2911d9bf46e6",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 127,
+ "title": "BH-0004 reconciliation respects watch configuration: function",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6bdf86a0eabb631df724e5c743046214d1b7a2d29966691d74c873f1635e8463",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "function"
+ }
+ },
+ {
+ "id": "rc87-ac7a23ca90da9193",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 127,
+ "title": "BH-0004 reconciliation respects watch configuration: glob",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6bdf86a0eabb631df724e5c743046214d1b7a2d29966691d74c873f1635e8463",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "glob"
+ }
+ },
+ {
+ "id": "rc87-fe40aa7bc2539db9",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 139,
+ "title": "BH-0004 two failed owners recover independently in one environment",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "fa51dcc6ef2db975a16acb057ec45b7c193e50174104feafd0fe66be3d670024"
+ },
+ {
+ "id": "rc87-5f3144fa68d9cd30",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 157,
+ "title": "BH-0004 closing client during a reconciliation suppresses stale updates",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a7eb45ee7bf92843e5b93f260d8ae98d9c818168e34a852e1c26ea7e9ea41570",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "client"
+ }
+ },
+ {
+ "id": "rc87-2bfc60c5778811fd",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 157,
+ "title": "BH-0004 closing server during a reconciliation suppresses stale updates",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a7eb45ee7bf92843e5b93f260d8ae98d9c818168e34a852e1c26ea7e9ea41570",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "server"
+ }
+ },
+ {
+ "id": "rc87-de904a366a5cbf95",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-failed-dependency-reconciliation.test.ts",
+ "line": 175,
+ "title": "BH-0004 server restart drops reconciliations owned by the previous environment",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ee7e4b6a9ff00aa58abc547dfa973f625add28658848f158db70428f12ee448"
+ },
+ {
+ "id": "rc87-54ea8398d39457ba",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-hmr-server-lifecycle.test.ts",
+ "line": 16,
+ "title": "BH-0004 scanner changes notify the replacement server without retaining the closed server",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "035df037e2e1de0504afc8065bd03cd8286b3a8705b4fca96941f75e77da99c3"
+ },
+ {
+ "id": "rc87-fa20a7e83247b0f5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-imported-module-exports.test.ts",
+ "line": 9,
+ "title": "`local Modules ${relation} exports match pure Vite with childModule=${childModule}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "96460aae838ef8f3448c9ffaf056d030d1aa9fdeeaa922f9315ab5525882a31c"
+ },
+ {
+ "id": "rc87-fa20a7e83247b0f5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-imported-module-exports.test.ts",
+ "line": 9,
+ "title": "`local Modules ${relation} exports match pure Vite with childModule=${childModule}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "96460aae838ef8f3448c9ffaf056d030d1aa9fdeeaa922f9315ab5525882a31c"
+ },
+ {
+ "id": "rc87-fa20a7e83247b0f5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-imported-module-exports.test.ts",
+ "line": 9,
+ "title": "`local Modules ${relation} exports match pure Vite with childModule=${childModule}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "96460aae838ef8f3448c9ffaf056d030d1aa9fdeeaa922f9315ab5525882a31c"
+ },
+ {
+ "id": "rc87-fa20a7e83247b0f5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-imported-module-exports.test.ts",
+ "line": 9,
+ "title": "`local Modules ${relation} exports match pure Vite with childModule=${childModule}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "96460aae838ef8f3448c9ffaf056d030d1aa9fdeeaa922f9315ab5525882a31c"
+ },
+ {
+ "id": "rc87-cfffec33654e51a5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-imported-sass-original-maps.test.ts",
+ "line": 16,
+ "title": "imported Sass maps original file and token: $rootExtension / $syntax / partial=$partial / $addition / $command [dynamic]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0736ec8e43f908613b5deaf813e9442d447d097e4754a7b43494efe777066f57",
+ "matrix": {
+ "index": 0,
+ "resolved": false,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-6d2f4448aa7478d6",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-imported-sass-original-maps.test.ts",
+ "line": 59,
+ "title": "pure Vite direct preprocessing exposes original imported-partial maps: sass",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4b66279f3b8e2c06c9cbc224e3f8324103dd0b5094fc5968d7b5b47cfa7f80bd",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "sass"
+ }
+ },
+ {
+ "id": "rc87-b821d1d21aa8d96a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-imported-sass-original-maps.test.ts",
+ "line": 59,
+ "title": "pure Vite direct preprocessing exposes original imported-partial maps: scss",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4b66279f3b8e2c06c9cbc224e3f8324103dd0b5094fc5968d7b5b47cfa7f80bd",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "scss"
+ }
+ },
+ {
+ "id": "rc87-7ea4ea5f502d1427",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-imported-sass-original-maps.test.ts",
+ "line": 82,
+ "title": "`imported ${syntax} keeps honest ${kind} diagnostic precision`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "68c2d37a24bfd9bcb7287c987461fc0a1815d7d0176fccc6acf4952d052d9dc1"
+ },
+ {
+ "id": "rc87-7ea4ea5f502d1427",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-imported-sass-original-maps.test.ts",
+ "line": 82,
+ "title": "`imported ${syntax} keeps honest ${kind} diagnostic precision`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "68c2d37a24bfd9bcb7287c987461fc0a1815d7d0176fccc6acf4952d052d9dc1"
+ },
+ {
+ "id": "rc87-7ea4ea5f502d1427",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-imported-sass-original-maps.test.ts",
+ "line": 82,
+ "title": "`imported ${syntax} keeps honest ${kind} diagnostic precision`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "68c2d37a24bfd9bcb7287c987461fc0a1815d7d0176fccc6acf4952d052d9dc1"
+ },
+ {
+ "id": "rc87-7ea4ea5f502d1427",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-imported-sass-original-maps.test.ts",
+ "line": 82,
+ "title": "`imported ${syntax} keeps honest ${kind} diagnostic precision`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "68c2d37a24bfd9bcb7287c987461fc0a1815d7d0176fccc6acf4952d052d9dc1"
+ },
+ {
+ "id": "rc87-6b854ec2b9e8bf7a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-built-urls.test.ts",
+ "line": 22,
+ "title": "`BH-0004 ${format} inline applies runtime URL hooks to JS and retained CSS`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d06e5da502f7274bdf3cdfa92b2cc948ad98741679d67094c7179d83f19aca7c",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-6b854ec2b9e8bf7a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-built-urls.test.ts",
+ "line": 22,
+ "title": "`BH-0004 ${format} inline applies runtime URL hooks to JS and retained CSS`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d06e5da502f7274bdf3cdfa92b2cc948ad98741679d67094c7179d83f19aca7c",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-7f5634b1ad27c9ef",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-built-urls.test.ts",
+ "line": 22,
+ "title": "`BH-0004 ${format} inline applies static URL hooks to JS and retained CSS`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d06e5da502f7274bdf3cdfa92b2cc948ad98741679d67094c7179d83f19aca7c",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-7f5634b1ad27c9ef",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-built-urls.test.ts",
+ "line": 22,
+ "title": "`BH-0004 ${format} inline applies static URL hooks to JS and retained CSS`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d06e5da502f7274bdf3cdfa92b2cc948ad98741679d67094c7179d83f19aca7c",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-ebbd36cd8c539078",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-built-urls.test.ts",
+ "line": 43,
+ "title": "BH-0004 changing the URL hook does not reuse a filename for different CSS bytes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e587bf95d3aee28565346bf0147cae379605315716058b294c52385405ef1fd8"
+ },
+ {
+ "id": "rc87-7db10bdaf57cc936",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-built-urls.test.ts",
+ "line": 58,
+ "title": "BH-0004 relative-base server and client builds agree on retained CSS assets",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9f071866e128fa471261b140e30ad96eb12cc6badffc7729a04410f67ca0d206"
+ },
+ {
+ "id": "rc87-43df616c4ecb2278",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-ssr.test.ts",
+ "line": 11,
+ "title": "`BH-0004 ${format} SSR inline uses public URLs and respects asset emission false`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9c731fcf5c08749a7ed64e0b27b865a191cad0068a891c79d9b2246b8edff1a0",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-43df616c4ecb2278",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-ssr.test.ts",
+ "line": 11,
+ "title": "`BH-0004 ${format} SSR inline uses public URLs and respects asset emission false`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9c731fcf5c08749a7ed64e0b27b865a191cad0068a891c79d9b2246b8edff1a0",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-8dc52d0eba6d28e4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-ssr.test.ts",
+ "line": 11,
+ "title": "`BH-0004 ${format} SSR inline uses public URLs and respects asset emission true`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9c731fcf5c08749a7ed64e0b27b865a191cad0068a891c79d9b2246b8edff1a0",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-8dc52d0eba6d28e4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-ssr.test.ts",
+ "line": 11,
+ "title": "`BH-0004 ${format} SSR inline uses public URLs and respects asset emission true`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9c731fcf5c08749a7ed64e0b27b865a191cad0068a891c79d9b2246b8edff1a0",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-5b0760ba71f9c091",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-stylesheet.test.ts",
+ "line": 23,
+ "title": "BH-0004 inline imports export completed CSS without automatic stylesheet injection",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3f5be9bc1ebea1dcdf8fb0147b989909c488ebbbdf3ea07a7d93ef3fce159691"
+ },
+ {
+ "id": "rc87-2a65a73c2ca8d2b4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-stylesheet.test.ts",
+ "line": 36,
+ "title": "BH-0004 changing inline CSS changes the JS hash and repeated output stays stable",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a538099fe5b08201655a89f614498cebcf9c080cc81593883dab50377359f0e5"
+ },
+ {
+ "id": "rc87-9d284fde0ee38c89",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-stylesheet.test.ts",
+ "line": 49,
+ "title": "BH-0004 retained external imports and resources publish beside the inline URL base",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "be4e2de63cdbf534405c3bae5dacec731d31ece57e7fc81f24d281df5ccbb41a"
+ },
+ {
+ "id": "rc87-a9ee2a837a7d364c",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-stylesheet.test.ts",
+ "line": 63,
+ "title": "BH-0004 URL delivery preserves opaque author strings containing the internal URL prefix",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "aeb6eb4899f752104a91593a2186488b35921e145b1387d793f85959014dc0a7"
+ },
+ {
+ "id": "rc87-524a07a7e96e32a2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-stylesheet.test.ts",
+ "line": 74,
+ "title": "BH-0004 fully inlined descendants are not emitted as unused CSS files",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "648fd29d6eca97d7a589ff56ecdf4c6e7c3cce1429c82395d3c53eb08c790368"
+ },
+ {
+ "id": "rc87-43610c42c23ce9e7",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-stylesheet.test.ts",
+ "line": 85,
+ "title": "BH-0004 a removed inline import does not publish plugin-owned assets",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b02750bc4a2a837d41644f48f4069f75e35dafa446b8426eb6e033774a004377"
+ },
+ {
+ "id": "rc87-5d03687ca710546c",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-inline-stylesheet.test.ts",
+ "line": 95,
+ "title": "BH-0004 unused inline assets are removed without deleting another string URL base",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0b7ab1b3390b34b3faf32532b0717a1ffb6589b5b777946a9fe7818b30f82f27"
+ },
+ {
+ "id": "rc87-dc3b4f4165de14d2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-dc3b4f4165de14d2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-dc3b4f4165de14d2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-dc3b4f4165de14d2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-dc3b4f4165de14d2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-dc3b4f4165de14d2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-dc3b4f4165de14d2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-dc3b4f4165de14d2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-577a243b877a2ac4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-577a243b877a2ac4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-577a243b877a2ac4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-577a243b877a2ac4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-577a243b877a2ac4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-577a243b877a2ac4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-577a243b877a2ac4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-577a243b877a2ac4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-8bfd49d91b23c121",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-8bfd49d91b23c121",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-8bfd49d91b23c121",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-8bfd49d91b23c121",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-8bfd49d91b23c121",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-8bfd49d91b23c121",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-8bfd49d91b23c121",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-8bfd49d91b23c121",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-9e47f3aae63a2457",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-9e47f3aae63a2457",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-9e47f3aae63a2457",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-9e47f3aae63a2457",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-9e47f3aae63a2457",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-9e47f3aae63a2457",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-9e47f3aae63a2457",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-9e47f3aae63a2457",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-compose-graphs.test.ts",
+ "line": 10,
+ "title": "`BH-0004 local compose retains qualified child imports in ${command}/root-compose=${rootCompose}/child-compose=${composeChild}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "183a814611a740982c6c9f06ba8000a99522fe3cf2fdaf7c2e4211890a3720ed",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-3637412f5f835e87",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-graph-requests.test.ts",
+ "line": 8,
+ "title": "`local graph keeps CSS Modules exports and inline output in ${command}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1588a8a4aa21c8d10bfc6e672a4716690a547626d164e20e6c8fb91eac75f42f",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-3637412f5f835e87",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-graph-requests.test.ts",
+ "line": 8,
+ "title": "`local graph keeps CSS Modules exports and inline output in ${command}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1588a8a4aa21c8d10bfc6e672a4716690a547626d164e20e6c8fb91eac75f42f",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-866a1b37e4eb5971",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-graph-requests.test.ts",
+ "line": 8,
+ "title": "`local graph keeps CSS Modules exports and inline output in ${command}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1588a8a4aa21c8d10bfc6e672a4716690a547626d164e20e6c8fb91eac75f42f",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-866a1b37e4eb5971",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-graph-requests.test.ts",
+ "line": 8,
+ "title": "`local graph keeps CSS Modules exports and inline output in ${command}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1588a8a4aa21c8d10bfc6e672a4716690a547626d164e20e6c8fb91eac75f42f",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-5b4dcd7477520397",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-graph-requests.test.ts",
+ "line": 8,
+ "title": "`local graph keeps CSS Modules exports and inline output in ${command}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1588a8a4aa21c8d10bfc6e672a4716690a547626d164e20e6c8fb91eac75f42f",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-5b4dcd7477520397",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-graph-requests.test.ts",
+ "line": 8,
+ "title": "`local graph keeps CSS Modules exports and inline output in ${command}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1588a8a4aa21c8d10bfc6e672a4716690a547626d164e20e6c8fb91eac75f42f",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-cd48471577a98b7c",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-graph-requests.test.ts",
+ "line": 8,
+ "title": "`local graph keeps CSS Modules exports and inline output in ${command}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1588a8a4aa21c8d10bfc6e672a4716690a547626d164e20e6c8fb91eac75f42f",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-cd48471577a98b7c",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-graph-requests.test.ts",
+ "line": 8,
+ "title": "`local graph keeps CSS Modules exports and inline output in ${command}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1588a8a4aa21c8d10bfc6e672a4716690a547626d164e20e6c8fb91eac75f42f",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-177cd2a5cff084fa",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-177cd2a5cff084fa",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-177cd2a5cff084fa",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-177cd2a5cff084fa",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-98bed4fd2f90d2b7",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-98bed4fd2f90d2b7",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-98bed4fd2f90d2b7",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-98bed4fd2f90d2b7",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-7b7805f75851c263",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-7b7805f75851c263",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-7b7805f75851c263",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-7b7805f75851c263",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-f6ca1d23141887e5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-f6ca1d23141887e5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-f6ca1d23141887e5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-f6ca1d23141887e5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-query-graphs.test.ts",
+ "line": 9,
+ "title": "`local imported directives survive ${command}/?${query}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae3966c1049401270ceb73c1b39fb23f0ac76b5264d1a94730b92b82cfb2895",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-28486ad1b33a641d",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-sass-url-hmr.test.ts",
+ "line": 14,
+ "title": "`local Sass URL reloads retained child and resource under ${base}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "de4ce33b59555048ed9c24fcb58805d2d76c6ca5534c76f96f2856508ff618dd",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-28486ad1b33a641d",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-sass-url-hmr.test.ts",
+ "line": 14,
+ "title": "`local Sass URL reloads retained child and resource under ${base}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "de4ce33b59555048ed9c24fcb58805d2d76c6ca5534c76f96f2856508ff618dd",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-4fc8d501eae2c304",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-sass-url-hmr.test.ts",
+ "line": 14,
+ "title": "`local Sass URL reloads retained child and resource under ${base}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "de4ce33b59555048ed9c24fcb58805d2d76c6ca5534c76f96f2856508ff618dd",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-4fc8d501eae2c304",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-sass-url-hmr.test.ts",
+ "line": 14,
+ "title": "`local Sass URL reloads retained child and resource under ${base}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "de4ce33b59555048ed9c24fcb58805d2d76c6ca5534c76f96f2856508ff618dd",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-5bb082f1689bf8cb",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-sass-url-hmr.test.ts",
+ "line": 14,
+ "title": "`local Sass URL reloads retained child and resource under ${base}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "de4ce33b59555048ed9c24fcb58805d2d76c6ca5534c76f96f2856508ff618dd",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-5bb082f1689bf8cb",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-sass-url-hmr.test.ts",
+ "line": 14,
+ "title": "`local Sass URL reloads retained child and resource under ${base}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "de4ce33b59555048ed9c24fcb58805d2d76c6ca5534c76f96f2856508ff618dd",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-1c37c2fadb6f1a00",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-sass-url-hmr.test.ts",
+ "line": 14,
+ "title": "`local Sass URL reloads retained child and resource under ${base}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "de4ce33b59555048ed9c24fcb58805d2d76c6ca5534c76f96f2856508ff618dd",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-1c37c2fadb6f1a00",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-local-sass-url-hmr.test.ts",
+ "line": 14,
+ "title": "`local Sass URL reloads retained child and resource under ${base}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "de4ce33b59555048ed9c24fcb58805d2d76c6ca5534c76f96f2856508ff618dd",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-2fefd61fd5d3db53",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 48,
+ "title": "'BH-0004 SSR close preserves the live client renderer after pending manifest response in pre-render (failure=' + fail + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bc4f8cf683207836926a646ee295bc4e7baea9caf8fd567f42f079883b7bdce1",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-2fefd61fd5d3db53",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 48,
+ "title": "'BH-0004 SSR close preserves the live client renderer after pending manifest response in pre-render (failure=' + fail + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bc4f8cf683207836926a646ee295bc4e7baea9caf8fd567f42f079883b7bdce1",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-67929747a1e19adc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 48,
+ "title": "'BH-0004 SSR close preserves the live client renderer after pending manifest response in progressive (failure=' + fail + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bc4f8cf683207836926a646ee295bc4e7baea9caf8fd567f42f079883b7bdce1",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-67929747a1e19adc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 48,
+ "title": "'BH-0004 SSR close preserves the live client renderer after pending manifest response in progressive (failure=' + fail + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bc4f8cf683207836926a646ee295bc4e7baea9caf8fd567f42f079883b7bdce1",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-27494e5872108048",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 68,
+ "title": "BH-0004 restarting a failed manifest server transfers recovery to the new environment in pre-render",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e74512946e8cf208ad5a55967fc50d6bdc85103694c5542734d22de464bbb9ee",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-bb4c4c36857e2cb8",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 68,
+ "title": "BH-0004 restarting a failed manifest server transfers recovery to the new environment in progressive",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e74512946e8cf208ad5a55967fc50d6bdc85103694c5542734d22de464bbb9ee",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-aa3174b4100ef5c0",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 68,
+ "title": "BH-0004 restarting a failed manifest server transfers recovery to the new environment in runtime",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e74512946e8cf208ad5a55967fc50d6bdc85103694c5542734d22de464bbb9ee",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-a1ad43bf84c1bb62",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 68,
+ "title": "BH-0004 restarting a failed manifest server transfers recovery to the new environment in static",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e74512946e8cf208ad5a55967fc50d6bdc85103694c5542734d22de464bbb9ee",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-7dcca5436af4b685",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 84,
+ "title": "'BH-0004 an in-flight HMR manifest operation cannot notify or report errors after close in pre-render (failure=' + fail + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "23472a34110ae79ffd4709e11d8cd797c7172e455fe42f94d4b847963db30831",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-7dcca5436af4b685",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 84,
+ "title": "'BH-0004 an in-flight HMR manifest operation cannot notify or report errors after close in pre-render (failure=' + fail + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "23472a34110ae79ffd4709e11d8cd797c7172e455fe42f94d4b847963db30831",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-d8e0b364af85d46e",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 84,
+ "title": "'BH-0004 an in-flight HMR manifest operation cannot notify or report errors after close in progressive (failure=' + fail + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "23472a34110ae79ffd4709e11d8cd797c7172e455fe42f94d4b847963db30831",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-d8e0b364af85d46e",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 84,
+ "title": "'BH-0004 an in-flight HMR manifest operation cannot notify or report errors after close in progressive (failure=' + fail + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "23472a34110ae79ffd4709e11d8cd797c7172e455fe42f94d4b847963db30831",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-3e9eb011fe37e224",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 100,
+ "title": "BH-0004 reconciliation updates an already loaded manifest through its HMR boundary",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7c1f8b6d561abd101d5eb22f7ae3d68c50cead13cc56c1c3a8f70d0230ace7c0"
+ },
+ {
+ "id": "rc87-b36967ea0be84279",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 121,
+ "title": "'BH-0004 closing client during manifest recovery prevents late notifications (failure=' + fail + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c1159338082e370fff52e332424b0d94f452ecc4512a3704c83a4f7c83335326",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "client"
+ }
+ },
+ {
+ "id": "rc87-b36967ea0be84279",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 121,
+ "title": "'BH-0004 closing client during manifest recovery prevents late notifications (failure=' + fail + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c1159338082e370fff52e332424b0d94f452ecc4512a3704c83a4f7c83335326",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "client"
+ }
+ },
+ {
+ "id": "rc87-cad5da32eaf2f687",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 121,
+ "title": "'BH-0004 closing server during manifest recovery prevents late notifications (failure=' + fail + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c1159338082e370fff52e332424b0d94f452ecc4512a3704c83a4f7c83335326",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "server"
+ }
+ },
+ {
+ "id": "rc87-cad5da32eaf2f687",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-lifecycle.test.ts",
+ "line": 121,
+ "title": "'BH-0004 closing server during manifest recovery prevents late notifications (failure=' + fail + ')'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c1159338082e370fff52e332424b0d94f452ecc4512a3704c83a4f7c83335326",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "server"
+ }
+ },
+ {
+ "id": "rc87-d374c83ca6fe69da",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 32,
+ "title": "BH-0004 manifest bootstrap reports HTTP errors and recovers without module requests or watcher events in pre-render",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "08c854c419af858e636b214bbaf4622def9c0d8dd28e3b6b64b3c8347cfc1372",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-759c47c1c716c644",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 32,
+ "title": "BH-0004 manifest bootstrap reports HTTP errors and recovers without module requests or watcher events in progressive",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "08c854c419af858e636b214bbaf4622def9c0d8dd28e3b6b64b3c8347cfc1372",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-4ff535559adb75ec",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 32,
+ "title": "BH-0004 manifest bootstrap reports HTTP errors and recovers without module requests or watcher events in runtime",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "08c854c419af858e636b214bbaf4622def9c0d8dd28e3b6b64b3c8347cfc1372",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-6b3ee4ab3313e8e0",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 32,
+ "title": "BH-0004 manifest bootstrap reports HTTP errors and recovers without module requests or watcher events in static",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "08c854c419af858e636b214bbaf4622def9c0d8dd28e3b6b64b3c8347cfc1372",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-b7bad14f15ddf5ca",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 60,
+ "title": "BH-0004 production still fails for missing project manifest dependencies in pre-render",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5b7d1ca80df27cb828f3ea438b1c975a7b028029160a9b05270c767277cd5398",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-e0063e89b02b3191",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 60,
+ "title": "BH-0004 production still fails for missing project manifest dependencies in progressive",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5b7d1ca80df27cb828f3ea438b1c975a7b028029160a9b05270c767277cd5398",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-2faf4bf77a1ede6b",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 60,
+ "title": "BH-0004 production still fails for missing project manifest dependencies in runtime",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5b7d1ca80df27cb828f3ea438b1c975a7b028029160a9b05270c767277cd5398",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-1cf96fed7986a0de",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 60,
+ "title": "BH-0004 production still fails for missing project manifest dependencies in static",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5b7d1ca80df27cb828f3ea438b1c975a7b028029160a9b05270c767277cd5398",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-7fdf25ac6a942eac",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 67,
+ "title": "BH-0004 manifest bootstrap recovery respects client close",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3fccbea0344199beeac6215be83600c816686e7e10718668d8a0acd8ecb2ad2a",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "client"
+ }
+ },
+ {
+ "id": "rc87-0f68b680e4250281",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 67,
+ "title": "BH-0004 manifest bootstrap recovery respects server close",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3fccbea0344199beeac6215be83600c816686e7e10718668d8a0acd8ecb2ad2a",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "server"
+ }
+ },
+ {
+ "id": "rc87-0f587f1f6fd7409f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 67,
+ "title": "BH-0004 manifest bootstrap recovery respects ssr close",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3fccbea0344199beeac6215be83600c816686e7e10718668d8a0acd8ecb2ad2a",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "ssr"
+ }
+ },
+ {
+ "id": "rc87-f85abb10e49a4d09",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 84,
+ "title": "BH-0004 invalid manifest after good render never serves the old renderer in pre-render",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "90f77677b39243be18315a6a3c4446a6c2b39b76d2a522d67a797670813b2f21",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-666e0b554ca077b6",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-manifest-startup-recovery.test.ts",
+ "line": 84,
+ "title": "BH-0004 invalid manifest after good render never serves the old renderer in progressive",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "90f77677b39243be18315a6a3c4446a6c2b39b76d2a522d67a797670813b2f21",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-9292fb96064a9f8c",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-middleware-restart.test.ts",
+ "line": 13,
+ "title": "BH-0004 middleware restart serves HTML and styles (managed=false)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "24f8c201633f221b8e6e98627d57492aa210f54e673c8fb40dae23ebaf1792bc",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-f4a00a7a72a2f9cb",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-middleware-restart.test.ts",
+ "line": 13,
+ "title": "BH-0004 middleware restart serves HTML and styles (managed=true)",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "24f8c201633f221b8e6e98627d57492aa210f54e673c8fb40dae23ebaf1792bc",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-739bd462c906465a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-missing-directory-watch.test.ts",
+ "line": 14,
+ "title": "BH-0004 missing directory recovers $kind in $mode via $backend [dynamic]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ed74bc2c470c5ac2ad5c01a83882d88fa00622ea25d0117df023e387addb0ae6",
+ "matrix": {
+ "index": 0,
+ "resolved": false,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-281cec9fd58c6db9",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-module-development.test.ts",
+ "line": 12,
+ "title": "`BH-0004 development ${extension} Modules preserve exports before native pruning`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6b0436b9c8ecfa07eabc6c990143727dcb3f3d9f507961ce10e6841ff3afbe1e"
+ },
+ {
+ "id": "rc87-281cec9fd58c6db9",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-module-development.test.ts",
+ "line": 12,
+ "title": "`BH-0004 development ${extension} Modules preserve exports before native pruning`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "6b0436b9c8ecfa07eabc6c990143727dcb3f3d9f507961ce10e6841ff3afbe1e"
+ },
+ {
+ "id": "rc87-1cf82814769e4251",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-module-duplicate-inputs.test.ts",
+ "line": 7,
+ "title": "identical imported files retain module scope and distinct resource owners in pre-render",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "24cf1e3ef4d7debe946d33e0e1ed520621f8b6859f3c0e8b20d9a98bab6d95ac",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-19dc436d715ab1f7",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-module-duplicate-inputs.test.ts",
+ "line": 7,
+ "title": "identical imported files retain module scope and distinct resource owners in progressive",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "24cf1e3ef4d7debe946d33e0e1ed520621f8b6859f3c0e8b20d9a98bab6d95ac",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-9066edd2c953b229",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-module-duplicate-inputs.test.ts",
+ "line": 7,
+ "title": "identical imported files retain module scope and distinct resource owners in runtime",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "24cf1e3ef4d7debe946d33e0e1ed520621f8b6859f3c0e8b20d9a98bab6d95ac",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-0cad4001b84c6f9d",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-module-duplicate-inputs.test.ts",
+ "line": 7,
+ "title": "identical imported files retain module scope and distinct resource owners in static",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "24cf1e3ef4d7debe946d33e0e1ed520621f8b6859f3c0e8b20d9a98bab6d95ac",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-ce97fe8c853b3ff3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-module-import-contexts.test.ts",
+ "line": 8,
+ "title": "shared imported CSS keeps two root module scopes, resources and HMR in pre-render",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b8b356893ee7ebbb04b6247b41752533068e2702613f6175ac357a21519d6528",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-3ebb2896a97805a0",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-module-import-contexts.test.ts",
+ "line": 8,
+ "title": "shared imported CSS keeps two root module scopes, resources and HMR in progressive",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b8b356893ee7ebbb04b6247b41752533068e2702613f6175ac357a21519d6528",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-b81ef6a3b84e21d4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-module-import-contexts.test.ts",
+ "line": 8,
+ "title": "shared imported CSS keeps two root module scopes, resources and HMR in runtime",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b8b356893ee7ebbb04b6247b41752533068e2702613f6175ac357a21519d6528",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-526da5d7c59d50c7",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-module-import-contexts.test.ts",
+ "line": 8,
+ "title": "shared imported CSS keeps two root module scopes, resources and HMR in static",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b8b356893ee7ebbb04b6247b41752533068e2702613f6175ac357a21519d6528",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-efeb636450b89f40",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-module-import-diagnostics.test.ts",
+ "line": 37,
+ "title": "imported Module diagnostics identify their real source $rootExtension / $childExtension [dynamic]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3c91220e463cfe50aac9a090281d06c3ef17a5ee08fbf0437dab797ff262287a",
+ "matrix": {
+ "index": 0,
+ "resolved": false,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-a9108e3ced38229f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-module-sass-import-contexts.test.ts",
+ "line": 12,
+ "title": "equal Sass outputs retain root scope and resource owners in $mode / $extension / $syntax / $style [dynamic]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "89a1897d3f751e54efe39d4e4bb76cf774a417cc483abc576aa3316b286fe371",
+ "matrix": {
+ "index": 0,
+ "resolved": false,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-56c56e7d5775a55c",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-prerender-manifest-hmr.test.ts",
+ "line": 7,
+ "title": "manifest HMR refreshes server-rendered rules in pre-render",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c352f2235136f267e781da465aa35d80a8b3074cc379b66546d55d4389e872d3",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-f9db7d25581c3db9",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-prerender-manifest-hmr.test.ts",
+ "line": 7,
+ "title": "manifest HMR refreshes server-rendered rules in progressive",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c352f2235136f267e781da465aa35d80a8b3074cc379b66546d55d4389e872d3",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-3ad13ab85c4d814b",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-reference-host-recovery.test.ts",
+ "line": 32,
+ "title": "BH-0004 dev reference recovery $syntax/$kind/startup=$startupMissing [dynamic]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c3567e158247ec1b20c39b50f0d31983a2625cf36e9d24b62232e60767e8a907",
+ "matrix": {
+ "index": 0,
+ "resolved": false,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-bf724b4e6cc18818",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-reference-host-recovery.test.ts",
+ "line": 89,
+ "title": "BH-0004 build-watch reference recovery $syntax/$kind/startup=$startupMissing [dynamic]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eba27d4953841925869169c3f2bf350d478c442d2aaa4e98d42a30cee3a9d6ae",
+ "matrix": {
+ "index": 0,
+ "resolved": false,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-cd5271e722acfafb",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-reference-host-recovery.test.ts",
+ "line": 126,
+ "title": "BH-0004 external missing reference survives SSR close; check obsolete edges=false",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4d3f04afc9d1f98d83b4758d2756f2767b95630d13050fa9e2bbdd183e010d96",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-a7e41e4fc9bd6141",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-reference-host-recovery.test.ts",
+ "line": 126,
+ "title": "BH-0004 external missing reference survives SSR close; check obsolete edges=true",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4d3f04afc9d1f98d83b4758d2756f2767b95630d13050fa9e2bbdd183e010d96",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-d426e86ca70cb2fc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/build'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "build"
+ }
+ },
+ {
+ "id": "rc87-d426e86ca70cb2fc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/build'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "build"
+ }
+ },
+ {
+ "id": "rc87-d426e86ca70cb2fc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/build'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "build"
+ }
+ },
+ {
+ "id": "rc87-d426e86ca70cb2fc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/build'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "build"
+ }
+ },
+ {
+ "id": "rc87-d426e86ca70cb2fc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/build'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "build"
+ }
+ },
+ {
+ "id": "rc87-d426e86ca70cb2fc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/build'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "build"
+ }
+ },
+ {
+ "id": "rc87-d426e86ca70cb2fc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/build'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "build"
+ }
+ },
+ {
+ "id": "rc87-d426e86ca70cb2fc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/build'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "build"
+ }
+ },
+ {
+ "id": "rc87-a7846fa6a79c43bf",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/serve'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "serve"
+ }
+ },
+ {
+ "id": "rc87-a7846fa6a79c43bf",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/serve'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "serve"
+ }
+ },
+ {
+ "id": "rc87-a7846fa6a79c43bf",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/serve'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "serve"
+ }
+ },
+ {
+ "id": "rc87-a7846fa6a79c43bf",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/serve'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "serve"
+ }
+ },
+ {
+ "id": "rc87-a7846fa6a79c43bf",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/serve'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "serve"
+ }
+ },
+ {
+ "id": "rc87-a7846fa6a79c43bf",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/serve'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "serve"
+ }
+ },
+ {
+ "id": "rc87-a7846fa6a79c43bf",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/serve'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "serve"
+ }
+ },
+ {
+ "id": "rc87-a7846fa6a79c43bf",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-retained-sass-references.test.ts",
+ "line": 13,
+ "title": "'BH-0004 retained ' + syntax + ' references keep child owners in ' + mode + '/serve'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "eafa6eba3ce9a8b98690e301e9ec28608d25bf3c6674c5e2a1a290c0980de251",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "serve"
+ }
+ },
+ {
+ "id": "rc87-e1a35182531f06dc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-runtime-dev-base.test.ts",
+ "line": 12,
+ "title": "dev runtime is served with mode=$mode base=$base [dynamic]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "f33ce8058beba8a5fe6ce37b9c540b80c45d0408d35206d146ed505b85ddf606",
+ "matrix": {
+ "index": 0,
+ "resolved": false,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-16f14cfdfc88b9a0",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 41,
+ "title": "`BH-0004 Sass diagnostic original partial and token: ${request}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3b19914b8556ee58babb97cf998182162a3f6c37fccb9b60d649d24886e2f8c4"
+ },
+ {
+ "id": "rc87-16f14cfdfc88b9a0",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 41,
+ "title": "`BH-0004 Sass diagnostic original partial and token: ${request}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3b19914b8556ee58babb97cf998182162a3f6c37fccb9b60d649d24886e2f8c4"
+ },
+ {
+ "id": "rc87-16f14cfdfc88b9a0",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 41,
+ "title": "`BH-0004 Sass diagnostic original partial and token: ${request}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3b19914b8556ee58babb97cf998182162a3f6c37fccb9b60d649d24886e2f8c4"
+ },
+ {
+ "id": "rc87-16f14cfdfc88b9a0",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 41,
+ "title": "`BH-0004 Sass diagnostic original partial and token: ${request}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3b19914b8556ee58babb97cf998182162a3f6c37fccb9b60d649d24886e2f8c4"
+ },
+ {
+ "id": "rc87-bb80dcdb3ce9de0b",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 49,
+ "title": "BH-0004 Sass diagnostic preserves original CRLF and UTF-16 positions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "dbe8368c2e07e02ecdf676b563fbd2f28f1b430075916771f7b3dd8371cf8cde"
+ },
+ {
+ "id": "rc87-022669413269c26c",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 56,
+ "title": "BH-0004 Sass directive parse error points at the original directive",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "72446bd463cf7108efd5ef2929e48918323e50104b8fb220854a4514d41df701"
+ },
+ {
+ "id": "rc87-038f51ca892fca3c",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 62,
+ "title": "BH-0004 Sass interpolation preserves the exact removed directive keyword span",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "9a25cfc2f5fecfc8b0d07fc41cf926167ffb615a4b0bb650510ee6a16c66bc65"
+ },
+ {
+ "id": "rc87-34e9d3767c7ec9d7",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 69,
+ "title": "BH-0004 plain CSS compiler diagnostics retain their original positions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3b64035e65f56adf8b378000a36c70ac1e25848d5f666c43d2921957dea7ae5f"
+ },
+ {
+ "id": "rc87-e9b968f443b7d25c",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 75,
+ "title": "BH-0004 consumed directives before a Sass error do not shift its position",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5eeb2dc56e4f63b3759a3d8df6a6c24a01135d758977de21125fc2f6bfd9ae88"
+ },
+ {
+ "id": "rc87-4089e9fa24c1e6fc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 81,
+ "title": "BH-0004 indented Sass maps original partial diagnostics",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "5aa3666c093074f3d1051664d2e24b53692946dde490771a39a76eb36ac282e6"
+ },
+ {
+ "id": "rc87-c88f0e9649d98f65",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 87,
+ "title": "BH-0004 string additionalData preserves authored root positions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2bc1842b71d2a6b5c780ddaaf5355f07bdf107383e60daa00d9cf351f790d2a3"
+ },
+ {
+ "id": "rc87-4d51502517c12a0e",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 93,
+ "title": "`BH-0004 additionalData keeps an exact authored or explicit generated location: ${typeof additionalData}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3f2713ee261b337264a556838f2085eb86b03b2e579db1a6f587c5fe32752a55"
+ },
+ {
+ "id": "rc87-4d51502517c12a0e",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 93,
+ "title": "`BH-0004 additionalData keeps an exact authored or explicit generated location: ${typeof additionalData}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3f2713ee261b337264a556838f2085eb86b03b2e579db1a6f587c5fe32752a55"
+ },
+ {
+ "id": "rc87-04a49d0ae9e467b5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 108,
+ "title": "BH-0004 additionalData callbacks can supply original source maps",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1bbb1b081746d031466816b9a0e9748b7e7a7396bf6871ca1949ecd4d6b99055"
+ },
+ {
+ "id": "rc87-7479a066caaffc7b",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-diagnostics.test.ts",
+ "line": 117,
+ "title": "BH-0004 local Sass compose diagnostics also point to the original partial",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "e8093ee3839300227e364f23a4ad09207f8ce9f71a0072be026bb229c78ff1bb"
+ },
+ {
+ "id": "rc87-92bb09d46587b406",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-environment.test.ts",
+ "line": 12,
+ "title": "BH-0004 Sass updates invalidate SSR imports without sending browser CSS updates to the server channel",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0ae8c19da929f2e4109d714ed6cc08f044fc0f092a7152c679c2398c40d6c7b4"
+ },
+ {
+ "id": "rc87-982a9d1ff85ae68a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-environment.test.ts",
+ "line": 38,
+ "title": "BH-0004 server restart discards stylesheet URLs served by the previous server",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4aed64bfd09224cf41e01528aefe666b4118e86def0a5c4ed0f04919dc1f8d7b"
+ },
+ {
+ "id": "rc87-bbc6cb58e66cec7f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-environment.test.ts",
+ "line": 73,
+ "title": "BH-0004 HMR waits for pending stylesheet URL registration after the HTTP response",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c8b5498ed530af708c31a3082026d7c0ca137308c4f31775d41d1fe2d5fa78c1"
+ },
+ {
+ "id": "rc87-eacbe6a504bcb49e",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 28,
+ "title": "pure Vite maps a partial reference to its original sass file",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "60d09940297937b9af63b5fbaef6aca52da9d26cdbe395dbd5e79ac25ee8e48a",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "sass"
+ }
+ },
+ {
+ "id": "rc87-a1050da367b68282",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 28,
+ "title": "pure Vite maps a partial reference to its original scss file",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "60d09940297937b9af63b5fbaef6aca52da9d26cdbe395dbd5e79ac25ee8e48a",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "scss"
+ }
+ },
+ {
+ "id": "rc87-cd590464b38d9010",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 45,
+ "title": "pure Vite needs the root identity when chaining a partial-only sass map with additionalData",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "33b8919cd55c31e5531e69c5be108ae1c84f6164ca56f5c0148a8929ad3df985",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "sass"
+ }
+ },
+ {
+ "id": "rc87-710e970f1841a644",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 45,
+ "title": "pure Vite needs the root identity when chaining a partial-only scss map with additionalData",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "33b8919cd55c31e5531e69c5be108ae1c84f6164ca56f5c0148a8929ad3df985",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "scss"
+ }
+ },
+ {
+ "id": "rc87-ed82879c4763e218",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in module-root'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "module-root"
+ }
+ },
+ {
+ "id": "rc87-ed82879c4763e218",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in module-root'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "module-root"
+ }
+ },
+ {
+ "id": "rc87-ed82879c4763e218",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in module-root'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "module-root"
+ }
+ },
+ {
+ "id": "rc87-ed82879c4763e218",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in module-root'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "module-root"
+ }
+ },
+ {
+ "id": "rc87-ed82879c4763e218",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in module-root'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "module-root"
+ }
+ },
+ {
+ "id": "rc87-ed82879c4763e218",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in module-root'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "module-root"
+ }
+ },
+ {
+ "id": "rc87-52fa429984e608c5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in plain-root'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "plain-root"
+ }
+ },
+ {
+ "id": "rc87-52fa429984e608c5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in plain-root'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "plain-root"
+ }
+ },
+ {
+ "id": "rc87-52fa429984e608c5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in plain-root'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "plain-root"
+ }
+ },
+ {
+ "id": "rc87-52fa429984e608c5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in plain-root'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "plain-root"
+ }
+ },
+ {
+ "id": "rc87-52fa429984e608c5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in plain-root'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "plain-root"
+ }
+ },
+ {
+ "id": "rc87-52fa429984e608c5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in plain-root'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "plain-root"
+ }
+ },
+ {
+ "id": "rc87-4ce3597d79076e7f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in retained-module'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "retained-module"
+ }
+ },
+ {
+ "id": "rc87-4ce3597d79076e7f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in retained-module'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "retained-module"
+ }
+ },
+ {
+ "id": "rc87-4ce3597d79076e7f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in retained-module'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "retained-module"
+ }
+ },
+ {
+ "id": "rc87-4ce3597d79076e7f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in retained-module'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "retained-module"
+ }
+ },
+ {
+ "id": "rc87-4ce3597d79076e7f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in retained-module'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "retained-module"
+ }
+ },
+ {
+ "id": "rc87-4ce3597d79076e7f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-partial-references.test.ts",
+ "line": 67,
+ "title": "'BH-0004 partial ' + syntax + ' reference with ' + addition + ' additionalData retains original owner in retained-module'",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "928cceea59646206140d3d5a19a1891e4a887dc292c4f0dc670b86ee881f960c",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "retained-module"
+ }
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-d2021b754195f14f",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 14,
+ "title": "`internal ${syntax} CSS proxy serves direct requests in ${mode} at ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4fde4088bd4fdaa292fb0cdd65cadac67f0275fa6979d4d00936075049ea6a0f"
+ },
+ {
+ "id": "rc87-c12d249a06d15c47",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 68,
+ "title": "`proxy requests retain host file access policy: ${access}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "366d662afd929b262d8292b9293adb280995d4234a2a6d4b1faeae8948ec47ca"
+ },
+ {
+ "id": "rc87-c12d249a06d15c47",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 68,
+ "title": "`proxy requests retain host file access policy: ${access}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "366d662afd929b262d8292b9293adb280995d4234a2a6d4b1faeae8948ec47ca"
+ },
+ {
+ "id": "rc87-c12d249a06d15c47",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-proxy-direct.test.ts",
+ "line": 68,
+ "title": "`proxy requests retain host file access policy: ${access}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "366d662afd929b262d8292b9293adb280995d4234a2a6d4b1faeae8948ec47ca"
+ },
+ {
+ "id": "rc87-e3761f62b34b0c97",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-source.test.ts",
+ "line": 29,
+ "title": "BH-0004 managed and plain Sass invoke additionalData once per source",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "790b5e5201a0c73db9607198ee9427d721ac9f4948a01d507474c7c04cd3e383"
+ },
+ {
+ "id": "rc87-ed4587ae062b89d4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-source.test.ts",
+ "line": 39,
+ "title": "BH-0004 Sass preserves qualified CSS imports and nested external import positions",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d10f7e64480e11930350ad30095ef71b7eaa31be72b2153f408dab510b14c3b1"
+ },
+ {
+ "id": "rc87-b352e7c6ce9711dd",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-source.test.ts",
+ "line": 49,
+ "title": "BH-0004 raw Sass bypasses stylesheet parsing and preprocessing",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "1e09e84012ca91652b650a358b0435b78e4702aed2999791a45bd1c2a21c0080"
+ },
+ {
+ "id": "rc87-e5e68bcd92f22147",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-source.test.ts",
+ "line": 56,
+ "title": "BH-0004 managed Sass modules retain Vite scoped names and named/default exports",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "87c24b6d87db2e5607f0e8376c37917a3fd4ac71277dfa9a0ad44b3ed8c1036b"
+ },
+ {
+ "id": "rc87-f18483507897508a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 12,
+ "title": "`Sass URL build retains stylesheet identity with plugin=${managed}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "363ddb01e484eadcedf5b277fa953194787cb5547fca14e3d68d48235b9b5ecb",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-f18483507897508a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 12,
+ "title": "`Sass URL build retains stylesheet identity with plugin=${managed}/pre-render`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "363ddb01e484eadcedf5b277fa953194787cb5547fca14e3d68d48235b9b5ecb",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-d750c61c6fc0a071",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 12,
+ "title": "`Sass URL build retains stylesheet identity with plugin=${managed}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "363ddb01e484eadcedf5b277fa953194787cb5547fca14e3d68d48235b9b5ecb",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-d750c61c6fc0a071",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 12,
+ "title": "`Sass URL build retains stylesheet identity with plugin=${managed}/progressive`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "363ddb01e484eadcedf5b277fa953194787cb5547fca14e3d68d48235b9b5ecb",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-1d60b925e3897366",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 12,
+ "title": "`Sass URL build retains stylesheet identity with plugin=${managed}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "363ddb01e484eadcedf5b277fa953194787cb5547fca14e3d68d48235b9b5ecb",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-1d60b925e3897366",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 12,
+ "title": "`Sass URL build retains stylesheet identity with plugin=${managed}/runtime`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "363ddb01e484eadcedf5b277fa953194787cb5547fca14e3d68d48235b9b5ecb",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-996b65c79a217c0b",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 12,
+ "title": "`Sass URL build retains stylesheet identity with plugin=${managed}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "363ddb01e484eadcedf5b277fa953194787cb5547fca14e3d68d48235b9b5ecb",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-996b65c79a217c0b",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 12,
+ "title": "`Sass URL build retains stylesheet identity with plugin=${managed}/static`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "363ddb01e484eadcedf5b277fa953194787cb5547fca14e3d68d48235b9b5ecb",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-77587f979ac07446",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 35,
+ "title": "`Sass raw URL module retains authored source with plugin=${managed}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8aa18b12686f2d59c178c2d181230a902b28fed73b94c863dc1d48c3dac4fd8b"
+ },
+ {
+ "id": "rc87-77587f979ac07446",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 35,
+ "title": "`Sass raw URL module retains authored source with plugin=${managed}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "8aa18b12686f2d59c178c2d181230a902b28fed73b94c863dc1d48c3dac4fd8b"
+ },
+ {
+ "id": "rc87-b6b33436ca3f2168",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 49,
+ "title": "`Vite Modules URL limitation stays identical with plugin=${managed}/modules=${modules}/css`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7d52970a33f6b29623225eeb6f900362f831abf97c691ce58e14a05708040f87",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "css"
+ }
+ },
+ {
+ "id": "rc87-b6b33436ca3f2168",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 49,
+ "title": "`Vite Modules URL limitation stays identical with plugin=${managed}/modules=${modules}/css`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7d52970a33f6b29623225eeb6f900362f831abf97c691ce58e14a05708040f87",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "css"
+ }
+ },
+ {
+ "id": "rc87-b6b33436ca3f2168",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 49,
+ "title": "`Vite Modules URL limitation stays identical with plugin=${managed}/modules=${modules}/css`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7d52970a33f6b29623225eeb6f900362f831abf97c691ce58e14a05708040f87",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "css"
+ }
+ },
+ {
+ "id": "rc87-b6b33436ca3f2168",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 49,
+ "title": "`Vite Modules URL limitation stays identical with plugin=${managed}/modules=${modules}/css`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7d52970a33f6b29623225eeb6f900362f831abf97c691ce58e14a05708040f87",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "css"
+ }
+ },
+ {
+ "id": "rc87-8d219a9202a41c9a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 49,
+ "title": "`Vite Modules URL limitation stays identical with plugin=${managed}/modules=${modules}/scss`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7d52970a33f6b29623225eeb6f900362f831abf97c691ce58e14a05708040f87",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "scss"
+ }
+ },
+ {
+ "id": "rc87-8d219a9202a41c9a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 49,
+ "title": "`Vite Modules URL limitation stays identical with plugin=${managed}/modules=${modules}/scss`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7d52970a33f6b29623225eeb6f900362f831abf97c691ce58e14a05708040f87",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "scss"
+ }
+ },
+ {
+ "id": "rc87-8d219a9202a41c9a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 49,
+ "title": "`Vite Modules URL limitation stays identical with plugin=${managed}/modules=${modules}/scss`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7d52970a33f6b29623225eeb6f900362f831abf97c691ce58e14a05708040f87",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "scss"
+ }
+ },
+ {
+ "id": "rc87-8d219a9202a41c9a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-build.test.ts",
+ "line": 49,
+ "title": "`Vite Modules URL limitation stays identical with plugin=${managed}/modules=${modules}/scss`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "7d52970a33f6b29623225eeb6f900362f831abf97c691ce58e14a05708040f87",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "scss"
+ }
+ },
+ {
+ "id": "rc87-402af641bf3c8d27",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-hmr.test.ts",
+ "line": 12,
+ "title": "`BH-0004 Sass direct CSS HMR uses the served stylesheet URL under ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d7c106be20f8411a336da0afc48446d95a55a9aaf42d2b57722444dfa68808a4"
+ },
+ {
+ "id": "rc87-402af641bf3c8d27",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-sass-url-hmr.test.ts",
+ "line": 12,
+ "title": "`BH-0004 Sass direct CSS HMR uses the served stylesheet URL under ${base}`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d7c106be20f8411a336da0afc48446d95a55a9aaf42d2b57722444dfa68808a4"
+ },
+ {
+ "id": "rc87-96b4830d89163bb1",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-shared-plugin-builds.test.ts",
+ "line": 35,
+ "title": "BH-0004 shared pre-render plugins isolate concurrent HTML builds and resources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "39d5be45a26846ebfb64851568ebb446f1637f7742375055655932170d85c93e",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "pre-render"
+ }
+ },
+ {
+ "id": "rc87-050efa0dc95a62b0",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-shared-plugin-builds.test.ts",
+ "line": 35,
+ "title": "BH-0004 shared progressive plugins isolate concurrent HTML builds and resources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "39d5be45a26846ebfb64851568ebb446f1637f7742375055655932170d85c93e",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-6943e878e18ccaf4",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-shared-plugin-builds.test.ts",
+ "line": 35,
+ "title": "BH-0004 shared runtime plugins isolate concurrent HTML builds and resources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "39d5be45a26846ebfb64851568ebb446f1637f7742375055655932170d85c93e",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "runtime"
+ }
+ },
+ {
+ "id": "rc87-30b21daf750536c6",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-shared-plugin-builds.test.ts",
+ "line": 35,
+ "title": "BH-0004 shared static plugins isolate concurrent HTML builds and resources",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "39d5be45a26846ebfb64851568ebb446f1637f7742375055655932170d85c93e",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "static"
+ }
+ },
+ {
+ "id": "rc87-b0c5ffef21391cd5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-shared-plugin-builds.test.ts",
+ "line": 61,
+ "title": "'BH-0004 shared SSR/client plugins preserve base= with config file ' + configFile",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0c14e1c8b269206d1d62c5e223f69ef106ff536bfeff0a0a24b6dfcc4abda293",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-b0c5ffef21391cd5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-shared-plugin-builds.test.ts",
+ "line": 61,
+ "title": "'BH-0004 shared SSR/client plugins preserve base= with config file ' + configFile",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0c14e1c8b269206d1d62c5e223f69ef106ff536bfeff0a0a24b6dfcc4abda293",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-5a469ee72e8626d2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-shared-plugin-builds.test.ts",
+ "line": 61,
+ "title": "'BH-0004 shared SSR/client plugins preserve base=./ with config file ' + configFile",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0c14e1c8b269206d1d62c5e223f69ef106ff536bfeff0a0a24b6dfcc4abda293",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "./"
+ }
+ },
+ {
+ "id": "rc87-5a469ee72e8626d2",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-shared-plugin-builds.test.ts",
+ "line": 61,
+ "title": "'BH-0004 shared SSR/client plugins preserve base=./ with config file ' + configFile",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "0c14e1c8b269206d1d62c5e223f69ef106ff536bfeff0a0a24b6dfcc4abda293",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "./"
+ }
+ },
+ {
+ "id": "rc87-5e4baa452ac16016",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-shared-plugin-roots.test.ts",
+ "line": 12,
+ "title": "BH-0004 concurrent roots isolate styles when sharing plugins=false",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2b8a84ca1af4d0d0d09e315a63e9f1d3eed37301e5761627424e5d4e8e326252",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-62a55535b67a492a",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-shared-plugin-roots.test.ts",
+ "line": 12,
+ "title": "BH-0004 concurrent roots isolate styles when sharing plugins=true",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2b8a84ca1af4d0d0d09e315a63e9f1d3eed37301e5761627424e5d4e8e326252",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-42f12361f0680531",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-startup-dependencies.test.ts",
+ "line": 28,
+ "title": "BH-0004 startup $missing recovers $kind in $mode [dynamic]",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "af077e9a38ccd40611865f3f424b8431ccd4acd3f8d5eb1346c864d81c405bb3",
+ "matrix": {
+ "index": 0,
+ "resolved": false,
+ "value": ""
+ }
+ },
+ {
+ "id": "rc87-942ad5f52739faa0",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-startup-dependencies.test.ts",
+ "line": 62,
+ "title": "BH-0004 failed servers recover independently with shared plugins=false",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bc21828130c1b30ba90bc019e0902a484116923978ffc2c79aa68f3a55417c56",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-0e21f19729c951a3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-startup-dependencies.test.ts",
+ "line": 62,
+ "title": "BH-0004 failed servers recover independently with shared plugins=true",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "bc21828130c1b30ba90bc019e0902a484116923978ffc2c79aa68f3a55417c56",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-3b36e92548edafa5",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-startup-dependencies.test.ts",
+ "line": 84,
+ "title": "BH-0004 resource-failing servers recover independently with shared plugins=false",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "91c02feb11218a8d19089c4fd85079d9c14e897dd12a592a34ff8099cdd8aafd",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "false"
+ }
+ },
+ {
+ "id": "rc87-d166dbc0baab87c1",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/bug-hunt-startup-dependencies.test.ts",
+ "line": 84,
+ "title": "BH-0004 resource-failing servers recover independently with shared plugins=true",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "91c02feb11218a8d19089c4fd85079d9c14e897dd12a592a34ff8099cdd8aafd",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "true"
+ }
+ },
+ {
+ "id": "rc87-24445e7d4cf55fa1",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/local-compose.test.ts",
+ "line": 169,
+ "title": "emits native token references in local Button.css without a utility class",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2712f416e312da18467f9a16b45ba54be579d8b49dbfc01ffb0878f08ed5d8d",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "Button.css"
+ }
+ },
+ {
+ "id": "rc87-3186cc77faab6029",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/local-compose.test.ts",
+ "line": 169,
+ "title": "emits native token references in local Button.module.css without a utility class",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a2712f416e312da18467f9a16b45ba54be579d8b49dbfc01ffb0878f08ed5d8d",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "Button.module.css"
+ }
+ },
+ {
+ "id": "rc87-5fbf8eae6b00aabc",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/local-compose.test.ts",
+ "line": 252,
+ "title": "reloads the page without requesting a deleted project entry",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "ff1e8d502d6b4679f2f2a02a3cbcba6a67e55c6dbeada642e6778e7c6871a6f6"
+ },
+ {
+ "id": "rc87-6d575383a7887de7",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/pre-render.test.ts",
+ "line": 25,
+ "title": "renders HTML classes in progressive with the managed CSS manifest entry",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2341f4556c56c6e0e754eb58641ad6911c5148c842d4edd82dea6c43eb8a34f3",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "progressive"
+ }
+ },
+ {
+ "id": "rc87-58ed479da5704037",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/pre-render.test.ts",
+ "line": 180,
+ "title": "does not duplicate globals already emitted by managed CSS entries",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "3ab9427b7b536655d5c959b7e1931a5100b238838ffb86195f1ce8550a8edc41"
+ },
+ {
+ "id": "rc87-c9bff9ef0794c6e3",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/project-context.test.ts",
+ "line": 23,
+ "title": "scoped Vue styles keep project globals outside scoping in build",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "62ac415efd36b98fffffe1d25434400d43b6da619311307c2bebf393310a0207",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "build"
+ }
+ },
+ {
+ "id": "rc87-327b5796531973a8",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/project-context.test.ts",
+ "line": 23,
+ "title": "scoped Vue styles keep project globals outside scoping in serve",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "62ac415efd36b98fffffe1d25434400d43b6da619311307c2bebf393310a0207",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "serve"
+ }
+ },
+ {
+ "id": "rc87-6dbb33af949012ae",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/project-context.test.ts",
+ "line": 39,
+ "title": "native no-ops are invalidated when project entries are added, changed and deleted",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "537aaadea5b70205ab65967e63514f94b5437ea40e80aa44892e59f465d8b672"
+ },
+ {
+ "id": "rc87-8ec87b63ce236a40",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/project-context.test.ts",
+ "line": 58,
+ "title": "development server refreshes native consumers after a project entry is added and removed",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b1e444def6a3084f717eb9f49bd239edae8567e139880783dc37af113bfb74a0"
+ },
+ {
+ "id": "rc87-c67819682dee2741",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/style-entry-hmr.test.ts",
+ "line": 186,
+ "title": "reloads emitted globals when extracted CSS ownership changes",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "b941190c8028bfcd932f8dfee2bffff14a07f037f2cb4ce338dbcfa9b93a38d8"
+ },
+ {
+ "id": "rc87-ad81f56fd35ff68e",
+ "package": "vite",
+ "file": "packages/vite/tests/plugins/theme-reference-build.test.ts",
+ "line": 8,
+ "title": "builds native project variables without references in local CSS and a CSS Module",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "753bb0e55ae1326fc61af44a6203dbae80275dc4fe2315a17780b8164b2d7f9d"
+ },
+ {
+ "id": "rc87-3b246cd5042cf837",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-dev-resource-snapshots.test.ts",
+ "line": 8,
+ "title": "resource naming captures bytes before source delete",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2909bae6da65c3b99e4ac775039c7f2f70d1984f4b449e7956138b4296dffb0d",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "delete"
+ }
+ },
+ {
+ "id": "rc87-d206f044bcec9c78",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-dev-resource-snapshots.test.ts",
+ "line": 8,
+ "title": "resource naming captures bytes before source replace",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "2909bae6da65c3b99e4ac775039c7f2f70d1984f4b449e7956138b4296dffb0d",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "replace"
+ }
+ },
+ {
+ "id": "rc87-8af52c3394638ec7",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-local-build-order.test.ts",
+ "line": 10,
+ "title": "local graph names depend on CSS order and content, not asynchronous registration order",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "d2a6ac515a9694b5957f6451a8508177443bfe5ab4286dd53f72d361620871ab"
+ },
+ {
+ "id": "rc87-ffa4b7d3333fbc93",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-local-build-order.test.ts",
+ "line": 31,
+ "title": "Vite CSS optimization cannot merge two local entry placeholders",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "20002fe476ebf9743a40ec49773f91571672ac6162f3d4b52e7ec3a2780cfef7"
+ },
+ {
+ "id": "rc87-655e47ac42c4b25f",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-local-slot-numbers.test.ts",
+ "line": 8,
+ "title": "local entry survives CSS optimization when its hash begins with an exponent",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "a4049ff46420b66151282ae696ba21008141437dad9f3f9f99a546bb03ae15f2"
+ },
+ {
+ "id": "rc87-f8778aa306da3033",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-preprocessor-dependencies.test.ts",
+ "line": 12,
+ "title": "`BH-0004 ${extension} Modules retain nested resolved dependencies without repeating preprocessing`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4d61a72c7985fc512a941ca60fdb0275a2e401f62fb8f9aec41b893381f83234"
+ },
+ {
+ "id": "rc87-f8778aa306da3033",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-preprocessor-dependencies.test.ts",
+ "line": 12,
+ "title": "`BH-0004 ${extension} Modules retain nested resolved dependencies without repeating preprocessing`",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "4d61a72c7985fc512a941ca60fdb0275a2e401f62fb8f9aec41b893381f83234"
+ },
+ {
+ "id": "rc87-f3406578f9c110f9",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-preprocessor-dependencies.test.ts",
+ "line": 43,
+ "title": "BH-0004 resolved Module dependencies remain observable after a preprocessing error",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6806cf7b85d924ece478b836121f26596752f2ed830744492db0eb8178cd1eed"
+ "sourceDigest": "75f283ee2332d799d60609087a6926448a549793e75cec0b91de7f553aa63cff"
},
{
- "id": "rc87-1ba90e7b63e41533",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 642,
- "title": "escapes quoted class names in diagnostic messages",
+ "id": "rc87-e814c0eda52fde4f",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-sass-import-preparation.test.ts",
+ "line": 14,
+ "title": "imported Sass is prepared once, retains real dependencies and removes scratch files after success or failure",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1ca813931c6600444942c3a3d4676de391bb0f89ef168eb07f4baee7226abba5"
+ "sourceDigest": "68ea897996852a562874981a89af7e445a68ead0b66732bfc0da9aa573629c2c"
},
{
- "id": "rc87-317b76a355e86cff",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 651,
- "title": "reports raw values in token-backed utilities",
+ "id": "rc87-60270855173e04a0",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-sass-missing-dependency.test.ts",
+ "line": 11,
+ "title": "BH-0004 a missing Sass partial retains recovery edges until a successful source removes them",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "2dd18586bc74580297aa778201ff8271da475c1fcec4c8f8a8fe756d1e956303"
+ "sourceDigest": "ffb6cb9fc08207190a69bcaac73ddfd80d49e6b7e43f29dbff89a89d2538427b"
},
{
- "id": "rc87-0094ec74c2d24d05",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 659,
- "title": "allows raw values by property, key, pattern, or full opt-out",
+ "id": "rc87-c7efebc40a9c4217",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-scanner-lifecycle.test.ts",
+ "line": 20,
+ "title": "BH-0004 old environment closes only its own scanner and collection, once",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "094151e1b7865c68a14c31f0eab517f951ba91be26fe202e28948bd8869e9500"
+ "sourceDigest": "d592d202c62c6511e4e9fe7ac5527643f5954449fc33bd655bb868174b1da8d0"
},
{
- "id": "rc87-7a883fc118f46b36",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 666,
- "title": "applies raw value allowed patterns to individual multi-value segments",
+ "id": "rc87-c2141b65adafc6a6",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-scanner-lifecycle.test.ts",
+ "line": 42,
+ "title": "BH-0004 late old initialization cannot replace the current scanner or escape disposal",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "39044c141058ba15d6ece08b4c897ec722b4eca090b916200ed688103174dac4"
+ "sourceDigest": "3be35d850df3f207c85049c53ca4573e0e6eeae411b9a94192294b126d147a10"
},
{
- "id": "rc87-bb3a21159f32bf1c",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 679,
- "title": "uses active manifest tokens without treating registry fields as token namespaces",
+ "id": "rc87-39fd1df0befb218c",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-scanner-lifecycle.test.ts",
+ "line": 59,
+ "title": "BH-0004 a failed initialization releases its scanner and permits retry",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "61f86d25bbf0933af0a4d8adae557bfcd25fd3773a5c5c00a0147d77dc6c5740"
+ "sourceDigest": "ef5925d61838b028eb60f5c20b993b34a5341d8f9e94c51b20e9705f6c12683b"
},
{
- "id": "rc87-284935977d3a496f",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 688,
- "title": "suggests multi-value theme tokens",
+ "id": "rc87-88149622bd1878c2",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/bug-hunt-scanner-lifecycle.test.ts",
+ "line": 72,
+ "title": "BH-0004 closing a pending initialization prevents publication and allows the next build",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "708375f97c1bfd4c3e0625efb958603ad6614800142e863ce21c47457f8f0b56"
+ "sourceDigest": "f15916064977066561d663c0e458f647bedd142081fe3aa899ae6ceca47fc7c5"
},
{
- "id": "rc87-27b8e55db55f0903",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 694,
- "title": "suggests theme tokens from CSS variable references",
+ "id": "rc87-647dd6cdbf926c46",
+ "package": "vite",
+ "file": "packages/vite/tests/utils/path.test.ts",
+ "line": 8,
+ "title": "deleted dependency paths retain their identity through an existing directory alias",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7ee19ba622b59354da1ddb88c5de0789e5c7dcb1068846101a3fc6a0ef6477d9"
+ "sourceDigest": "0e4d95feccee8f27f52d0e34486847246715a71a156a5220cf731fe79bc4a300"
},
{
- "id": "rc87-3282ea7256204f5b",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 700,
- "title": "suggests canonical condition suffix order",
+ "id": "rc87-69e7b6412f26781a",
+ "package": "vscode",
+ "file": "packages/vscode/tests/server-bundle.test.js",
+ "line": 260,
+ "title": "records the rc.87 native semantic import externalization divergence",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "042e452e665571c0494acea3ede61aee18bfdc1099d1cf771b16916e39e33790"
+ "sourceDigest": "e9cce201c7703532fd59cadd9f0604d62c072caff2c0d105fa24da8de19039ff"
},
{
- "id": "rc87-f3813b8bd9d0471f",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 708,
- "title": "combines condition order independently with canonical suggestion options",
+ "id": "rc87-d534af146eb72292",
+ "package": "vscode",
+ "file": "packages/vscode/tests/server-bundle.test.js",
+ "line": 422,
+ "title": "proves the rc.87 staged language server lifecycle without workspace node_modules",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5fca1a9affc8451d0deb028c42facefe16bf5eafe6bbc87e28051a5d207da28d"
+ "sourceDigest": "7ea71446b5ca07d00c63563c346ebd647b255ff7fb4e0ac63b304b539ee44481"
},
{
- "id": "rc87-d8d4b6718f3ce1c3",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 736,
- "title": "uses custom manifest modes, breakpoints, tokens, and utilities",
+ "id": "rc87-ce29edfc33be41cb",
+ "package": "vscode",
+ "file": "packages/vscode/tests/textmate-grammar.test.js",
+ "line": 57,
+ "title": "scopes v2 named classes, opacity, and pattern forms in CSS directives",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5497ea78d841ff8ebaa41a9d1544bb44f43e1acb2bf1eaa8153aef5e5b9f9408"
+ "sourceDigest": "8eae1a33128ab6da0799f535e05dbf28414d6ffd232da9f5f61eb483e2550af4"
},
{
- "id": "rc87-7511928ca6b0f912",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 742,
- "title": "does not treat custom variants or component utilities as utilities-only canonical targets",
+ "id": "rc87-e0e91254aded986a",
+ "package": "vscode",
+ "file": "packages/vscode/tests/textmate-grammar.test.js",
+ "line": 423,
+ "title": "colors variant condition names and delegates nested native at-rules",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "570aaa7124a60953c81a825fdd8dd71369d7f8d0c0db911bfa5a5cf78be65feb"
+ "sourceDigest": "d3fffd64aaa78d8cee6de64ab8646cb0d0c6bd93a90eb44aecb3e270a1dffdc0"
},
{
- "id": "rc87-3caf39eb5dca447f",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 748,
- "title": "ignores manifest-carried key alias and native namespace registry fields",
+ "id": "rc87-79daebe9b2176c4c",
+ "package": "vscode",
+ "file": "packages/vscode/tests/textmate-grammar.test.js",
+ "line": 524,
+ "title": "leaves removed compose directives to native CSS highlighting",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a44d163067df51212aa6aab92c34e33200e143e3af36a61c3d114b644c22375d"
+ "sourceDigest": "4998c8fcf314b7cfaaa0b2f34f73d7c7e5e57463f0eb648b9bb85c6660573492"
},
{
- "id": "rc87-97bef49b9c8db82b",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 753,
- "title": "does not suggest partial multi-value or unknown variable tokens",
+ "id": "rc87-28dbcbcdc42cc0c7",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-active-graph.test.ts",
+ "line": 76,
+ "title": "`removed stylesheet releases dependencies and restores on reattachment: cache=${cache}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7b227594b6bbebcec038dd1d75bca0f51ae54fc4cc5359b158038c620539cd9f"
+ "sourceDigest": "107f7309c997a9d3f661d7e7e86a6f4eb59f80e5c8e6d4fb0070cb4d5b112dec"
},
{
- "id": "rc87-b141c6793d84641a",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 758,
- "title": "does not suggest unsafe condition or selector suffix order",
+ "id": "rc87-28dbcbcdc42cc0c7",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-active-graph.test.ts",
+ "line": 76,
+ "title": "`removed stylesheet releases dependencies and restores on reattachment: cache=${cache}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "97898e4a0dd77976268be35b1ce8aad495a6e5566d239cc2833ebd214d1aeea4"
+ "sourceDigest": "107f7309c997a9d3f661d7e7e86a6f4eb59f80e5c8e6d4fb0070cb4d5b112dec"
},
{
- "id": "rc87-7ca88abe7a8847ab",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 768,
- "title": "respects canonical suggestion options",
+ "id": "rc87-08d86b1209142824",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-active-graph.test.ts",
+ "line": 102,
+ "title": "removal retains shared resource owners and clears detached scanner classes: %i [dynamic]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e78fce44e8395e298715302fa39622283554cd4f3e42554d200e124dde6d2fb1"
+ "sourceDigest": "cba37e7be0d557e64701820d3a086b9052ff1d3cc931144540de1eecbf707736",
+ "matrix": {
+ "index": 0,
+ "resolved": false,
+ "value": ""
+ }
},
{
- "id": "rc87-ac4e18ce6d91e9cb",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 795,
- "title": "does not suggest component-layer semantic utilities",
+ "id": "rc87-e1d1c27bd75f22a9",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-entry-ownership.test.ts",
+ "line": 8,
+ "title": "`native CSS and resources remain owned by their entry: lazy=${lazy}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "56ca39b84b2e70b215032956cc14eb049932210b724fa3afacb2ad4e5fc27d8b"
+ "sourceDigest": "d84aa062c0cadf94fb7c48015203dbd4916094d39a6d8490fa3955bd3acddb28"
},
{
- "id": "rc87-db29c025845d6ddb",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 812,
- "title": "suggests size composition utilities",
+ "id": "rc87-e1d1c27bd75f22a9",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-entry-ownership.test.ts",
+ "line": 8,
+ "title": "`native CSS and resources remain owned by their entry: lazy=${lazy}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "1d2c546b104d44b3ac3287c307d0e64d02834508e1e9537328842711ebb8f3ea"
+ "sourceDigest": "d84aa062c0cadf94fb7c48015203dbd4916094d39a6d8490fa3955bd3acddb28"
},
{
- "id": "rc87-87cc8216f3641d5a",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 827,
- "title": "suggests min and max size composition utilities",
+ "id": "rc87-7acba3ce99cf197e",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-fixed-runtime-filename.test.ts",
+ "line": 8,
+ "title": "BH-0030 preserves the app filename and emits a separate runtime: $label [1: fixed]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a63a02aeec9854d00b01dc5d10b7a7f66ae0d477c9a5b23cc08033146be25a81"
+ "sourceDigest": "8b640d9d88327aeed42cc6f33ce566d8f5b3af6d54aaf3ad409b9a232d66551b",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "fixed"
+ }
},
{
- "id": "rc87-ed3bbb0845c2181c",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 836,
- "title": "suggests spacing axis composition utilities",
+ "id": "rc87-24d617b9bad88b62",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-fixed-runtime-filename.test.ts",
+ "line": 8,
+ "title": "BH-0030 preserves the app filename and emits a separate runtime: $label [2: nested fixed]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "21664c199ed2926d41d56d7865697175934fcd2c094e9cf02ec2fc16ef07b690"
+ "sourceDigest": "8b640d9d88327aeed42cc6f33ce566d8f5b3af6d54aaf3ad409b9a232d66551b",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "nested fixed"
+ }
},
{
- "id": "rc87-15f7109e7f3178c7",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 854,
- "title": "suggests spacing axis composition after canonicalization",
+ "id": "rc87-ffc1313821a989bc",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-fixed-runtime-filename.test.ts",
+ "line": 8,
+ "title": "BH-0030 preserves the app filename and emits a separate runtime: $label [3: build hash]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d71e237ba416540571eeef840e4272952644d1c634a4a54bc4efe2a75a8e7cbe"
+ "sourceDigest": "8b640d9d88327aeed42cc6f33ce566d8f5b3af6d54aaf3ad409b9a232d66551b",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "build hash"
+ }
},
{
- "id": "rc87-64ce8830e93b0fb9",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 866,
- "title": "does not suggest unsafe composition groups",
+ "id": "rc87-676916d617cd7ec8",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-fixed-runtime-filename.test.ts",
+ "line": 8,
+ "title": "BH-0030 preserves the app filename and emits a separate runtime: $label [4: callback fixed]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "52ec57a1b88f79dc59c0521c8fc37c13becd019d3e4e63ec2ca403b0d4cb731b"
+ "sourceDigest": "8b640d9d88327aeed42cc6f33ce566d8f5b3af6d54aaf3ad409b9a232d66551b",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "callback fixed"
+ }
},
{
- "id": "rc87-95bf4e248f8b7a8d",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 881,
- "title": "keeps canonical utilities and extracts native declarations",
+ "id": "rc87-8c9ce0b13551143e",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-fixed-runtime-filename.test.ts",
+ "line": 8,
+ "title": "BH-0030 preserves the app filename and emits a separate runtime: $label [5: name control]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "21d4380263035053d64737f4f55f5aafad4700216e05bf7ce83e7e3b278e51a5"
+ "sourceDigest": "8b640d9d88327aeed42cc6f33ce566d8f5b3af6d54aaf3ad409b9a232d66551b",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "name control"
+ }
},
{
- "id": "rc87-7d8d1e34648e234a",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 902,
- "title": "extracts variant suffixes into variant blocks",
+ "id": "rc87-142b1e5a8d5404b4",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-fixed-runtime-filename.test.ts",
+ "line": 8,
+ "title": "BH-0030 preserves the app filename and emits a separate runtime: $label [6: content hash control]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6ccc0dfa642972e1c7440d4bfa074b145dfeb76d556137818d7108b87b86f8bd"
+ "sourceDigest": "8b640d9d88327aeed42cc6f33ce566d8f5b3af6d54aaf3ad409b9a232d66551b",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "content hash control"
+ }
},
{
- "id": "rc87-6d43050e909b4c5c",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 923,
- "title": "extracts important native declarations",
+ "id": "rc87-eaf2e045293f46f6",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-relative-assets.test.ts",
+ "line": 9,
+ "title": "resolves relative runtime assets from each emitted HTML directory",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "ee33aa7f97184ebe61a15070d40f76348e436c86de2f9590c364c2d188d92e73"
+ "sourceDigest": "19c9f2f25c3c2b717de71ff355ed750a965eea3e8d6452ed405e229133fab2d7"
},
{
- "id": "rc87-9d20d5752d80abd1",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 938,
- "title": "does not extract token-backed, semantic, or alias classes as native declarations",
+ "id": "rc87-2fd2652af98ec69f",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-resource-snapshot.test.ts",
+ "line": 9,
+ "title": "resource names and bytes share one snapshot across entries: delete",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5e62aedeab83204bef587c0d6fefbd3def112120889e0a7f013265a44623728a"
+ "sourceDigest": "eeb8eb912c802b32a7a3c0dadd07ce89b938dd3b6c7c737a297e54ea0c67a9d0",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "delete"
+ }
},
{
- "id": "rc87-bc5f11abcc4e6bf0",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 947,
- "title": "reports duplicate native declarations without autofix",
+ "id": "rc87-9c24b40b6484646b",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-resource-snapshot.test.ts",
+ "line": 9,
+ "title": "resource names and bytes share one snapshot across entries: none",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "044ccc5feb98045b414233e6bbb043d50ce11e4f1f58db06a4aa2a31657c09cf"
+ "sourceDigest": "eeb8eb912c802b32a7a3c0dadd07ce89b938dd3b6c7c737a297e54ea0c67a9d0",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "none"
+ }
},
{
- "id": "rc87-871ad5d224724e7a",
- "package": "tooling",
- "file": "packages/tooling/tests/lint/rc87-index.test.ts",
- "line": 968,
- "title": "exports default lint target settings",
+ "id": "rc87-72b1c3ed94e0c8e5",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-resource-snapshot.test.ts",
+ "line": 9,
+ "title": "resource names and bytes share one snapshot across entries: write",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a118d72c77c191c8fc37fce685e5266de8d9f8f7de485c5b9df7859a72d4de03"
+ "sourceDigest": "eeb8eb912c802b32a7a3c0dadd07ce89b938dd3b6c7c737a297e54ea0c67a9d0",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "write"
+ }
},
{
- "id": "rc87-992cb1447bb56c5c",
- "package": "tooling",
- "file": "packages/tooling/tests/scanner/adapters.test.ts",
- "line": 7,
- "title": "does not restore the removed custom source adapter registry",
+ "id": "rc87-1dbfca918696d039",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 13,
+ "title": "`BH-0048 Webpack pending runtime start: ${scenario}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "92b284ea4c7771748e106a79910f74e556f64c1659938782e47795a490421d25"
+ "sourceDigest": "2c104f786428f47f7fe00af9096847f55e9e9cd463ceae53d4aa9376e9964f9f"
},
{
- "id": "rc87-3bcabc82a8c8141c",
- "package": "tooling",
- "file": "packages/tooling/tests/scanner/adapters.test.ts",
- "line": 23,
- "title": "uses built-in source adapters from @master/css-source by default",
+ "id": "rc87-1dbfca918696d039",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 13,
+ "title": "`BH-0048 Webpack pending runtime start: ${scenario}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cb3b30fe0eec7e895b011ab10c3fd8e8d514ea7b8edcd99207b4bdf299612127"
+ "sourceDigest": "2c104f786428f47f7fe00af9096847f55e9e9cd463ceae53d4aa9376e9964f9f"
},
{
- "id": "rc87-0133f93a9b46e79d",
- "package": "tooling",
- "file": "packages/tooling/tests/scanner/cache.test.ts",
- "line": 62,
- "title": "same class across many files is processed once",
+ "id": "rc87-1dbfca918696d039",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 13,
+ "title": "`BH-0048 Webpack pending runtime start: ${scenario}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "01af4f5df8b4a34b5668df27dc32e3884d14db16ddd1e1dd9955cf003e11e7b2"
+ "sourceDigest": "2c104f786428f47f7fe00af9096847f55e9e9cd463ceae53d4aa9376e9964f9f"
},
{
- "id": "rc87-e6c30c06d8609abf",
- "package": "tooling",
- "file": "packages/tooling/tests/scanner/lifecycle.test.ts",
- "line": 43,
- "title": "dispose invalidates a pending init and emits before removing listeners",
+ "id": "rc87-1dbfca918696d039",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 13,
+ "title": "`BH-0048 Webpack pending runtime start: ${scenario}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "5fc5a1f7d6a021c81f10db65e02a64394446a7141c0d3f8e3b78eadab1cec76c"
+ "sourceDigest": "2c104f786428f47f7fe00af9096847f55e9e9cd463ceae53d4aa9376e9964f9f"
},
{
- "id": "rc87-bae34e2e297b6361",
- "package": "tooling",
- "file": "packages/tooling/tests/scanner/lifecycle.test.ts",
- "line": 71,
- "title": "only the latest reset can commit its session and manifest",
+ "id": "rc87-1dbfca918696d039",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-start-hmr.test.ts",
+ "line": 13,
+ "title": "`BH-0048 Webpack pending runtime start: ${scenario}`",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3d23ec7388c8ab5f03c47acd85225284bae901a22138ed49940b9f978f4178e0"
+ "sourceDigest": "2c104f786428f47f7fe00af9096847f55e9e9cd463ceae53d4aa9376e9964f9f"
},
{
- "id": "rc87-6a8243594102db50",
- "package": "tooling",
- "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
- "line": 18,
- "title": "exports class candidate extraction",
+ "id": "rc87-c47d0b373039e8dd",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 5,
+ "title": "BH-0017 emitted HTML resolves all asset types with $publicPath [1: {\"publicPath\":\"./\",\"prefix\":\"../../\"}]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "3824fbea478a57f4b0ccc59b301a787f2eaaf1befdfc7bf2f79e370821c4f185"
+ "sourceDigest": "60d1752ad51801c8582086f2c5a48361d8b63589ff4eeeb1e91df7fd71eea808",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "{\"publicPath\":\"./\",\"prefix\":\"../../\"}"
+ }
},
{
- "id": "rc87-7a7db9b49e1ad043",
- "package": "tooling",
- "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
- "line": 22,
- "title": "ignores module specifiers, require calls, dynamic imports, and common directives with Oxc",
+ "id": "rc87-cae7d4acbff7baee",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 5,
+ "title": "BH-0017 emitted HTML resolves all asset types with $publicPath [2: {\"publicPath\":\"\",\"prefix\":\"../../\"}]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b16c51d52e2045b59fcff8c7edf8deeef09aa94c605ff47e8ed2caeb776b027e"
+ "sourceDigest": "60d1752ad51801c8582086f2c5a48361d8b63589ff4eeeb1e91df7fd71eea808",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "{\"publicPath\":\"\",\"prefix\":\"../../\"}"
+ }
},
{
- "id": "rc87-1dbb1927bb3218dc",
- "package": "tooling",
- "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
- "line": 36,
- "title": "extracts class attributes and script strings from HTML",
+ "id": "rc87-43882b043e0880e9",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 5,
+ "title": "BH-0017 emitted HTML resolves all asset types with $publicPath [3: {\"publicPath\":\"auto\",\"prefix\":\"../../\"}]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "62c206c67b5c8c8003fa3771f818fad6926ad390fdcdb8c15ac42c04e1af5181"
+ "sourceDigest": "60d1752ad51801c8582086f2c5a48361d8b63589ff4eeeb1e91df7fd71eea808",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "{\"publicPath\":\"auto\",\"prefix\":\"../../\"}"
+ }
},
{
- "id": "rc87-c86aee8c537cd4bc",
- "package": "tooling",
- "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
- "line": 53,
- "title": "does not load optional framework parsers for barrel-only helpers",
+ "id": "rc87-c26aee97788f58bd",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 5,
+ "title": "BH-0017 emitted HTML resolves all asset types with $publicPath [4: {\"publicPath\":\"files/\",\"prefix\":\"../../files/\"}]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cc51de0735fbe88cf49448979133435fecb687947dc43d191d002019de86b5d2"
+ "sourceDigest": "60d1752ad51801c8582086f2c5a48361d8b63589ff4eeeb1e91df7fd71eea808",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "{\"publicPath\":\"files/\",\"prefix\":\"../../files/\"}"
+ }
},
{
- "id": "rc87-47501ea3a7231dfb",
- "package": "tooling",
- "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
- "line": 61,
- "title": "extracts template, script, and script setup classes from Vue SFCs",
+ "id": "rc87-34b970c778e564f3",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 5,
+ "title": "BH-0017 emitted HTML resolves all asset types with $publicPath [5: {\"publicPath\":\"/static/\",\"prefix\":\"/static/\"}]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "a33510dbbfe5351f14048e9b33374c10ca581d8844e2b4a44a06ffc050ff21dd"
+ "sourceDigest": "60d1752ad51801c8582086f2c5a48361d8b63589ff4eeeb1e91df7fd71eea808",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "{\"publicPath\":\"/static/\",\"prefix\":\"/static/\"}"
+ }
},
{
- "id": "rc87-0d95d7b6ece22b02",
- "package": "tooling",
- "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
- "line": 80,
- "title": "extracts markup, module script, instance script, and class directive classes from Svelte files",
+ "id": "rc87-ccf34f37dde27abf",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 5,
+ "title": "BH-0017 emitted HTML resolves all asset types with $publicPath [6: {\"publicPath\":\"https://cdn.example.test/static/\",\"prefix\":\"https://cdn.example.test/static/\"}]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "6f9cb583b40800db3a0ed320f45169a00c7a32823ef2f1b72737635388d11f15"
+ "sourceDigest": "60d1752ad51801c8582086f2c5a48361d8b63589ff4eeeb1e91df7fd71eea808",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "{\"publicPath\":\"https://cdn.example.test/static/\",\"prefix\":\"https://cdn.example.test/static/\"}"
+ }
},
{
- "id": "rc87-b0f1d39e722c24b7",
- "package": "tooling",
- "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
- "line": 99,
- "title": "extracts frontmatter, script, and markup classes from Astro files while ignoring styles",
+ "id": "rc87-b352394ffb7d03ce",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 5,
+ "title": "BH-0017 emitted HTML resolves all asset types with $publicPath [7: {\"publicPath\":\"//cdn.example.test/static/\",\"prefix\":\"//cdn.example.test/static/\"}]",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e7b2fc28653c211bbef05b95e1264f4ec230b5a664767d9d8464e3d22a4a3442"
+ "sourceDigest": "60d1752ad51801c8582086f2c5a48361d8b63589ff4eeeb1e91df7fd71eea808",
+ "matrix": {
+ "index": 6,
+ "resolved": true,
+ "value": "{\"publicPath\":\"//cdn.example.test/static/\",\"prefix\":\"//cdn.example.test/static/\"}"
+ }
},
{
- "id": "rc87-b2b2b2c8fdca429c",
- "package": "tooling",
- "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
- "line": 118,
- "title": "warns once per peer and falls back to text extraction when an optional framework parser is missing",
+ "id": "rc87-9621bfe7b076e41c",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 45,
+ "title": "BH-0017 runtime entry owns dependency resolution for ",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d0dd30bb247b58407e6b0061c378b213b16295b582ee5e82d5693aebcbffec18"
+ "sourceDigest": "6a25f378e16de7d4e79ac65a79fb06a842bc177a4e47c72e2b2cf844ba7b6ee0",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": ""
+ }
},
{
- "id": "rc87-d7dfb8fbf1682634",
- "package": "tooling",
- "file": "packages/tooling/tests/source/rc87-adapters.test.ts",
- "line": 142,
- "title": "matches adapters with global regular expressions consistently",
+ "id": "rc87-4d150581ef578c24",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 45,
+ "title": "BH-0017 runtime entry owns dependency resolution for ./",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "647d160474788021bd5b40cdedb6cbe70fbae593ebfbcc37b0214daea5cd5bec"
+ "sourceDigest": "6a25f378e16de7d4e79ac65a79fb06a842bc177a4e47c72e2b2cf844ba7b6ee0",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "./"
+ }
},
{
- "id": "rc87-c59b8ef1021392cb",
- "package": "tooling",
- "file": "packages/tooling/tests/source/rc87-extract-class-candidates.test.ts",
- "line": 4,
- "title": "extracts class candidates from mixed source strings",
+ "id": "rc87-fbbaf46979670265",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 45,
+ "title": "BH-0017 runtime entry owns dependency resolution for //cdn.example.test/",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "886b24022366cbebafe9b33ed07e7b0f1f8262d980446d6bd201e96bb60adfe9"
+ "sourceDigest": "6a25f378e16de7d4e79ac65a79fb06a842bc177a4e47c72e2b2cf844ba7b6ee0",
+ "matrix": {
+ "index": 6,
+ "resolved": true,
+ "value": "//cdn.example.test/"
+ }
},
{
- "id": "rc87-64fb1e21e03ab479",
- "package": "tooling",
- "file": "packages/tooling/tests/source/rc87-extract-class-candidates.test.ts",
- "line": 24,
- "title": "keeps grouped class candidates before downstream validation",
+ "id": "rc87-92e3a5e7c1d14840",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 45,
+ "title": "BH-0017 runtime entry owns dependency resolution for /static/",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "d693c7de3dd9238f9305741f3ced049143081c05c3afd90fb18b8b82c2b4a66d"
+ "sourceDigest": "6a25f378e16de7d4e79ac65a79fb06a842bc177a4e47c72e2b2cf844ba7b6ee0",
+ "matrix": {
+ "index": 4,
+ "resolved": true,
+ "value": "/static/"
+ }
},
{
- "id": "rc87-4c343a89ca5f6475",
- "package": "tooling",
- "file": "packages/tooling/tests/source/rc87-extract-class-candidates.test.ts",
- "line": 31,
- "title": "keeps native custom property declarations without legacy dollar assignments",
+ "id": "rc87-85679c245792b930",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 45,
+ "title": "BH-0017 runtime entry owns dependency resolution for auto",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "cd822818b5a5195f71e550ae9cdf7d15a861f18f36de555a23b4ef611350c897"
+ "sourceDigest": "6a25f378e16de7d4e79ac65a79fb06a842bc177a4e47c72e2b2cf844ba7b6ee0",
+ "matrix": {
+ "index": 3,
+ "resolved": true,
+ "value": "auto"
+ }
},
{
- "id": "rc87-8471601240020bd3",
- "package": "tooling",
- "file": "packages/tooling/tests/source/session.test.ts",
- "line": 34,
- "title": "extracts static classes from JavaScript and TypeScript syntax with Oxc",
+ "id": "rc87-1159c2bec7e926bf",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 45,
+ "title": "BH-0017 runtime entry owns dependency resolution for files/",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "0c529af633f0b9d134230b400cf883cced50c0246a798925e47e32d0e876b08c"
+ "sourceDigest": "6a25f378e16de7d4e79ac65a79fb06a842bc177a4e47c72e2b2cf844ba7b6ee0",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "files/"
+ }
},
{
- "id": "rc87-fbfb3abbf431c27a",
- "package": "tooling",
- "file": "packages/tooling/tests/validator/rc87-validator.test.ts",
- "line": 38,
- "title": "validate an invalid CSS property value",
+ "id": "rc87-b8a17b37707b1917",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-runtime-url-matrix.test.ts",
+ "line": 45,
+ "title": "BH-0017 runtime entry owns dependency resolution for https://cdn.example.test/",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "256cbcd7f70f24602d805698d3e6a2b4ca30ff55105679673403ce8a97a4d5f8"
+ "sourceDigest": "6a25f378e16de7d4e79ac65a79fb06a842bc177a4e47c72e2b2cf844ba7b6ee0",
+ "matrix": {
+ "index": 5,
+ "resolved": true,
+ "value": "https://cdn.example.test/"
+ }
},
{
- "id": "rc87-a7b959d019373410",
- "package": "tooling",
- "file": "packages/tooling/tests/validator/rc87-validator.test.ts",
- "line": 43,
- "title": "validate valid classes",
+ "id": "rc87-095120f8d558eae2",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-static-graph-delivery.test.ts",
+ "line": 36,
+ "title": "publishes external child imports with their boundaries: ",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "539e557ca0061d064b0c676dbae3ec7fdd6271385d2b066ade7c1f937e6e53a0"
+ "sourceDigest": "3d13e6d61fb0c9a36ab0206c29d8da5b9c7e653168ff5aa10c2d76052619f0a1",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": ""
+ }
},
{
- "id": "rc87-5dcc469ccbe6bd0d",
- "package": "tooling",
- "file": "packages/tooling/tests/validator/rc87-validator.test.ts",
- "line": 59,
- "title": "create rules by class",
+ "id": "rc87-aeaf634cc184aa73",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-static-graph-delivery.test.ts",
+ "line": 36,
+ "title": "publishes external child imports with their boundaries: layer(cards)",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "9be44c10ba92f3fad53b0e2e2cc70ba2df86d9ee6e39a28094a9bdc81f6b4061"
+ "sourceDigest": "3d13e6d61fb0c9a36ab0206c29d8da5b9c7e653168ff5aa10c2d76052619f0a1",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "layer(cards)"
+ }
},
{
- "id": "rc87-f49501ff3b26ed1a",
- "package": "tooling",
- "file": "packages/tooling/tests/validator/rc87-validator.test.ts",
- "line": 64,
- "title": "validates native CSS declarations through css-tree fallback",
+ "id": "rc87-e13e97a38f9a8539",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-static-graph-delivery.test.ts",
+ "line": 36,
+ "title": "publishes external child imports with their boundaries: supports(display:grid) print",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "be20d83a880047930ceb5e7af91fe007de16b279f921b68aef2eee723b8c619f"
+ "sourceDigest": "3d13e6d61fb0c9a36ab0206c29d8da5b9c7e653168ff5aa10c2d76052619f0a1",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": "supports(display:grid) print"
+ }
},
{
- "id": "rc87-1068ef0c8cf9bd7a",
- "package": "tooling",
- "file": "packages/tooling/tests/validator/rc87-validator.test.ts",
- "line": 84,
- "title": "fairly irregular classes can be ignored very well",
+ "id": "rc87-87f81e2ea21c3ea4",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-static-graph-delivery.test.ts",
+ "line": 56,
+ "title": "nested CSS and resource edits change the real entry content hash and preserve resource payloads",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e100d51e8cc5666877545e55bb37e18fdf1d2a7c5da8a8eed548c24e9de0e3c5"
+ "sourceDigest": "4a1a3b9d3529e245dd1686f47bf235d12c3c2f301c7855cb781a6b0f429d01f7"
},
{
- "id": "rc87-609e3c42e72dd6d3",
- "package": "vite",
- "file": "packages/vite/tests/core.test.ts",
- "line": 27,
- "title": "null mode registers the shared scanner and style entry pipeline",
+ "id": "rc87-e53cde9aaf4bcf55",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-static-graph-delivery.test.ts",
+ "line": 85,
+ "title": "delivers project theme variables without references from local.css",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "59144c6f40a6370584622509b06e58858ae577611107e3b393d4edd32cfa73cb"
+ "sourceDigest": "7dc3eb0d4eec9bbdf1952db7514517709338a555d59514533c6d83d01fb1fa91",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "local.css"
+ }
},
{
- "id": "rc87-d7224028340ddd79",
- "package": "vite",
- "file": "packages/vite/tests/modes/scanner.test.ts",
- "line": 54,
- "title": "reinitializes the scanner for a later build environment",
+ "id": "rc87-0fd9db21a62a4272",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-static-graph-delivery.test.ts",
+ "line": 85,
+ "title": "delivers project theme variables without references from local.module.css",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "92f5f0fb2663f2ad324b23022c177ecd94d0a52ed9775c5d341c91f843cdc09c"
+ "sourceDigest": "7dc3eb0d4eec9bbdf1952db7514517709338a555d59514533c6d83d01fb1fa91",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "local.module.css"
+ }
},
{
- "id": "rc87-58ed479da5704037",
- "package": "vite",
- "file": "packages/vite/tests/plugins/pre-render.test.ts",
- "line": 172,
- "title": "does not duplicate globals already emitted by managed CSS entries",
+ "id": "rc87-9659bfce11e3e7c8",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-static-watch-recovery.test.ts",
+ "line": 17,
+ "title": "watch reports a missing child as compilation errors and recovers without invalidation",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "995deb8d3a71263907947b559ef4136069a4a8eb030f8f14c1158f36b931ce88"
+ "sourceDigest": "9b6d0dd791186d884b38cd6af562b06bb78232c05615b7afa04bb77c5baf094f",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "child"
+ }
},
{
- "id": "rc87-c67819682dee2741",
- "package": "vite",
- "file": "packages/vite/tests/plugins/style-entry-hmr.test.ts",
- "line": 186,
- "title": "reloads emitted globals when extracted CSS ownership changes",
+ "id": "rc87-4b331fbc68478c55",
+ "package": "webpack",
+ "file": "packages/webpack/tests/bug-hunt-static-watch-recovery.test.ts",
+ "line": 17,
+ "title": "watch reports a missing resource as compilation errors and recovers without invalidation",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "b941190c8028bfcd932f8dfee2bffff14a07f037f2cb4ce338dbcfa9b93a38d8"
+ "sourceDigest": "9b6d0dd791186d884b38cd6af562b06bb78232c05615b7afa04bb77c5baf094f",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "resource"
+ }
},
{
- "id": "rc87-69e7b6412f26781a",
- "package": "vscode",
- "file": "packages/vscode/tests/server-bundle.test.js",
- "line": 226,
- "title": "records the rc.87 native semantic import externalization divergence",
+ "id": "rc87-884511ab6b4fc9f2",
+ "package": "webpack",
+ "file": "packages/webpack/tests/plugin-runtime.test.ts",
+ "line": 476,
+ "title": "fails a watch build on reset replay errors and recovers on the next reset",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "e9cce201c7703532fd59cadd9f0604d62c072caff2c0d105fa24da8de19039ff"
+ "sourceDigest": "67e1ecc13b67cc20e4bfbfcdbff7cf4226602c3418f0e1582a9754f592e875ac"
},
{
- "id": "rc87-d534af146eb72292",
- "package": "vscode",
- "file": "packages/vscode/tests/server-bundle.test.js",
- "line": 376,
- "title": "proves the rc.87 staged language server lifecycle without workspace node_modules",
+ "id": "rc87-c3180da8ba9d0499",
+ "package": "webpack",
+ "file": "packages/webpack/tests/plugin-runtime.test.ts",
+ "line": 774,
+ "title": "does not duplicate runtime script or preload tags with quotes",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "7ea71446b5ca07d00c63563c346ebd647b255ff7fb4e0ac63b304b539ee44481"
+ "sourceDigest": "3ef8af062d32082439cbdd02e2a920d3cd7a27ab6b1a4c9d083ab583381fc871",
+ "matrix": {
+ "index": 2,
+ "resolved": true,
+ "value": ""
+ }
},
{
- "id": "rc87-884511ab6b4fc9f2",
+ "id": "rc87-8285229d17b9b845",
"package": "webpack",
"file": "packages/webpack/tests/plugin-runtime.test.ts",
- "line": 471,
- "title": "fails a watch build on reset replay errors and recovers on the next reset",
+ "line": 774,
+ "title": "does not duplicate runtime script or preload tags with ' quotes",
"runner": "vitest",
"kind": "test",
- "sourceDigest": "56b99158612da354a25ecdb9d5a6be7d052d30fc8616c8d15d8d9757cbbc1464"
+ "sourceDigest": "3ef8af062d32082439cbdd02e2a920d3cd7a27ab6b1a4c9d083ab583381fc871",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "'"
+ }
},
{
"id": "rc87-447db51c0ee8d73a",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 206,
+ "line": 207,
"title": "defers scanner initialization until Webpack starts a build",
"runner": "vitest",
"kind": "test",
@@ -42530,11 +62578,51 @@
"id": "rc87-05b3730a53d0f0da",
"package": "webpack",
"file": "packages/webpack/tests/plugin.test.ts",
- "line": 220,
+ "line": 221,
"title": "disposes scanner and stylesheet sessions when Webpack shuts down",
"runner": "vitest",
"kind": "test",
"sourceDigest": "a6fa3882779617eec85c8f4a324b4c77d0d8fb8a91a0b5b8695bc91ed638db46"
+ },
+ {
+ "id": "rc87-1557a0b43e0b67f2",
+ "package": "webpack",
+ "file": "packages/webpack/tests/plugin.test.ts",
+ "line": 474,
+ "title": "emits native token references in local Button.css without a utility class",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "49027aab7e3ac3b08c3eb0c51f2c1b004a30747efc0e83e7518670e6af4bf891",
+ "matrix": {
+ "index": 0,
+ "resolved": true,
+ "value": "Button.css"
+ }
+ },
+ {
+ "id": "rc87-b3b60992119405aa",
+ "package": "webpack",
+ "file": "packages/webpack/tests/plugin.test.ts",
+ "line": 474,
+ "title": "emits native token references in local Button.module.css without a utility class",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "49027aab7e3ac3b08c3eb0c51f2c1b004a30747efc0e83e7518670e6af4bf891",
+ "matrix": {
+ "index": 1,
+ "resolved": true,
+ "value": "Button.module.css"
+ }
+ },
+ {
+ "id": "rc87-4d56801289fc4ba0",
+ "package": "webpack",
+ "file": "packages/webpack/tests/project-context.test.ts",
+ "line": 11,
+ "title": "css-loader Modules use project resources without loading the discovered entry",
+ "runner": "vitest",
+ "kind": "test",
+ "sourceDigest": "c634c6e259048ebdec7e4742df598ec8e1381f28ef94359d0f2eb5a0dc8b8110"
}
]
}
diff --git a/parity/site-css-integration-review.md b/parity/site-css-integration-review.md
new file mode 100644
index 000000000..5b55280a6
--- /dev/null
+++ b/parity/site-css-integration-review.md
@@ -0,0 +1,70 @@
+# Integrated site CSS contract review
+
+Authority: on 2026-09-28 Aron approved the outstanding work ("全部核准") and
+authorized integrating the result ending at `9d9817241` before the freeze.
+That history includes `6adc31c5a` (retired sizing utilities) and complete Compose
+removal. This review records the resulting site bytes; it does not claim a new
+human review of an unseen diff. The previous snapshot's 2026-09-25 visual QA
+remains historical evidence, rather than being relabeled for these new bytes.
+
+## Scope and source
+
+The old snapshot was last updated by `3eee73b7c`; the rebuilt site uses integrated
+source through `6b82e15db`, with later TypeScript resolution and CI-only changes.
+The production CSS was not changed to make this gate pass. The exact-byte
+verifier, route stylesheet boundaries, inline-variable checks, CSS reconstruction
+and Manifest version checks remain intact.
+
+The refreshed snapshot retains all 1,240 static HTML route identities and their
+CSS/no-CSS classification. It contains 125 delivery contracts (previously 124),
+1,843 generated rules (previously 1,827), and 4,031 deduplicated exact CSS segments
+(previously 4,015). Contract hashes change transitively when their contents change.
+
+## Exact differences
+
+- The project Manifest differs only by removing the six `size`, `min-size`, and
+ `max-size` raw/named utility definitions from `6adc31c5a`, and reducing subsequent
+ utility order indexes by six. All other fields are equal, including versions,
+ variables, modes, aliases and remaining utility definitions.
+- All 1,811 retained generated rules are exactly equal. Sixteen `size:`
+ rules become 32 `width:` / `height:` rules. Exact comparisons
+ preserve each value, selector escaping and media wrapper. Site class migrations
+ already belong to `6adc31c5a`; this snapshot adds no syntax or runtime behavior.
+- Of 57 removed and 73 added CSS segments, 16/32 are those dimension rules,
+ 40/40 are theme resource blocks, and one/one is `.doc-step-number`.
+- Theme blocks retain every common property's value. Added resources are limited
+ to `--font-family-mono`, `--font-mono`, `--font-family-sans`, and `--font-sans`
+ required by existing native styles. The three Next installation pages no longer
+ need orange warning-callout resources after their guidance was corrected.
+ The three retired sizing reference pages no longer need four resources used by
+ their former interactive reference shell. The same changes apply to locales.
+- `.doc-step-number` retains its complete declaration multiset. Only
+ `inset-inline-start` moves before the other declarations; no shorthand or
+ duplicate declaration competes with it.
+- Per-route class sets match the dimension migration except 24 localized routes:
+ the three Next installation pages lose obsolete warning-icon classes, three
+ sizing reference pages become removal notices, the Compose notice loses its
+ unused screen-reader helper, and the adjacent screen-readers page gains three
+ pagination-arrow classes after the reference catalog changed. These are existing
+ document/catalog changes, not unexplained engine output differences.
+
+## Playground contract
+
+The starter template migrated from Compose to native declarations in `9d9817241`.
+Its tests now expect native whitespace and nested `&:hover .btn-arrow-line`, while
+retaining opacity, transform, layer, token, keyframe, warning and Manifest checks.
+Native custom-property values are correctly reported as `CSS_VALUE_UNKNOWN`
+information; tests reject any other diagnostic kind or warning prefix instead
+of requiring the obsolete empty diagnostic result. No diagnostic is suppressed.
+
+## Validation
+
+The 17 Playground cases pass. The Vercel deployment of `5ee8e180e` was inspected
+in the browser: the Design System document, typography and navigation render;
+both host previews previously passed the Compose removal notice and native CSS
+example checks. The snapshot's exact differences were checked before regeneration.
+Final scoped lint, type checks and the unchanged CSS contract gate are recorded
+with the current CI and issue #454 acceptance evidence.
+
+Exact old/new snapshots, a machine-readable segment/resource review and the
+comparison script are preserved in this chat's external evidence directory.
diff --git a/parity/sizing-compiler-paired-1.json b/parity/sizing-compiler-paired-1.json
new file mode 100644
index 000000000..0b4ccf169
--- /dev/null
+++ b/parity/sizing-compiler-paired-1.json
@@ -0,0 +1,77 @@
+{
+ "before": {
+ "100": {
+ "directiveIRBytes": 93310,
+ "parse": {
+ "medianMs": 1.4462080000000128,
+ "p95Ms": 1.4996670000000023
+ },
+ "lower": {
+ "medianMs": 4.263959,
+ "p95Ms": 4.548541999999998
+ }
+ },
+ "1000": {
+ "directiveIRBytes": 957675,
+ "parse": {
+ "medianMs": 16.073667,
+ "p95Ms": 18.679333999999926
+ },
+ "lower": {
+ "medianMs": 44.25366600000007,
+ "p95Ms": 49.157042000000274
+ }
+ },
+ "5000": {
+ "directiveIRBytes": 4857675,
+ "parse": {
+ "medianMs": 102.48062500000015,
+ "p95Ms": 105.90229199999885
+ },
+ "lower": {
+ "medianMs": 247.82675000000017,
+ "p95Ms": 257.9347080000007
+ }
+ }
+ },
+ "after": {
+ "100": {
+ "directiveIRBytes": 93310,
+ "parse": {
+ "medianMs": 1.4600839999999948,
+ "p95Ms": 1.6480419999999754
+ },
+ "lower": {
+ "medianMs": 4.322041000000013,
+ "p95Ms": 4.9199999999999875
+ }
+ },
+ "1000": {
+ "directiveIRBytes": 957675,
+ "parse": {
+ "medianMs": 16.65933300000006,
+ "p95Ms": 18.53800000000001
+ },
+ "lower": {
+ "medianMs": 44.728958999999804,
+ "p95Ms": 50.2075420000001
+ }
+ },
+ "5000": {
+ "directiveIRBytes": 4857675,
+ "parse": {
+ "medianMs": 101.63458300000093,
+ "p95Ms": 106.56237500000134
+ },
+ "lower": {
+ "medianMs": 245.78891699999986,
+ "p95Ms": 260.1413329999996
+ }
+ }
+ },
+ "method": {
+ "rounds": 25,
+ "warmup": 5,
+ "alternatingOrder": true
+ }
+}
diff --git a/parity/sizing-compiler-paired-2.json b/parity/sizing-compiler-paired-2.json
new file mode 100644
index 000000000..fc4df7cd5
--- /dev/null
+++ b/parity/sizing-compiler-paired-2.json
@@ -0,0 +1,77 @@
+{
+ "before": {
+ "100": {
+ "directiveIRBytes": 93310,
+ "parse": {
+ "medianMs": 1.5645840000000106,
+ "p95Ms": 1.9198330000000112
+ },
+ "lower": {
+ "medianMs": 4.631207999999987,
+ "p95Ms": 5.181957999999952
+ }
+ },
+ "1000": {
+ "directiveIRBytes": 957675,
+ "parse": {
+ "medianMs": 15.714874999999893,
+ "p95Ms": 16.44420799999989
+ },
+ "lower": {
+ "medianMs": 41.56429100000014,
+ "p95Ms": 42.81641599999989
+ }
+ },
+ "5000": {
+ "directiveIRBytes": 4857675,
+ "parse": {
+ "medianMs": 100.97108300000036,
+ "p95Ms": 108.88320799999929
+ },
+ "lower": {
+ "medianMs": 244.05375000000095,
+ "p95Ms": 261.6008329999968
+ }
+ }
+ },
+ "after": {
+ "100": {
+ "directiveIRBytes": 93310,
+ "parse": {
+ "medianMs": 1.5144579999999905,
+ "p95Ms": 1.6533749999999827
+ },
+ "lower": {
+ "medianMs": 4.445542000000003,
+ "p95Ms": 5.070750000000032
+ }
+ },
+ "1000": {
+ "directiveIRBytes": 957675,
+ "parse": {
+ "medianMs": 15.781790999999885,
+ "p95Ms": 17.838209000000006
+ },
+ "lower": {
+ "medianMs": 42.443541000000096,
+ "p95Ms": 44.145082999999886
+ }
+ },
+ "5000": {
+ "directiveIRBytes": 4857675,
+ "parse": {
+ "medianMs": 100.79266699999971,
+ "p95Ms": 107.57691700000214
+ },
+ "lower": {
+ "medianMs": 248.85716700000012,
+ "p95Ms": 259.8850000000002
+ }
+ }
+ },
+ "method": {
+ "rounds": 25,
+ "warmup": 5,
+ "alternatingOrder": true
+ }
+}
diff --git a/parity/sizing-history-audit.json b/parity/sizing-history-audit.json
new file mode 100644
index 000000000..4490169a5
--- /dev/null
+++ b/parity/sizing-history-audit.json
@@ -0,0 +1,68 @@
+{
+ "version": 1,
+ "baseline": "bd164e4b5ae3a713940913d745183e9ab6b54263",
+ "implementationHead": "2079d665a",
+ "counts": {
+ "removed-unmapped": 256,
+ "approved-contract-change": 19,
+ "preserved-exact": 503,
+ "changed-without-proof": 244,
+ "stale-evidence": 4,
+ "verified-superset": 5,
+ "ambiguous-mapping": 2
+ },
+ "notes": [
+ "Read-only mapping audit; unresolved mappings are not automatically product defects or approvals. Original evidence and ledger unchanged."
+ ],
+ "reviewedEvidence": [
+ {
+ "sourceId": "rc87-886095b27074cf6c",
+ "file": "packages/binding-wasm-engine/tests/session.test.ts",
+ "title": "loads the packaged Wasm artifact in Node without fetch support for file URLs",
+ "status": "stale-evidence",
+ "target": {
+ "id": "rc87-886095b27074cf6c",
+ "file": "packages/binding-wasm-engine/tests/session.test.ts",
+ "title": "loads the packaged Wasm artifact in Node without fetch support for file URLs"
+ },
+ "reason": "Packaged Wasm loading, initial empty snapshot, one block mutation, exact layered CSS and disposal remain covered. The approved inspection contract replaces valid:true with matchStatus:matched and requires languageVersion:2 in this committed target; a separate native declaration case verifies explicit var() resource emission without host support filtering."
+ },
+ {
+ "sourceId": "rc87-534a5dbe18105a92",
+ "file": "packages/binding-wasm-engine/tests/session.test.ts",
+ "title": "uses a batched CSS.supports handshake for browser-native declarations",
+ "status": "stale-evidence",
+ "target": {
+ "id": "rc87-01b18af25a7b490a",
+ "file": "packages/binding-wasm-engine/tests/session.test.ts",
+ "title": "preserves native declarations independently of browser CSS.supports"
+ },
+ "reason": "The approved preserve-and-diagnose policy removes the browser support handshake from generation. The replacement asserts identical native declaration preservation without host filtering; it intentionally reverses the old support-dependent contract."
+ },
+ {
+ "sourceId": "rc87-97379238aa6e9c52",
+ "file": "packages/binding/tests/binding.test.ts",
+ "title": "normalizes operation failures and disposes engine sessions idempotently",
+ "status": "stale-evidence",
+ "target": {
+ "id": "rc87-97379238aa6e9c52",
+ "file": "packages/binding/tests/binding.test.ts",
+ "title": "normalizes operation failures and disposes engine sessions idempotently"
+ },
+ "reason": "Original normalized engine-operation failure and idempotent disposal assertions remain. Added native declaration coverage checks the explicit var(--stripe) resource and background shorthand; the shared fixture now declares the approved language version. This is not evidence that colon token inference remains supported."
+ },
+ {
+ "sourceId": "rc87-c6f234a37661be00",
+ "file": "packages/next/tests/css-manifest-loader.test.ts",
+ "title": "wraps the manifest JSON as an external JSON facade when requested",
+ "status": "stale-evidence",
+ "target": {
+ "id": "rc87-a9210afde2b25995",
+ "file": "packages/next/tests/css-manifest-loader.test.ts",
+ "title": "exports standard ESM data without writing bundler output assets"
+ },
+ "reason": "The approved Next manifest ESM plan removes direct writes to .next/static/media and external JSON URL assembly. The replacement checks standard ESM output and absence of loader asset writes."
+ }
+ ],
+ "remainingPolicy": "Only the four individually reviewed records were updated. Unmapped/changed cases and public API surface evidence remain release blockers."
+}
diff --git a/parity/sizing-migration-payload.json b/parity/sizing-migration-payload.json
new file mode 100644
index 000000000..4a79b9516
--- /dev/null
+++ b/parity/sizing-migration-payload.json
@@ -0,0 +1,61 @@
+{
+ "note": "Payload comparison for six independent examples; not proof of cascade equivalence for competing dimensions.",
+ "results": [
+ {
+ "label": "before",
+ "classes": [
+ "size:20px",
+ "min-size:10px",
+ "max-size:40px",
+ "size-sm",
+ "min-size-md",
+ "max-size-lg"
+ ],
+ "classCount": 6,
+ "ruleCount": 6,
+ "markup": {
+ "raw": 69,
+ "gzip": 60,
+ "brotli": 54
+ },
+ "css": {
+ "raw": 446,
+ "gzip": 210,
+ "brotli": 173
+ },
+ "hydration": {
+ "raw": 1962,
+ "gzip": 431,
+ "brotli": 360
+ }
+ },
+ {
+ "label": "after",
+ "classes": [
+ "{width:20px;height:20px}",
+ "{min-width:10px;min-height:10px}",
+ "{max-width:40px;max-height:40px}",
+ "{width-sm;height-sm}",
+ "{min-width-md;min-height-md}",
+ "{max-width-lg;max-height-lg}"
+ ],
+ "classCount": 6,
+ "ruleCount": 12,
+ "markup": {
+ "raw": 169,
+ "gzip": 104,
+ "brotli": 84
+ },
+ "css": {
+ "raw": 767,
+ "gzip": 245,
+ "brotli": 211
+ },
+ "hydration": {
+ "raw": 4628,
+ "gzip": 605,
+ "brotli": 510
+ }
+ }
+ ]
+}
diff --git a/parity/sizing-next-hmr-paired.json b/parity/sizing-next-hmr-paired.json
new file mode 100644
index 000000000..6f3270150
--- /dev/null
+++ b/parity/sizing-next-hmr-paired.json
@@ -0,0 +1,653 @@
+{
+ "method": "Saved source/native/preset baseline vs current; same fixture with explicit Turbopack root / to include shared dependency installation; one warmup and three measured edits per run; repeated with other builds idle.",
+ "runs": [
+ {
+ "bundler": "turbo",
+ "node": "v24.20.0",
+ "samples": [
+ {
+ "singleMs": 1316.490167,
+ "burstMs": 1832.2354999999989,
+ "singleStarted": 1790350196834,
+ "burstStarted": 1790350198150,
+ "finished": 1790350199983
+ },
+ {
+ "singleMs": 1465.5810409999995,
+ "burstMs": 1385.3665,
+ "singleStarted": 1790350199983,
+ "burstStarted": 1790350201448,
+ "finished": 1790350202834
+ },
+ {
+ "singleMs": 1233.1301669999993,
+ "burstMs": 1400.061834,
+ "singleStarted": 1790350202834,
+ "burstStarted": 1790350204067,
+ "finished": 1790350205467
+ }
+ ],
+ "idle": [],
+ "note": "File write to observed browser computed style; one warmup, three samples. Pipeline hold/wait are separate child-process observations. Idle observes two seconds after a one-second drain.",
+ "revision": "before",
+ "run": "quiet",
+ "stages": [
+ {
+ "stage": "single",
+ "totalMs": 1316.490167,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 347.423084,
+ "lockHoldMs": 1062.0818770000005
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1832.2354999999989,
+ "publications": 39,
+ "compositions": 2,
+ "composeMs": 355.3951670000006,
+ "lockHoldMs": 1531.6133779999964
+ },
+ {
+ "stage": "single",
+ "totalMs": 1465.5810409999995,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 358.63466700000026,
+ "lockHoldMs": 1270.5724570000057
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1385.3665,
+ "publications": 31,
+ "compositions": 2,
+ "composeMs": 355.4174989999992,
+ "lockHoldMs": 1148.1399600000004
+ },
+ {
+ "stage": "single",
+ "totalMs": 1233.1301669999993,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 350.6969590000008,
+ "lockHoldMs": 1058.3464219999987
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1400.061834,
+ "publications": 35,
+ "compositions": 2,
+ "composeMs": 340.4392910000006,
+ "lockHoldMs": 1189.2995390000087
+ }
+ ]
+ },
+ {
+ "bundler": "webpack",
+ "node": "v24.20.0",
+ "samples": [
+ {
+ "singleMs": 1050.1087499999958,
+ "burstMs": 1067.161208000005,
+ "singleStarted": 1790350218170,
+ "burstStarted": 1790350219220,
+ "finished": 1790350220287
+ },
+ {
+ "singleMs": 1215.5696670000034,
+ "burstMs": 1234.1760830000057,
+ "singleStarted": 1790350220287,
+ "burstStarted": 1790350221503,
+ "finished": 1790350222737
+ },
+ {
+ "singleMs": 1083.037083000003,
+ "burstMs": 1267.0614579999965,
+ "singleStarted": 1790350222737,
+ "burstStarted": 1790350223820,
+ "finished": 1790350225087
+ }
+ ],
+ "idle": [],
+ "note": "File write to observed browser computed style; one warmup, three samples. Pipeline hold/wait are separate child-process observations. Idle observes two seconds after a one-second drain.",
+ "revision": "before",
+ "run": "quiet",
+ "stages": [
+ {
+ "stage": "single",
+ "totalMs": 1050.1087499999958,
+ "publications": 9,
+ "compositions": 2,
+ "composeMs": 329.7051249999986,
+ "lockHoldMs": 732.1624150000025
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1067.161208000005,
+ "publications": 9,
+ "compositions": 2,
+ "composeMs": 330.0119570000006,
+ "lockHoldMs": 737.619708000002
+ },
+ {
+ "stage": "single",
+ "totalMs": 1215.5696670000034,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 330.33037499999955,
+ "lockHoldMs": 776.2197930000038
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1234.1760830000057,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 347.0129160000015,
+ "lockHoldMs": 824.6330809999981
+ },
+ {
+ "stage": "single",
+ "totalMs": 1083.037083000003,
+ "publications": 9,
+ "compositions": 2,
+ "composeMs": 345.42683299999953,
+ "lockHoldMs": 775.6500840000044
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1267.0614579999965,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 357.8350410000003,
+ "lockHoldMs": 816.2747070000023
+ }
+ ]
+ },
+ {
+ "bundler": "turbo",
+ "node": "v24.20.0",
+ "samples": [
+ {
+ "singleMs": 1416.208208,
+ "burstMs": 1217.0659159999996,
+ "singleStarted": 1790350477223,
+ "burstStarted": 1790350478639,
+ "finished": 1790350479857
+ },
+ {
+ "singleMs": 1450.0319580000014,
+ "burstMs": 1284.275458,
+ "singleStarted": 1790350479857,
+ "burstStarted": 1790350481307,
+ "finished": 1790350482591
+ },
+ {
+ "singleMs": 1232.3891250000015,
+ "burstMs": 1615.2530000000006,
+ "singleStarted": 1790350482591,
+ "burstStarted": 1790350483823,
+ "finished": 1790350485438
+ }
+ ],
+ "idle": [],
+ "note": "File write to observed browser computed style; one warmup, three samples. Pipeline hold/wait are separate child-process observations. Idle observes two seconds after a one-second drain.",
+ "revision": "before",
+ "run": "repeat",
+ "stages": [
+ {
+ "stage": "single",
+ "totalMs": 1416.208208,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 361.65362600000026,
+ "lockHoldMs": 1265.5042899999999
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1217.0659159999996,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 340.07587499999954,
+ "lockHoldMs": 1038.9857489999995
+ },
+ {
+ "stage": "single",
+ "totalMs": 1450.0319580000014,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 336.41429100000096,
+ "lockHoldMs": 1204.466498999991
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1284.275458,
+ "publications": 32,
+ "compositions": 2,
+ "composeMs": 340.25795899999866,
+ "lockHoldMs": 1128.5238329999993
+ },
+ {
+ "stage": "single",
+ "totalMs": 1232.3891250000015,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 329.4287090000016,
+ "lockHoldMs": 1029.0508360000003
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1615.2530000000006,
+ "publications": 37,
+ "compositions": 2,
+ "composeMs": 345.63891800000056,
+ "lockHoldMs": 1404.2857110000004
+ }
+ ]
+ },
+ {
+ "bundler": "webpack",
+ "node": "v24.20.0",
+ "samples": [
+ {
+ "singleMs": 1183.1366669999989,
+ "burstMs": 1166.6886659999982,
+ "singleStarted": 1790350498081,
+ "burstStarted": 1790350499265,
+ "finished": 1790350500431
+ },
+ {
+ "singleMs": 1199.9971670000014,
+ "burstMs": 1166.5152090000047,
+ "singleStarted": 1790350500431,
+ "burstStarted": 1790350501631,
+ "finished": 1790350502798
+ },
+ {
+ "singleMs": 1032.6477499999964,
+ "burstMs": 1216.234166000002,
+ "singleStarted": 1790350502798,
+ "burstStarted": 1790350503830,
+ "finished": 1790350505047
+ }
+ ],
+ "idle": [],
+ "note": "File write to observed browser computed style; one warmup, three samples. Pipeline hold/wait are separate child-process observations. Idle observes two seconds after a one-second drain.",
+ "revision": "before",
+ "run": "repeat",
+ "stages": [
+ {
+ "stage": "single",
+ "totalMs": 1183.1366669999989,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 346.2008340000011,
+ "lockHoldMs": 774.1052929999987
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1166.6886659999982,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 326.96362599999884,
+ "lockHoldMs": 756.9410839999982
+ },
+ {
+ "stage": "single",
+ "totalMs": 1199.9971670000014,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 324.9031250000007,
+ "lockHoldMs": 761.260459000001
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1166.5152090000047,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 324.48333300000013,
+ "lockHoldMs": 754.5057059999999
+ },
+ {
+ "stage": "single",
+ "totalMs": 1032.6477499999964,
+ "publications": 9,
+ "compositions": 2,
+ "composeMs": 322.73925000000054,
+ "lockHoldMs": 736.4513340000012
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1216.234166000002,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 325.83195799999885,
+ "lockHoldMs": 780.737419000001
+ }
+ ]
+ },
+ {
+ "bundler": "turbo",
+ "node": "v24.20.0",
+ "samples": [
+ {
+ "singleMs": 1349.8132080000014,
+ "burstMs": 1698.8520829999998,
+ "singleStarted": 1790350250118,
+ "burstStarted": 1790350251468,
+ "finished": 1790350253167
+ },
+ {
+ "singleMs": 1266.7526670000007,
+ "burstMs": 1501.0049169999984,
+ "singleStarted": 1790350253167,
+ "burstStarted": 1790350254433,
+ "finished": 1790350255934
+ },
+ {
+ "singleMs": 1315.4651659999981,
+ "burstMs": 1917.7588329999999,
+ "singleStarted": 1790350255934,
+ "burstStarted": 1790350257250,
+ "finished": 1790350259168
+ }
+ ],
+ "idle": [],
+ "note": "File write to observed browser computed style; one warmup, three samples. Pipeline hold/wait are separate child-process observations. Idle observes two seconds after a one-second drain.",
+ "revision": "after",
+ "run": "quiet",
+ "stages": [
+ {
+ "stage": "single",
+ "totalMs": 1349.8132080000014,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 359.076916,
+ "lockHoldMs": 1117.9196239999992
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1698.8520829999998,
+ "publications": 38,
+ "compositions": 2,
+ "composeMs": 366.21379199999956,
+ "lockHoldMs": 1536.4939599999989
+ },
+ {
+ "stage": "single",
+ "totalMs": 1266.7526670000007,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 341.9926260000011,
+ "lockHoldMs": 1067.998622000001
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1501.0049169999984,
+ "publications": 35,
+ "compositions": 2,
+ "composeMs": 344.8943330000002,
+ "lockHoldMs": 1257.1913749999912
+ },
+ {
+ "stage": "single",
+ "totalMs": 1315.4651659999981,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 359.50645899999836,
+ "lockHoldMs": 1084.5735440000026
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1917.7588329999999,
+ "publications": 43,
+ "compositions": 2,
+ "composeMs": 356.6266239999986,
+ "lockHoldMs": 1618.1770840000027
+ }
+ ]
+ },
+ {
+ "bundler": "webpack",
+ "node": "v24.20.0",
+ "samples": [
+ {
+ "singleMs": 1082.9470409999994,
+ "burstMs": 1251.4714170000007,
+ "singleStarted": 1790350272307,
+ "burstStarted": 1790350273390,
+ "finished": 1790350274641
+ },
+ {
+ "singleMs": 1298.5058749999953,
+ "burstMs": 1317.848417000001,
+ "singleStarted": 1790350274641,
+ "burstStarted": 1790350275940,
+ "finished": 1790350277258
+ },
+ {
+ "singleMs": 1133.3005420000045,
+ "burstMs": 1233.2069170000032,
+ "singleStarted": 1790350277258,
+ "burstStarted": 1790350278391,
+ "finished": 1790350279624
+ }
+ ],
+ "idle": [],
+ "note": "File write to observed browser computed style; one warmup, three samples. Pipeline hold/wait are separate child-process observations. Idle observes two seconds after a one-second drain.",
+ "revision": "after",
+ "run": "quiet",
+ "stages": [
+ {
+ "stage": "single",
+ "totalMs": 1082.9470409999994,
+ "publications": 9,
+ "compositions": 2,
+ "composeMs": 337.8678749999999,
+ "lockHoldMs": 772.6142510000009
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1251.4714170000007,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 337.94437500000095,
+ "lockHoldMs": 810.5649170000015
+ },
+ {
+ "stage": "single",
+ "totalMs": 1298.5058749999953,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 358.64758299999994,
+ "lockHoldMs": 850.1945020000003
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1317.848417000001,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 357.5671660000007,
+ "lockHoldMs": 846.0216669999991
+ },
+ {
+ "stage": "single",
+ "totalMs": 1133.3005420000045,
+ "publications": 9,
+ "compositions": 2,
+ "composeMs": 355.6899999999987,
+ "lockHoldMs": 798.7313329999979
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1233.2069170000032,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 340.15212599999904,
+ "lockHoldMs": 836.9129990000038
+ }
+ ]
+ },
+ {
+ "bundler": "turbo",
+ "node": "v24.20.0",
+ "samples": [
+ {
+ "singleMs": 1334.405291000001,
+ "burstMs": 1749.9750410000015,
+ "singleStarted": 1790350406912,
+ "burstStarted": 1790350408247,
+ "finished": 1790350409997
+ },
+ {
+ "singleMs": 1316.6220000000012,
+ "burstMs": 1431.868958000001,
+ "singleStarted": 1790350409997,
+ "burstStarted": 1790350411313,
+ "finished": 1790350412745
+ },
+ {
+ "singleMs": 1299.74525,
+ "burstMs": 1766.9970839999987,
+ "singleStarted": 1790350412745,
+ "burstStarted": 1790350414045,
+ "finished": 1790350415812
+ }
+ ],
+ "idle": [],
+ "note": "File write to observed browser computed style; one warmup, three samples. Pipeline hold/wait are separate child-process observations. Idle observes two seconds after a one-second drain.",
+ "revision": "after",
+ "run": "repeat",
+ "stages": [
+ {
+ "stage": "single",
+ "totalMs": 1334.405291000001,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 356.2354170000017,
+ "lockHoldMs": 1095.1942089999982
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1749.9750410000015,
+ "publications": 33,
+ "compositions": 2,
+ "composeMs": 345.6651660000007,
+ "lockHoldMs": 1434.0292080000013
+ },
+ {
+ "stage": "single",
+ "totalMs": 1316.6220000000012,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 345.70824899999934,
+ "lockHoldMs": 1086.4507490000044
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1431.868958000001,
+ "publications": 32,
+ "compositions": 2,
+ "composeMs": 354.57029299999886,
+ "lockHoldMs": 1188.3538319999998
+ },
+ {
+ "stage": "single",
+ "totalMs": 1299.74525,
+ "publications": 28,
+ "compositions": 2,
+ "composeMs": 353.43245899999965,
+ "lockHoldMs": 1086.2001650000002
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1766.9970839999987,
+ "publications": 39,
+ "compositions": 2,
+ "composeMs": 352.17175000000134,
+ "lockHoldMs": 1550.3697909999987
+ }
+ ]
+ },
+ {
+ "bundler": "webpack",
+ "node": "v24.20.0",
+ "samples": [
+ {
+ "singleMs": 1232.9365419999995,
+ "burstMs": 1248.7588749999995,
+ "singleStarted": 1790350428816,
+ "burstStarted": 1790350430049,
+ "finished": 1790350431298
+ },
+ {
+ "singleMs": 1284.4326250000013,
+ "burstMs": 1233.3369999999995,
+ "singleStarted": 1790350431298,
+ "burstStarted": 1790350432582,
+ "finished": 1790350433816
+ },
+ {
+ "singleMs": 1216.5531249999985,
+ "burstMs": 1216.6486670000013,
+ "singleStarted": 1790350433816,
+ "burstStarted": 1790350435032,
+ "finished": 1790350436249
+ }
+ ],
+ "idle": [],
+ "note": "File write to observed browser computed style; one warmup, three samples. Pipeline hold/wait are separate child-process observations. Idle observes two seconds after a one-second drain.",
+ "revision": "after",
+ "run": "repeat",
+ "stages": [
+ {
+ "stage": "single",
+ "totalMs": 1232.9365419999995,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 334.63275000000067,
+ "lockHoldMs": 808.8023750000029
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1248.7588749999995,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 353.6725409999999,
+ "lockHoldMs": 840.5869579999999
+ },
+ {
+ "stage": "single",
+ "totalMs": 1284.4326250000013,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 358.6033750000006,
+ "lockHoldMs": 850.7900830000053
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1233.3369999999995,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 353.137874,
+ "lockHoldMs": 850.0976269999992
+ },
+ {
+ "stage": "single",
+ "totalMs": 1216.5531249999985,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 336.03691600000093,
+ "lockHoldMs": 800.9423760000009
+ },
+ {
+ "stage": "burst",
+ "totalMs": 1216.6486670000013,
+ "publications": 11,
+ "compositions": 2,
+ "composeMs": 335.2776250000006,
+ "lockHoldMs": 807.9503749999967
+ }
+ ]
+ }
+ ]
+}
diff --git a/parity/sizing-next-hmr.json b/parity/sizing-next-hmr.json
new file mode 100644
index 000000000..78fd6736c
--- /dev/null
+++ b/parity/sizing-next-hmr.json
@@ -0,0 +1,63 @@
+{
+ "runs": [
+ {
+ "bundler": "turbo",
+ "node": "v24.20.0",
+ "samples": [
+ {
+ "singleMs": 1566.4514579999995,
+ "burstMs": 1567.5506250000017,
+ "singleStarted": 1790348867036,
+ "burstStarted": 1790348868603,
+ "finished": 1790348870170
+ },
+ {
+ "singleMs": 1482.4324579999993,
+ "burstMs": 1349.0459169999995,
+ "singleStarted": 1790348870170,
+ "burstStarted": 1790348871653,
+ "finished": 1790348873002
+ },
+ {
+ "singleMs": 1567.7263749999984,
+ "burstMs": 1350.0824170000014,
+ "singleStarted": 1790348873002,
+ "burstStarted": 1790348874570,
+ "finished": 1790348875920
+ }
+ ],
+ "idle": [],
+ "note": "File write to observed browser computed style; one warmup, three samples. Pipeline hold/wait are separate child-process observations. Idle observes two seconds after a one-second drain."
+ },
+ {
+ "bundler": "webpack",
+ "node": "v24.20.0",
+ "samples": [
+ {
+ "singleMs": 1265.4989169999972,
+ "burstMs": 1267.6923339999994,
+ "singleStarted": 1790348889209,
+ "burstStarted": 1790348890475,
+ "finished": 1790348891742
+ },
+ {
+ "singleMs": 1299.9984170000025,
+ "burstMs": 1266.4860000000044,
+ "singleStarted": 1790348891742,
+ "burstStarted": 1790348893042,
+ "finished": 1790348894309
+ },
+ {
+ "singleMs": 1233.3035419999942,
+ "burstMs": 1233.2612920000029,
+ "singleStarted": 1790348894309,
+ "burstStarted": 1790348895542,
+ "finished": 1790348896776
+ }
+ ],
+ "idle": [],
+ "note": "File write to observed browser computed style; one warmup, three samples. Pipeline hold/wait are separate child-process observations. Idle observes two seconds after a one-second drain."
+ }
+ ],
+ "note": "Current revision HMR only; no matched baseline HMR measurement in this run."
+}
diff --git a/parity/sizing-next-module-final-1.json b/parity/sizing-next-module-final-1.json
new file mode 100644
index 000000000..134dacba5
--- /dev/null
+++ b/parity/sizing-next-module-final-1.json
@@ -0,0 +1,54 @@
+{
+ "rounds": 18,
+ "warmup": 3,
+ "alternatingOrder": true,
+ "results": [
+ {
+ "label": "before",
+ "samples": [
+ 72.02662500000008,
+ 72.86325,
+ 74.4772089999999,
+ 72.8522919999998,
+ 72.57908300000008,
+ 73.41754100000003,
+ 72.69483300000002,
+ 72.38133400000015,
+ 77.72233300000016,
+ 76.9214579999998,
+ 76.07204199999978,
+ 74.10179200000039,
+ 71.8866250000001,
+ 72.79320800000005,
+ 74.80320799999981
+ ],
+ "medianMs": 72.86325,
+ "p95Ms": 77.72233300000016,
+ "localCSSBytes": 116
+ },
+ {
+ "label": "after",
+ "samples": [
+ 114.52866600000004,
+ 118.6606250000001,
+ 124.760084,
+ 122.25308300000006,
+ 123.38079199999993,
+ 123.58799999999997,
+ 121.68058400000018,
+ 122.50287500000013,
+ 115.26216699999986,
+ 136.8422499999997,
+ 119.29479200000014,
+ 128.60824999999977,
+ 115.61783400000013,
+ 130.51233299999967,
+ 118.42787500000031
+ ],
+ "medianMs": 122.25308300000006,
+ "p95Ms": 136.8422499999997,
+ "localCSSBytes": 209
+ }
+ ],
+ "note": "One CSS Module with referenced base/mode variables. Baseline incorrectly copies variables to the component; current publishes global resources. Local bytes exclude those assets. This measures the loader, not full HMR."
+}
diff --git a/parity/sizing-next-module-final-2.json b/parity/sizing-next-module-final-2.json
new file mode 100644
index 000000000..62af927c8
--- /dev/null
+++ b/parity/sizing-next-module-final-2.json
@@ -0,0 +1,54 @@
+{
+ "rounds": 18,
+ "warmup": 3,
+ "alternatingOrder": true,
+ "results": [
+ {
+ "label": "before",
+ "samples": [
+ 74.95225000000005,
+ 78.21841699999993,
+ 77.21345799999995,
+ 75.0283750000001,
+ 74.92549999999983,
+ 75.62741699999992,
+ 77.63845800000036,
+ 77.36316699999998,
+ 78.23929199999975,
+ 76.59116700000004,
+ 74.77458399999978,
+ 77.64420799999971,
+ 78.26366700000017,
+ 76.9965000000002,
+ 78.00470799999994
+ ],
+ "medianMs": 77.21345799999995,
+ "p95Ms": 78.26366700000017,
+ "localCSSBytes": 116
+ },
+ {
+ "label": "after",
+ "samples": [
+ 123.915208,
+ 128.74562500000002,
+ 123.55637499999989,
+ 129.91495800000007,
+ 127.1357089999999,
+ 126.22870799999987,
+ 125.47712499999989,
+ 127.55175000000008,
+ 117.58558399999993,
+ 125.8020419999998,
+ 120.01558299999988,
+ 133.67279199999984,
+ 123.09170800000038,
+ 141.35633299999972,
+ 123.87229200000002
+ ],
+ "medianMs": 125.8020419999998,
+ "p95Ms": 141.35633299999972,
+ "localCSSBytes": 209
+ }
+ ],
+ "note": "One CSS Module with referenced base/mode variables. Baseline incorrectly copies variables to the component; current publishes global resources. Local bytes exclude those assets. This measures the loader, not full HMR."
+}
diff --git a/parity/sizing-next-module-performance-1.json b/parity/sizing-next-module-performance-1.json
new file mode 100644
index 000000000..b04f36efc
--- /dev/null
+++ b/parity/sizing-next-module-performance-1.json
@@ -0,0 +1,54 @@
+{
+ "rounds": 18,
+ "warmup": 3,
+ "alternatingOrder": true,
+ "results": [
+ {
+ "label": "before",
+ "samples": [
+ 74.3677090000001,
+ 73.35583399999996,
+ 75.486625,
+ 73.346,
+ 73.2305829999998,
+ 75.26812499999983,
+ 74.68975,
+ 76.09883300000001,
+ 73.38304199999993,
+ 72.55799999999999,
+ 73.34970799999974,
+ 74.89104100000031,
+ 73.51633399999992,
+ 72.07037500000024,
+ 73.33137499999975
+ ],
+ "medianMs": 73.38304199999993,
+ "p95Ms": 76.09883300000001,
+ "localCSSBytes": 116
+ },
+ {
+ "label": "after",
+ "samples": [
+ 158.99341700000002,
+ 159.99758300000008,
+ 162.297959,
+ 159.459292,
+ 161.48225000000002,
+ 158.5241249999999,
+ 169.9763750000002,
+ 154.79137500000024,
+ 169.11533400000008,
+ 151.22345799999994,
+ 167.2993749999996,
+ 152.3771670000001,
+ 167.14108299999998,
+ 150.80983399999968,
+ 167.6104580000001
+ ],
+ "medianMs": 159.99758300000008,
+ "p95Ms": 169.9763750000002,
+ "localCSSBytes": 209
+ }
+ ],
+ "note": "One CSS Module with referenced base/mode variables. Baseline incorrectly copies variables to the component; current publishes global resources. Local bytes exclude those assets. This measures the loader, not full HMR."
+}
diff --git a/parity/sizing-next-module-performance-2.json b/parity/sizing-next-module-performance-2.json
new file mode 100644
index 000000000..46e42c9ee
--- /dev/null
+++ b/parity/sizing-next-module-performance-2.json
@@ -0,0 +1,54 @@
+{
+ "rounds": 18,
+ "warmup": 3,
+ "alternatingOrder": true,
+ "results": [
+ {
+ "label": "before",
+ "samples": [
+ 73.20900000000006,
+ 75.44424999999978,
+ 78.00712500000009,
+ 80.3586670000002,
+ 75.72012500000028,
+ 79.57387500000004,
+ 79.63358299999982,
+ 78.3664160000003,
+ 75.33329200000026,
+ 76.46279200000026,
+ 78.26800000000003,
+ 76.49220800000012,
+ 78.92829200000006,
+ 76.24712499999941,
+ 80.12104200000067
+ ],
+ "medianMs": 78.00712500000009,
+ "p95Ms": 80.3586670000002,
+ "localCSSBytes": 116
+ },
+ {
+ "label": "after",
+ "samples": [
+ 159.94283300000006,
+ 157.5797500000001,
+ 174.5719590000001,
+ 166.57616699999994,
+ 169.95266700000002,
+ 163.8985829999997,
+ 178.38991700000042,
+ 165.7742500000004,
+ 182.281833,
+ 157.830375,
+ 176.63279199999988,
+ 154.3839579999999,
+ 171.35720899999978,
+ 161.03520899999967,
+ 175.28420800000004
+ ],
+ "medianMs": 166.57616699999994,
+ "p95Ms": 182.281833,
+ "localCSSBytes": 209
+ }
+ ],
+ "note": "One CSS Module with referenced base/mode variables. Baseline incorrectly copies variables to the component; current publishes global resources. Local bytes exclude those assets. This measures the loader, not full HMR."
+}
diff --git a/parity/sizing-next-static-before.json b/parity/sizing-next-static-before.json
new file mode 100644
index 000000000..5cdbd6fc0
--- /dev/null
+++ b/parity/sizing-next-static-before.json
@@ -0,0 +1,382 @@
+{
+ "version": 1,
+ "module": "file:///tmp/master-resolution-sizing-baseline-20260925-221632/workspace/packages/next/dist/static.js",
+ "node": "v24.20.0",
+ "machine": {
+ "platform": "darwin",
+ "arch": "arm64",
+ "cpu": "Apple M3 Max"
+ },
+ "rounds": 10,
+ "warmup": 5,
+ "cases": [
+ "unchanged",
+ "edited",
+ "burst"
+ ],
+ "notes": [
+ "Warm sessions, tiny TSX files, 100 distinct shared utilities; filesystem growth is isolated from CSS rule count.",
+ "Burst sends ten concurrent module notifications for one edit.",
+ "Instrumentation is included on both sides; lock acquisition includes open latency and contention, not time holding the lock.",
+ "These are Master CSS static pipeline calls, not end-to-end Next HMR."
+ ],
+ "results": [
+ {
+ "size": 100,
+ "summary": {
+ "unchanged": {
+ "reads": {
+ "median": 211,
+ "p95": 211
+ },
+ "sourceReads": {
+ "median": 200,
+ "p95": 200
+ },
+ "globs": {
+ "median": 2,
+ "p95": 2
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "lockAcquisitionMs": {
+ "median": 0.06933400000025358,
+ "p95": 0.16079100000024482
+ },
+ "totalMs": {
+ "median": 48.083250000000135,
+ "p95": 48.95137499999964
+ }
+ },
+ "edited": {
+ "reads": {
+ "median": 418,
+ "p95": 418
+ },
+ "sourceReads": {
+ "median": 400,
+ "p95": 400
+ },
+ "globs": {
+ "median": 4,
+ "p95": 4
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 2,
+ "p95": 2
+ },
+ "composeMs": {
+ "median": 54.33845900000006,
+ "p95": 57.72491699999955
+ },
+ "lockAcquisitionMs": {
+ "median": 0.0785000000000764,
+ "p95": 0.08387500000026193
+ },
+ "totalMs": {
+ "median": 149.9614160000001,
+ "p95": 155.64891699999998
+ }
+ },
+ "burst": {
+ "reads": {
+ "median": 418,
+ "p95": 418
+ },
+ "sourceReads": {
+ "median": 400,
+ "p95": 400
+ },
+ "globs": {
+ "median": 4,
+ "p95": 4
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 2,
+ "p95": 2
+ },
+ "composeMs": {
+ "median": 57.03629099999989,
+ "p95": 59.239959
+ },
+ "lockAcquisitionMs": {
+ "median": 0.08399999999983265,
+ "p95": 0.10166700000036144
+ },
+ "totalMs": {
+ "median": 172.43962499999998,
+ "p95": 176.6063750000003
+ }
+ }
+ }
+ },
+ {
+ "size": 1000,
+ "summary": {
+ "unchanged": {
+ "reads": {
+ "median": 2011,
+ "p95": 2011
+ },
+ "sourceReads": {
+ "median": 2000,
+ "p95": 2000
+ },
+ "globs": {
+ "median": 2,
+ "p95": 2
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "lockAcquisitionMs": {
+ "median": 0.06383300000015879,
+ "p95": 0.07241699999940465
+ },
+ "totalMs": {
+ "median": 373.9961660000008,
+ "p95": 385.9407080000001
+ }
+ },
+ "edited": {
+ "reads": {
+ "median": 4018,
+ "p95": 4018
+ },
+ "sourceReads": {
+ "median": 4000,
+ "p95": 4000
+ },
+ "globs": {
+ "median": 4,
+ "p95": 4
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 2,
+ "p95": 2
+ },
+ "composeMs": {
+ "median": 57.46087499999703,
+ "p95": 60.935999999999694
+ },
+ "lockAcquisitionMs": {
+ "median": 0.09558300000026065,
+ "p95": 0.10375000000203727
+ },
+ "totalMs": {
+ "median": 804.6938750000008,
+ "p95": 853.5015000000021
+ }
+ },
+ "burst": {
+ "reads": {
+ "median": 4018,
+ "p95": 4018
+ },
+ "sourceReads": {
+ "median": 4000,
+ "p95": 4000
+ },
+ "globs": {
+ "median": 4,
+ "p95": 4
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 2,
+ "p95": 2
+ },
+ "composeMs": {
+ "median": 58.877832999998645,
+ "p95": 60.28491699999722
+ },
+ "lockAcquisitionMs": {
+ "median": 0.0928749999984575,
+ "p95": 0.10720799999944575
+ },
+ "totalMs": {
+ "median": 837.3752920000006,
+ "p95": 873.4383330000019
+ }
+ }
+ }
+ },
+ {
+ "size": 5000,
+ "summary": {
+ "unchanged": {
+ "reads": {
+ "median": 10011,
+ "p95": 10011
+ },
+ "sourceReads": {
+ "median": 10000,
+ "p95": 10000
+ },
+ "globs": {
+ "median": 2,
+ "p95": 2
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "lockAcquisitionMs": {
+ "median": 0.08445899999060202,
+ "p95": 0.0942499999946449
+ },
+ "totalMs": {
+ "median": 1855.3985000000102,
+ "p95": 2092.389083999995
+ }
+ },
+ "edited": {
+ "reads": {
+ "median": 20018,
+ "p95": 20018
+ },
+ "sourceReads": {
+ "median": 20000,
+ "p95": 20000
+ },
+ "globs": {
+ "median": 4,
+ "p95": 4
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 2,
+ "p95": 2
+ },
+ "composeMs": {
+ "median": 65.0872490000038,
+ "p95": 65.94233399999212
+ },
+ "lockAcquisitionMs": {
+ "median": 0.10595800000010058,
+ "p95": 0.14808300000731833
+ },
+ "totalMs": {
+ "median": 3794.6221249999944,
+ "p95": 4220.814958000003
+ }
+ },
+ "burst": {
+ "reads": {
+ "median": 20018,
+ "p95": 20018
+ },
+ "sourceReads": {
+ "median": 20000,
+ "p95": 20000
+ },
+ "globs": {
+ "median": 4,
+ "p95": 4
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 2,
+ "p95": 2
+ },
+ "composeMs": {
+ "median": 63.625792000006186,
+ "p95": 65.33308300000499
+ },
+ "lockAcquisitionMs": {
+ "median": 0.09570799999346491,
+ "p95": 0.11925000000337604
+ },
+ "totalMs": {
+ "median": 3924.1057909999945,
+ "p95": 4279.690124999994
+ }
+ }
+ }
+ }
+ ]
+}
diff --git a/parity/sizing-next-static.json b/parity/sizing-next-static.json
new file mode 100644
index 000000000..7d5c12ad4
--- /dev/null
+++ b/parity/sizing-next-static.json
@@ -0,0 +1,382 @@
+{
+ "version": 1,
+ "module": "file:///Users/aron/master/css/packages/next/dist/static.js",
+ "node": "v24.20.0",
+ "machine": {
+ "platform": "darwin",
+ "arch": "arm64",
+ "cpu": "Apple M3 Max"
+ },
+ "rounds": 10,
+ "warmup": 5,
+ "cases": [
+ "unchanged",
+ "edited",
+ "burst"
+ ],
+ "notes": [
+ "Warm sessions, tiny TSX files, 100 distinct shared utilities; filesystem growth is isolated from CSS rule count.",
+ "Burst sends ten concurrent module notifications for one edit.",
+ "Instrumentation is included on both sides; lock acquisition includes open latency and contention, not time holding the lock.",
+ "These are Master CSS static pipeline calls, not end-to-end Next HMR."
+ ],
+ "results": [
+ {
+ "size": 100,
+ "summary": {
+ "unchanged": {
+ "reads": {
+ "median": 211,
+ "p95": 211
+ },
+ "sourceReads": {
+ "median": 200,
+ "p95": 200
+ },
+ "globs": {
+ "median": 2,
+ "p95": 2
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "lockAcquisitionMs": {
+ "median": 0.1334580000002461,
+ "p95": 0.24662500000022192
+ },
+ "totalMs": {
+ "median": 48.28779200000008,
+ "p95": 48.98420900000019
+ }
+ },
+ "edited": {
+ "reads": {
+ "median": 418,
+ "p95": 418
+ },
+ "sourceReads": {
+ "median": 400,
+ "p95": 400
+ },
+ "globs": {
+ "median": 4,
+ "p95": 4
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 2,
+ "p95": 2
+ },
+ "composeMs": {
+ "median": 56.685875000000124,
+ "p95": 59.57141599999977
+ },
+ "lockAcquisitionMs": {
+ "median": 0.07970800000020972,
+ "p95": 0.09074999999984357
+ },
+ "totalMs": {
+ "median": 153.76974999999993,
+ "p95": 160.14704100000017
+ }
+ },
+ "burst": {
+ "reads": {
+ "median": 418,
+ "p95": 418
+ },
+ "sourceReads": {
+ "median": 400,
+ "p95": 400
+ },
+ "globs": {
+ "median": 4,
+ "p95": 4
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 2,
+ "p95": 2
+ },
+ "composeMs": {
+ "median": 56.82845899999984,
+ "p95": 57.22716700000001
+ },
+ "lockAcquisitionMs": {
+ "median": 0.09887499999967986,
+ "p95": 0.11662500000011278
+ },
+ "totalMs": {
+ "median": 172.7661250000001,
+ "p95": 175.49000000000024
+ }
+ }
+ }
+ },
+ {
+ "size": 1000,
+ "summary": {
+ "unchanged": {
+ "reads": {
+ "median": 2011,
+ "p95": 2011
+ },
+ "sourceReads": {
+ "median": 2000,
+ "p95": 2000
+ },
+ "globs": {
+ "median": 2,
+ "p95": 2
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "lockAcquisitionMs": {
+ "median": 0.07666700000117999,
+ "p95": 0.08591700000033597
+ },
+ "totalMs": {
+ "median": 365.3471669999999,
+ "p95": 379.9303329999966
+ }
+ },
+ "edited": {
+ "reads": {
+ "median": 4018,
+ "p95": 4018
+ },
+ "sourceReads": {
+ "median": 4000,
+ "p95": 4000
+ },
+ "globs": {
+ "median": 4,
+ "p95": 4
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 2,
+ "p95": 2
+ },
+ "composeMs": {
+ "median": 60.049833000000945,
+ "p95": 62.085416999998415
+ },
+ "lockAcquisitionMs": {
+ "median": 0.08983400000033726,
+ "p95": 0.10883300000205054
+ },
+ "totalMs": {
+ "median": 816.0483339999992,
+ "p95": 839.3431660000024
+ }
+ },
+ "burst": {
+ "reads": {
+ "median": 4018,
+ "p95": 4018
+ },
+ "sourceReads": {
+ "median": 4000,
+ "p95": 4000
+ },
+ "globs": {
+ "median": 4,
+ "p95": 4
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 2,
+ "p95": 2
+ },
+ "composeMs": {
+ "median": 59.7354579999992,
+ "p95": 60.90799999999945
+ },
+ "lockAcquisitionMs": {
+ "median": 0.10062500000276486,
+ "p95": 0.11845800000082818
+ },
+ "totalMs": {
+ "median": 831.9469170000011,
+ "p95": 855.7923340000016
+ }
+ }
+ }
+ },
+ {
+ "size": 5000,
+ "summary": {
+ "unchanged": {
+ "reads": {
+ "median": 10011,
+ "p95": 10011
+ },
+ "sourceReads": {
+ "median": 10000,
+ "p95": 10000
+ },
+ "globs": {
+ "median": 2,
+ "p95": 2
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "lockAcquisitionMs": {
+ "median": 0.07583299999532755,
+ "p95": 0.0871670000051381
+ },
+ "totalMs": {
+ "median": 1871.0755409999983,
+ "p95": 1907.3184160000092
+ }
+ },
+ "edited": {
+ "reads": {
+ "median": 20018,
+ "p95": 20018
+ },
+ "sourceReads": {
+ "median": 20000,
+ "p95": 20000
+ },
+ "globs": {
+ "median": 4,
+ "p95": 4
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 2,
+ "p95": 2
+ },
+ "composeMs": {
+ "median": 62.71870799998578,
+ "p95": 64.86237600000459
+ },
+ "lockAcquisitionMs": {
+ "median": 0.10837500001071021,
+ "p95": 0.11691699999209959
+ },
+ "totalMs": {
+ "median": 3804.644790999999,
+ "p95": 3833.63904200001
+ }
+ },
+ "burst": {
+ "reads": {
+ "median": 20018,
+ "p95": 20018
+ },
+ "sourceReads": {
+ "median": 20000,
+ "p95": 20000
+ },
+ "globs": {
+ "median": 4,
+ "p95": 4
+ },
+ "registerCalls": {
+ "median": 0,
+ "p95": 0
+ },
+ "registerMs": {
+ "median": 0,
+ "p95": 0
+ },
+ "composeCalls": {
+ "median": 2,
+ "p95": 2
+ },
+ "composeMs": {
+ "median": 64.03120799998578,
+ "p95": 66.39441700000316
+ },
+ "lockAcquisitionMs": {
+ "median": 0.08974999999918509,
+ "p95": 0.12054200000420678
+ },
+ "totalMs": {
+ "median": 3897.9092919999966,
+ "p95": 3941.430333000011
+ }
+ }
+ }
+ }
+ ]
+}
diff --git a/parity/sizing-performance-1.json b/parity/sizing-performance-1.json
new file mode 100644
index 000000000..799161a89
--- /dev/null
+++ b/parity/sizing-performance-1.json
@@ -0,0 +1,468 @@
+{
+ "version": 1,
+ "baselineHead": "2079d665a933c0d666db54a5c8328de52cd865ba",
+ "node": "v24.20.0",
+ "platform": "darwin",
+ "arch": "arm64",
+ "cpu": "Apple M3 Max",
+ "rounds": 45,
+ "warmup": 10,
+ "alternatingOrder": true,
+ "bindingProfile": "release",
+ "compression": "individual delivered assets; gzip level 9 and Brotli defaults",
+ "workload": [
+ "p:0px@media((width>=50rem))",
+ "width:1px",
+ "p:2px",
+ "width:3px@media((width>=50rem))",
+ "p:4px",
+ "width:5px",
+ "p:6px@media((width>=50rem))",
+ "width:7px",
+ "p:8px",
+ "width:9px@media((width>=50rem))",
+ "p:10px",
+ "width:11px",
+ "p:12px@media((width>=50rem))",
+ "width:13px",
+ "p:14px",
+ "width:15px@media((width>=50rem))",
+ "p:16px",
+ "width:17px",
+ "p:18px@media((width>=50rem))",
+ "width:19px",
+ "p:20px",
+ "width:21px@media((width>=50rem))",
+ "p:22px",
+ "width:23px",
+ "p:24px@media((width>=50rem))",
+ "width:25px",
+ "p:26px",
+ "width:27px@media((width>=50rem))",
+ "p:28px",
+ "width:29px",
+ "p:30px@media((width>=50rem))",
+ "width:31px",
+ "p:32px",
+ "width:33px@media((width>=50rem))",
+ "p:34px",
+ "width:35px",
+ "p:36px@media((width>=50rem))",
+ "width:37px",
+ "p:38px",
+ "width:39px@media((width>=50rem))",
+ "p:40px",
+ "width:41px",
+ "p:42px@media((width>=50rem))",
+ "width:43px",
+ "p:44px",
+ "width:45px@media((width>=50rem))",
+ "p:46px",
+ "width:47px",
+ "p:48px@media((width>=50rem))",
+ "width:49px",
+ "p:50px",
+ "width:51px@media((width>=50rem))",
+ "p:52px",
+ "width:53px",
+ "p:54px@media((width>=50rem))",
+ "width:55px",
+ "p:56px",
+ "width:57px@media((width>=50rem))",
+ "p:58px",
+ "width:59px",
+ "p:60px@media((width>=50rem))",
+ "width:61px",
+ "p:62px",
+ "width:63px@media((width>=50rem))",
+ "p:64px",
+ "width:65px",
+ "p:66px@media((width>=50rem))",
+ "width:67px",
+ "p:68px",
+ "width:69px@media((width>=50rem))",
+ "p:70px",
+ "width:71px",
+ "p:72px@media((width>=50rem))",
+ "width:73px",
+ "p:74px",
+ "width:75px@media((width>=50rem))",
+ "p:76px",
+ "width:77px",
+ "p:78px@media((width>=50rem))",
+ "width:79px",
+ "p:80px",
+ "width:81px@media((width>=50rem))",
+ "p:82px",
+ "width:83px",
+ "p:84px@media((width>=50rem))",
+ "width:85px",
+ "p:86px",
+ "width:87px@media((width>=50rem))",
+ "p:88px",
+ "width:89px",
+ "p:90px@media((width>=50rem))",
+ "width:91px",
+ "p:92px",
+ "width:93px@media((width>=50rem))",
+ "p:94px",
+ "width:95px",
+ "p:96px@media((width>=50rem))",
+ "width:97px",
+ "p:98px",
+ "width:99px@media((width>=50rem))",
+ "p:100px",
+ "width:101px",
+ "p:102px@media((width>=50rem))",
+ "width:103px",
+ "p:104px",
+ "width:105px@media((width>=50rem))",
+ "p:106px",
+ "width:107px",
+ "p:108px@media((width>=50rem))",
+ "width:109px",
+ "p:110px",
+ "width:111px@media((width>=50rem))",
+ "p:112px",
+ "width:113px",
+ "p:114px@media((width>=50rem))",
+ "width:115px",
+ "p:116px",
+ "width:117px@media((width>=50rem))",
+ "p:118px",
+ "width:119px",
+ "p:120px@media((width>=50rem))",
+ "width:121px",
+ "p:122px",
+ "width:123px@media((width>=50rem))",
+ "p:124px",
+ "width:125px",
+ "p:126px@media((width>=50rem))",
+ "width:127px",
+ "p:128px",
+ "width:129px@media((width>=50rem))",
+ "p:130px",
+ "width:131px",
+ "p:132px@media((width>=50rem))",
+ "width:133px",
+ "p:134px",
+ "width:135px@media((width>=50rem))",
+ "p:136px",
+ "width:137px",
+ "p:138px@media((width>=50rem))",
+ "width:139px",
+ "p:140px",
+ "width:141px@media((width>=50rem))",
+ "p:142px",
+ "width:143px",
+ "p:144px@media((width>=50rem))",
+ "width:145px",
+ "p:146px",
+ "width:147px@media((width>=50rem))",
+ "p:148px",
+ "width:149px",
+ "p:150px@media((width>=50rem))",
+ "width:151px",
+ "p:152px",
+ "width:153px@media((width>=50rem))",
+ "p:154px",
+ "width:155px",
+ "p:156px@media((width>=50rem))",
+ "width:157px",
+ "p:158px",
+ "width:159px@media((width>=50rem))",
+ "p:160px",
+ "width:161px",
+ "p:162px@media((width>=50rem))",
+ "width:163px",
+ "p:164px",
+ "width:165px@media((width>=50rem))",
+ "p:166px",
+ "width:167px",
+ "p:168px@media((width>=50rem))",
+ "width:169px",
+ "p:170px",
+ "width:171px@media((width>=50rem))",
+ "p:172px",
+ "width:173px",
+ "p:174px@media((width>=50rem))",
+ "width:175px",
+ "p:176px",
+ "width:177px@media((width>=50rem))",
+ "p:178px",
+ "width:179px",
+ "p:180px@media((width>=50rem))",
+ "width:181px",
+ "p:182px",
+ "width:183px@media((width>=50rem))",
+ "p:184px",
+ "width:185px",
+ "p:186px@media((width>=50rem))",
+ "width:187px",
+ "p:188px",
+ "width:189px@media((width>=50rem))",
+ "p:190px",
+ "width:191px",
+ "p:192px@media((width>=50rem))",
+ "width:193px",
+ "p:194px",
+ "width:195px@media((width>=50rem))",
+ "p:196px",
+ "width:197px",
+ "p:198px@media((width>=50rem))",
+ "width:199px",
+ "p:200px",
+ "width:201px@media((width>=50rem))",
+ "p:202px",
+ "width:203px",
+ "p:204px@media((width>=50rem))",
+ "width:205px",
+ "p:206px",
+ "width:207px@media((width>=50rem))",
+ "p:208px",
+ "width:209px",
+ "p:210px@media((width>=50rem))",
+ "width:211px",
+ "p:212px",
+ "width:213px@media((width>=50rem))",
+ "p:214px",
+ "width:215px",
+ "p:216px@media((width>=50rem))",
+ "width:217px",
+ "p:218px",
+ "width:219px@media((width>=50rem))",
+ "p:220px",
+ "width:221px",
+ "p:222px@media((width>=50rem))",
+ "width:223px",
+ "p:224px",
+ "width:225px@media((width>=50rem))",
+ "p:226px",
+ "width:227px",
+ "p:228px@media((width>=50rem))",
+ "width:229px",
+ "p:230px",
+ "width:231px@media((width>=50rem))",
+ "p:232px",
+ "width:233px",
+ "p:234px@media((width>=50rem))",
+ "width:235px",
+ "p:236px",
+ "width:237px@media((width>=50rem))",
+ "p:238px",
+ "width:239px",
+ "p-md@media((width>=50rem))",
+ "font-mono",
+ "text-center:hover",
+ "fg-red/0.5",
+ "block:focus-visible"
+ ],
+ "before": {
+ "binding": {
+ "bindingAbiVersion": 12,
+ "packageVersion": "0.0.0",
+ "manifestVersion": 1,
+ "languageVersion": 3,
+ "hydrationManifestVersion": 1,
+ "engineTransitionVersion": 1,
+ "validatorBatchVersion": 3,
+ "diagnosticsReportVersion": 3,
+ "lintBatchVersion": 1,
+ "languageBatchVersion": 4,
+ "lexerBatchVersion": 1,
+ "sourceBatchVersion": 2,
+ "target": "aarch64-apple-darwin",
+ "surface": "native",
+ "features": [
+ "compiler",
+ "diagnostics",
+ "engine",
+ "language",
+ "lexer",
+ "lint",
+ "project",
+ "render",
+ "scanner",
+ "source",
+ "validator"
+ ]
+ },
+ "bindingSha256": "77de6dfd3d4040c79349eb666783b7f6ea5de86fe12af89608e4ba5799f20067",
+ "statistics": {
+ "create": {
+ "medianMs": 16.68770799999993,
+ "p95Ms": 17.489250000000084
+ },
+ "match245": {
+ "medianMs": 1.7384579999998095,
+ "p95Ms": 1.8597500000000764
+ },
+ "generate245": {
+ "medianMs": 1.512583000000177,
+ "p95Ms": 1.8354589999999007
+ },
+ "cache245": {
+ "medianMs": 0.023916999999528343,
+ "p95Ms": 0.03029100000003382
+ },
+ "deleteInsert245": {
+ "medianMs": 1.6187499999996362,
+ "p95Ms": 2.0325420000008307
+ },
+ "modeBranches1": {
+ "medianMs": 0.7081670000006852,
+ "p95Ms": 0.8158329999996567
+ },
+ "modeBranches8": {
+ "medianMs": 5.1472499999999854,
+ "p95Ms": 6.121790999999575
+ },
+ "modeBranches32": {
+ "medianMs": 27.17645900000025,
+ "p95Ms": 28.29837499999985
+ }
+ },
+ "artifacts": {
+ "runtimeJS": {
+ "raw": 48219,
+ "gzip": 13333,
+ "brotli": 12025,
+ "sha256": "db2168b924ab805748c95860f44ad94f43d7675f31a424b3d7fc2c1efa907b00"
+ },
+ "engineWasm": {
+ "raw": 1041773,
+ "gzip": 323710,
+ "brotli": 246702,
+ "sha256": "623c831e6837355d19bd329ac6f42ce5374fb921437da7f53f82f0f1f5e99e34"
+ },
+ "manifest": {
+ "raw": 91526,
+ "gzip": 12930,
+ "brotli": 10280,
+ "sha256": "0e070a1a24d0c347eb9129a98e9249a8cb1729258125ffa556c4d145561c7127"
+ },
+ "hydration": {
+ "raw": 74789,
+ "gzip": 5303,
+ "brotli": 2754,
+ "sha256": "2e3b939142c355f2a5ebf6bcf0b4858fc8c99e85a0cf7234c93a34a5912a9161"
+ }
+ },
+ "runtimeTotal": {
+ "raw": 1256307,
+ "gzip": 355276,
+ "brotli": 271761
+ },
+ "cssDigest": "b7e1a2ffefe138ca16d3bf37002a1c2c37a636e096a9254b3d14a5671ce02f8c",
+ "cssBytes": 10844
+ },
+ "after": {
+ "binding": {
+ "bindingAbiVersion": 13,
+ "packageVersion": "0.0.0",
+ "manifestVersion": 1,
+ "languageVersion": 3,
+ "hydrationManifestVersion": 1,
+ "engineTransitionVersion": 1,
+ "validatorBatchVersion": 3,
+ "diagnosticsReportVersion": 3,
+ "lintBatchVersion": 1,
+ "languageBatchVersion": 4,
+ "lexerBatchVersion": 1,
+ "sourceBatchVersion": 2,
+ "target": "aarch64-apple-darwin",
+ "surface": "native",
+ "features": [
+ "compiler",
+ "diagnostics",
+ "engine",
+ "language",
+ "lexer",
+ "lint",
+ "project",
+ "render",
+ "scanner",
+ "source",
+ "validator"
+ ]
+ },
+ "bindingSha256": "272e638cc213e0302fa87daf8a559bf3bb53d86bebbb8c296c65dcc1569ac6e0",
+ "statistics": {
+ "create": {
+ "medianMs": 16.55004199999985,
+ "p95Ms": 17.812957999999526
+ },
+ "match245": {
+ "medianMs": 1.7377080000005662,
+ "p95Ms": 1.899000000000342
+ },
+ "generate245": {
+ "medianMs": 1.5095409999994445,
+ "p95Ms": 1.903874999999971
+ },
+ "cache245": {
+ "medianMs": 0.02420799999981682,
+ "p95Ms": 0.04033400000025722
+ },
+ "deleteInsert245": {
+ "medianMs": 1.5960000000004584,
+ "p95Ms": 1.8980000000001382
+ },
+ "modeBranches1": {
+ "medianMs": 0.6912499999998545,
+ "p95Ms": 0.8001659999999902
+ },
+ "modeBranches8": {
+ "medianMs": 5.102458000000297,
+ "p95Ms": 5.720417000000452
+ },
+ "modeBranches32": {
+ "medianMs": 27.134541999999783,
+ "p95Ms": 29.218083000000206
+ }
+ },
+ "artifacts": {
+ "runtimeJS": {
+ "raw": 48219,
+ "gzip": 13332,
+ "brotli": 12027,
+ "sha256": "4f664819ec30a93542b5bac0d747fdb88ae28fc02ebcea0d0843fa2826cf3ffa"
+ },
+ "engineWasm": {
+ "raw": 1044735,
+ "gzip": 325055,
+ "brotli": 247306,
+ "sha256": "347266c7e1691deb6b65cff474fa3b8d230de94130e5e43d5e36e118977737ab"
+ },
+ "manifest": {
+ "raw": 90403,
+ "gzip": 12832,
+ "brotli": 10188,
+ "sha256": "63a0e170f57fc3cb6f8b831f2d072f803290ec991b1f020ee389e36dcc4c4e19"
+ },
+ "hydration": {
+ "raw": 74789,
+ "gzip": 5303,
+ "brotli": 2754,
+ "sha256": "2e3b939142c355f2a5ebf6bcf0b4858fc8c99e85a0cf7234c93a34a5912a9161"
+ }
+ },
+ "runtimeTotal": {
+ "raw": 1258146,
+ "gzip": 356522,
+ "brotli": 272275
+ },
+ "cssDigest": "b7e1a2ffefe138ca16d3bf37002a1c2c37a636e096a9254b3d14a5671ce02f8c",
+ "cssBytes": 10844
+ },
+ "ratios": {
+ "create": -0.008249545114288992,
+ "match245": -0.0004314168068733082,
+ "generate245": -0.002011129307107229,
+ "cache245": 0.01216707782306381,
+ "deleteInsert245": -0.014054054053549314,
+ "modeBranches1": -0.023888433096733386,
+ "modeBranches8": -0.00870212249253266,
+ "modeBranches32": -0.0015424010906081032
+ }
+}
diff --git a/parity/sizing-performance-2.json b/parity/sizing-performance-2.json
new file mode 100644
index 000000000..37b7dc5ca
--- /dev/null
+++ b/parity/sizing-performance-2.json
@@ -0,0 +1,468 @@
+{
+ "version": 1,
+ "baselineHead": "2079d665a933c0d666db54a5c8328de52cd865ba",
+ "node": "v24.20.0",
+ "platform": "darwin",
+ "arch": "arm64",
+ "cpu": "Apple M3 Max",
+ "rounds": 45,
+ "warmup": 10,
+ "alternatingOrder": true,
+ "bindingProfile": "release",
+ "compression": "individual delivered assets; gzip level 9 and Brotli defaults",
+ "workload": [
+ "p:0px@media((width>=50rem))",
+ "width:1px",
+ "p:2px",
+ "width:3px@media((width>=50rem))",
+ "p:4px",
+ "width:5px",
+ "p:6px@media((width>=50rem))",
+ "width:7px",
+ "p:8px",
+ "width:9px@media((width>=50rem))",
+ "p:10px",
+ "width:11px",
+ "p:12px@media((width>=50rem))",
+ "width:13px",
+ "p:14px",
+ "width:15px@media((width>=50rem))",
+ "p:16px",
+ "width:17px",
+ "p:18px@media((width>=50rem))",
+ "width:19px",
+ "p:20px",
+ "width:21px@media((width>=50rem))",
+ "p:22px",
+ "width:23px",
+ "p:24px@media((width>=50rem))",
+ "width:25px",
+ "p:26px",
+ "width:27px@media((width>=50rem))",
+ "p:28px",
+ "width:29px",
+ "p:30px@media((width>=50rem))",
+ "width:31px",
+ "p:32px",
+ "width:33px@media((width>=50rem))",
+ "p:34px",
+ "width:35px",
+ "p:36px@media((width>=50rem))",
+ "width:37px",
+ "p:38px",
+ "width:39px@media((width>=50rem))",
+ "p:40px",
+ "width:41px",
+ "p:42px@media((width>=50rem))",
+ "width:43px",
+ "p:44px",
+ "width:45px@media((width>=50rem))",
+ "p:46px",
+ "width:47px",
+ "p:48px@media((width>=50rem))",
+ "width:49px",
+ "p:50px",
+ "width:51px@media((width>=50rem))",
+ "p:52px",
+ "width:53px",
+ "p:54px@media((width>=50rem))",
+ "width:55px",
+ "p:56px",
+ "width:57px@media((width>=50rem))",
+ "p:58px",
+ "width:59px",
+ "p:60px@media((width>=50rem))",
+ "width:61px",
+ "p:62px",
+ "width:63px@media((width>=50rem))",
+ "p:64px",
+ "width:65px",
+ "p:66px@media((width>=50rem))",
+ "width:67px",
+ "p:68px",
+ "width:69px@media((width>=50rem))",
+ "p:70px",
+ "width:71px",
+ "p:72px@media((width>=50rem))",
+ "width:73px",
+ "p:74px",
+ "width:75px@media((width>=50rem))",
+ "p:76px",
+ "width:77px",
+ "p:78px@media((width>=50rem))",
+ "width:79px",
+ "p:80px",
+ "width:81px@media((width>=50rem))",
+ "p:82px",
+ "width:83px",
+ "p:84px@media((width>=50rem))",
+ "width:85px",
+ "p:86px",
+ "width:87px@media((width>=50rem))",
+ "p:88px",
+ "width:89px",
+ "p:90px@media((width>=50rem))",
+ "width:91px",
+ "p:92px",
+ "width:93px@media((width>=50rem))",
+ "p:94px",
+ "width:95px",
+ "p:96px@media((width>=50rem))",
+ "width:97px",
+ "p:98px",
+ "width:99px@media((width>=50rem))",
+ "p:100px",
+ "width:101px",
+ "p:102px@media((width>=50rem))",
+ "width:103px",
+ "p:104px",
+ "width:105px@media((width>=50rem))",
+ "p:106px",
+ "width:107px",
+ "p:108px@media((width>=50rem))",
+ "width:109px",
+ "p:110px",
+ "width:111px@media((width>=50rem))",
+ "p:112px",
+ "width:113px",
+ "p:114px@media((width>=50rem))",
+ "width:115px",
+ "p:116px",
+ "width:117px@media((width>=50rem))",
+ "p:118px",
+ "width:119px",
+ "p:120px@media((width>=50rem))",
+ "width:121px",
+ "p:122px",
+ "width:123px@media((width>=50rem))",
+ "p:124px",
+ "width:125px",
+ "p:126px@media((width>=50rem))",
+ "width:127px",
+ "p:128px",
+ "width:129px@media((width>=50rem))",
+ "p:130px",
+ "width:131px",
+ "p:132px@media((width>=50rem))",
+ "width:133px",
+ "p:134px",
+ "width:135px@media((width>=50rem))",
+ "p:136px",
+ "width:137px",
+ "p:138px@media((width>=50rem))",
+ "width:139px",
+ "p:140px",
+ "width:141px@media((width>=50rem))",
+ "p:142px",
+ "width:143px",
+ "p:144px@media((width>=50rem))",
+ "width:145px",
+ "p:146px",
+ "width:147px@media((width>=50rem))",
+ "p:148px",
+ "width:149px",
+ "p:150px@media((width>=50rem))",
+ "width:151px",
+ "p:152px",
+ "width:153px@media((width>=50rem))",
+ "p:154px",
+ "width:155px",
+ "p:156px@media((width>=50rem))",
+ "width:157px",
+ "p:158px",
+ "width:159px@media((width>=50rem))",
+ "p:160px",
+ "width:161px",
+ "p:162px@media((width>=50rem))",
+ "width:163px",
+ "p:164px",
+ "width:165px@media((width>=50rem))",
+ "p:166px",
+ "width:167px",
+ "p:168px@media((width>=50rem))",
+ "width:169px",
+ "p:170px",
+ "width:171px@media((width>=50rem))",
+ "p:172px",
+ "width:173px",
+ "p:174px@media((width>=50rem))",
+ "width:175px",
+ "p:176px",
+ "width:177px@media((width>=50rem))",
+ "p:178px",
+ "width:179px",
+ "p:180px@media((width>=50rem))",
+ "width:181px",
+ "p:182px",
+ "width:183px@media((width>=50rem))",
+ "p:184px",
+ "width:185px",
+ "p:186px@media((width>=50rem))",
+ "width:187px",
+ "p:188px",
+ "width:189px@media((width>=50rem))",
+ "p:190px",
+ "width:191px",
+ "p:192px@media((width>=50rem))",
+ "width:193px",
+ "p:194px",
+ "width:195px@media((width>=50rem))",
+ "p:196px",
+ "width:197px",
+ "p:198px@media((width>=50rem))",
+ "width:199px",
+ "p:200px",
+ "width:201px@media((width>=50rem))",
+ "p:202px",
+ "width:203px",
+ "p:204px@media((width>=50rem))",
+ "width:205px",
+ "p:206px",
+ "width:207px@media((width>=50rem))",
+ "p:208px",
+ "width:209px",
+ "p:210px@media((width>=50rem))",
+ "width:211px",
+ "p:212px",
+ "width:213px@media((width>=50rem))",
+ "p:214px",
+ "width:215px",
+ "p:216px@media((width>=50rem))",
+ "width:217px",
+ "p:218px",
+ "width:219px@media((width>=50rem))",
+ "p:220px",
+ "width:221px",
+ "p:222px@media((width>=50rem))",
+ "width:223px",
+ "p:224px",
+ "width:225px@media((width>=50rem))",
+ "p:226px",
+ "width:227px",
+ "p:228px@media((width>=50rem))",
+ "width:229px",
+ "p:230px",
+ "width:231px@media((width>=50rem))",
+ "p:232px",
+ "width:233px",
+ "p:234px@media((width>=50rem))",
+ "width:235px",
+ "p:236px",
+ "width:237px@media((width>=50rem))",
+ "p:238px",
+ "width:239px",
+ "p-md@media((width>=50rem))",
+ "font-mono",
+ "text-center:hover",
+ "fg-red/0.5",
+ "block:focus-visible"
+ ],
+ "before": {
+ "binding": {
+ "bindingAbiVersion": 12,
+ "packageVersion": "0.0.0",
+ "manifestVersion": 1,
+ "languageVersion": 3,
+ "hydrationManifestVersion": 1,
+ "engineTransitionVersion": 1,
+ "validatorBatchVersion": 3,
+ "diagnosticsReportVersion": 3,
+ "lintBatchVersion": 1,
+ "languageBatchVersion": 4,
+ "lexerBatchVersion": 1,
+ "sourceBatchVersion": 2,
+ "target": "aarch64-apple-darwin",
+ "surface": "native",
+ "features": [
+ "compiler",
+ "diagnostics",
+ "engine",
+ "language",
+ "lexer",
+ "lint",
+ "project",
+ "render",
+ "scanner",
+ "source",
+ "validator"
+ ]
+ },
+ "bindingSha256": "77de6dfd3d4040c79349eb666783b7f6ea5de86fe12af89608e4ba5799f20067",
+ "statistics": {
+ "create": {
+ "medianMs": 16.666833000000224,
+ "p95Ms": 17.509374999999636
+ },
+ "match245": {
+ "medianMs": 1.7478329999999005,
+ "p95Ms": 1.900416999999834
+ },
+ "generate245": {
+ "medianMs": 1.511583000000428,
+ "p95Ms": 1.8746250000003783
+ },
+ "cache245": {
+ "medianMs": 0.023708000000624452,
+ "p95Ms": 0.02999999999974534
+ },
+ "deleteInsert245": {
+ "medianMs": 1.5981659999997646,
+ "p95Ms": 2.0827079999999114
+ },
+ "modeBranches1": {
+ "medianMs": 0.7141249999999673,
+ "p95Ms": 0.8412499999999454
+ },
+ "modeBranches8": {
+ "medianMs": 5.140875000000051,
+ "p95Ms": 5.661208999999872
+ },
+ "modeBranches32": {
+ "medianMs": 27.11608299999989,
+ "p95Ms": 28.191874999999982
+ }
+ },
+ "artifacts": {
+ "runtimeJS": {
+ "raw": 48219,
+ "gzip": 13333,
+ "brotli": 12025,
+ "sha256": "db2168b924ab805748c95860f44ad94f43d7675f31a424b3d7fc2c1efa907b00"
+ },
+ "engineWasm": {
+ "raw": 1041773,
+ "gzip": 323710,
+ "brotli": 246702,
+ "sha256": "623c831e6837355d19bd329ac6f42ce5374fb921437da7f53f82f0f1f5e99e34"
+ },
+ "manifest": {
+ "raw": 91526,
+ "gzip": 12930,
+ "brotli": 10280,
+ "sha256": "0e070a1a24d0c347eb9129a98e9249a8cb1729258125ffa556c4d145561c7127"
+ },
+ "hydration": {
+ "raw": 74789,
+ "gzip": 5303,
+ "brotli": 2754,
+ "sha256": "2e3b939142c355f2a5ebf6bcf0b4858fc8c99e85a0cf7234c93a34a5912a9161"
+ }
+ },
+ "runtimeTotal": {
+ "raw": 1256307,
+ "gzip": 355276,
+ "brotli": 271761
+ },
+ "cssDigest": "b7e1a2ffefe138ca16d3bf37002a1c2c37a636e096a9254b3d14a5671ce02f8c",
+ "cssBytes": 10844
+ },
+ "after": {
+ "binding": {
+ "bindingAbiVersion": 13,
+ "packageVersion": "0.0.0",
+ "manifestVersion": 1,
+ "languageVersion": 3,
+ "hydrationManifestVersion": 1,
+ "engineTransitionVersion": 1,
+ "validatorBatchVersion": 3,
+ "diagnosticsReportVersion": 3,
+ "lintBatchVersion": 1,
+ "languageBatchVersion": 4,
+ "lexerBatchVersion": 1,
+ "sourceBatchVersion": 2,
+ "target": "aarch64-apple-darwin",
+ "surface": "native",
+ "features": [
+ "compiler",
+ "diagnostics",
+ "engine",
+ "language",
+ "lexer",
+ "lint",
+ "project",
+ "render",
+ "scanner",
+ "source",
+ "validator"
+ ]
+ },
+ "bindingSha256": "272e638cc213e0302fa87daf8a559bf3bb53d86bebbb8c296c65dcc1569ac6e0",
+ "statistics": {
+ "create": {
+ "medianMs": 16.407500000000255,
+ "p95Ms": 16.92804199999955
+ },
+ "match245": {
+ "medianMs": 1.7457500000000437,
+ "p95Ms": 1.821042000000034
+ },
+ "generate245": {
+ "medianMs": 1.5300829999996495,
+ "p95Ms": 1.8629170000003796
+ },
+ "cache245": {
+ "medianMs": 0.024875000000065484,
+ "p95Ms": 0.05562499999996362
+ },
+ "deleteInsert245": {
+ "medianMs": 1.605374999999185,
+ "p95Ms": 1.9607080000000678
+ },
+ "modeBranches1": {
+ "medianMs": 0.6797090000000026,
+ "p95Ms": 0.8072080000001733
+ },
+ "modeBranches8": {
+ "medianMs": 5.0433750000001965,
+ "p95Ms": 5.364250000000538
+ },
+ "modeBranches32": {
+ "medianMs": 26.767124999999396,
+ "p95Ms": 28.48324999999977
+ }
+ },
+ "artifacts": {
+ "runtimeJS": {
+ "raw": 48219,
+ "gzip": 13332,
+ "brotli": 12027,
+ "sha256": "4f664819ec30a93542b5bac0d747fdb88ae28fc02ebcea0d0843fa2826cf3ffa"
+ },
+ "engineWasm": {
+ "raw": 1044735,
+ "gzip": 325055,
+ "brotli": 247306,
+ "sha256": "347266c7e1691deb6b65cff474fa3b8d230de94130e5e43d5e36e118977737ab"
+ },
+ "manifest": {
+ "raw": 90403,
+ "gzip": 12832,
+ "brotli": 10188,
+ "sha256": "63a0e170f57fc3cb6f8b831f2d072f803290ec991b1f020ee389e36dcc4c4e19"
+ },
+ "hydration": {
+ "raw": 74789,
+ "gzip": 5303,
+ "brotli": 2754,
+ "sha256": "2e3b939142c355f2a5ebf6bcf0b4858fc8c99e85a0cf7234c93a34a5912a9161"
+ }
+ },
+ "runtimeTotal": {
+ "raw": 1258146,
+ "gzip": 356522,
+ "brotli": 272275
+ },
+ "cssDigest": "b7e1a2ffefe138ca16d3bf37002a1c2c37a636e096a9254b3d14a5671ce02f8c",
+ "cssBytes": 10844
+ },
+ "ratios": {
+ "create": -0.015559824712947368,
+ "match245": -0.0011917614553890177,
+ "generate245": 0.012238825125194142,
+ "cache245": 0.04922389064494248,
+ "deleteInsert245": 0.004510795498979148,
+ "modeBranches1": -0.04819324347973575,
+ "modeBranches8": -0.01896564300821424,
+ "modeBranches32": -0.012869041594263275
+ }
+}
diff --git a/parity/sizing-resolution-validation.md b/parity/sizing-resolution-validation.md
new file mode 100644
index 000000000..bf86a0631
--- /dev/null
+++ b/parity/sizing-resolution-validation.md
@@ -0,0 +1,99 @@
+# Naming, theme delivery and sizing removal validation
+
+Implementation baseline: `2079d665a` (2026-09-25). The worktree was clean at capture. The saved source archive, release native binding, preset, representative CSS/hydration/computed styles and original runtime assets are in `/tmp/master-resolution-sizing-baseline-20260925-221632`. The baseline preset reproduced from that archive has the same SHA-256, `0e070a1a24d0c347eb9129a98e9249a8cb1729258125ffa556c4d145561c7127`.
+
+## Intentional changes
+
+- Static and raw matcher aliases acquire individual entries before whole-definition replacement. An override does not remove an untouched alias; empty definitions remain registered. Token ambiguity follows definition identity, not current emitted values. Same-family definitions in separate layers retain both outputs.
+- Bare `flex` and `grid` remain static display utilities. Their colon forms are native declarations; completion now exposes that entry. Use `display:flex:hover` for the display state.
+- Tooling checks known CSS math types and property context without computing values or converting units. Compound intermediate dimensions can cancel. Known incompatible operands are errors even beside an independent unknown operand. Unresolved substitutions and capabilities stay unknown; emission policy is unchanged.
+- `generatedGlobals: 'separate'` returns compiler-generated resources outside local stylesheet code. Next Webpack Modules deliver them as ordinary global CSS, preserving root/mode selectors and inheritance. Equal resolved global resources share a content-addressed entry. URL resources, dependency tracking, source-map availability and atomic publication follow the existing delivery graph. No new Turbopack Module-directive capability is claimed.
+- The six preset size/min-size/max-size raw/token definitions and the dangling `min`/`max` paired-dimension aliases are removed. Logical axis aliases remain. Native fallback is preserved: WebKit currently gives native `size:99px` a dimensional effect, so “no Master expansion” must not be described as “no browser effect.” Custom same-name definitions and native page descriptors remain available.
+- `rc-sizing` is the sixth migration profile. All profiles run the shared sizing stage; transformations compare declarations, selectors, conditions and resource identity. Dimension competition requires review. A custom same-name definition is never identified by spelling alone; migration-only historical `min`/`max` aliases never override explicitly registered project entries. ABI is 13; manifest/hydration envelope 1 and language version 3 are unchanged.
+- Project loading now exposes immutable `nativeClassNames` to tooling sessions. The CLI, MCP and editor suppress retired-utility advice for explicitly registered ordinary CSS classes; this is tooling context, not a runtime manifest field. Reloading the project refreshes these registrations.
+- Official Master examples and recommendations use explicit dimensions. Retired reference URLs and anchors remain as removal notices. Tailwind-only Laravel scaffolding and historical/custom-author examples are intentionally retained.
+
+## Checks
+
+Logs are under `/tmp/sizing-*.log`; key reproducible entry points are below.
+
+| Surface | Result |
+| --- | --- |
+| Rust engine/compiler/language suites | All targets pass after correcting the historical size-helper mapping; the formerly failing RC migration target reran with 13 passing cases, plus 5 new sizing migration tests covering all six profiles |
+| Rust fmt, scoped clippy, codegen check, `cargo xtask parity` | Pass |
+| Native and all Wasm artifacts | Rebuilt; binding provider suites pass; three added native/Wasm comparison cases cover normalization, equal-value ambiguity and `rc-sizing` decisions |
+| Preset | 39 tests pass; generated manifest has 164 definitions |
+| Tooling/compiler/CLI | Full runs: 318 / 456 / 84 tests pass; subsequent math and compiler regression checks pass (30 math cases, 7 compiler cases) |
+| Language service | 385 tests pass, including unambiguous native/static completion |
+| Language server | 43 tests pass, including native class registration refresh |
+| MCP | 50 tests pass, including actual output schemas, JSON/structuredContent equality, ABI metadata and new inspection decisions |
+| Next | 197 unit tests; three real production builds (ordinary CSS with both bundlers, Modules with Webpack, including client navigation between two distinct Module routes); two ordinary HMR cases; one additional Module token HMR/inheritance case pass |
+| Runtime browsers | 272 existing Chromium/WebKit cases plus 8 new static/SSR/runtime/progressive, hydration and DOM-update cases pass; Firefox is blocked before page creation (see below) |
+| Site | Production build: 830 pages and 95 verified assets; 20 reference tests, document examples and 3 RC-guide tests pass; type-check passes; lint has 0 errors and 266 warnings |
+| Browser docs review | Migration entry, RC guide, retired size page and sizing guide checked at 1440px/390px; no page errors or horizontal overflow; screenshots reviewed |
+| Package checks | Changed package lint/type-check/build pass; examples lit/vite/webpack build. These three example packages define no lint script. Next playground build passes using the installed parent Next binary; its direct pnpm script cannot locate its own `next` executable |
+| AI/source structure | `pnpm run check:ai-context` passes |
+
+A concurrent Next lint attempt saw a temporary HMR fixture and failed on its generated JSX. The fixture was cleaned normally; the subsequent complete Next lint passes. This is not recorded as a product regression or bypassed by weakening lint.
+
+## Performance and payload
+
+The native engine comparisons alternate before/after release artifacts over 45 rounds (10 warmup), using identical 245-class workloads without removed utilities. Two runs are recorded in `sizing-performance-{1,2}.json`. Engine creation, matching, generation, cache hits, delete/reinsert and mode branch medians remain within 5%. The CSS and hydration for that common workload are unchanged.
+
+Combined runtime JS + engine Wasm + runtime manifest + representative hydration:
+
+| Format | Baseline | Current | Change |
+| --- | ---: | ---: | ---: |
+| Raw | 1,256,307 | 1,258,146 | +0.15% |
+| gzip | 355,276 | 356,522 | +0.35% |
+| Brotli | 271,761 | 272,275 | +0.19% |
+
+JavaScript is unchanged at 48,219 raw bytes. Wasm grows by 2,962 raw bytes; the preset manifest shrinks by 1,123. No tooling math validator is added to the runtime.
+
+The original sequential compiler measurement was noisy and exceeded 5% on some samples. `benchmark-utility-compiler.mjs` now alternates both versions for each workload. Both repeated paired runs at 100/1,000/5,000 definitions show parse/lower median differences within 5% (`sizing-compiler-paired-{1,2}.json`). Neither measurement justifies a performance improvement claim.
+
+The sizing migration workload deliberately measures the syntax change separately. Six independent examples remain six HTML classes when grouped, but generate 12 rules instead of 6. Markup grows from 69 to 169 bytes; generated CSS gzip from 210 to 245; hydration gzip from 431 to 605. Repeating this deterministic measurement produces identical output (`sizing-migration-payload.json`). The cause is two independently represented dimension declarations plus longer selectors and hydration records. This is a documented cost of explicit dimensions, not a claimed optimization; competing declarations still require migration review.
+
+Next full-source verification remains enabled. Current 100/1,000/5,000-source measurements are in `sizing-next-static.json`. Unchanged sources do no stylesheet registration or composition; edits and ten-notification bursts both perform two publication compositions and four TSX reads per source. Current HMR runs are in `sizing-next-hmr.json`; their idle windows contain zero extra compositions. The isolated baseline rebuilt from the saved archive uses the saved ABI 12 release binding and byte-identical original preset (`sizing-next-static-before.json`). Relative median differences across all nine source-count/update combinations are within 3%; read/composition counts are unchanged. The real HMR comparison uses the same explicit Turbopack filesystem root on both versions because its hermetic resolver otherwise rejects the archived workspace’s existing dependency symlinks.
+
+Two additional paired Module-loader runs exposed redundant recompilation: the initial implementation took 160–167 ms versus the former 73–78 ms. Reusing the already prepared generated globals for the revision-publication pass removes one of three transforms. The final repeated measurements are 122–126 ms versus 73–77 ms (`sizing-next-module-final-{1,2}.json`). The remaining roughly 49 ms is the extra compiler delivery context and complete global asset/dependency publication needed to retain root semantics and resource URLs. The earlier implementation incorrectly put root variables on each component. This is an explicit correctness cost for Modules that generate globals; Modules with no generated globals retain the ordinary local path. Reuse is scoped to one publication operation, not a stale cross-build cache.
+
+The repeated actual HMR comparison is in `sizing-next-hmr-paired.json`. With identical fixture/root settings and other builds idle, Turbopack single-edit medians were 1,316/1,416 ms before and 1,315/1,317 ms after; burst medians were 1,400/1,284 ms before and 1,699/1,750 ms after. Webpack single edits were 1,083/1,183 → 1,133/1,233 ms; bursts 1,234/1,167 → 1,252/1,233 ms. These are three measured browser updates per run, not enough to infer a stable percent regression from a single median.
+
+The >5% cases were repeated and attributed at the publication level: each edit still composes exactly twice, idle windows compose zero times, and the higher Turbopack burst time coincided with more read-only publication/snapshot checks. One measured burst has 43 lock acquisitions/1,618 ms total lock hold versus a baseline burst with 31 acquisitions/1,148 ms. Those counts were not raw Turbopack notifications, and their difference alone did not identify a cause. Full verification remained enabled. The follow-up below resolves this performance acceptance gap.
+
+### Turbopack HMR follow-up (2026-09-26)
+
+A test-only loader trace identified the repeated work: Turbopack compiles each edited JS module in several worker contexts, and the old static source loader started a full publication check in each invocation. In the paired fixture, ten edited modules caused a median 36 source-loader invocations and 74 complete snapshots, even though the CSS output changed once. The broad local CSS rule also reprocessed generated `next-style-*.css` assets. Removing Turbopack's pass-through JS source rules, assigning complete source/directory watches to the CSS entry and directly imported `.master/next.css`, and excluding generated static assets from the local stylesheet rule removes both sources of redundant work. Webpack retains its early source publication path. The snapshot, digest, retry, lock and atomic publication checks are unchanged.
+
+Five alternating pairs compared the clean task-start HEAD `1193b8ac2` with the optimized integration, using the same Next 16.3.4, Node 24.20.0, fixture and explicit Turbopack root `/`. Each run had one warmup and three measured browser updates. Across 15 samples per version, Turbopack single-edit median fell from 2,117 to 552 ms and ten-file burst median from 2,217 to 549 ms. Median traced loader calls fell from 47/55 to 4/4, lock acquisitions from 28/36 to 4/4, and complete snapshots from 58/74 to 10/10 for single/burst; every measured edit published `next.css` once. No full reload occurred. The test-only trace changes absolute timing, so these are paired fixture results, not general application latency claims. One separate Webpack pair against the same task-start HEAD showed comparable single/burst medians (2,882/2,884 ms before and 2,868/2,850 ms after). Browser coverage includes edits and addition/deletion of an unimported source with a direct generated CSS import. These measurements resolve the earlier Turbopack burst acceptance gap; they do not reinterpret the older `2079d665a` comparison as proof of more raw bundler notifications.
+
+Reproduce the main comparisons with the saved release artifacts:
+
+```sh
+node --expose-gc scripts/benchmark-utility-contract.mjs BASELINE_DIR OUTPUT.json BASELINE_DIR/current-release.node
+node scripts/benchmark-utility-compiler.mjs BASELINE_DIR/mastercss.node BASELINE_DIR/current-release.node OUTPUT.json
+node scripts/benchmark-sizing-migration.mjs BASELINE_DIR OUTPUT.json
+node scripts/benchmark-next-module-globals.mjs OLD_LOADER NEW_LOADER OUTPUT.json
+MASTER_NEXT_BENCH_ROUNDS=10 node scripts/benchmark-next-static.mjs PATH_TO_NEXT_DIST/static.js OUTPUT.json
+```
+
+## Historical evidence review
+
+The read-only audit compares the frozen Rust refactor contract (`bd164e4b5ae3a713940913d745183e9ab6b54263`) with implementation HEAD, preserving non-enumerable test contract digests. Before corrections, the 1,033 historical cases classify as 503 exact, 19 approved changes, 5 verified supersets, 244 changed without proof, 256 removed/unmapped, 4 stale records and 2 ambiguous mappings. Counts are evidence status, not a claim of 506 product defects. See `sizing-history-audit.json`; the original full inventory is retained at `/tmp/sizing-history-audit.json`.
+
+Four stale records were individually read and tested before updating their target digest and explanation:
+
+1. `rc87-886095b27074cf6c`: packaged Wasm loading, matched inspection, one mutation, exact CSS, disposal and explicit variable resource emission remain asserted; fixture language version is now 3.
+2. `rc87-534a5dbe18105a92`: the renamed test explicitly preserves declarations rejected by the stubbed CSS.supports and checks RenderSession output, implementing the approved policy change.
+3. `rc87-97379238aa6e9c52`: idempotent disposal, structured SESSION_DISPOSED and explicit variable/background emission remain asserted with language version 3.
+4. `rc87-c6f234a37661be00`: the renamed Next test imports real ESM data, asserts language version 3, and rejects fetch, handmade /_next URLs and .next asset writes.
+
+No other historical test was deleted, relabeled as approved, or accepted based only on a new digest. The original baseline and ledger are retained.
+
+## Release blockers
+
+1. Firefox 155 / Playwright revision 1543 fails before an empty page can be created on this macOS host. A fresh isolated download reproduces `sandbox_extension_issue_file_to_process ... Operation not permitted` and `Could not find profile folder`. Reinstall, temporary-directory and persistent-profile checks did not resolve it. No Firefox case is marked passed; a functioning host or traceable CI result is still required.
+2. `pnpm run check:migration` still fails at the pre-existing `public-api-contract` surface evidence. After the four reviewed test records, 244 changed cases, 256 unmapped removals and 2 ambiguous mappings still need reviewed replacement/approval evidence. This task does not convert those gaps into blanket approvals.
+
+No model comparison was performed and no improvement in AI generation correctness is claimed.
diff --git a/parity/sizing-site-browser.json b/parity/sizing-site-browser.json
new file mode 100644
index 000000000..7090bc0a2
--- /dev/null
+++ b/parity/sizing-site-browser.json
@@ -0,0 +1,94 @@
+[
+ {
+ "width": 1440,
+ "path": "/guide/migration",
+ "title": "Migrating to Master CSS",
+ "h1": "Migrating to Master CSS",
+ "overflow": false,
+ "rcProfile": false,
+ "links": [
+ "/guide/migration/v2-rc",
+ "/guide/migration/v2-rc",
+ "/guide/migration/v2-rc"
+ ],
+ "errors": []
+ },
+ {
+ "width": 1440,
+ "path": "/guide/migration/v2-rc",
+ "title": "Migrating from Master CSS v2 RC - Master CSS",
+ "h1": "Migrating from Master CSS v2 RC",
+ "overflow": false,
+ "rcProfile": true,
+ "links": [],
+ "errors": []
+ },
+ {
+ "width": 1440,
+ "path": "/reference/size",
+ "title": "size - Master CSS",
+ "h1": "size",
+ "overflow": false,
+ "rcProfile": false,
+ "links": [
+ "/guide/migration/v2-rc#sizing-and-resolution"
+ ],
+ "errors": []
+ },
+ {
+ "width": 1440,
+ "path": "/guide/sizing",
+ "title": "Sizing - Master CSS",
+ "h1": "Sizing",
+ "overflow": false,
+ "rcProfile": false,
+ "links": [],
+ "errors": []
+ },
+ {
+ "width": 390,
+ "path": "/guide/migration",
+ "title": "Migrating to Master CSS",
+ "h1": "Migrating to Master CSS",
+ "overflow": false,
+ "rcProfile": false,
+ "links": [
+ "/guide/migration/v2-rc",
+ "/guide/migration/v2-rc",
+ "/guide/migration/v2-rc"
+ ],
+ "errors": []
+ },
+ {
+ "width": 390,
+ "path": "/guide/migration/v2-rc",
+ "title": "Migrating from Master CSS v2 RC - Master CSS",
+ "h1": "Migrating from Master CSS v2 RC",
+ "overflow": false,
+ "rcProfile": true,
+ "links": [],
+ "errors": []
+ },
+ {
+ "width": 390,
+ "path": "/reference/size",
+ "title": "size - Master CSS",
+ "h1": "size",
+ "overflow": false,
+ "rcProfile": false,
+ "links": [
+ "/guide/migration/v2-rc#sizing-and-resolution"
+ ],
+ "errors": []
+ },
+ {
+ "width": 390,
+ "path": "/guide/sizing",
+ "title": "Sizing - Master CSS",
+ "h1": "Sizing",
+ "overflow": false,
+ "rcProfile": false,
+ "links": [],
+ "errors": []
+ }
+]
\ No newline at end of file
diff --git a/parity/ts-test-migration-ledger.json b/parity/ts-test-migration-ledger.json
index 8068cc157..d87f4dd57 100644
--- a/parity/ts-test-migration-ledger.json
+++ b/parity/ts-test-migration-ledger.json
@@ -13,7 +13,7 @@
"P2": "CLI, extension, packaging, host, and peripheral integration behavior.",
"P3": "Performance, bundle size, examples, site, and benchmark residual risk outside the migration denominator."
},
- "ciGate": false
+ "ciGate": true
},
"baseline": {
"ref": "v2.0.0-rc.87",
@@ -10551,7 +10551,7 @@
],
"sourceIdenticalTargetIds": [],
"takeoverCoverage": [
- "test:crates/mastercss-engine/src/tests/lifecycle.rs#normalizes_base_units_inside_css_math_functions",
+ "test:crates/mastercss-engine/src/tests/lifecycle.rs#preserves_unsupported_units_for_host_validation_inside_css_math_functions",
"corpus:engine-functions-and-negative-values",
"corpus:engine-negative-base-unit-bytes"
],
@@ -10668,7 +10668,7 @@
"sourceIdenticalTargetIds": [],
"takeoverCoverage": [
"corpus:engine-grouped-declarations",
- "test:crates/mastercss-engine/src/tests/syntax.rs#preserves_pattern_utility_precedence_inside_groups"
+ "test:crates/mastercss-engine/src/tests/syntax.rs#native_property_precedes_overlapping_enum_name_inside_groups"
],
"proof": {
"kind": "rc87-golden",
@@ -11422,7 +11422,7 @@
],
"sourceIdenticalTargetIds": [],
"takeoverCoverage": [
- "test:crates/mastercss-engine/src/tests/syntax.rs#preserves_pattern_utility_precedence_inside_groups"
+ "test:crates/mastercss-engine/src/tests/syntax.rs#native_property_precedes_overlapping_enum_name_inside_groups"
],
"proof": {
"kind": "rc87-golden",
@@ -13753,7 +13753,7 @@
"sourceIdenticalTargetIds": [],
"takeoverCoverage": [
"corpus:engine-functions-and-negative-values",
- "test:crates/mastercss-engine/src/tests/lifecycle.rs#normalizes_base_units_inside_css_math_functions"
+ "test:crates/mastercss-engine/src/tests/lifecycle.rs#preserves_unsupported_units_for_host_validation_inside_css_math_functions"
],
"proof": {
"kind": "rc87-golden",
@@ -14037,7 +14037,7 @@
],
"sourceIdenticalTargetIds": [],
"takeoverCoverage": [
- "test:crates/mastercss-engine/src/tests/syntax.rs#preserves_pattern_utility_precedence_inside_groups"
+ "test:crates/mastercss-engine/src/tests/syntax.rs#native_property_precedes_overlapping_enum_name_inside_groups"
],
"proof": {
"kind": "rc87-golden",
@@ -14675,7 +14675,7 @@
],
"sourceIdenticalTargetIds": [],
"takeoverCoverage": [
- "test:crates/mastercss-engine/src/tests/lifecycle.rs#normalizes_base_units_inside_css_math_functions"
+ "test:crates/mastercss-engine/src/tests/lifecycle.rs#preserves_unsupported_units_for_host_validation_inside_css_math_functions"
],
"proof": {
"kind": "rc87-golden",
diff --git a/parity/utility-registration-freeze-approval.md b/parity/utility-registration-freeze-approval.md
new file mode 100644
index 000000000..117ecfe08
--- /dev/null
+++ b/parity/utility-registration-freeze-approval.md
@@ -0,0 +1,38 @@
+# Utility registration freeze QA approval
+
+## Approved scope
+
+Aron explicitly approved these 24 exact case differences in Codex task `01a0dbdd-0a03-7673-9933-a64a98fd1de5`, replying to request `call_rgLQIvSFVdVkmYSiA18n2zqE`, item 0. Recorded at `2026-09-27T16:51:16.953Z`. This approval applies only to the digest pairs below.
+
+The reviewed baseline is `bd164e4b5ae3a713940913d745183e9ab6b54263`; the reviewed package target is `f9a1d2b606ce19cc691bd5124eb200e3cf45171b`. All target case digests were rechecked at `a3b78f7b4fa982e2972a628b45c52cc207efc544` before recording. The complete review JSON SHA-256 is `b59d8c27d34ffd0be999e15db363e49cf55ee19c44f2d2934c196de7ef665952`; its before/after patch SHA-256 is `92107d16a868acbe25f4b4a770c5136e89b9d229c03ac47521e91b32a421c689`.
+
+The approved cases replace the removed on-demand `@components` registration with `@utilities`, together with corresponding Manifest utility-layer metadata and layer assertions. Generated utilities occupy the utilities cascade layer; this is an intentional contract change rather than a claim of identical old/new CSS bytes. Other assertions within these case bodies remain unchanged.
+
+Native `@layer components` remains valid. Four unrelated native-layer fixture renames were excluded from this review and restored separately. This approval does not cover other migration differences, waive CI, rewrite frozen expectations, or close #445.
+
+| Case ID | Package | Baseline source digest | Approved target digest |
+| --- | --- | --- | --- |
+| `rc87-37e35a8768a9d50b` | compiler | `b856ce7fdd73b5f39ddb92f09169bc91e2ac375f51f699aff0c05a959b908cc3` | `7c7a297ff8f4969bfa755fba39e9a46adf4ed75249aa62fa83725f6a6ba2dc99` |
+| `rc87-5e7f87aa19abfb63` | compiler | `cfc51000cd41a77b504897cea1b4e583af3fedcde22d670440a1e3652e1c90ed` | `84e991d660d9bb2741cb4ba25a9d45ad8a3662923934fbd58782869b377f2e50` |
+| `rc87-7393f7c77328795c` | compiler | `f98e7fc63c9517ee9fc45f8372916f10b6e3cc2b8b14ae503b9784ae3f24644d` | `5e67a191b8dfe742049e79e98865435d3b297a75092670336421dd74a550a4a0` |
+| `rc87-e7f1f864cac62727` | compiler | `60d85a0209d7a42fb50746a31733aca8750b1a11fc82e4ff255f65d7344d010c` | `fc0350a3426a80b4b37e44302ecd44f0913efd70624b65a2d13ba519dc7b1ca2` |
+| `rc87-df2379cc46e6cb8f` | compiler | `e61d16ee5554b9010aaa1b383be755ec781d84e00a9524ab39aaa24ea049992b` | `12278a7cb31eeb13d7e56988040b91282acc8977b22444c477286dfa144b0798` |
+| `rc87-06eb46320f280e80` | compiler | `584ba19cec07112a7220a24f39664ee39c426ae8d3df81485da80dd22bdbdb9f` | `a2c2a8cded517a1ecd88368b8e34a2659027bc402b3f835b8c1656a1d7880b7e` |
+| `rc87-6ef0dd365e7230a1` | compiler | `a68e534c3a51da9e6e60833aa1dccdea9884b940b6415808d079ffc63aac2c93` | `4b91945b457d6cf08bd59f9aea7f22e2eab82459529de2e56ee02d9422bd3a1b` |
+| `rc87-32df64bdd39d50d5` | compiler | `96c84fb146aa8d3e1e7dce37dad9cc357820a1c4c33764ebe58c3549fc43ecfb` | `5b803743d962edd51b280c9ab81fe140c4bd79980340c6f53f52905dc42ea94e` |
+| `rc87-18d63467f01b574f` | compiler | `7f5bc7996e61b89d7cf70d03acf7ff5f752059513b1b0fc2abcbc5384f0f2a3e` | `72fb1d3072d9523e12f70f49b095bdac664249c05883491c9cee3973dbabb312` |
+| `rc87-09a63ebd1fb0c985` | compiler | `46e7233b6fce53227abfda3a531079d17572bef5889c293d620a695b276267e4` | `d5cbe6647a658b9d8601cd8170c55e459bb8df5625dd48ca8d5339c155fa9f9c` |
+| `rc87-3fbd82ad3f8411c4` | compiler | `70034ad7fef18ecef8f8205371580730e545a75991aae66de3c9045ff02a54a0` | `4709c086e006dda0320ceb02eb0f55b7409fbdce88ece0fb775572dd1407e2aa` |
+| `rc87-d1fd372c5f354ee2` | compiler | `5029e7d6a75833c8f44009775f291c3629387e60ad597bc290320c247bc751cb` | `969b449e52cecc8f020300bb1416c3dc29fd7fb890913dd0932dd5ef12108266` |
+| `rc87-fdb9f87a3f066b49` | compiler | `4e677cbf667246f9b10909792b6fda605d66096b7b17b7ecc53bf59193973652` | `c8a3d9287b9f52dd80cb615999121923fb540141a8fd9f58221c7ce51f2c89b4` |
+| `rc87-ac2cdaec143ddda4` | eslint-plugin | `29bbe49e452c6661dea769245cd5394b5e351b62eb6d6e790739a22948106d25` | `ddb8588e741821e7ebde1eba836a2efe2f6a98e44c64a004887ca0a3d759f980` |
+| `rc87-7c42e4a2078e5f09` | eslint-plugin | `3f57038d29e56e867ceb598478ce08cb638f9976c43fcc6f2b1883db6bff6812` | `49766a97d2498108429f2ff8cf41068ff05c2ff82eb19ce3667a39df0ad471b2` |
+| `rc87-36ad6d860a2a4cc3` | language-server | `740d87cc2120be23a27a4f18ddaab0f0171ecbcbd1a4f6900b78f3adc3e35c93` | `f77fe7edd22cf7ea4b7498e243a584ad0b66fe2a64cb25308905666021b9663e` |
+| `rc87-3dbeb88b8f407cb0` | language-server | `c4d59db907cccd641f421f2092264fa941eb9ba42fb397ba35fad4439f0b0f96` | `ca81ede3c884219b41514efb0673a2824952ad5918662e066e92ba9d371e4754` |
+| `rc87-e5d343ae48cff114` | next | `6d323e4fae2ea145f270a4c7ecbef9d695f237e4fe427e8ee391428b0b0d374c` | `4812bbfa89cdae1e274fe4d3de6b750498a0c2a7e64037a652377474a2efb28e` |
+| `rc87-dcfcbfe417ea201d` | next | `0f0f0b15669e17910a91dcb35e67c6c81c8cb62420ca80f85ef28c7605741189` | `d8497b6e1c7d66f240da75ee2257060e5b4f340aaf8a3b083cb5cc6ff819692e` |
+| `rc87-f9c0eb4b3b8f2fbb` | next | `1f8b4e975fc9fec86ec18df93a2b9c9b0f6ec4f85f5ffba45275f104cae85f05` | `1721cb02a5023b7b4cabf34feef0b50d803fa4b58b68b2866cd60e320ca9a14a` |
+| `rc87-55b73f1c832fdb61` | next | `3915fa8671163eb0cc144b406cdf4fd368996e749601cf822536cfe51ccf988a` | `885c6208f34a6fe859ed2517d48c45ab52b07335cd39f30cded2e00294e42970` |
+| `rc87-72b32e8d8e81f786` | next | `d5f6cabf8dc7d096ec2a65806ed8d3a2bbae3a70d6055307d22157d3925faa2f` | `27113417e16999a27f662af7aabdb95f3fa71ba2358b407d63790e709c1c7959` |
+| `rc87-054c879ed15dfa40` | vite | `15d2a61f201c3b8f30ea44d3381803209e8ed5dd9f9953d45648c0c8fc2482c5` | `0fbeb5a085d057f1af467a81a7099024ceaa68b02f4a2095927fdc14651d4556` |
+| `rc87-41097ea300e09962` | webpack | `226c5a78758a6a22ae86848604e962780871200bef0442494153d1688e4860c2` | `6769de48065438edaa6849ecccf37a266366a5b000d191fd2ffb6b0e38486e6f` |
diff --git a/parity/v2-language-corpus.json b/parity/v2-language-corpus.json
index 2663038a2..a7a060425 100644
--- a/parity/v2-language-corpus.json
+++ b/parity/v2-language-corpus.json
@@ -648,7 +648,7 @@
"sourceId": "rc87-cd1d137ee89e9efb",
"kind": "lexer",
"input": "@layer components { .btn { @compose block; @variant =40rem) { @compose grid; } @compose block; @container panel (inline-size>30rem) { @compose flex; } @starting-style { @compose hidden; } }",
+ "source": ".card { @media (width>=40rem) { @variant media(all){display:grid;} } @variant media(all){display:block;} @container panel (inline-size>30rem) { @variant media(all){display:flex;} } @starting-style { @variant media(all){display:none;} } }",
"baseManifest": "default",
- "expectedGeneratedCss": "@media (width>=40rem){.card{display:grid}}.card{display:block}@container panel (inline-size>30rem){.card{display:flex}}@starting-style{.card{display:none}}"
+ "expectedGeneratedCss": "@media (width>=40rem){@media all{.card{display:grid}}}@media all{.card{display:block}}@container panel (inline-size>30rem){@media all{.card{display:flex}}}@starting-style{@media all{.card{display:none}}}"
},
{
"id": "compiler-managed-compose-order",
- "source": "@utilities { btn { @variant sm { @compose grid; } @compose block; } }",
+ "source": "@utilities { btn { @variant sm { display:grid; } display:block; } }",
"baseManifest": "default",
"expectedGeneratedCss": "",
"expectedUtilities": [
@@ -2730,9 +2730,9 @@
},
{
"id": "compiler-root-size-condition-order",
- "source": ".card { @media (width>=42rem) { @compose grid; } @media (width>=800px) { @compose flex; } }",
+ "source": ".card { @media (width>=42rem) { @variant media(all){display:grid;} } @media (width>=800px) { @variant media(all){display:flex;} } }",
"baseManifest": "default",
- "expectedGeneratedCss": "@media (width>=42rem){.card{display:grid}}@media (width>=800px){.card{display:flex}}"
+ "expectedGeneratedCss": "@media (width>=42rem){@media all{.card{display:grid}}}@media (width>=800px){@media all{.card{display:flex}}}"
},
{
"id": "rc87-compiler-variables-modes-dependencies",
diff --git a/parity/vite-portable-freeze-approval.md b/parity/vite-portable-freeze-approval.md
new file mode 100644
index 000000000..6619c4f36
--- /dev/null
+++ b/parity/vite-portable-freeze-approval.md
@@ -0,0 +1,29 @@
+# Vite portable path QA supplement
+
+## Approved scope
+
+Aron explicitly approved the exact supplemental differences in response to Codex request `call_98L62yLnTibymoiBvJkHk6dj`, item 0, in task `01a0dbdd-0a03-7673-9933-a64a98fd1de5`. Recorded at `2026-09-27T17:49:25Z`. The review compares `8cccf0441` with `eba6c0879d4b457fb153ac196cf9a570cdd73a7f`. Review JSON SHA-256: `37f889d494d7ddff8a271a5c503bda98b06004ad5f6ce48702ce7925bfb090e4`; patch SHA-256: `a1e771c1b9b448ebe80bdc1efc2fccfcd02c611315783ed65020dd10aecd50d1`.
+
+Two previously approved case bodies now compare watcher dependencies using Vite's normalized path representation. Native filesystem operations still use the same files, and CSS, diagnostics, recovery and dependency registration assertions remain. Existing contract approvals remain in Git history and the separate utility approval documents; this supplements their target bytes only.
+
+| Case | Original source digest | Previous approved target | Updated target |
+| --- | --- | --- | --- |
+| rc87-054c879ed15dfa40 | 15d2a61f201c3b8f30ea44d3381803209e8ed5dd9f9953d45648c0c8fc2482c5 | 0fbeb5a085d057f1af467a81a7099024ceaa68b02f4a2095927fdc14651d4556 | 63103fb922d62f0e373dd714a61a4ed02cf74b65316cb69e838d35530b33de37 |
+| rc87-48ff4814761d1c90 | c62fd9d5353d8b511ad24233e46b4cf160e758ea23c413735a73c3c1c911a7fe | 3a6d0130956c5c52141ffa81fd7b511cbbfc7beb1f085ede3d0ae87b2f3032ab | 508f6473ef88e3d56d375c771c446075ef4878df5d648a91ea80589cd41e681d |
+
+## Manifest file supplement
+
+The full `packages/vite/tests/plugins/manifest-virtual-module.test.ts` hash changes from `ed2e70cfd4b0095b6dd625c5d42d0a947dcac184e0141d19bf871f51e774e363` to `77148fe32f807138339ea30f94ba76b9f4815680475f88a768f54fc426e4e4a0`. Four cases use normalized Vite watcher/access paths and HMR event inputs; the temporary root expands Windows short names through native realpath. All assertions remain. The 21 Manifest case digests, original implementation provenance and other seven file hashes were reverified unchanged. Target and approval scope digests are refreshed only for this approved file.
+
+Validation: the focused 20 + 148 Vite cases pass, the full suite passes 678/678, and Vite lint/type-check/build pass. VSCode staged tests pass 16/16 locally. Windows validation remains required; this approval does not waive CI, approve other migration cases, or authorize publication.
+
+## Assertion-preserving cases
+
+Four further cases in the reviewed patch retain every original assertion. An independent TypeScript AST comparison removes only the added one-argument Vite `normalizePath` calls and proves equality to the previous rc.87 case body after whitespace normalization. This is a verified assertion-preserving adaptation, not a new CSS or Manifest behavior approval.
+
+| Case | Baseline source digest | Target digest | Path wrappers |
+| --- | --- | --- | ---: |
+| rc87-4830c5bbe833a934 | c4bda323b0ebcba47e52d8096bcb930484734de181cae614dff7ac6b41872bad | a707c5a00f741455f5828147a6f7f5e17b5f868a0c1965a34c3ff8ab3bbaf820 | 2 |
+| rc87-426ea0afb5a08621 | 0ff5d9a5651036e3a10ccbff343a04266d4952e0a83e7842562751ca7ffa8025 | ba98d64264baa0de84f7fe1475d69482371488c670a5a779e71a59dd16985172 | 2 |
+| rc87-f31ee191a59a71b4 | de314b914139026a38055903d8ab7f5abe48fef3db61dd1d20cf8641dfae5bb2 | e9d23b1895335f151e320c3af8a2de6b8623e7a7e9533c7ba7d821cfbb771c6f | 1 |
+| rc87-f44b976958b10bfc | 13c72238b508259b29dd166ce373bfecce396f0f5398e8c83dc7e5d14607d6c4 | 5ff340a5182adcdfeb5776d2d53fff1aec6449e14dc57541233d799805e13e5e | 1 |
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 21371bbcc..965deee65 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -819,10 +819,10 @@ importers:
version: 2.2.2(svelte@5.57.0(@typescript-eslint/types@8.69.0))
'@sveltejs/adapter-vercel':
specifier: ^6.3.4
- version: 6.3.4(@sveltejs/kit@2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@7.0.2)(vite@8.2.2))(rollup@4.63.1)(supports-color@10.2.2)
+ version: 6.3.4(@sveltejs/kit@2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@6.0.3)(vite@8.2.2))(rollup@4.63.1)(supports-color@10.2.2)
'@sveltejs/kit':
specifier: ^2.70.3
- version: 2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@7.0.2)(vite@8.2.2)
+ version: 2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@6.0.3)(vite@8.2.2)
'@sveltejs/vite-plugin-svelte':
specifier: ^7.3.0
version: 7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2)
@@ -831,7 +831,7 @@ importers:
version: 10.10.0(jiti@2.7.0)(supports-color@10.2.2)
eslint-plugin-svelte:
specifier: ^3.23.0
- version: 3.23.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(ts-node@10.9.2(@types/node@24.13.3)(typescript@7.0.2))
+ version: 3.23.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(ts-node@10.9.2(@types/node@24.13.3)(typescript@6.0.3))
globals:
specifier: ^17.12.0
version: 17.12.0
@@ -840,13 +840,13 @@ importers:
version: 5.57.0(@typescript-eslint/types@8.69.0)
svelte-check:
specifier: ^4.7.6
- version: 4.7.6(picomatch@4.0.7)(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@7.0.2)
+ version: 4.7.6(picomatch@4.0.7)(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@6.0.3)
typescript:
- specifier: ^7.0.2
- version: 7.0.2
+ specifier: ^6.0.3
+ version: 6.0.3
typescript-eslint:
specifier: ^8.69.0
- version: 8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@7.0.2)
+ version: 8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
vite:
specifier: ^8.2.2
version: 8.2.2(@types/node@24.13.3)(@vitejs/devtools@0.7.2)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.0(supports-color@10.2.2))(sass@1.104.0)(terser@5.51.2)(tsx@4.23.13)(yaml@2.9.0)
@@ -1569,10 +1569,10 @@ importers:
version: 1.63.0
'@sveltejs/adapter-vercel':
specifier: ^6.3.4
- version: 6.3.4(@sveltejs/kit@2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@7.0.2)(vite@8.2.2))(rollup@4.63.1)(supports-color@10.2.2)
+ version: 6.3.4(@sveltejs/kit@2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@6.0.3)(vite@8.2.2))(rollup@4.63.1)(supports-color@10.2.2)
'@sveltejs/kit':
specifier: ^2.70.3
- version: 2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@7.0.2)(vite@8.2.2)
+ version: 2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@6.0.3)(vite@8.2.2)
'@sveltejs/vite-plugin-svelte':
specifier: ^7.3.0
version: 7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2)
@@ -1581,7 +1581,7 @@ importers:
version: 2.11.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))
eslint-plugin-svelte:
specifier: ^3.23.0
- version: 3.23.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(ts-node@10.9.2(@types/node@24.13.3)(typescript@7.0.2))
+ version: 3.23.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(ts-node@10.9.2(@types/node@24.13.3)(typescript@6.0.3))
globals:
specifier: ^17.12.0
version: 17.12.0
@@ -1593,22 +1593,25 @@ importers:
version: 5.57.0(@typescript-eslint/types@8.69.0)
svelte-check:
specifier: ^4.7.6
- version: 4.7.6(picomatch@4.0.7)(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@7.0.2)
+ version: 4.7.6(picomatch@4.0.7)(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@6.0.3)
tslib:
specifier: ^2.8.1
version: 2.8.1
typescript:
- specifier: ^7.0.2
- version: 7.0.2
+ specifier: ^6.0.3
+ version: 6.0.3
typescript-eslint:
specifier: ^8.69.0
- version: 8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@7.0.2)
+ version: 8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
vite:
specifier: ^8.2.2
version: 8.2.2(@types/node@24.13.3)(@vitejs/devtools@0.7.2)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.0(supports-color@10.2.2))(sass@1.104.0)(terser@5.51.2)(tsx@4.23.13)(yaml@2.9.0)
packages/tooling:
dependencies:
+ '@eslint/css-tree':
+ specifier: ^4.1.1
+ version: 4.1.1
'@master/css-binding':
specifier: workspace:*
version: link:../binding
@@ -1618,9 +1621,6 @@ importers:
consola:
specifier: ^3.4.2
version: 3.4.2
- css-tree:
- specifier: ^3.2.1
- version: 3.2.1
defu:
specifier: ^6.1.7
version: 6.1.7
@@ -1634,9 +1634,6 @@ importers:
specifier: ^10.2.6
version: 10.2.6
devDependencies:
- '@types/css-tree':
- specifier: ^3.2.0
- version: 3.2.0
svelte:
specifier: ^5.57.0
version: 5.57.0(@typescript-eslint/types@8.69.0)
@@ -4403,6 +4400,10 @@ packages:
resolution: {integrity: sha512-cg0ohyrAG3swyGqt8t1K/OK97DqBw/ftDvlvyY1fmEst5B40UOmsimwLENq74z2dyw5CDM+3zJIW+CV2nFNDdA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@eslint/css-tree@4.1.1':
+ resolution: {integrity: sha512-A+s89eP+yDAPkKjnIOfjlkGifg5J7GPn01nWx14UjBVWktfkxOU4975F9ZZ13xNxkGiblNcBaAqgKhnQrW6SWA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
'@eslint/js@10.0.1':
resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
@@ -19977,6 +19978,11 @@ snapshots:
mdn-data: 2.34.0
source-map-js: 1.2.1
+ '@eslint/css-tree@4.1.1':
+ dependencies:
+ mdn-data: 2.35.0
+ source-map-js: 1.2.1
+
'@eslint/js@10.0.1(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))':
optionalDependencies:
eslint: 10.10.0(jiti@2.7.0)(supports-color@10.2.2)
@@ -23400,9 +23406,9 @@ snapshots:
dependencies:
acorn: 8.18.0
- '@sveltejs/adapter-vercel@6.3.4(@sveltejs/kit@2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@7.0.2)(vite@8.2.2))(rollup@4.63.1)(supports-color@10.2.2)':
+ '@sveltejs/adapter-vercel@6.3.4(@sveltejs/kit@2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@6.0.3)(vite@8.2.2))(rollup@4.63.1)(supports-color@10.2.2)':
dependencies:
- '@sveltejs/kit': 2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@7.0.2)(vite@8.2.2)
+ '@sveltejs/kit': 2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@6.0.3)(vite@8.2.2)
'@vercel/nft': 1.11.0(rollup@4.63.1)(supports-color@10.2.2)
esbuild: 0.28.2
transitivePeerDependencies:
@@ -23410,7 +23416,7 @@ snapshots:
- rollup
- supports-color
- '@sveltejs/kit@2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@7.0.2)(vite@8.2.2)':
+ '@sveltejs/kit@2.70.3(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0(@typescript-eslint/types@8.69.0))(vite@8.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@6.0.3)(vite@8.2.2)':
dependencies:
'@standard-schema/spec': 1.1.0
'@sveltejs/acorn-typescript': 1.0.13(acorn@8.18.0)
@@ -23429,7 +23435,7 @@ snapshots:
vite: 8.2.2(@types/node@24.13.3)(@vitejs/devtools@0.7.2)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.0(supports-color@10.2.2))(sass@1.104.0)(terser@5.51.2)(tsx@4.23.13)(yaml@2.9.0)
optionalDependencies:
'@opentelemetry/api': 1.9.1
- typescript: 7.0.2
+ typescript: 6.0.3
'@sveltejs/load-config@0.2.3': {}
@@ -24170,6 +24176,22 @@ snapshots:
dependencies:
'@types/node': 24.13.3
+ '@typescript-eslint/eslint-plugin@8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.2
+ '@typescript-eslint/parser': 8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/scope-manager': 8.69.0
+ '@typescript-eslint/type-utils': 8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/utils': 8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/visitor-keys': 8.69.0
+ eslint: 10.10.0(jiti@2.7.0)(supports-color@10.2.2)
+ ignore: 7.0.8
+ natural-compare: 1.4.0
+ ts-api-utils: 2.5.0(typescript@6.0.3)
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/eslint-plugin@8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@7.0.2))(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@7.0.2)':
dependencies:
'@eslint-community/regexpp': 4.12.2
@@ -24218,6 +24240,18 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 8.69.0
+ '@typescript-eslint/types': 8.69.0
+ '@typescript-eslint/typescript-estree': 8.69.0(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/visitor-keys': 8.69.0
+ debug: 4.4.3(supports-color@10.2.2)
+ eslint: 10.10.0(jiti@2.7.0)(supports-color@10.2.2)
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@7.0.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.69.0
@@ -24251,6 +24285,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/project-service@8.69.0(supports-color@10.2.2)(typescript@6.0.3)':
+ dependencies:
+ '@typescript-eslint/tsconfig-utils': 8.69.0(typescript@6.0.3)
+ '@typescript-eslint/types': 8.69.0
+ debug: 4.4.3(supports-color@10.2.2)
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/project-service@8.69.0(supports-color@10.2.2)(typescript@7.0.2)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.69.0(typescript@7.0.2)
@@ -24292,10 +24335,26 @@ snapshots:
dependencies:
typescript: 5.9.3
+ '@typescript-eslint/tsconfig-utils@8.69.0(typescript@6.0.3)':
+ dependencies:
+ typescript: 6.0.3
+
'@typescript-eslint/tsconfig-utils@8.69.0(typescript@7.0.2)':
dependencies:
typescript: 7.0.2
+ '@typescript-eslint/type-utils@8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)':
+ dependencies:
+ '@typescript-eslint/types': 8.69.0
+ '@typescript-eslint/typescript-estree': 8.69.0(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/utils': 8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ debug: 4.4.3(supports-color@10.2.2)
+ eslint: 10.10.0(jiti@2.7.0)(supports-color@10.2.2)
+ ts-api-utils: 2.5.0(typescript@6.0.3)
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/type-utils@8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@7.0.2)':
dependencies:
'@typescript-eslint/types': 8.69.0
@@ -24337,6 +24396,21 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/typescript-estree@8.69.0(supports-color@10.2.2)(typescript@6.0.3)':
+ dependencies:
+ '@typescript-eslint/project-service': 8.69.0(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/tsconfig-utils': 8.69.0(typescript@6.0.3)
+ '@typescript-eslint/types': 8.69.0
+ '@typescript-eslint/visitor-keys': 8.69.0
+ debug: 4.4.3(supports-color@10.2.2)
+ minimatch: 10.2.6
+ semver: 7.8.5
+ tinyglobby: 0.2.17
+ ts-api-utils: 2.5.0(typescript@6.0.3)
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/typescript-estree@8.69.0(supports-color@10.2.2)(typescript@7.0.2)':
dependencies:
'@typescript-eslint/project-service': 8.69.0(supports-color@10.2.2)(typescript@7.0.2)
@@ -24378,6 +24452,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/utils@8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))
+ '@typescript-eslint/scope-manager': 8.69.0
+ '@typescript-eslint/types': 8.69.0
+ '@typescript-eslint/typescript-estree': 8.69.0(supports-color@10.2.2)(typescript@6.0.3)
+ eslint: 10.10.0(jiti@2.7.0)(supports-color@10.2.2)
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/utils@8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@7.0.2)':
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))
@@ -27431,7 +27516,7 @@ snapshots:
regexp-ast-analysis: 0.7.1
scslre: 0.3.0
- eslint-plugin-svelte@3.23.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(ts-node@10.9.2(@types/node@24.13.3)(typescript@7.0.2)):
+ eslint-plugin-svelte@3.23.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(svelte@5.57.0(@typescript-eslint/types@8.69.0))(ts-node@10.9.2(@types/node@24.13.3)(typescript@6.0.3)):
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))
'@jridgewell/sourcemap-codec': 1.6.0
@@ -27440,7 +27525,7 @@ snapshots:
globals: 16.5.0
known-css-properties: 0.37.0
postcss: 8.5.28
- postcss-load-config: 3.1.4(postcss@8.5.28)(ts-node@10.9.2(@types/node@24.13.3)(typescript@7.0.2))
+ postcss-load-config: 3.1.4(postcss@8.5.28)(ts-node@10.9.2(@types/node@24.13.3)(typescript@6.0.3))
postcss-safe-parser: 7.1.0(postcss@8.5.28)
semver: 7.8.5
svelte-eslint-parser: 1.8.1(svelte@5.57.0(@typescript-eslint/types@8.69.0))
@@ -31870,13 +31955,13 @@ snapshots:
dependencies:
postcss: 8.5.28
- postcss-load-config@3.1.4(postcss@8.5.28)(ts-node@10.9.2(@types/node@24.13.3)(typescript@7.0.2)):
+ postcss-load-config@3.1.4(postcss@8.5.28)(ts-node@10.9.2(@types/node@24.13.3)(typescript@6.0.3)):
dependencies:
lilconfig: 2.1.0
yaml: 1.10.3
optionalDependencies:
postcss: 8.5.28
- ts-node: 10.9.2(@types/node@24.13.3)(typescript@7.0.2)
+ ts-node: 10.9.2(@types/node@24.13.3)(typescript@6.0.3)
postcss-loader@8.2.1(@rspack/core@2.2.2(@swc/helpers@0.5.23))(postcss@8.5.25)(typescript@6.0.3)(webpack@5.109.2):
dependencies:
@@ -33951,7 +34036,7 @@ snapshots:
dependencies:
'@sveltejs/sv-utils': 0.3.3
- svelte-check@4.7.6(picomatch@4.0.7)(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@7.0.2):
+ svelte-check@4.7.6(picomatch@4.0.7)(svelte@5.57.0(@typescript-eslint/types@8.69.0))(typescript@6.0.3):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
'@sveltejs/load-config': 0.2.3
@@ -33960,7 +34045,7 @@ snapshots:
picocolors: 1.1.1
sade: 1.8.1
svelte: 5.57.0(@typescript-eslint/types@8.69.0)
- typescript: 7.0.2
+ typescript: 6.0.3
transitivePeerDependencies:
- picomatch
@@ -34227,6 +34312,10 @@ snapshots:
dependencies:
typescript: 5.9.3
+ ts-api-utils@2.5.0(typescript@6.0.3):
+ dependencies:
+ typescript: 6.0.3
+
ts-api-utils@2.5.0(typescript@7.0.2):
dependencies:
typescript: 7.0.2
@@ -34237,6 +34326,25 @@ snapshots:
dependencies:
muggle-string: 0.4.1
+ ts-node@10.9.2(@types/node@24.13.3)(typescript@6.0.3):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.13
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 24.13.3
+ acorn: 8.18.0
+ acorn-walk: 8.3.5
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.4
+ make-error: 1.3.6
+ typescript: 6.0.3
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+ optional: true
+
ts-node@10.9.2(@types/node@24.13.3)(typescript@7.0.2):
dependencies:
'@cspotcode/source-map-support': 0.8.1
@@ -34395,6 +34503,17 @@ snapshots:
typedarray@0.0.6: {}
+ typescript-eslint@8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3):
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/parser': 8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/typescript-estree': 8.69.0(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/utils': 8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ eslint: 10.10.0(jiti@2.7.0)(supports-color@10.2.2)
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
typescript-eslint@8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@7.0.2):
dependencies:
'@typescript-eslint/eslint-plugin': 8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0)(supports-color@5.5.0))(supports-color@5.5.0)(typescript@7.0.2))(eslint@10.10.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@7.0.2)
diff --git a/scripts/benchmark-next-module-globals.mjs b/scripts/benchmark-next-module-globals.mjs
new file mode 100644
index 000000000..7655fe854
--- /dev/null
+++ b/scripts/benchmark-next-module-globals.mjs
@@ -0,0 +1,42 @@
+// Compare actual saved/current loaders, including warm resource publication.
+// node scripts/benchmark-next-module-globals.mjs OLD_LOADER NEW_LOADER OUTPUT.json
+import { mkdtemp, writeFile, rm } from 'node:fs/promises'
+import { tmpdir } from 'node:os'
+import { join, resolve } from 'node:path'
+import { pathToFileURL } from 'node:url'
+
+const [before, after, output] = process.argv.slice(2)
+if (!output) throw new Error('Expected OLD_LOADER NEW_LOADER OUTPUT.json')
+const pair = []
+try {
+ for (const [label, path] of [['before', before], ['after', after]]) {
+ const root = await mkdtemp(join(tmpdir(), 'master-module-globals-bench-'))
+ await writeFile(join(root, 'entry.css'), '@master entry;')
+ await writeFile(join(root, 'tokens.css'), '@mode ocean{[data-theme=ocean]{@slot;}} @theme{--color-probe:red;} @theme ocean{--color-probe:blue;}')
+ const { default: loader } = await import(pathToFileURL(resolve(path)).href)
+ const source = '@reference "./tokens.css"; .card { color:var(--color-probe); }'
+ const file = join(root, 'Card.module.css')
+ await writeFile(file, source)
+ pair.push({ label, root, file, loader, source, samples: [] })
+ }
+ for (let round = 0; round < 18; round++) {
+ for (const side of round % 2 ? [...pair].reverse() : pair) {
+ const start = performance.now()
+ const result = await new Promise((resolve, reject) => {
+ side.loader.call({ resourcePath: side.file, rootContext: side.root, addDependency() {},
+ async: () => (error, code) => error ? reject(error) : resolve(code) }, side.source)
+ })
+ if (round >= 3) side.samples.push(performance.now() - start)
+ side.localCSSBytes = Buffer.byteLength(result)
+ }
+ }
+ const results = pair.map(({ label, samples, localCSSBytes }) => {
+ const sorted = [...samples].sort((a, b) => a - b)
+ return { label, samples, medianMs: sorted[Math.floor(sorted.length / 2)], p95Ms: sorted[Math.ceil(sorted.length * .95) - 1], localCSSBytes }
+ })
+ await writeFile(output, JSON.stringify({ rounds: 18, warmup: 3, alternatingOrder: true, results,
+ note: 'One CSS Module with referenced base/mode variables. Baseline incorrectly copies variables to the component; current publishes global resources. Local bytes exclude those assets. This measures the loader, not full HMR.' }, null, 2) + '\n')
+ console.log(results)
+} finally {
+ for (const side of pair) await rm(side.root, { recursive: true, force: true })
+}
diff --git a/scripts/benchmark-sizing-migration.mjs b/scripts/benchmark-sizing-migration.mjs
new file mode 100644
index 000000000..d58738aff
--- /dev/null
+++ b/scripts/benchmark-sizing-migration.mjs
@@ -0,0 +1,39 @@
+// Compare the removed preset dimensions with explicit grouped declarations.
+// node scripts/benchmark-sizing-migration.mjs BASELINE_DIRECTORY OUTPUT.json
+import { createRequire } from 'node:module'
+import { readFileSync, writeFileSync } from 'node:fs'
+import { resolve } from 'node:path'
+import { gzipSync, brotliCompressSync } from 'node:zlib'
+
+const require = createRequire(import.meta.url)
+const [baseline, output] = process.argv.slice(2)
+if (!baseline || !output) throw new Error('Expected BASELINE_DIRECTORY OUTPUT.json; preserve current-release.node there.')
+const classes = ['size:20px', 'min-size:10px', 'max-size:40px', 'size-sm', 'min-size-md', 'max-size-lg']
+const migrated = [
+ '{width:20px;height:20px}', '{min-width:10px;min-height:10px}', '{max-width:40px;max-height:40px}',
+ '{width-sm;height-sm}', '{min-width-md;min-height-md}', '{max-width-lg;max-height-lg}'
+]
+const sizes = value => {
+ const bytes = Buffer.from(value)
+ return { raw: bytes.length, gzip: gzipSync(bytes, { level: 9 }).length, brotli: brotliCompressSync(bytes).length }
+}
+const results = []
+for (const [label, bindingPath, manifestPath, names] of [
+ ['before', resolve(baseline, 'mastercss.node'), resolve(baseline, 'preset.json'), classes],
+ ['after', resolve(baseline, 'current-release.node'), resolve('packages/preset/src/default-manifest.json'), migrated]
+]) {
+ const binding = require(bindingPath)
+ const renderer = new binding.RenderSession(readFileSync(manifestPath, 'utf8'))
+ try {
+ renderer.ensureClasses(names)
+ const result = JSON.parse(renderer.snapshot())
+ results.push({ label, classes: names, classCount: names.length, ruleCount: result.snapshot.rules.length,
+ markup: sizes(names.join(' ')), css: sizes(result.snapshot.text), hydration: sizes(JSON.stringify(result.hydrationManifest)) })
+ } finally {
+ renderer.dispose()
+ }
+}
+writeFileSync(output, JSON.stringify({
+ note: 'Payload comparison for six independent examples; not proof of cascade equivalence for competing dimensions.', results
+}, null, 2) + '\n')
+console.log(results)
diff --git a/scripts/benchmark-utility-compiler.mjs b/scripts/benchmark-utility-compiler.mjs
index 8b1cc945c..543584ee1 100644
--- a/scripts/benchmark-utility-compiler.mjs
+++ b/scripts/benchmark-utility-compiler.mjs
@@ -9,37 +9,34 @@ if (!output) throw new Error('Expected BASELINE_RELEASE_BINDING CURRENT_RELEASE_
const sides = [['before', baseline], ['after', current]]
const report = {}
-function measure(operation) {
- for (let index = 0; index < 3; index++) operation()
- const samples = []
- for (let index = 0; index < 9; index++) {
- const start = performance.now()
- operation()
- samples.push(performance.now() - start)
+const pair = sides.map(([label, path]) => ({ label, binding: require(path) }))
+for (const count of [100, 1000, 5000]) {
+ const css = `@utilities{${Array.from({ length: count }, (_, index) => `u${index}{display:block}`).join('')}}`
+ for (const side of pair) {
+ const parsed = JSON.parse(side.binding.compileCssDirectivesJson(css, '{}'))
+ side.request = JSON.stringify({ manifestInput: parsed.manifestInput, nativeOutput: parsed.nativeOutput,
+ styleDefinitions: parsed.styleDefinitions ?? [], warnings: parsed.warnings, utilitySources: parsed.utilitySources ?? [] })
+ side.samples = { parse: [], lower: [] }
}
- samples.sort((left, right) => left - right)
- return { medianMs: samples[4], p95Ms: samples[8] }
-}
-
-for (const [label, path] of sides) {
- const binding = require(path)
- report[label] = {}
- for (const count of [100, 1000, 5000]) {
- const css = `@utilities{${Array.from({ length: count }, (_, index) => `u${index}{display:block}`).join('')}}`
- const parsed = JSON.parse(binding.compileCssDirectivesJson(css, '{}'))
- const request = JSON.stringify({
- manifestInput: parsed.manifestInput,
- nativeOutput: parsed.nativeOutput,
- styleDefinitions: parsed.styleDefinitions ?? [],
- warnings: parsed.warnings,
- utilitySources: parsed.utilitySources ?? []
- })
- report[label][count] = {
- directiveIRBytes: Buffer.byteLength(request),
- parse: measure(() => binding.compileCssDirectivesJson(css, '{}')),
- lower: measure(() => binding.lowerCssDirectivesJson(request, '{}'))
+ for (let round = 0; round < 25; round++) {
+ for (const side of round % 2 ? [...pair].reverse() : pair) {
+ for (const operation of ['parse', 'lower']) {
+ const start = performance.now()
+ if (operation === 'parse') side.binding.compileCssDirectivesJson(css, '{}')
+ else side.binding.lowerCssDirectivesJson(side.request, '{}')
+ if (round >= 5) side.samples[operation].push(performance.now() - start)
+ }
}
}
+ for (const side of pair) {
+ report[side.label] ??= {}
+ report[side.label][count] = { directiveIRBytes: Buffer.byteLength(side.request),
+ ...Object.fromEntries(Object.entries(side.samples).map(([operation, samples]) => {
+ const ordered = [...samples].sort((a, b) => a - b)
+ return [operation, { medianMs: ordered[Math.floor(ordered.length / 2)], p95Ms: ordered[Math.ceil(ordered.length * .95) - 1], samples }]
+ })) }
+ }
}
+report.method = { rounds: 25, warmup: 5, alternatingOrder: true }
writeFileSync(output, JSON.stringify(report, null, 2) + '\n')
console.log(JSON.stringify(report))
diff --git a/scripts/benchmark-utility-contract.mjs b/scripts/benchmark-utility-contract.mjs
index 1410922ec..546a271fd 100644
--- a/scripts/benchmark-utility-contract.mjs
+++ b/scripts/benchmark-utility-contract.mjs
@@ -17,7 +17,7 @@ const paths = [
{ binding: resolve(currentBinding ?? 'packages/binding/artifacts/mastercss.node'), manifest: resolve('packages/preset/src/default-manifest.json'), js: resolve('packages/runtime/dist/global.min.js'), wasm: resolve('packages/binding-wasm-engine/artifacts/mastercss_binding_wasm_engine_bg.wasm'), runtimeManifest: resolve('packages/runtime/dist/default-manifest.json') }
]
const pair = paths.map(paths => ({ paths, api: require(paths.binding), manifest: readFileSync(paths.manifest, 'utf8'), samples: {} }))
-const classes = Array.from({ length: 240 }, (_, index) => `${index % 2 ? 'size' : 'p'}:${index}px${index % 3 === 0 ? '@media((width>=50rem))' : ''}`)
+const classes = Array.from({ length: 240 }, (_, index) => `${index % 2 ? 'width' : 'p'}:${index}px${index % 3 === 0 ? '@media((width>=50rem))' : ''}`)
classes.push('p-md@media((width>=50rem))', 'font-mono', 'text-center:hover', 'fg-red/0.5', 'block:focus-visible')
const measured = (side, name, keep, operation) => {
const start = performance.now()
diff --git a/scripts/binding-package-smoke.mjs b/scripts/binding-package-smoke.mjs
index 2f53dd530..e8c7687ab 100644
--- a/scripts/binding-package-smoke.mjs
+++ b/scripts/binding-package-smoke.mjs
@@ -27,6 +27,7 @@ function runNPM(args, options = {}) {
function exerciseEngineSession(binding) {
const session = new binding.EngineSession(JSON.stringify({
version: 1,
+ languageVersion: 3,
variables: {
'': [{
name: 'stripe',
@@ -39,7 +40,7 @@ function exerciseEngineSession(binding) {
}))
try {
- const ensured = JSON.parse(session.ensureClassRulesWithNativeSupport(['bg:stripe'], [true]))
+ const ensured = JSON.parse(session.ensureClassRules(['bg:var(--stripe)']))
if (!ensured.mutations.some(({ op, target }) => op === 'insert' && target === 'theme')
|| !ensured.mutations.some(({ op, target }) => op === 'insert' && target === 'utilities')) {
throw new Error('Native engine smoke did not emit the expected theme and utility rules.')
@@ -54,7 +55,7 @@ function exerciseEngineSession(binding) {
const snapshot = JSON.parse(session.snapshot())
if (snapshot.text.includes('--stripe:')
- || !snapshot.text.includes('.bg\\:stripe{background:var(--stripe)}')) {
+ || !snapshot.text.includes('.bg\\:var\\(--stripe\\){background:var(--stripe)}')) {
throw new Error('Native engine smoke did not preserve the utility without local theme output.')
}
} finally {
diff --git a/scripts/build-site-hosted.sh b/scripts/build-site-hosted.sh
new file mode 100644
index 000000000..7b7f9591c
--- /dev/null
+++ b/scripts/build-site-hosted.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+cd "$(dirname "${BASH_SOURCE[0]}")/.."
+
+# Pages and Vercel build images do not guarantee a Rust installation.
+# rustup reads the pinned toolchain, components and Wasm target from the repo.
+export PATH="${CARGO_HOME:-$HOME/.cargo}/bin:$PATH"
+if ! command -v rustup >/dev/null 2>&1; then
+ curl --proto '=https' --tlsv1.2 --fail --silent --show-error https://sh.rustup.rs \
+ | sh -s -- -y --no-modify-path --default-toolchain none
+fi
+rustup toolchain install --no-self-update
+rustup show active-toolchain
+
+pnpm build:site
diff --git a/scripts/rust-refactor-contract-evidence.schema.json b/scripts/rust-refactor-contract-evidence.schema.json
index f868bf93f..c5cca498e 100644
--- a/scripts/rust-refactor-contract-evidence.schema.json
+++ b/scripts/rust-refactor-contract-evidence.schema.json
@@ -2,15 +2,29 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "./rust-refactor-contract-evidence.schema.json",
"type": "object",
- "required": ["version", "baseline", "records", "surfaces"],
+ "required": [
+ "version",
+ "baseline",
+ "records",
+ "surfaces"
+ ],
"properties": {
- "version": { "const": 1 },
+ "version": {
+ "const": 1
+ },
"baseline": {
"type": "object",
- "required": ["ref", "commit"],
+ "required": [
+ "ref",
+ "commit"
+ ],
"properties": {
- "ref": { "const": "bd164e4b5" },
- "commit": { "const": "bd164e4b5ae3a713940913d745183e9ab6b54263" }
+ "ref": {
+ "const": "bd164e4b5"
+ },
+ "commit": {
+ "const": "bd164e4b5ae3a713940913d745183e9ab6b54263"
+ }
},
"additionalProperties": false
},
@@ -18,24 +32,108 @@
"type": "array",
"items": {
"type": "object",
- "required": ["sourceId", "sourceDigest", "targetDigest", "proof", "reason"],
+ "required": [
+ "sourceId",
+ "sourceDigest",
+ "targetDigest",
+ "proof",
+ "reason"
+ ],
"properties": {
- "sourceId": { "type": "string" },
- "sourceDigest": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
- "targetId": { "type": "string", "pattern": "^rc87-[a-f0-9]{16}$" },
- "targetDigest": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
- "proof": { "enum": ["verified-superset", "approved-contract-change"] },
- "reason": { "type": "string", "minLength": 1 },
- "approval": { "$ref": "#/$defs/approval" }
+ "sourceId": {
+ "type": "string"
+ },
+ "sourceDigest": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{64}$"
+ },
+ "targetId": {
+ "type": "string",
+ "pattern": "^rc87-[a-f0-9]{16}$"
+ },
+ "targetDigest": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "pattern": "^[0-9a-f]{64}$"
+ },
+ "proof": {
+ "enum": [
+ "verified-superset",
+ "approved-contract-change",
+ "approved-contract-removal"
+ ]
+ },
+ "reason": {
+ "type": "string",
+ "minLength": 1
+ },
+ "approval": {
+ "$ref": "#/$defs/approval"
+ }
},
"additionalProperties": false,
"allOf": [
{
"if": {
- "properties": { "proof": { "const": "approved-contract-change" } }
+ "properties": {
+ "proof": {
+ "enum": [
+ "approved-contract-change",
+ "approved-contract-removal"
+ ]
+ }
+ }
+ },
+ "then": {
+ "required": [
+ "approval"
+ ]
+ },
+ "else": {
+ "not": {
+ "anyOf": [
+ {
+ "required": [
+ "approval"
+ ]
+ },
+ {
+ "required": [
+ "targetId"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "proof": {
+ "const": "approved-contract-removal"
+ }
+ }
+ },
+ "then": {
+ "required": [
+ "targetId"
+ ],
+ "properties": {
+ "targetDigest": {
+ "type": "null"
+ }
+ }
},
- "then": { "required": ["approval"] },
- "else": { "not": { "anyOf": [{ "required": ["approval"] }, { "required": ["targetId"] }] } }
+ "else": {
+ "properties": {
+ "targetDigest": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{64}$"
+ }
+ }
+ }
}
]
}
@@ -44,14 +142,36 @@
"type": "array",
"items": {
"type": "object",
- "required": ["surfaceId", "baselineDigest", "targetDigest", "proof", "reason", "approval"],
+ "required": [
+ "surfaceId",
+ "baselineDigest",
+ "targetDigest",
+ "proof",
+ "reason",
+ "approval"
+ ],
"properties": {
- "surfaceId": { "type": "string" },
- "baselineDigest": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
- "targetDigest": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
- "proof": { "const": "approved-contract-change" },
- "reason": { "type": "string", "minLength": 1 },
- "approval": { "$ref": "#/$defs/approval" }
+ "surfaceId": {
+ "type": "string"
+ },
+ "baselineDigest": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{64}$"
+ },
+ "targetDigest": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{64}$"
+ },
+ "proof": {
+ "const": "approved-contract-change"
+ },
+ "reason": {
+ "type": "string",
+ "minLength": 1
+ },
+ "approval": {
+ "$ref": "#/$defs/approval"
+ }
},
"additionalProperties": false
}
@@ -60,12 +180,29 @@
"$defs": {
"approval": {
"type": "object",
- "required": ["approvedBy", "approvedAt", "reviewRef", "scopeDigest"],
+ "required": [
+ "approvedBy",
+ "approvedAt",
+ "reviewRef",
+ "scopeDigest"
+ ],
"properties": {
- "approvedBy": { "type": "string", "minLength": 1 },
- "approvedAt": { "type": "string", "format": "date-time" },
- "reviewRef": { "type": "string", "minLength": 1 },
- "scopeDigest": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
+ "approvedBy": {
+ "type": "string",
+ "minLength": 1
+ },
+ "approvedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "reviewRef": {
+ "type": "string",
+ "minLength": 1
+ },
+ "scopeDigest": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{64}$"
+ }
},
"additionalProperties": false
}
diff --git a/scripts/rust-refactor-contract-ledger.schema.json b/scripts/rust-refactor-contract-ledger.schema.json
index 0bf8e0917..306c450a3 100644
--- a/scripts/rust-refactor-contract-ledger.schema.json
+++ b/scripts/rust-refactor-contract-ledger.schema.json
@@ -2,49 +2,111 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "./rust-refactor-contract-ledger.schema.json",
"type": "object",
- "required": ["version", "policy", "baseline", "target", "evidence", "summary", "surfaces", "entries", "added"],
+ "required": [
+ "version",
+ "policy",
+ "baseline",
+ "target",
+ "evidence",
+ "summary",
+ "surfaces",
+ "entries",
+ "added"
+ ],
"properties": {
- "version": { "const": 1 },
- "policy": { "type": "object" },
- "baseline": { "type": "object" },
- "target": { "type": "object" },
- "evidence": { "type": "object" },
- "summary": { "type": "object" },
+ "version": {
+ "const": 1
+ },
+ "policy": {
+ "type": "object"
+ },
+ "baseline": {
+ "type": "object"
+ },
+ "target": {
+ "type": "object"
+ },
+ "evidence": {
+ "type": "object"
+ },
+ "summary": {
+ "type": "object"
+ },
"surfaces": {
"type": "array",
- "items": { "$ref": "#/$defs/auditedChange" }
+ "items": {
+ "$ref": "#/$defs/auditedChange"
+ }
},
"entries": {
"type": "array",
- "items": { "$ref": "#/$defs/auditedChange" }
+ "items": {
+ "$ref": "#/$defs/auditedChange"
+ }
},
- "added": { "type": "array" }
+ "added": {
+ "type": "array"
+ }
},
"$defs": {
"approval": {
"type": "object",
"additionalProperties": false,
- "required": ["approvedBy", "approvedAt", "reviewRef", "scopeDigest"],
+ "required": [
+ "approvedBy",
+ "approvedAt",
+ "reviewRef",
+ "scopeDigest"
+ ],
"properties": {
- "approvedBy": { "type": "string", "minLength": 1 },
- "approvedAt": { "type": "string", "format": "date-time" },
- "reviewRef": { "type": "string", "minLength": 1 },
- "scopeDigest": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
+ "approvedBy": {
+ "type": "string",
+ "minLength": 1
+ },
+ "approvedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "reviewRef": {
+ "type": "string",
+ "minLength": 1
+ },
+ "scopeDigest": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{64}$"
+ }
}
},
"auditedChange": {
"type": "object",
"properties": {
- "status": { "type": "string" },
- "approval": { "$ref": "#/$defs/approval" }
+ "status": {
+ "type": "string"
+ },
+ "approval": {
+ "$ref": "#/$defs/approval"
+ }
},
"allOf": [
{
"if": {
- "properties": { "status": { "const": "approved-contract-change" } },
- "required": ["status"]
+ "properties": {
+ "status": {
+ "enum": [
+ "approved-contract-change",
+ "approved-contract-removal"
+ ]
+ }
+ },
+ "required": [
+ "status"
+ ]
},
- "then": { "required": ["approval"] }
+ "then": {
+ "required": [
+ "approval"
+ ]
+ }
}
]
}
diff --git a/scripts/ts-test-migration/report.mjs b/scripts/ts-test-migration/report.mjs
index ec86d8cf9..73f551925 100644
--- a/scripts/ts-test-migration/report.mjs
+++ b/scripts/ts-test-migration/report.mjs
@@ -144,7 +144,8 @@ older API, export, binding ABI, language wire shape, or rendering-mode option co
| Preserved exact cases | ${rustRefactorContractLedger.summary.byStatus['preserved-exact'] ?? 0} |
| Verified supersets | ${rustRefactorContractLedger.summary.byStatus['verified-superset'] ?? 0} |
| Approved contract changes | ${rustRefactorContractLedger.summary.byStatus['approved-contract-change'] ?? 0} |
-| Regressed or removed cases | ${(rustRefactorContractLedger.summary.byStatus.regressed ?? 0) + (rustRefactorContractLedger.summary.byStatus['removed-unapproved'] ?? 0)} |
+| Approved contract removals (historical cases retained) | ${rustRefactorContractLedger.summary.byStatus['approved-contract-removal'] ?? 0} |
+| Unapproved regressions or removals | ${(rustRefactorContractLedger.summary.byStatus.regressed ?? 0) + (rustRefactorContractLedger.summary.byStatus['removed-unapproved'] ?? 0)} |
| Target-added supplemental cases | ${rustRefactorContractLedger.summary.addedCases} |
| Contract surface | Baseline → target digest | Status | Proof | Human approval |
diff --git a/scripts/ts-test-migration/rust-contracts.mjs b/scripts/ts-test-migration/rust-contracts.mjs
index 892efcd23..e9fd0977a 100644
--- a/scripts/ts-test-migration/rust-contracts.mjs
+++ b/scripts/ts-test-migration/rust-contracts.mjs
@@ -25,11 +25,11 @@ function loadRustRefactorContractEvidence() {
for (const record of evidence.records) {
const label = `Rust contract evidence ${record.sourceId ?? ''}`
assertObjectKeys(record, ['sourceId', 'sourceDigest', 'targetId', 'targetDigest', 'proof', 'reason', 'approval'], label)
- if (record.targetId !== undefined) {
+ if (record.targetId !== undefined && record.proof !== 'approved-contract-removal') {
assert.equal(record.proof, 'approved-contract-change', `${label} renamed targets require approved contract evidence.`)
assert.match(record.targetId, /^rc87-[a-f0-9]{16}$/u, `${label} targetId is invalid.`)
}
- if (record.proof === 'approved-contract-change') {
+ if (['approved-contract-change', 'approved-contract-removal'].includes(record.proof)) {
assertObjectKeys(record.approval, ['approvedBy', 'approvedAt', 'reviewRef', 'scopeDigest'], `${label} approval`)
validateApprovalMetadata(record.approval, `${label} approval`)
assert.equal(record.approval.scopeDigest, rustContractRecordScopeDigest(record), `${label} approval scope digest is stale.`)
@@ -291,6 +291,22 @@ export function resolveReviewedRename(record, targetById, matchedTargetIds) {
return targets
}
+// Retired APIs retain their baseline denominator and explicit approval; absence is not parity.
+export function resolveReviewedRemoval(record, source, targets, targetById) {
+ const label = `Rust contract removal ${source.id}`
+ assert.equal(record.proof, 'approved-contract-removal', `${label} requires removal evidence.`)
+ validateApprovalMetadata(record.approval, label)
+ assert.equal(record.approval.scopeDigest, rustContractRecordScopeDigest(record), `${label} approval is stale.`)
+ assert.equal(record.sourceId, source.id, `${label} source identity drifted.`)
+ assert.equal(record.sourceDigest, source.sourceDigest, `${label} source digest drifted.`)
+ assert.match(record.targetId, /^rc87-[a-f0-9]{16}$/u, `${label} must identify the retired target.`)
+ assert.equal(record.targetDigest, null, `${label} must explicitly record no executable target.`)
+ assert.equal(targets.length, 0, `${label} must not override a present or relocated case.`)
+ assert.equal(targetById.has(record.targetId), false, `${label} retired target still exists.`)
+ assert.ok(typeof record.reason === 'string' && record.reason.trim(), `${label} requires a reason.`)
+ return { source, status: record.proof, target: null, proof: record.proof, reason: record.reason, approval: record.approval }
+}
+
export function buildRustRefactorContractLedger(targetInventory, targetCommit) {
const baselineInventory = collectCasesFromRef(
'rust-refactor-contract',
@@ -301,7 +317,7 @@ export function buildRustRefactorContractLedger(targetInventory, targetCommit) {
for (const record of evidence.records) {
assert.ok(!evidenceBySourceId.has(record.sourceId), `Duplicate Rust contract evidence for ${record.sourceId}.`)
assert.ok(
- ['verified-superset', 'approved-contract-change'].includes(record.proof),
+ ['verified-superset', 'approved-contract-change', 'approved-contract-removal'].includes(record.proof),
`Invalid Rust contract proof for ${record.sourceId}.`
)
evidenceBySourceId.set(record.sourceId, record)
@@ -328,6 +344,11 @@ export function buildRustRefactorContractLedger(targetInventory, targetCommit) {
relocated = targets.length > 0
}
const record = evidenceBySourceId.get(source.id)
+ if (record?.proof === 'approved-contract-removal') {
+ const entry = resolveReviewedRemoval(record, source, targets, targetById)
+ usedEvidence.add(source.id)
+ return entry
+ }
if (record?.targetId) {
assert.equal(targets.length, 0, `Renamed target evidence for ${source.id} must not override an existing match.`)
targets = resolveReviewedRename(record, targetById, matchedTargetIds)
@@ -479,10 +500,10 @@ export function validateRustRefactorContractLedger(ledger) {
)
for (const entry of ledger.entries) {
assert.ok(
- ['preserved-exact', 'verified-superset', 'approved-contract-change', 'regressed', 'removed-unapproved'].includes(entry.status),
+ ['preserved-exact', 'verified-superset', 'approved-contract-change', 'approved-contract-removal', 'regressed', 'removed-unapproved'].includes(entry.status),
`Invalid Rust contract status for ${entry.source.id}.`
)
- if (entry.status === 'approved-contract-change') {
+ if (['approved-contract-change', 'approved-contract-removal'].includes(entry.status)) {
assert.ok(entry.approval, `Approved Rust contract change ${entry.source.id} is missing human approval.`)
}
}
diff --git a/scripts/ts-test-migration/rust-contracts.test.mjs b/scripts/ts-test-migration/rust-contracts.test.mjs
index d710f0f5c..eb053af34 100644
--- a/scripts/ts-test-migration/rust-contracts.test.mjs
+++ b/scripts/ts-test-migration/rust-contracts.test.mjs
@@ -1,7 +1,7 @@
import assert from 'node:assert/strict'
import { test } from 'node:test'
import { rustContractRecordScopeDigest } from './evidence.mjs'
-import { resolveReviewedRename } from './rust-contracts.mjs'
+import { resolveReviewedRemoval, resolveReviewedRename } from './rust-contracts.mjs'
const target = { id: 'rc87-1234567890abcdef', sourceDigest: 'a'.repeat(64) }
function record() {
@@ -26,3 +26,35 @@ test('renames require an approved contract change instead of a superset assertio
assert.throws(() => resolveReviewedRename({ ...record(), proof: 'verified-superset' }, targets, new Set()), /approved contract evidence/)
assert.throws(() => resolveReviewedRename({ ...record(), approval: undefined }, targets, new Set()), /approval metadata/)
})
+
+const retiredSource = { id: 'rc87-fedcba0987654321', sourceDigest: 'b'.repeat(64) }
+function removalRecord(changes = {}) {
+ const value = { ...record(), targetDigest: null, proof: 'approved-contract-removal', ...changes }
+ value.approval = { approvedBy: 'test reviewer', approvedAt: '2026-09-28T00:00:00Z',
+ reviewRef: 'test-removal-review', scopeDigest: rustContractRecordScopeDigest(value) }
+ return value
+}
+test('approved removals retain historical sources without claiming an executable target', () => {
+ const evidence = removalRecord()
+ const entry = resolveReviewedRemoval(evidence, retiredSource, [], new Map())
+ assert.equal(entry.source, retiredSource)
+ assert.equal(entry.status, 'approved-contract-removal')
+ assert.equal(entry.target, null)
+ assert.equal(entry.approval, evidence.approval)
+})
+test('removals reject present, relocated and previously renamed targets', () => {
+ assert.throws(() => resolveReviewedRemoval(removalRecord(), retiredSource, [target], new Map()), /present or relocated/)
+ assert.throws(() => resolveReviewedRemoval(removalRecord(), retiredSource, [], targets), /retired target still exists/)
+})
+test('removals bind source identity, retired target, absent output and human approval', () => {
+ const check = (value, pattern) => assert.throws(() => resolveReviewedRemoval(value, retiredSource, [], new Map()), pattern)
+ check(removalRecord({ proof: 'approved-contract-change' }), /requires removal evidence/)
+ check(removalRecord({ sourceId: target.id }), /source identity drifted/)
+ check(removalRecord({ sourceDigest: 'c'.repeat(64) }), /source digest drifted/)
+ check(removalRecord({ targetId: undefined }), /must identify the retired target/)
+ check(removalRecord({ targetDigest: target.sourceDigest }), /no executable target/)
+ check(removalRecord({ reason: '' }), /requires a reason/)
+ check({ ...removalRecord(), reason: 'Unreviewed change' }, /approval is stale/)
+ const missingReviewer = removalRecord(); delete missingReviewer.approval.approvedBy
+ check(missingReviewer, /approvedBy/)
+})
diff --git a/shared/tsdown-package.config.ts b/shared/tsdown-package.config.ts
index 0ad885739..36f8f69bc 100644
--- a/shared/tsdown-package.config.ts
+++ b/shared/tsdown-package.config.ts
@@ -39,6 +39,8 @@ const rootByPackageName: Record = {
}
const privateInternalPackagePattern = /^@master\/css-internal(?:\/|$)/
+// Rolldown also checks resolved IDs: a Windows drive path is not a package import.
+const bareImportPattern = /^(?![a-zA-Z]:[/\\])[^./\\\0]/
const externalLanguageSyntaxJSON: TsdownPlugin = {
name: 'external-language-syntax-json',
@@ -107,8 +109,8 @@ export default defineConfig({
dts: {
alwaysBundle: [privateInternalPackagePattern],
neverBundle: ['@master/css-binding', '@master/css-tooling', '@master/css-language-server', '@master/css-mcp'].includes(packageJSON.name || '')
- ? [/^[^./]/]
- : [/^[^./]/, /^\.{1,2}\//]
+ ? [bareImportPattern]
+ : [bareImportPattern, /^\.{1,2}\//]
}
},
plugins: [
diff --git a/site/app/[locale]/design-system/components/DemoInteractions.tsx b/site/app/[locale]/design-system/components/DemoInteractions.tsx
index 8a3eacb08..6984fce63 100644
--- a/site/app/[locale]/design-system/components/DemoInteractions.tsx
+++ b/site/app/[locale]/design-system/components/DemoInteractions.tsx
@@ -16,7 +16,7 @@ export default function DemoInteractions() {
- ↗
+ ↗
diff --git a/site/app/[locale]/design-system/content.mdx b/site/app/[locale]/design-system/content.mdx
index fac1adfc7..f0af1d6b3 100644
--- a/site/app/[locale]/design-system/content.mdx
+++ b/site/app/[locale]/design-system/content.mdx
@@ -317,7 +317,7 @@ Derive breakpoint widths from the active preset; the numbers above illustrate th
```tsx
- ↗
+ ↗
```
@@ -818,12 +818,12 @@ Use `StylesheetExample` when a CSS directive changes the emitted stylesheet. The
```
@@ -848,7 +848,7 @@ The component accepts a title and standalone CSS source. Use a fixture-backed ex
The default, inline and static examples above share one presentation. `DocumentOptions` also accepts inline code and links in its description; its name and optional default stay separate. Both components belong outside measured demo layouts.
-See [Theme and variants](/reference/directives/theme), [Managed definitions](/reference/directives/definitions), [Rule-local composition](/reference/directives/compose) and [Conditional blocks](/reference/directives/variant) for working uses.
+See [Theme and variants](/reference/directives/theme), [Managed definitions](/reference/directives/definitions) and [Conditional blocks](/reference/directives/variant) for working uses.
## Benchmark charts
Use `BenchmarkBars` for values on a shared scale and `BenchmarkStackedBars` for composition within each row. The examples below use **illustrative data**, not measured results. See [Benchmarks](/guide/benchmarks) for real fixtures, sources, and limits.
@@ -1360,7 +1360,7 @@ Every specimen below is available directly in MDX. The surrounding example owns
{/* overflowing content */}
-
+
```
diff --git a/site/app/[locale]/design-system/review/asset/page.css b/site/app/[locale]/design-system/review/asset/page.css
index efab93178..a1ab53ea2 100644
--- a/site/app/[locale]/design-system/review/asset/page.css
+++ b/site/app/[locale]/design-system/review/asset/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-asset-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-asset-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-asset-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/axes/page.css b/site/app/[locale]/design-system/review/axes/page.css
index 0639168da..585f87786 100644
--- a/site/app/[locale]/design-system/review/axes/page.css
+++ b/site/app/[locale]/design-system/review/axes/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-axes-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-axes-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-axes-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/badge/page.css b/site/app/[locale]/design-system/review/badge/page.css
index 3e39727cd..9b639e2be 100644
--- a/site/app/[locale]/design-system/review/badge/page.css
+++ b/site/app/[locale]/design-system/review/badge/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-badge-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-badge-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-badge-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/catalog/page.css b/site/app/[locale]/design-system/review/catalog/page.css
index 2a3caf9a7..cd253be22 100644
--- a/site/app/[locale]/design-system/review/catalog/page.css
+++ b/site/app/[locale]/design-system/review/catalog/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-catalog-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-catalog-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-catalog-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/chart-group/page.css b/site/app/[locale]/design-system/review/chart-group/page.css
index 1579fdea1..80f4e3c1a 100644
--- a/site/app/[locale]/design-system/review/chart-group/page.css
+++ b/site/app/[locale]/design-system/review/chart-group/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-chart-group-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-chart-group-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-chart-group-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/comparison/page.css b/site/app/[locale]/design-system/review/comparison/page.css
index 0294cbe08..b52eabc53 100644
--- a/site/app/[locale]/design-system/review/comparison/page.css
+++ b/site/app/[locale]/design-system/review/comparison/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-comparison-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-comparison-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-comparison-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/container/page.css b/site/app/[locale]/design-system/review/container/page.css
index 3e96e1330..26037f543 100644
--- a/site/app/[locale]/design-system/review/container/page.css
+++ b/site/app/[locale]/design-system/review/container/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-container-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-container-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-container-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/controls/page.css b/site/app/[locale]/design-system/review/controls/page.css
index d66886fbc..971e53d81 100644
--- a/site/app/[locale]/design-system/review/controls/page.css
+++ b/site/app/[locale]/design-system/review/controls/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-controls-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-controls-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-controls-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/copy/page.css b/site/app/[locale]/design-system/review/copy/page.css
index b4879df5c..005ab710d 100644
--- a/site/app/[locale]/design-system/review/copy/page.css
+++ b/site/app/[locale]/design-system/review/copy/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-copy-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-copy-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-copy-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/data-table/page.css b/site/app/[locale]/design-system/review/data-table/page.css
index 891b89184..838299624 100644
--- a/site/app/[locale]/design-system/review/data-table/page.css
+++ b/site/app/[locale]/design-system/review/data-table/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-data-table-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-data-table-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-data-table-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/demo/page.css b/site/app/[locale]/design-system/review/demo/page.css
index 266e620c1..8216acb62 100644
--- a/site/app/[locale]/design-system/review/demo/page.css
+++ b/site/app/[locale]/design-system/review/demo/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-demo-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-demo-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-demo-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/feature-support/page.css b/site/app/[locale]/design-system/review/feature-support/page.css
index 4d0ff8c2e..86fae6fd0 100644
--- a/site/app/[locale]/design-system/review/feature-support/page.css
+++ b/site/app/[locale]/design-system/review/feature-support/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-feature-support-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-feature-support-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-feature-support-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/index/page.css b/site/app/[locale]/design-system/review/index/page.css
index dd289e1c9..f628fa191 100644
--- a/site/app/[locale]/design-system/review/index/page.css
+++ b/site/app/[locale]/design-system/review/index/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-index-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-index-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-index-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/item/page.css b/site/app/[locale]/design-system/review/item/page.css
index 388380b5a..1b354910c 100644
--- a/site/app/[locale]/design-system/review/item/page.css
+++ b/site/app/[locale]/design-system/review/item/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-item-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-item-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-item-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/label/page.css b/site/app/[locale]/design-system/review/label/page.css
index 345fe34ca..3aa30214b 100644
--- a/site/app/[locale]/design-system/review/label/page.css
+++ b/site/app/[locale]/design-system/review/label/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-label-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-label-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-label-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/legend/page.css b/site/app/[locale]/design-system/review/legend/page.css
index 80a90e83b..84a67111c 100644
--- a/site/app/[locale]/design-system/review/legend/page.css
+++ b/site/app/[locale]/design-system/review/legend/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-legend-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-legend-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-legend-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/measure/page.css b/site/app/[locale]/design-system/review/measure/page.css
index 029005c4f..086898d0a 100644
--- a/site/app/[locale]/design-system/review/measure/page.css
+++ b/site/app/[locale]/design-system/review/measure/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-measure-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-measure-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-measure-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/media/page.css b/site/app/[locale]/design-system/review/media/page.css
index 5772c3115..c27d49a5d 100644
--- a/site/app/[locale]/design-system/review/media/page.css
+++ b/site/app/[locale]/design-system/review/media/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-media-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-media-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-media-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/metrics/page.css b/site/app/[locale]/design-system/review/metrics/page.css
index 2fbe488ae..3480519a6 100644
--- a/site/app/[locale]/design-system/review/metrics/page.css
+++ b/site/app/[locale]/design-system/review/metrics/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-metrics-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-metrics-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-metrics-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/motion/page.css b/site/app/[locale]/design-system/review/motion/page.css
index 6b3cb1609..58fd28a34 100644
--- a/site/app/[locale]/design-system/review/motion/page.css
+++ b/site/app/[locale]/design-system/review/motion/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-motion-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-motion-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-motion-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/motion/page.tsx b/site/app/[locale]/design-system/review/motion/page.tsx
index 5988a2a96..e47011d82 100644
--- a/site/app/[locale]/design-system/review/motion/page.tsx
+++ b/site/app/[locale]/design-system/review/motion/page.tsx
@@ -14,18 +14,18 @@ export const metadata = {
const original =
animation:fade|slow|smooth
-
+
animation:zoom|fast|overshoot
-
+
function Preview({ candidate = false }: { candidate?: boolean }) {
return
}
diff --git a/site/app/[locale]/design-system/review/numeric-table/page.css b/site/app/[locale]/design-system/review/numeric-table/page.css
index ca04d37d4..7e334b3ef 100644
--- a/site/app/[locale]/design-system/review/numeric-table/page.css
+++ b/site/app/[locale]/design-system/review/numeric-table/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-numeric-table-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-numeric-table-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-numeric-table-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/numeric-table/page.tsx b/site/app/[locale]/design-system/review/numeric-table/page.tsx
index af00b3113..3b35ef742 100644
--- a/site/app/[locale]/design-system/review/numeric-table/page.tsx
+++ b/site/app/[locale]/design-system/review/numeric-table/page.tsx
@@ -22,7 +22,7 @@ function SpacingTable({ variant }: { variant: 'original' | 'current' | 'candidat
{entry.value}
{`${Number(entry.px.toFixed(4))}px`}
- {Array.from({ length: 5 }, (_, index) => )}
+ {Array.from({ length: 5 }, (_, index) => )}
)}
diff --git a/site/app/[locale]/design-system/review/palette/page.css b/site/app/[locale]/design-system/review/palette/page.css
index 1a495afb0..6909dd5c9 100644
--- a/site/app/[locale]/design-system/review/palette/page.css
+++ b/site/app/[locale]/design-system/review/palette/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-palette-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-palette-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-palette-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/scroll/page.css b/site/app/[locale]/design-system/review/scroll/page.css
index 45fb5489d..2c55feab6 100644
--- a/site/app/[locale]/design-system/review/scroll/page.css
+++ b/site/app/[locale]/design-system/review/scroll/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-scroll-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-scroll-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-scroll-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/source/page.css b/site/app/[locale]/design-system/review/source/page.css
index 3e8c05a6a..72eb5cd31 100644
--- a/site/app/[locale]/design-system/review/source/page.css
+++ b/site/app/[locale]/design-system/review/source/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-source-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-source-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-source-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/steps/page.css b/site/app/[locale]/design-system/review/steps/page.css
index 9cd90fe83..1bc65fb42 100644
--- a/site/app/[locale]/design-system/review/steps/page.css
+++ b/site/app/[locale]/design-system/review/steps/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-steps-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-steps-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-steps-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/surface/page.css b/site/app/[locale]/design-system/review/surface/page.css
index 38bd04240..9510e8a05 100644
--- a/site/app/[locale]/design-system/review/surface/page.css
+++ b/site/app/[locale]/design-system/review/surface/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-surface-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-surface-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-surface-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/swatch/page.css b/site/app/[locale]/design-system/review/swatch/page.css
index cb8c7448d..9617ec917 100644
--- a/site/app/[locale]/design-system/review/swatch/page.css
+++ b/site/app/[locale]/design-system/review/swatch/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-swatch-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-swatch-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-swatch-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/text/page.css b/site/app/[locale]/design-system/review/text/page.css
index df7cabbb9..619d2ca8f 100644
--- a/site/app/[locale]/design-system/review/text/page.css
+++ b/site/app/[locale]/design-system/review/text/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-text-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-text-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-text-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/utility-table/page.css b/site/app/[locale]/design-system/review/utility-table/page.css
index 94a6ea944..2a1b8a7b0 100644
--- a/site/app/[locale]/design-system/review/utility-table/page.css
+++ b/site/app/[locale]/design-system/review/utility-table/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-utility-table-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-utility-table-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-utility-table-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/viewport/page.css b/site/app/[locale]/design-system/review/viewport/page.css
index c4df5d71b..bb39d5491 100644
--- a/site/app/[locale]/design-system/review/viewport/page.css
+++ b/site/app/[locale]/design-system/review/viewport/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-viewport-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-viewport-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-viewport-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/design-system/review/waterfall/page.css b/site/app/[locale]/design-system/review/waterfall/page.css
index 13c516a6c..1aba79d6d 100644
--- a/site/app/[locale]/design-system/review/waterfall/page.css
+++ b/site/app/[locale]/design-system/review/waterfall/page.css
@@ -1,4 +1,3 @@
-@reference "../../../../globals.css";
.review-waterfall-review { width: min(100%, 78rem); margin: 0 auto; padding: clamp(3.75rem, 5vw, 5rem) clamp(1.25rem, 4vw, 3rem) 7rem; color: var(--color-text-body); }
.review-waterfall-kicker { color: var(--color-text-muted); font: 600 .6875rem/1.5 var(--font-family-mono); letter-spacing: .07em; text-transform: uppercase; }
.review-waterfall-review h1 { margin: .55rem 0 0; font-size: clamp(2rem, 4vw, 3.5rem); font-weight: 570; line-height: 1.08; letter-spacing: -.035em; }
diff --git a/site/app/[locale]/guide/ai-coding/content.mdx b/site/app/[locale]/guide/ai-coding/content.mdx
index 19c326da8..d416b8fe5 100644
--- a/site/app/[locale]/guide/ai-coding/content.mdx
+++ b/site/app/[locale]/guide/ai-coding/content.mdx
@@ -124,7 +124,7 @@ When editing Master CSS:
- Put resets and normalization in @layer base, broad project visual defaults in @layer defaults, and named UI classes in @layer components.
- For example, put button font inheritance in base, the page text color in defaults, and a .btn design in components; defaults does not mean browser defaults.
- Prefer existing @theme tokens. Use @utilities for on-demand primitives.
-- Use @compose only when a utility encapsulates shared behavior; native component classes cannot be composition targets or derive Master suffixes.
+- Write native declarations and selectors in CSS; use utilities directly in markup. Native component classes do not derive Master suffixes.
- Use the Master CSS MCP server when available. Without MCP, use CLI JSON fallback commands such as `npx @master/css-cli lint --format json --exit-code never` and `npx @master/css-cli inspect --format json --exit-code never`.
- Use ESLint for class policy diagnostics and the Master CSS Language Service for completion, hover, colors, highlighting, and directive formatting.
- Do not invent Master CSS APIs, directives, package names, or Tailwind-style syntax.
@@ -272,4 +272,6 @@ Use explicit `var(--name)` references inside raw values, including functions and
Resolve ambiguous short names with an explicit prefix, for example `font-family-brand` or `font-size-brand`. Check compiler diagnostics and generated declarations; the revised spelling alone does not establish CSS validity or improved AI accuracy.
+Use explicit dimensions: `width:20px height:20px` or `width-sm height-sm`. The preset no longer supplies `size`, `min-size`, or `max-size`; a project may explicitly define those names. Do not infer token identity from equal values or invent an alternative prefix that the project does not register. `flex` means `display:flex`, while `flex:1` and `flex:hover` are native `flex` declarations. To apply display on hover, write `display:flex:hover`.
+
When upgrading an existing v2 RC project, use [Migrating from Master CSS v2 RC](/guide/migration/v2-rc), preserve the original manifest and settings, and review migration proposals before applying them.
diff --git a/site/app/[locale]/guide/authoring-packages/content.mdx b/site/app/[locale]/guide/authoring-packages/content.mdx
index 543533f36..feea5b3db 100644
--- a/site/app/[locale]/guide/authoring-packages/content.mdx
+++ b/site/app/[locale]/guide/authoring-packages/content.mdx
@@ -106,18 +106,18 @@ The imported source becomes part of the project CSS entry graph. Project markup
```
-When a local CSS file only needs the package as compile-time context, use `@reference` instead:
+Packages imported by a project entry are already available to local stylesheets. To add a package only to one stylesheet's compile-time context, use `@reference`:
```css name=components/Button.module.css
-@reference '../app.css';
@reference '
';
.button {
- @compose content-auto;
+ content-visibility: auto;
+ contain-intrinsic-size: auto 32rem;
}
```
-`@reference` makes package tokens, variants, and utilities available while compiling the local stylesheet. It does not import the referenced package's output CSS by itself, so make sure the app entry that imports the package is also loaded by the page. See [Route-level styles](/guide/route-level-styles) for local stylesheet patterns.
+`@reference` makes package tokens, variants, and utilities available while compiling the local stylesheet. Required theme resources are included, but referenced native rules and generated utility classes are not. Load the package's CSS separately when those rules are needed. See [Route-level styles](/guide/route-level-styles) for local stylesheet patterns.
---
@@ -136,7 +136,7 @@ Use the package for shared vocabulary. Use the app CSS entry for local source bo
---
## Version vocabulary
-Treat exported tokens, utilities and native class names like public API. Native component CSS ships by default; its same-layer conflicts follow source order. A component class is not a target for `@compose` or Master suffixes.
+Treat exported tokens, utilities and native class names like public API. Native component CSS ships by default; its same-layer conflicts follow source order. Native classes do not derive Master suffixes.
Removing or renaming a token, variant, utility, or component class is a breaking change. Changing the generated CSS for an existing public class should be intentional and documented. Adding new tokens, variants, utilities, or component classes is usually a minor change when it does not alter existing output.
diff --git a/site/app/[locale]/guide/cascade-layers/content.mdx b/site/app/[locale]/guide/cascade-layers/content.mdx
index 7f2e9aa1f..ca957c916 100644
--- a/site/app/[locale]/guide/cascade-layers/content.mdx
+++ b/site/app/[locale]/guide/cascade-layers/content.mdx
@@ -20,6 +20,7 @@ Load the base stylesheet through the normal Master CSS entry. Generated rules co
## Look up a rule
- [How layers control the cascade](/reference/rules/layers#how-layers-control-the-cascade)
+- [Priority within and between layers](/reference/rules/layers#priority-matrix)
- [The five layers](/reference/rules/layers#the-five-layers)
- [Base](/reference/rules/layers#base)
- [Theme](/reference/rules/layers#theme)
diff --git a/site/app/[locale]/guide/cascade-layers/contract.mdx b/site/app/[locale]/guide/cascade-layers/contract.mdx
index d710fc235..73ad9a130 100644
--- a/site/app/[locale]/guide/cascade-layers/contract.mdx
+++ b/site/app/[locale]/guide/cascade-layers/contract.mdx
@@ -17,7 +17,7 @@ utilities > components > defaults > base > theme
Normal unlayered author rules take precedence over normal layered author rules. `!important` reverses the order between layers; it also gives important layered declarations precedence over important unlayered declarations. The order above describes normal declarations, not every case in the native cascade.
-Generated CSS emits rules into those layer blocks. Native style rules that use `@compose` or `@variant` lower to ordinary CSS in the stylesheet that contains them. These rules keep their authored layer, or remain unlayered when no layer was specified. Generated layer blocks do not add the base order statement themselves. See the [working card comparison](/guide/cascade-layers#override-a-component-locally) for a normal utility override.
+Generated CSS emits rules into those layer blocks. Native style rules that use `@variant` lower to ordinary CSS in the stylesheet that contains them. These rules keep their authored layer, or remain unlayered when no layer was specified. Generated layer blocks do not add the base order statement themselves. See the [working card comparison](/guide/cascade-layers#override-a-component-locally) for a normal utility override.
## The five layers \{#the-five-layers\}
### Theme \{#theme\}
@@ -40,17 +40,18 @@ For example, put `button { font: inherit; }` in `base`, `body { color: var(--col
### Components \{#components\}
Use `components` for project styles that carry product meaning: `.btn`, `.card`, `.field`, `.toolbar`, `.app-shell`. In project CSS, write native class selectors inside `@layer components`.
-
+
These native rules are emitted by default, even when unused. They follow CSS source order within the layer. Only explicit native pruning can remove unused selectors; `.btn` does not acquire Master suffixes or become a composition target.
### Utilities \{#utilities\}
-Use `utilities` for built-in utilities, animation utilities, and custom static utilities written in `@utilities`. Custom utilities can use native declarations, `@compose`, nested selectors, and `@variant` blocks.
+Use `utilities` for built-in utilities, animation utilities, and custom static utilities written in `@utilities`. Custom utilities can use native declarations, nested selectors, and `@variant` blocks.
```css name=index.css
@utilities {
flow {
- @compose grid gap-md;
+ display: grid;
+ gap: var(--spacing-md);
}
content-auto {
@@ -78,7 +79,7 @@ Add this configuration to the project CSS entry that imports `@master/css`. It d
@layer components {
.btn {
- @compose inline-flex;
+ display: inline-flex;
background-color: var(--color-primary);
}
}`} html={require('./tests/overview/template.html?raw')} />
@@ -129,7 +130,7 @@ With the base order loaded, normal utility declarations take precedence over nor
Here, `btn` defines `display: inline-flex`. The same button also uses `flex`, so the utilities layer sets its final display to `flex`:
-
+
Use this as the normal override path: keep reusable product styles in `components`, then use utilities in `utilities` for local adjustments.
@@ -170,24 +171,58 @@ Native `@layer` blocks remain ordinary stylesheet output; they do not define on-
@layer components {
.card {
- @compose block;
+ display: block;
border-radius: .75rem;
}
}
```
-Native style rules can still compose Master CSS utilities when the rule should remain ordinary stylesheet output:
+Write native declarations in the layer that owns the rule:
```css name=app.css
.card {
- @compose block p-md;
+ display: block;
+ padding: var(--spacing-md);
@dark {
- @compose bg-neutral-90;
+ background-color: var(--color-neutral-90);
}
}
```
+## Priority within and between layers \{#priority-matrix\}
+
+Class order in HTML does not choose the winner. Master CSS generates a stable
+rule order; the browser then applies its native cascade to matching declarations.
+The following cases assume the base layer statement is loaded and the root font
+size is 16px:
+
+| Competing classes or rules | Result | Reason |
+| --- | --- | --- |
+| `p-md p:8px`, in either order | `padding: 8px` | A direct value overrides a token for the same property and scope. |
+| `p-md! p:8px` | `padding: 1rem` | Importance takes precedence over value source. |
+| `p-md! p:8px!` | `padding: 8px` | With equal importance, the direct value wins. |
+| `p:8px@base p:12px` | `padding: 12px` | Normal utilities take precedence over the base layer. |
+| `p:8px@base! p:12px!` | `padding: 8px` | Important declarations reverse layer precedence. |
+| Unlayered `.outside { padding: 32px; }` and `p:8px` | `padding: 32px` | Normal unlayered CSS takes precedence over layered CSS. |
+| Component-layer `padding: 24px !important` and `p:8px!` | `padding: 24px` | The earlier component layer wins for important declarations. |
+| `p:8px pt:12px` | Top padding is `12px`; other sides are `8px` | The longhand supplies the more specific property override. |
+
+Selector and condition scope still matter. A hover or breakpoint rule only
+participates while its selector and conditions match. Direct values do not
+universally override tokens in other layers or scopes.
+
+Groups retain each member's property and value source. Native declarations retain
+duplicates and source order, including fallback values. A shorthand may reset
+properties omitted from its value, just as it does in CSS. `@compose` is removed;
+use native declarations and selectors in stylesheets and utilities directly in
+markup. See the [directive migration notice](/reference/directives/compose).
+
+Canonical spelling changes must preserve cascade behavior as well as declaration
+values. A tool cannot safely rewrite a class merely because its isolated CSS looks
+equivalent. Internal ordering keys and final deterministic tie-breakers are not
+extension APIs.
+
## Layer checklist \{#layer-checklist\}
Use the five layers in their declared order:
diff --git a/site/app/[locale]/guide/code-linting/content.mdx b/site/app/[locale]/guide/code-linting/content.mdx
index 11d61d125..ae7d6f369 100644
--- a/site/app/[locale]/guide/code-linting/content.mdx
+++ b/site/app/[locale]/guide/code-linting/content.mdx
@@ -99,7 +99,8 @@ Define project classes in the CSS entry when they are intentional:
```css name=index.css
@layer components {
.btn {
- @compose inline-flex px-md;
+ display: inline-flex;
+ padding-inline: var(--spacing-md);
}
}
```
@@ -116,57 +117,6 @@ Canonical fixes preserve value sources and cascade priority. A literal stays a l
Use the explicit [v2 RC migration command](/guide/migration/v2-rc#6-preview-and-apply-migration-proposals) for historical token syntax. Canonical linting does not guess the meaning of old colon tokens.
-The same rules apply inside parsed `@compose` class lists. Native declarations and variant blocks can make the retained intent explicit:
-
-```css
-.btn {
- @compose text-align:center contain:content bg-blue-60:hover@sm; /* [!code --] */
- text-align: center; /* [!code ++] */
- contain: content; /* [!code ++] */
- &:hover { @variant sm { @compose bg-blue-60; } } /* [!code ++] */
-}
-```
-
-Standalone CSS files are checked by the default `@master/eslint-config-css` export:
-
-```js name=eslint.config.js
-import { defineConfig } from 'eslint/config'
-import masterCSS from '@master/eslint-config-css'
-
-export default defineConfig([
- ...masterCSS
-])
-```
-
-Framework files with parsed `