Skip to content

fix(extractor): locate diagnostics and enforce deterministic evaluation - #757

Open
owjs3901 wants to merge 32 commits into
mainfrom
fix/located-diagnostics
Open

owjs3901 wants to merge 32 commits into
mainfrom
fix/located-diagnostics

Conversation

@owjs3901

@owjs3901 owjs3901 commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Refs #685, #694 (W19가 확인한 오류 위치, 결정적 build-time 평가). #750 위에 쌓은 브랜치이며 #750과 그 선행 PR들이 먼저 병합되어야 합니다. PR base는 요청대로 main입니다.

요약

extractor의 파싱, 모듈 해석, stylesheet 실행 오류를 원본 파일:줄:열과 원인·수정 방법으로 보고합니다. TypeScript 제거, import 별칭, 모듈 치환, 생성 prelude를 역매핑하므로 가져온 helper/stylesheet와 import-cycle 조기 읽기도 실제 원본 위치를 가리킵니다.

두 Boa 평가 경로가 공통 deterministic sandbox를 사용합니다. 실행에서 실패한 stylesheet를 일반 추출로 다시 처리해서 CSS를 내보내지 않으며, 원래 코드의 의미와 정확히 같은 정적 추출만 실행 전에 선택합니다.

동작

  • 최초 베이스 29812f376f62b74071080aec2f35efb9f0424d0f를 직접 빌드한 WASM에서 요청한 다섯 항목을 모두 먼저 재현했습니다.
  • fatal Oxc parse는 첫 parser diagnostic의 원본 label 위치와 Oxc 메시지를 보존합니다.
  • import/re-export/literal require 해석 실패는 이를 요구한 원본 파일과 위치를 표시합니다. JS resolver callback·getter 예외와 잘못된 반환값은 일반 cannot-resolve로 바꾸지 않고 원래 원인을 유지합니다.
  • 실행 및 객체 직렬화 오류도 같은 위치 매핑을 사용하며, 생성 코드의 좌표를 사용자 코드의 좌표로 표시하지 않습니다.
  • 금지된 읽기는 호스트가 기록하므로 사용자 코드가 예외를 catch해도 빌드가 실패합니다. 시간·난수·환경·locale 값 대신 literal 또는 CSS 변수를 사용해야 합니다.
  • 합법적인 변수 이름 __style_1__이 내부 placeholder와 충돌해 export/CSS를 잃던 문제를 별도 map으로 이름을 옮겨 수정했습니다. getter·toJSON 등의 예외가 빈 스타일로 바뀌던 직렬화도 오류를 전파합니다.
  • 새 runtime과 의존성을 추가하지 않았습니다. changepack은 WASM package Patch만 포함합니다.
  • package 이름의 단순 prefix를 API package로 오인하던 버그도 수정했습니다. @devup-ui/react-values나 사용자 지정 @my/ui-tokens는 외부 module로 해석해 알려진 값을 static CSS로 inline하며, bare package와 /compat 등 실제 subpath는 그대로 API package로 취급합니다. 모든 비정확 import 경계 비교는 같은 helper를 사용하며 새로운 오류는 추가하지 않습니다.
  • 평가한 helper의 CSS import는 stripped module에 남는 import만 유지합니다. bare import는 항상, TS value import는 binding의 value 참조가 있을 때, JS/JSX/MJS/CJS는 unused value import도 유지합니다. helper import 위치에서 dependency-first 깊이 우선·source 순서로 출력하고 root의 직접 import까지 같은 resolved file의 첫 발생만 남깁니다. helper 디렉터리에서 resolver로 찾은 파일을 root-relative ./ 또는 ../ 경로와 forward slash로 내보내며 query suffix를 보존합니다. CSS content는 extractor dependency가 아니고, helper JavaScript의 효과는 build-time에만 실행됩니다.
  • CSS module binding의 class 이름은 추측하지 않습니다. default/namespace 객체 자체를 전달하거나 typeof로 확인하는 것은 허용하지만 property·conversion·in·열거·descriptor·prototype 관찰과 named binding의 value 읽기는 호스트가 기록하여 catch 후에도 실패합니다. 실행되지 않는 함수 안의 읽기는 오류가 아니며 해당 value import는 유지합니다.

새로 생기는 오류

변경되거나 추가된 메시지는 모두 원본 위치와 원인·수정 방법을 포함합니다.

  • source parse: 치명적인 오류뿐 아니라 Oxc가 복구할 수 있는 문법 오류와 semantic early error도 trigger입니다. 잘못된 JSX, 최상위 return, 잘못된 정규식, 중복 lexical 선언, module의 legacy octal을 포함하며 Cannot parse source: <Oxc 메시지>의 원본 지점에서 문법을 고칩니다. 오류가 있는 소스를 유효해 보이는 JS로 고쳐 쓰거나 CSS와 함께 성공시키지 않습니다.
  • 지원하지 않는 확장자: 입력 파일의 위치와 기존 Unknown file extension 원인을 보고합니다. 지원하는 JS/TS 확장자를 사용합니다.
  • stylesheet parser/semantic 오류: 잘못된 imported source와 중복 lexical 선언을 실행 전에 차단합니다. 표시된 원본 위치의 문법/선언을 고칩니다.
  • module resolver 없음/미해석: 값을 읽는 import/re-export/literal require가 trigger입니다. Devup plugin의 resolver를 사용하거나 import 경로·파일·bundler 해석 설정을 고칩니다.
  • root CommonJS stylesheet의 package require도 module error를 fallback으로 숨기지 않고 실제 require 위치에서 보고합니다. stylesheet API는 ESM import로 작성하거나 해당 module 경로와 resolver 원인을 고쳐야 하며, 실패한 CommonJS 실행을 CSS와 함께 성공시키지 않습니다.
  • JS resolver 예외/잘못된 결과: callback, path/code getter 예외 또는 non-object/non-string/빈 path가 trigger입니다. 원래 메시지를 유지하며 resolver를 고치고 {path:string,code:string} 또는 미해석을 뜻하는 null/undefined를 반환합니다.
  • stylesheet 실행 예외: 사용자 throw, 잘못된 값 접근·호출·생성, import-cycle 초기화 전 읽기, imported helper/stylesheet 예외가 trigger입니다. 원인을 고치거나 cycle을 없애고 두 모듈 초기화 뒤에 읽습니다.
  • 비결정적 읽기: Date, Math.random, performance, crypto, host/browser/process 환경, Intl/locale/Unicode 의존 읽기가 trigger입니다. catch해도 실패하며 literal 또는 CSS 변수를 사용합니다.
  • guard로 교체한 intrinsic의 descriptor나 변환된 function source를 읽어 CSS를 고르는 경우도 실패합니다. Object/Reflect descriptor API 및 legacy __lookupGetter__/__lookupSetter__가 synthetic accessor 정보로 다른 CSS를 조용히 선택하지 않도록 원래 guarded slot을 추적하고, Function.prototype.toString은 build instrumentation이 바꾸는 source text를 반환하므로 literal/CSS 변수로 바꾸도록 안내합니다. 일반 사용자 객체의 getter/setter/descriptor와 명시적으로 덮어쓴 사용자 값은 유지합니다.
  • 스타일/export 객체 직렬화 예외: getter, toJSON, proxy/array 읽기와 cyclic rule 직렬화 실패가 trigger입니다. 던지는 코드나 cycle을 없애고 정확히 직렬화할 수 있는 static data를 사용합니다.
  • serializer 설정 오류: 사용자 코드가 JSON.stringify를 호출 불가능한 값으로 바꾼 경우 JSON.stringify is not callable 원인을 그대로 보고합니다. 내장 serializer를 덮어쓰지 않습니다.
  • 내부 source-map 오류: retained stylesheet 코드에 필요한 map/content가 없거나 잘못된 map을 읽는 경우 Cannot trace retained stylesheet code 또는 Cannot read stylesheet source map과 원인을 파일 위치로 보고합니다. 내부 오류를 재현 가능한 원본과 함께 보고하도록 안내하며, 잘못된 좌표나 빈 CSS로 대신 성공하지 않습니다.
  • 내부 build-time helper 초기화 오류: 초기화가 실제로 실패하면 원래 JavaScript 원인과 report internal evaluation setup failure 안내를 유지합니다. 사용자 소스를 임의로 바꾸거나 오류를 빈 결과로 대신하지 않고 재현 가능한 입력과 함께 내부 오류를 보고합니다.
  • 실제 실행 실패 뒤의 fallback은 삭제했습니다. 단순히 Devup API import가 없어졌다는 이유로 오류를 숨기지 않습니다. 실행 전의 정적 증명이 통과하는 모듈만 일반 추출하며, 그 밖의 모듈은 실행의 성공이 필요합니다.
  • imported literal의 값이 알려졌다는 사실만으로 helper의 실행 효과를 건너뛰지 않습니다. helper의 throw나 catch한 금지 읽기도 실제 helper의 원본 위치에서 실패합니다. 반면 실행되지 않는 함수 선언과 정확한 Devup helper 계산은 일반 .tsx와 동일한 결과를 유지합니다(twice(3)을 w에 주면 Devup spacing 변환으로 24px).
  • 평가하는 helper가 bare import로 읽는 JavaScript dependency의 실행 효과도 유지합니다. transitive dependency의 throw와 catch한 Date 읽기는 해당 dependency의 원본 위치에서 실패하며, 정상 dependency도 watch 목록에서 빠지지 않습니다. 원래 유지하던 외부/CSS side-effect import 규칙은 별도로 보존합니다.
  • helper CSS 해석 실패: style import를 찾지 못하면 helper의 원본 import 위치, specifier, helper를 통해 stylesheet가 CSS를 불러오지만 파일을 찾을 수 없다는 원인과 correct the path or import CSS from a component module 수정 방법을 보고합니다. 다른 Windows drive 또는 호환되지 않는 root이면 원본 import 위치에서 양쪽 경로를 보고하고 같은 drive를 쓰거나 component module에서 CSS를 import하도록 안내합니다. 절대 경로 import로 대체하지 않습니다.
  • CSS export 관찰: bundler가 생성하는 class 이름은 build-time에 알 수 없으므로 default/namespace의 property·conversion·in·키 열거·descriptor·prototype 관찰이나 named binding의 value 읽기는 첫 실제 원본 읽기 위치, CSS 파일, key 또는 operation을 보고합니다. catch하거나 예외 객체를 바꾸어도 실패하며 같은 site의 반복 읽기는 하나로 기록합니다. Fix는 한 번만 표시하고 runtime component의 className={styles.card}에서 읽거나 css()로 스타일을 쓰도록 안내합니다.

남는 한계

theme/devup.json과 plugin config loading은 W34, StyleX는 #758 범위라 수정하지 않았습니다. vanilla-extract theme 계약과 cross-module vars는 W35이며, 기존 Vite plugin 문제는 #755 범위입니다. imported_constants의 shadowed require 탐색은 #756 (W22c)에 coordinator를 통해 보고했으며 해당 브랜치를 합치지 않았습니다.

helper의 CSS import를 찾지 못한 실패 경로는 성공한 extraction의 dependency 목록을 bundler에 반환할 수 없습니다. 누락 CSS 파일을 생성한 뒤 stylesheet를 다시 저장해 재변환해야 합니다. 성공 시 CSS content를 extractor dependency에 넣지 않고 출력 import로 bundler가 추적하므로 정상 CSS 수정은 CSS HMR 경로를 유지합니다.

TypeScript의 기본 import elision을 따르므로 binding이 value로 참조되지 않는 TS CSS import는 유지하지 않습니다. .js/.jsx/.mjs/.cjs는 unused value import도 유지합니다. verbatimModuleSyntax/preserveValueImports 설정을 읽는 기능은 이 PR에 포함되지 않으므로 해당 프로젝트의 unused TS value import 보존 설정은 남는 한계이며 coordinator가 별도로 라우팅합니다.

같은 source에 있던 sandbox prelude가 정확한 local Math 상수까지 TDZ로 막던 경우도 제거했습니다. local max: () => 1은 builtin Math.max로 취급하지 않고 실제 1을 계산하며, 회귀 테스트는 Devup 변환 결과 width:4px 전체를 검증합니다. 정적으로 알 수 없는 shadowed Math/ambient 선언 입력은 기존 오류 또는 CSS 변수 경로를 유지합니다.

검증

  • 최종 head: 6d0c9c837598a08103051f51effda5ea65ffb2fc. Linux CI 37272641562는 Rust coverage 13650/13650 = 100.00%, 테스트, publish의 landing E2E 두 모드, landing-next-e2e, vinext-rsc-css-e2e 및 benchmark를 통과했습니다. 전체 conclusion은 failure이며 유일하게 실패한 step은 Upload to codecov.io입니다. cli.codecov.io의 Codecov CLI 다운로드에서 curl: (35) ... sslv3 alert handshake failure가 발생했고 뒤이어 내려받지 못한 codecov.SHA256SUM.sig의 GPG 확인이 실패한 외부 장애입니다. workflow나 검증을 약화하지 않았고, coordinator가 서비스 복구 뒤 실패 job을 재실행·확인합니다. upload 성공이나 전체 green을 주장하지 않습니다. Verify clean publish checkout과 changepack publish 단계는 skipped이므로 통과·배포로 표시하지 않습니다.
  • native workspace 테스트 3133개(그중 extractor 2410개), Rust 1.99 all-target clippy, cargo fmt, root build 및 모든 커밋의 기본 hook을 통과했습니다. lint는 0 error와 기존 2 warning입니다.
  • Bun: 로컬 5504 pass / 0 fail, Linux CI 5512 pass / 0 fail. CI aggregate 함수·줄 coverage 100%; 별도 로컬 파일인 기존 Vite comment line 303의 99.63%는 fix(plugin-core): align bundler resolution, roots and WASM diagnostics #755 범위이며 수정하지 않았습니다. publish의 Bun preload 회귀 6개와 landing E2E 130개씩 두 모드도 성공했습니다.
  • 최종 재빌드 WASM의 48개 공개 probe: 48 PASS. 아래 출력은 실제 before/after이며 긴 로컬 prefix와 공통 theme header만 줄였습니다.
  • package 경계 공개 probe: 별도 12 PASS. 기본·사용자 지정 package의 sibling 값은 static CSS로, 실제 bare/subpath API는 기존대로 처리하며 sibling side-effect import도 잃지 않습니다.
  • 추가 공개 probe: proof gap 15, Oracle repair 12, CSS import retention 13, CSS observation 17개 모두 PASS. CSS observation은 catch한 금지 관찰 14개가 원본 위치의 fatal 오류이며 typeof·객체 전달·미호출 함수 3개는 성공합니다.
  • 직전 repair head CI 37267674033은 coverage 13645/13650 = 99.96%만 실패했고 benchmark/Next/vinext는 성공했습니다. CI가 가리킨 absolute-root/leading-relative-parent path normalization 및 computed/private member provenance를 인접한 의미 있는 테스트로 보강했습니다. coverage 제외 없이 최종 run에서 다시 측정했습니다.
  • Windows 기본 main-thread stack에서 unchanged debug benchmark 14개 전부 성공했습니다. stack 환경 변수·linker flag·큰 stack thread·benchmark 제외는 없습니다. 기존 베이스의 all-target LLVM coverage 97.86%와 Windows 측정은 Linux 100% 판정을 대신하지 않습니다.
  • Rust LSP daemon은 timeout, JS LSP는 설치되지 않아 LSP-clean은 주장하지 않습니다. 실제 compiler/clippy/test/WASM 및 Linux CI로 검증했습니다.
  • foreground read-only delta Oracle 1회는 legacy accessor lookup 및 evaluated helper의 bare dependency 누락 두 P1을 발견해 REJECT했습니다. 두 항목은 failing-before 회귀, 별도 수정 commit 및 재빌드 WASM/native/CI로 해소했습니다(gate-delta-resolution.md). coordinator 지시대로 두 번째 Oracle는 호출하지 않았으며 첫 판정은 승인으로 바꾸지 않았습니다.
  • gate 이전 head 3dc297ca의 CI 37245692977은 두 attempt 모두 Rust 13430/13430 = 100% 및 테스트/E2E/benchmark를 통과했고 Codecov CLI 인증서/TLS/GPG 다운로드만 실패했습니다. 최종 repair head의 측정은 위 새 run에 따로 기록합니다.

Oracle 지적별 해소

  • imported literal만 확인하고 helper의 throw/금지 읽기를 건너뛰던 정적 증명: dca611f6에서 dependency graph의 실행 효과까지 재귀적으로 증명한 뒤에만 exact precompute를 허용했습니다. helper/transitive throw·caught Date·cycle negative와 pure helper control이 15개 공개 probe로 검증되었습니다.
  • inert 함수 선언과 exact twice(3) 계산을 stylesheet가 잘못 거부: Function shape를 plain data와 구분하고 기존 exact evaluator를 실행 전 dispatch에 재사용했습니다. 미호출 함수는 성공하고 호출한 Date 함수는 실패하며 .css.ts와 .tsx 모두 width:24px입니다. Function/data branch join gap도 별도 9개 회귀로 막았습니다.
  • 일반 extractor의 recoverable parser/semantic early error 수용: 06c66b96에서 parser diagnostic, regex 검증 및 semantic syntax 검증의 첫 원본 label을 전파했습니다. 최상위 return·잘못된 regex·중복 const·octal의 이전 성공이 원본 위치의 build error로 바뀐 실제 출력은 아래에 있습니다.
  • synthetic getter 노출로 red 대신 blue CSS 선택: descriptor/Function-source guard를 보강한 뒤 042d6a69에서 legacy getter/setter의 반환 accessor identity까지 호스트가 추적하고 throw 전에 기록했습니다. 일반 사용자 accessor와 override는 유지하며 anonymous callee의 sparse source-map mark를 구조적으로 보완해 정확한 원본 expression token을 보고합니다. legacy 6개 fatal과 일반 accessor/override 3개 control을 공개 WASM으로 검증했습니다.
  • evaluated helper의 bare dependency 누락: 042d6a69에서 기존 loader/cache/cycle/definition 경로로 helper의 JavaScript bare dependency를 source/DFS 순서대로 한 번 실행하고 dependency 목록에 남겼습니다. effect 파일의 throw·caught Date는 원본 effect 위치에서 실패하고 pure effect/helper는 둘 다 추적됩니다. 확장한 CSS retention/관찰 규칙도 13+17개 공개 probe와 인접 native 회귀로 검증했습니다.
parser: before / after
BEFORE
=== ERROR ===
Parser panicked
AFTER
=== ERROR ===
fixtures/syntax-before.tsx:2:31: Cannot parse source: Unterminated regular expression. Fix: correct the syntax at this location
no-resolver: before / after
BEFORE
=== ERROR ===
Cannot load './tokens' without a module resolver
AFTER
=== ERROR ===
fixtures/resolve.css.ts:2:23: Cannot load './tokens' without a module resolver. Fix: build through a Devup UI plugin, which resolves imports, or write what './tokens' provides in this file
missing: before / after
BEFORE
=== ERROR ===
Cannot resolve './missing' from 'fixtures/missing-before.css.ts'
AFTER
=== ERROR ===
fixtures/missing-before.css.ts:2:23: Cannot resolve './missing' from 'fixtures/missing-before.css.ts'. Fix: check that './missing' exists with a supported extension and that the bundler's resolver can find it from this file
cycle: before / after
BEFORE
=== ERROR ===
JS execution error: ReferenceError: Cannot access 'color' of 'fixtures/cycle-a.ts' before its initialization: it is part of an import cycle (unknown at :11:3)
    at get (unknown at :1:157)
    at <main> (unknown at :9:28)
    at <main> (unknown at :11:3)
AFTER
=== ERROR ===
fixtures/cycle-b.ts:2:22: JS execution error: ReferenceError: Cannot access 'color' of 'fixtures/cycle-a.ts' before its initialization: it is part of an import cycle. Fix: break the import cycle, or read the imported value only after both modules finished evaluating, for example inside a function called later
    at <main> (fixtures/cycle-b.ts:2:22)
throw: before / after
BEFORE
=== ERROR ===
JS execution error: Error: fixture boom (unknown at :2:7)
    at <main> (unknown at :2:7)
AFTER
=== ERROR ===
fixtures/throw-before.css.ts:2:7: JS execution error: Error: fixture boom. Fix: remove or guard the code that fails here, or correct the cause above, so the stylesheet evaluates without throwing
    at <main> (fixtures/throw-before.css.ts:2:7)
imported-stylesheet: before / after
BEFORE
=== ERROR ===
JS execution error: Error: imported stylesheet boom (unknown at :3:7)
    at <main> (unknown at :3:7)
AFTER
=== ERROR ===
fixtures/broken.css.ts:4:7: JS execution error: Error: imported stylesheet boom. Fix: remove or guard the code that fails here, or correct the cause above, so the stylesheet evaluates without throwing
    at <main> (fixtures/broken.css.ts:4:7)
imported-helper: before / after
BEFORE
=== ERROR ===
JS execution error: Error: imported helper boom (unknown at :13:3)
    at fail (unknown at :9:8)
    at <main> (unknown at :11:19)
    at <main> (unknown at :13:3)
AFTER
=== ERROR ===
fixtures/broken-helper.ts:4:9: JS execution error: Error: imported helper boom. Fix: remove or guard the code that fails here, or correct the cause above, so the stylesheet evaluates without throwing
    at fail (fixtures/broken-helper.ts:4:9)
    at <main> (fixtures/broken-helper.ts:6:34)
resolver-throw: before / after
BEFORE
=== ERROR ===
Cannot resolve './tokens' from 'fixtures/resolve.css.ts'
AFTER
=== ERROR ===
fixtures/resolve.css.ts:2:23: module resolver failed for `./tokens` from `fixtures/resolve.css.ts`: resolver fixture: permission denied
Fix: repair the module resolver; return {path:string,code:string} with a non-empty path, or null/undefined for an unresolved module.
resolver-getter: before / after
BEFORE
=== ERROR ===
Cannot resolve './tokens' from 'fixtures/resolve.css.ts'
AFTER
=== ERROR ===
fixtures/resolve.css.ts:2:23: module resolver failed for `./tokens` from `fixtures/resolve.css.ts`: resolver fixture: path getter failed
Fix: repair the module resolver; return {path:string,code:string} with a non-empty path, or null/undefined for an unresolved module.
resolver-malformed: before / after
BEFORE
=== ERROR ===
Cannot resolve './tokens' from 'fixtures/resolve.css.ts'
AFTER
=== ERROR ===
fixtures/resolve.css.ts:2:23: module resolver failed for `./tokens` from `fixtures/resolve.css.ts`: malformed module resolver result: `path` must be a string
Fix: repair the module resolver; return {path:string,code:string} with a non-empty path, or null/undefined for an unresolved module.
clock-first: before / after
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{width:1791113503291px}
AFTER
=== ERROR ===
fixtures/clock.css.ts:2:39: JS execution error: ReferenceError: `Date` cannot be read at build time: the time it gives differs on every build. Fix: use a literal or a CSS variable for `Date`: the time it gives differs on every build
    at <read> (fixtures/clock.css.ts:2:39)
clock-second: before / after
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{width:1791113503389px}
AFTER
=== ERROR ===
fixtures/clock.css.ts:2:39: JS execution error: ReferenceError: `Date` cannot be read at build time: the time it gives differs on every build. Fix: use a literal or a CSS variable for `Date`: the time it gives differs on every build
    at <read> (fixtures/clock.css.ts:2:39)
caught-clock: before / after
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{width:1791113502929px}
AFTER
=== ERROR ===
fixtures/caught-clock.css.ts:3:15: JS execution error: ReferenceError: `Date` cannot be read at build time: the time it gives differs on every build. Fix: use a literal or a CSS variable for `Date`: the time it gives differs on every build
    at <read> (fixtures/caught-clock.css.ts:3:15)
devup-fallback: before / after
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
throw new Error("fixture boom");
export const red = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
fixtures/css-fallback.css.ts:2:7: JS execution error: Error: fixture boom. Fix: remove or guard the code that fails here, or correct the cause above, so the stylesheet evaluates without throwing
    at <main> (fixtures/css-fallback.css.ts:2:7)
style-getter-throw: before / after
BEFORE
=== CODE ===
export const card = "";
=== CSS (theme header omitted) ===

AFTER
=== ERROR ===
fixtures/getter-throw.css.ts:2:49: JS execution error: Error: style getter boom. Fix: remove or guard the code that fails here, or correct the cause above, so the stylesheet evaluates without throwing
    at get width (fixtures/getter-throw.css.ts:2:49)
    at stringify (native)
    at style (native)
    at <main> (fixtures/getter-throw.css.ts:2:26)
placeholder-name: before / after
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const second = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const __style_1__ = "a";
export const second = "b";
=== CSS (theme header omitted) ===
.b{color:blue}.a{color:red}
gate effects-throw: before / after
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { color } from "./helper";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
fixtures/effects-throw.ts:2:7: JS execution error: Error: helper boom. Fix: remove or guard the code that fails here, or correct the cause above, so the stylesheet evaluates without throwing
    at <main> (fixtures/effects-throw.ts:2:7)
gate effects-caught-clock: before / after
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { color } from "./helper";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
fixtures/effects-caught-clock.ts:2:7: JS execution error: ReferenceError: `Date` cannot be read at build time: the time it gives differs on every build. Fix: use a literal or a CSS variable for `Date`: the time it gives differs on every build
    at <read> (fixtures/effects-caught-clock.ts:2:7)
gate unused-function: before / after
BEFORE
=== ERROR ===
/src/card.css.ts:3:24: JS execution error: TypeError: not a callable function. Fix: check that every value read, called or constructed here exists when the stylesheet is evaluated at build time
    at <main> (/src/card.css.ts:3:24)
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
function unused() {}
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
gate twice-css: before / after
BEFORE
=== ERROR ===
/src/card.css.ts:3:24: JS execution error: TypeError: not a callable function. Fix: check that every value read, called or constructed here exists when the stylesheet is evaluated at build time
    at <main> (/src/card.css.ts:3:24)
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
const twice = (n: number) => n * 2;
export const card = "a";
=== CSS (theme header omitted) ===
.a{width:24px}
recoverable-0: before / after
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
return 1;
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
fixtures/recoverable-0.tsx:2:1: Cannot parse source: A 'return' statement can only be used within a function body. Fix: correct the syntax at this location
recoverable-1: before / after
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
const invalid = /[z-a]/;
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
fixtures/recoverable-1.tsx:2:20: Cannot parse source: Invalid regular expression: Character class atom range out of order. Fix: correct the syntax at this location
recoverable-2: before / after
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
const repeated = 1;
const repeated = 2;
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
fixtures/recoverable-2.tsx:2:7: Cannot parse source: Identifier `repeated` has already been declared. Fix: correct the syntax at this location
recoverable-3: before / after
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
const invalid = 1;
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
fixtures/recoverable-3.tsx:2:17: Cannot parse source: '0'-prefixed octal literals and octal escape sequences are deprecated. Fix: correct the syntax at this location
guarded-descriptors: 기록된 이전 관찰 / 실제 after

descriptor-result.md의 기존 WASM 관찰: export const card = "a"; 및 .a{color:blue}. 보호용 accessor의 value가 undefined인 정보를 노출해 일반 JS와 다른 분기를 선택했습니다.

AFTER
=== ERROR ===
fixtures/reflected-random.css.ts:2:36: JS execution error: ReferenceError: `Math.random` cannot be read at build time: the chance it gives differs on every build. Fix: use a literal or a CSS variable for `Math.random`: the chance it gives differs on every build
    at <read> (fixtures/reflected-random.css.ts:2:36)
function-source: 기록된 이전 관찰 / 실제 after

W32-progress.md의 기존 WASM 관찰: 함수에 삽입한 _devup_read_site 문자열을 읽어 blue CSS를 선택했습니다. 원래 함수 소스를 읽는 의미를 보존하지 못했습니다.

AFTER
=== ERROR ===
fixtures/function-source.css.ts:3:36: JS execution error: ReferenceError: `Function.prototype.toString` cannot be read at build time: its text changes when the build transforms the function. Fix: use a literal or a CSS variable for `Function.prototype.toString`: its text changes when the build transforms the function
    at <read> (fixtures/function-source.css.ts:3:36)
package 경계: 실제 before / after 12개
@devup-ui/react:css-sibling
BEFORE
=== ERROR ===
/src/shared.ts:1:108: `css()` cannot use `value` at build time: its values must be literals, theme tokens or constants, or be computed from them
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { value } from "@devup-ui/react-values";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
@devup-ui/react:jsx-sibling
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { value } from "@devup-ui/react-values";
export const View = <div className="a c" style={{ "--b": value }} />;
=== CSS (theme header omitted) ===
.a{color:var(--b)}.c{padding:16px}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { value } from "@devup-ui/react-values";
export const View = <div className="a b" />;
=== CSS (theme header omitted) ===
.a{color:red}.b{padding:16px}
@devup-ui/react:api
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
@devup-ui/react:api/compat
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
@devup-ui/react:side-effect-sibling
BEFORE
=== CODE ===
export const token = "var(--var-0-0)";
=== CSS (theme header omitted) ===

AFTER
=== CODE ===
import "@devup-ui/react-values";
export const token = "var(--var-0-0)";
=== CSS (theme header omitted) ===

@devup-ui/react:generated-css-subpath
BEFORE
=== CODE ===
export const token = "var(--var-0-0)";
=== CSS (theme header omitted) ===

AFTER
=== CODE ===
export const token = "var(--var-0-0)";
=== CSS (theme header omitted) ===

@my/ui:css-sibling
BEFORE
=== ERROR ===
/src/shared.ts:1:90: `css()` cannot use `value` at build time: its values must be literals, theme tokens or constants, or be computed from them
AFTER
=== CODE ===
import "@my/ui/devup-ui.css";
import { value } from "@my/ui-tokens";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
@my/ui:jsx-sibling
BEFORE
=== CODE ===
import "@my/ui/devup-ui.css";
import { value } from "@my/ui-tokens";
export const View = <div className="a c" style={{ "--b": value }} />;
=== CSS (theme header omitted) ===
.a{color:var(--b)}.c{padding:16px}
AFTER
=== CODE ===
import "@my/ui/devup-ui.css";
import { value } from "@my/ui-tokens";
export const View = <div className="a b" />;
=== CSS (theme header omitted) ===
.a{color:red}.b{padding:16px}
@my/ui:api
BEFORE
=== CODE ===
import "@my/ui/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@my/ui/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
@my/ui:api/compat
BEFORE
=== CODE ===
import "@my/ui/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@my/ui/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
@my/ui:side-effect-sibling
BEFORE
=== CODE ===
export const token = "var(--var-0-0)";
=== CSS (theme header omitted) ===

AFTER
=== CODE ===
import "@my/ui-tokens";
export const token = "var(--var-0-0)";
=== CSS (theme header omitted) ===

@my/ui:generated-css-subpath
BEFORE
=== CODE ===
export const token = "var(--var-0-0)";
=== CSS (theme header omitted) ===

AFTER
=== CODE ===
export const token = "var(--var-0-0)";
=== CSS (theme header omitted) ===

Oracle 두 P1 해소: 실제 before / after 12개
legacy-function-getter
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:blue}
AFTER
=== ERROR ===
/src/card.css.ts:3:38: JS execution error: ReferenceError: `Function.prototype.toString` cannot be read at build time: its text changes when the build transforms the function. Fix: use a literal or a CSS variable for `Function.prototype.toString`: its text changes when the build transforms the function
    at <read> (/src/card.css.ts:3:38)
legacy-math-getter
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:blue}
AFTER
=== ERROR ===
/src/card.css.ts:3:37: JS execution error: ReferenceError: `Math.random` cannot be read at build time: the chance it gives differs on every build. Fix: use a literal or a CSS variable for `Math.random`: the chance it gives differs on every build
    at <read> (/src/card.css.ts:3:37)
legacy-function-setter
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:blue}
AFTER
=== ERROR ===
/src/card.css.ts:3:38: JS execution error: ReferenceError: `Function.prototype.toString` cannot be read at build time: its text changes when the build transforms the function. Fix: use a literal or a CSS variable for `Function.prototype.toString`: its text changes when the build transforms the function
    at <read> (/src/card.css.ts:3:38)
legacy-math-setter
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:blue}
AFTER
=== ERROR ===
/src/card.css.ts:3:37: JS execution error: ReferenceError: `Math.random` cannot be read at build time: the chance it gives differs on every build. Fix: use a literal or a CSS variable for `Math.random`: the chance it gives differs on every build
    at <read> (/src/card.css.ts:3:37)
legacy-date-getter
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:blue}
AFTER
=== ERROR ===
/src/card.css.ts:3:37: JS execution error: ReferenceError: `Date` cannot be read at build time: the time it gives differs on every build. Fix: use a literal or a CSS variable for `Date`: the time it gives differs on every build
    at <read> (/src/card.css.ts:3:37)
legacy-date-setter
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:blue}
AFTER
=== ERROR ===
/src/card.css.ts:3:37: JS execution error: ReferenceError: `Date` cannot be read at build time: the time it gives differs on every build. Fix: use a literal or a CSS variable for `Date`: the time it gives differs on every build
    at <read> (/src/card.css.ts:3:37)
ordinary-getter
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
ordinary-setter
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
own-random-override
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
bare-helper-throw
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/effect.ts:2:7: JS execution error: Error: side-effect boom. Fix: remove or guard the code that fails here, or correct the cause above, so the stylesheet evaluates without throwing
    at <main> (/src/effect.ts:2:7)
bare-helper-caught-date
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/effect.ts:2:7: JS execution error: ReferenceError: `Date` cannot be read at build time: the time it gives differs on every build. Fix: use a literal or a CSS variable for `Date`: the time it gives differs on every build
    at <read> (/src/effect.ts:2:7)
bare-helper-pure
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
helper CSS import: 실제 before / after 13개

unused TS default/named/namespace import는 기본 elision에 따라 출력하지 않는 정상 control입니다. value로 참조되지만 호출되지 않는 함수의 import는 유지되며, JS/CJS의 unused load는 native 회귀가 별도로 검증합니다.

bare-css
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./theme.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
other-directory
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "../helpers/theme.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
package-exports-css
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "../node_modules/theme/dist/main.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
default-unused
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
named-unused
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
namespace-unused
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
query-suffix
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./theme.module.css?inline";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
root-helper-order
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./before.css";
import "./after.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./before.css";
import "./theme.module.css";
import "./after.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
root-helper-dedup
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./theme.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./theme.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
missing-css
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/project/src/helper.ts:1:8: Cannot resolve CSS './theme.module.css' from '/project/src/helper.ts': the stylesheet loads CSS through this helper and the file cannot be found. Fix: correct the path or import CSS from a component module; after creating a missing file, re-save the stylesheet to retry
css-export-read
BEFORE
=== ERROR ===
/project/src/theme.module.css:1:1: JS execution error: SyntaxError: Unexpected token. Fix: correct the syntax at this location
AFTER
=== ERROR ===
/project/src/helper.ts:2:22: JS execution error: ReferenceError: Cannot read CSS export 'card' of '/project/src/theme.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/project/src/helper.ts:2:22)
    at  (/project/src/helper.ts:2:22)
uncalled-css-export-read
BEFORE
=== ERROR ===
/project/src/theme.module.css:1:1: JS execution error: SyntaxError: Unexpected token. Fix: correct the syntax at this location
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./theme.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
called-css-export-read
BEFORE
=== ERROR ===
/project/src/theme.module.css:1:1: JS execution error: SyntaxError: Unexpected token. Fix: correct the syntax at this location
AFTER
=== ERROR ===
/project/src/helper.ts:2:26: JS execution error: ReferenceError: Cannot read CSS export 'card' of '/project/src/theme.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/project/src/helper.ts:2:26)
    at read (/project/src/helper.ts:2:26)
    at  (/project/src/helper.ts:2:65)
CSS 관찰과 catch: 실제 before / after 17개
caught-property
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:7: JS execution error: ReferenceError: Cannot read CSS export 'card' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:7)
    at  (/src/helper.ts:2:7)
caught-named
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:7: JS execution error: ReferenceError: Cannot read CSS export 'card' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:7)
    at  (/src/helper.ts:2:7)
caught-namespace
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:7: JS execution error: ReferenceError: Cannot read CSS export 'card' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:7)
    at  (/src/helper.ts:2:7)
primitive-conversion
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:7: JS execution error: ReferenceError: Cannot read CSS export 'Symbol(Symbol.toPrimitive)' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:7)
    at  (/src/helper.ts:2:7)
value-of
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:7: JS execution error: ReferenceError: Cannot read CSS export 'valueOf' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:7)
    at  (/src/helper.ts:2:7)
to-string
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:7: JS execution error: ReferenceError: Cannot read CSS export 'toString' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:7)
    at  (/src/helper.ts:2:7)
in-check
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:7: JS execution error: ReferenceError: Cannot read CSS export 'has:card' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:7)
    at  (/src/helper.ts:2:7)
keys
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:7: JS execution error: ReferenceError: Cannot read CSS export 'ownKeys' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:7)
    at  (/src/helper.ts:2:7)
for-in
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:16: JS execution error: ReferenceError: Cannot read CSS export 'ownKeys' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:16)
    at  (/src/helper.ts:2:16)
    at  (/src/helper.ts:2:54)
spread
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:10: JS execution error: ReferenceError: Cannot read CSS export 'ownKeys' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:10)
    at  (/src/helper.ts:2:10)
json
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:7: JS execution error: ReferenceError: Cannot read CSS export 'toJSON' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:7)
    at  (/src/helper.ts:2:7)
descriptor
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:7: JS execution error: ReferenceError: Cannot read CSS export 'getOwnPropertyDescriptor:card' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:7)
    at  (/src/helper.ts:2:7)
prototype
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:7: JS execution error: ReferenceError: Cannot read CSS export 'getPrototypeOf' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:7)
    at  (/src/helper.ts:2:7)
called-function-caught
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== ERROR ===
/src/helper.ts:2:29: JS execution error: ReferenceError: Cannot read CSS export 'card' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css()
    at <read> (/src/helper.ts:2:29)
    at  (/src/helper.ts:2:29)
    at  (/src/helper.ts:2:68)
typeof-object
BEFORE
=== ERROR ===
/src/helper.ts:2:29: JS execution error: ReferenceError: Cannot read CSS export 'default' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css(). Fix: remove or guard the code that fails here, or correct the cause above, so the stylesheet evaluates without throwing
    at <main> (/src/helper.ts:2:29)
    at <main> (/src/helper.ts:2:29)
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
object-passing
BEFORE
=== ERROR ===
/src/helper.ts:2:61: JS execution error: ReferenceError: Cannot read CSS export 'default' of '/src/styles.module.css' at build time: CSS module class names are generated by the bundler and are unknown at build time. Fix: use the class in a runtime component (className={styles.card}) or write the style with css(). Fix: remove or guard the code that fails here, or correct the cause above, so the stylesheet evaluates without throwing
    at <main> (/src/helper.ts:2:61)
    at <main> (/src/helper.ts:2:61)
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
uncalled-read
BEFORE
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
AFTER
=== CODE ===
import "@devup-ui/react/devup-ui.css";
import "./styles.module.css";
export const card = "a";
=== CSS (theme header omitted) ===
.a{color:red}
전체 48개 QA 및 추가 회귀

W32 Real WASM QA

Case Observed Contract Verdict Artifact
parser located build error, cause and fix PASS after.json
parser-repair compiled exact static input PASS after.json
no-resolver located build error, cause and fix PASS after.json
resolved-repair compiled exact static input PASS after.json
missing located build error, cause and fix PASS after.json
cycle located build error, cause and fix PASS after.json
throw located build error, cause and fix PASS after.json
throw-repair compiled exact static input PASS after.json
window located build error, cause and fix PASS after.json
environment located build error, cause and fix PASS after.json
vanilla-fallback located build error, cause and fix PASS after.json
devup-fallback located build error, cause and fix PASS after.json
imported-stylesheet located build error, cause and fix PASS after.json
imported-helper located build error, cause and fix PASS after.json
require-missing located build error, cause and fix PASS after.json
require-helper-missing located build error, cause and fix PASS after.json
caught-clock located build error, cause and fix PASS after.json
style-getter-throw located build error, cause and fix PASS after.json
placeholder-name compiled exact static input PASS after.json
clock-repair compiled exact static input PASS after.json
deterministic-helper compiled exact static input PASS after.json
safe-css compiled exact static input PASS after.json
effects-throw located build error, cause and fix PASS after.json
effects-caught-clock located build error, cause and fix PASS after.json
effects-pure compiled exact static input PASS after.json
unused-function compiled exact static input PASS after.json
twice-css compiled exact static input PASS after.json
guarded-descriptors located build error, cause and fix PASS after.json
function-source located build error, cause and fix PASS after.json
recoverable-0 located build error, cause and fix PASS after.json
recoverable-1 located build error, cause and fix PASS after.json
recoverable-2 located build error, cause and fix PASS after.json
recoverable-3 located build error, cause and fix PASS after.json
clock-first located build error, cause and fix PASS after.json
clock-second located build error, cause and fix PASS after.json
Date.now() located build error, cause and fix PASS after.json
new Date().getTime() located build error, cause and fix PASS after.json
Math.random() located build error, cause and fix PASS after.json
performance.now() located build error, cause and fix PASS after.json
crypto.randomUUID() located build error, cause and fix PASS after.json
process.env.NODE_ENV located build error, cause and fix PASS after.json
Intl.DateTimeFormat().resolvedOptions().locale located build error, cause and fix PASS after.json
'I'.toLocaleLowerCase() located build error, cause and fix PASS after.json
'x'.normalize() located build error, cause and fix PASS after.json
resolver-throw located build error, cause and fix PASS after.json
resolver-getter located build error, cause and fix PASS after.json
resolver-primitive located build error, cause and fix PASS after.json
resolver-malformed located build error, cause and fix PASS after.json

조건·논리 연산에서 Function을 Unknown-data로 잃는 proof gap도 인접 회귀 테스트로 막고, mutation/clock helper negative fixture는 실제 export를 사용하도록 복구했습니다. 일반 descriptor, 사용자 override, getter 미실행, symbol/flags/receiver 및 catch 후 불변 오류 증거는 native 회귀가 검증합니다.

2026-10-08 main 11790bef를 병합하여 업데이트했습니다. 충돌 없이 갱신된 부모 PR의 변경과 main의 변경을 모두 보존했습니다.

2026-10-17 업데이트: 갱신된 부모 #750 7f98689c0a515c8cba7fdf2ba0eca891015c5f2e를 병합하여 main a6ecc12570338475df40a429c719160e63db86b5를 포함합니다. 충돌 파일 libs/extractor/src/lib.rs, module_loader.rs, vanilla_extract.rs는 부모의 별칭·네임스페이스·조건부 스프레드 우선순위·D1 합성과 #757의 원본 위치·종료 오류·모듈 추적을 함께 유지했습니다. 메타데이터의 기존 빈 배열 계약과 CJS 출력, 실제 작성/생성 프레임 구분도 원래 단언 변경 없이 보존했습니다. #757의 기본/값 평가 Date 금지는 그대로 유지하고, 전체 스타일시트 평가에서만 숫자 epoch 생성·Date.UTC·UTC 전용 읽기를 허용하도록 기존 고정 Date 양성 사례와 샌드박스 정책을 조정했습니다. 현재 시각·문자열 파싱·로컬 시간·로케일·시간대 오프셋 접근은 잡힌 오류와 리플렉션 경로에서도 위치가 있는 빌드 오류로 거부합니다. #757에서만 없던 자체 css 어댑터는 vanilla style 별칭 대신 Devup 배율·클래스/키프레임 식별·나중 값 우선 합성을 유지하며 복구했고, 잡힌 태그 오류·계산 선택자·Date 내보내기 우회도 차단했습니다. 100000단계 객체의 실제 기본 스택 오버플로/WASM 메모리 접근 오류는 자체 css 경로의 반복 캡처·검증·평탄 규칙 계획·선택자 조립으로 수정했습니다(입력 깊이 제한이나 스택 증설 없음). 구조화 태그의 스칼라 위치 오류와 재진입 getter의 원본 좌표를 보존하며, 새 빌드 오류는 잘못된 구문/선언/비정적 css 값 및 위 금지된 Date 접근에 대한 위치·원인·필요 조건을 설명합니다. 원래 테스트·단언·픽스처·스냅샷의 의미 변경/새 수락은 0개입니다(새 회귀 테스트의 Rust 숫자 구분자·concat/서식만 정리, 실제 JS 바이트와 단언 유지). 검증: 기본 스택 Rust 6010/0, Rust1.99 fmt/Clippy 통과, 새 WASM 및 루트 빌드 통과, Bun 5939/0·커버리지 100%, 기존 경고 9개 외 lint 오류 0, 공개 WASM/React SSR 159회 확인(100000회 :hover·padding:8px·정적 클래스 포함). LSP는 인프라 시간 초과로 확인 불가이며 정상으로 표기하지 않습니다. 별도 기존 한계: main/#750에서도 Plain 경로의 상수 객체 css 태그가 원시 규칙을 내보내고 해당 CSS를 누락하는 동일 현상을 확인했으며 이 병합에서 전체 추출기를 바꾸지 않았습니다. main의 기존 JSX pragma 손실은 #784로 별도 추적하며 CI 실패 시 정상/외부 장애로 바꾸어 표기하지 않습니다. 현재 머리의 CI 결과는 실행 완료 후 별도로 기록합니다.

실제 WASM/공개 API 검증 출력:

import {css} from '@devup-ui/react'; const forceRun = (() => 1)(); export const card = css({p: 2, opacity: 0.5});

import "@devup-ui/react/devup-ui.css";
export const card = "a b";

/*! devup-ui v1.0.83, | Apache License 2.0 | https://devup-ui.com */.b{opacity:.5}.a{padding:8px}

import "@devup-ui/react/devup-ui.css";
export const card = "a";

2026-10-17 CI 추가: 머리 29c046755f4fc6d7fb654ac7d8b2bdb08a54dad6의 실행 39003660696은 benchmark/landing-next-e2e/vinext-rsc-css-e2e가 모두 통과했지만 publish의 Linux tarpaulin에서 Timed out waiting for test response로 실패했습니다. 추출기 테스트 실행 약 60초 후 종료되었고 새 회귀 49개는 이미 통과했으나 이전 테스트 551개의 완료 및 Linux 커버리지 100%/Bun은 확인되지 않았습니다. 이는 #784 pragma 실패나 Codecov 외부 장애로 분류하지 않으며 입력 깊이/스택/CI 제한을 늘리지 않고 성능 원인을 수정 중입니다.

2026-10-17 CI 성능 수정: 기존 병합 29c04675 뒤에 새 일반 커밋 0f3ccaef24960efc2f0b9cbd24d011cec04bd80d를 추가했습니다(재작성/스택·시간 제한·테스트 깊이 변경 없음). 자체 css 호출마다 동일한 키 표현의 생성 슬롯만 공유하고 스칼라 슬롯/속성 방문/getter/합성/원본 오류 좌표는 유지합니다. 실제 생성 AST 회귀가 깊이 16/256/4096에서 18/258/4098개→3개로 바뀌며 키/스칼라 동일 문자열과 호출 간 독립성도 검증했습니다. 기본 스택 Rust6016/0·fmt/Clippy·Bun5939/0/100%·새 WASM/루트·공개 경로161회 및 전체 훅/훅 후 새 빌드·검증을 통과했습니다. 새 현재 머리의 Linux tarpaulin 제한 내 완료/커버리지100%는 CI로 별도 확인하며, 이전 실행의 시간 초과를 해결 완료나 #784/외부 장애로 미리 표기하지 않습니다.

2026-10-18 W60j: Linux 커버리지 보완

  • 39010097848의 38개 미커버 행을 실제 도달 가능한 테스트와 동작을 유지하는 제어 흐름 정리로 보완했습니다. 304779c25bae4bd25e6fb3b64f8a2f901e884207은 0f3ccaef 위의 일반 후속 커밋이며, 이번 단위에서는 main이나 부모 PR을 병합하지 않았습니다.
  • 기존 Rust 6,016개 테스트 이름과 모든 기존 assertion·snapshot·스트레스 깊이를 보존하고 19개 사례를 추가했습니다. 최종 native 6,035 pass / 0 fail / 0 ignored, fmt 및 Clippy 통과입니다. 커버리지 제외·억제, 스택·타임아웃·의존성 변경은 없습니다.
  • 검토 중 @media의 쿼리 키가 imports이면 전역 사전 검사가 건너뛸 수 있음을 확인하여, font-face의 기존 검증을 그대로 유지했습니다. 실제 .tsx 및 public WASM에서 RED→GREEN을 확인했으며, public 출력은 /font-face-coverage.tsx:2:64: globalCss() ... boxAlign ... box-align 오류입니다. 새로 생기는 오류는 없고 기존 위치·거부 계약을 보존합니다.
  • 실제 소스 검토 승인, fresh WASM/root 빌드, 기존 public 161개와 추가 오류 검증, Bun 5,939 pass / 0 fail / 100%, lint 0 error / 기존 9 warning을 확인했습니다. 전체 12 GiB hook도 388.464초, peak 4.565849 GiB로 통과했고 후속 fresh 빌드·public 161개 재검증 및 2,237개 소스 해시 일치를 확인했습니다. 로컬 임시 Rust 1.99.0 결과를 최신 Linux 100% 결과로 간주하지 않습니다. LSP는 timeout으로 검증 불가입니다.
  • 현재 main 3ca6182f와 충돌하여 head 304779c2의 check rollup이 비어 있습니다. 따라서 새 Linux CI 실행·100%는 아직 확인하지 못했으며, 기존 실패 실행을 새 head 결과로 표시하지 않습니다. 다음 main 갱신 순서와 CI 재개 시점을 coordinator에게 확인 중입니다.

2026-10-22 최신 부모 병합 및 현재 CI 상태

머리 c33e18ebb5dab8c13621eb5b2292e4ee9d1bb2bf는 304779c2와 갱신된 부모 #750 63007504를 두 부모로 갖는 실제 병합입니다. main 78d7c2b2를 포함하며 #750이 먼저 병합되어야 합니다. CI 39712795125는 failure이며 전체 green이나 Linux 커버리지 100%를 주장하지 않습니다.

  • 물리적인 CommonJS 문법과 좁은 import/export goal 정책을 유지하면서 원본 파싱·정규식·semantic 검증 및 위치/Fix 메시지를 별칭 변환 전에 적용합니다. new.target, 최상위 return, legacy 주석 양성 사례와 중첩 ES 선언/import.meta/await 음성 사례를 공개 추출 경로에서 RED→GREEN으로 확인했습니다.
  • 원본 구문 오류가 있으면 해당 위치의 구문 오류를 먼저 보고합니다. Emotion 진단 복원은 공개 경로에서 구문 분석에 성공한 소스에 적용하며, 동일한 malformed source에 대한 내부 복원 helper의 원래 단언도 별도로 유지합니다. 새로운 오류 범주를 추가하지 않았으며, 누락되었던 프로젝트 전역 Emotion JSX 검사도 부모의 기존 조건 그대로 복구했습니다.
  • 양쪽 부모의 테스트 함수 1,616/1,692개에 누락이 없습니다. deep-object 비교는 원래 /deep-object.tsx 일반 추출을 독립 control로 복원하고 예상 LayerOrder.file만 정확한 파일명 확인 뒤 정렬했습니다. 같은 .css.ts 경로로 맞춘 이전 방식은 case7에서 evaluator를 자기 자신의 oracle로 만들었습니다. 모든 style과 전체 코드/스타일 비교는 유지되며, 계산 결과 blue→green 임시 변이는 전체 스타일 비교에서 실제로 실패한 뒤 제거했습니다.
  • 예약 resolver는 가짜 빈 root 없이 실제 각 입력의 원본 소스를 등록하고 기존 JS resolver를 호출합니다. cache/평가 stack 복원, 실제 imported source, 부모 양쪽 snapshot 사례와 출력 의도를 유지했습니다. 런타임 코드나 의존성을 새로 추가하지 않았습니다.
  • 독립 검토 1회는 프로젝트 전역 Emotion JSX의 원본 검증 조건 누락 P2로 REJECT했습니다. 두 malformed 입력이 성공하던 RED를 먼저 확인하고 부모의 두 줄 조건을 그대로 복구하여 project.tsx:2:7 및 원래 octal 토큰 1:38 오류를 검증했습니다. 이 판정을 APPROVE로 바꾸지 않았고 두 번째 검토도 호출하지 않았습니다.

삭제된 hoist 테스트는 동일한 이름과 원래 입력 base/color/red/order0/test.tsx을 현재 배포 API로 복원했습니다.

원래 단언 새 단언: 같은 불변 조건을 배포 출력에서 확인
assert!(sheet.compute_hoisted_atoms(0).is_empty()); global_css.contains(concat!("@layer b{.base{", "color:red", "}}"))
동일 불변 조건 global_css.matches("color:red").count() == 1
동일 불변 조건 !file_css.contains("color:red")

order0를 hoist에 넣는 임시 제품 코드 변이는 실제 red 중복 2≠1로 실패했습니다. 원본 제품 바이트를 정확히 복원한 뒤 이 테스트 1/0 및 deep-object 7/0을 확인했습니다. 호환용 제품 shim이나 테스트 제외는 없습니다.

로컬 최종 검증: 기본 스택 workspace 전체 성공(extractor 7,015/0), fresh WASM/루트 빌드, fmt/엄격한 Clippy, Bun 6,654/0·89 snapshots·실제 All files 함수/줄 100.00/100.00 및 LCOV zero-hit 0, lint 0 error/기존 20 warning, 실제 공개 WASM 19개 시나리오 성공입니다. 정확한 테스트 tree에서 실행한 정상 hook은 1회, 775.158초·peak 5,185,658,880 bytes로 12 GB 제한 안에서 통과했습니다. 앞선 작성자 식별 실패 시도는 hook 시작 전에 종료되었습니다. Windows Rust 98.04%(27,062/27,604)는 Linux 100% 증명이 아니며 LSP는 timeout/미설치로 미확인입니다.

현재 CI의 남은 실패:

항목 실제 관찰
publish extractor 7,015개 실행 시작 후 약 60초에 tarpaulin Timed out waiting for test response; Linux Rust coverage 및 이후 Bun 표 미확인
wasm/raw base 6,012,478 → candidate 6,276,494; limit 6,073,344보다 203,150 bytes 초과(+4.391%)
wasm/gzip base 2,186,060 → candidate 2,282,059; limit 2,208,768보다 73,291 bytes 초과(+4.391%)
glue raw 43,765 / gzip 7,343으로 두 지표 모두 통과
webpack-extends-theme @typescript/typescript6/latest npm registry HTTP 요청이 약 30초에 timeout

benchmark, landing-next-e2e, vinext-rsc-css-e2e, react-18, release-compat는 성공했습니다. 허용되지 않은 job 재시도, 버전 고정, 스택/시간/크기 제한 완화, baseline 변경은 하지 않았습니다. 현재 남는 제한은 이 CI 실패의 성능·WASM 크기 수정과 재검증이며, 아직 완료 상태가 아닙니다.

2026-10-22 스트레스 깊이를 유지한 테스트 구성 비용 감소

현재 머리는 f497aa85fa5decf102ccc69895cde0ec9d0a21db입니다. 실제 병합 c33e18eb 뒤에 일반 커밋 425eb47b, f497aa85를 순서대로 추가했으며 병합 이력과 부모 #750 의존성을 보존했습니다. CI 39740851322는 여전히 failure입니다. 타임아웃은 이번 실행에서 해소되었지만 publish 통과나 Linux Rust/Bun 커버리지 100%를 주장하지 않습니다.

  • 변경은 깊은 heap fixture를 만드는 테스트 코드와 Patch 메타데이터뿐입니다. 제품 추출기, visitor, runtime, 의존성, 스택, 타임아웃, 1% WASM 예산 및 baseline은 바꾸지 않았습니다.
  • 원래 100,000회에 한 링크씩 만들던 준비 루프를 먼저 25,000회 x 4링크로, 이어 12,500회 x 8링크와 loop-local countdown으로 줄였습니다. 실제 heap 깊이 100,000, 각 객체/배열 모양, 함수·숫자·객체 leaf와 원래 cycle, 모든 기존 단언을 그대로 유지합니다. 독립적인 8개 그래프 검사에서 깊이를 확인했으며 cycle은 원래 first 노드까지 100,001링크입니다. 테스트 삭제·제외·분리나 스트레스 깊이 축소는 없습니다.
  • 같은 머신의 원래 extractor 전체는 plain 33.87초 / LLVM 60.39초였습니다. 4링크 준비는 LLVM 43.99초, 8링크 countdown은 all-target LLVM 41.49초였습니다. 동일한 순차 instrumented 측정은 52.41초에서 48.67초, deep 그룹은 15.068초에서 12.403초로 줄었습니다. 가장 느린 단일 테스트는 변경하지 않은 loop-budget 오류 검증 3.148초이며 다음 9개 deep 사례는 1.992, 1.474, 1.469, 1.387, 1.047, 1.044, 0.995, 0.701, 0.687초입니다. 로컬 hook에서는 47.88초도 관찰되어 이 수치를 고정 성능이나 넉넉한 CI 여유로 포장하지 않습니다.
  • 최종 로컬 검증은 기본 스택 workspace 전체 성공(extractor 7,015/0), fresh WASM/루트 빌드, fmt/엄격한 Clippy, Bun 6,654/0와 실제 All files 함수/줄 100.00/100.00, LCOV 129개 소스의 zero-hit 0, lint 오류 0/기존 경고 20, 공개 WASM 19개 시나리오 성공입니다. 두 일반 커밋은 각각 정확한 staged tree에서 정상 hook을 한 번씩 실행했습니다(722.098초/peak 5,124,202,496 bytes, 691.123초/peak 5,264,539,648 bytes; 모두 12 GB 제한 이내). LSP는 timeout/미설치로 확인 불가입니다.

최신 CI의 실제 결과:

항목 관찰
extractor 시간 7,015 pass / 0 fail, 58.48초로 완료. 기존 60초 제한까지 여유는 1.52초뿐이며 robust margin을 주장하지 않음
publish 이후 Rust coverage 19,132/19,146 = 99.93%, 미커버 14행 때문에 실패. 이후 publish의 Bun 표/E2E는 미확인
webpack-extends-theme @typescript/typescript6/latest npm registry 요청 timeout으로 실패. 테스트/버전/workflow를 바꾸거나 무변경 재시도하지 않음
wasm-size raw 6,276,494 / limit 6,073,344, gzip 2,282,059 / limit 2,208,768로 계속 실패. 제품 변경이 없어 앞선 크기와 동일하며 사용자 결정 대기
그 밖의 실행 job benchmark, landing-next-e2e, vinext-rsc-css-e2e, react-18, release-compat 모두 성공. 조건부 deploy-pages/release skip은 통과·배포로 표시하지 않음

앞선 4링크 머리의 CI 39733669017는 6,898/7,015개 완료 뒤 60.019초에 timeout이었고 webpack-extends-theme를 포함한 나머지 비-size job은 성공했습니다. 그 실행이나 로컬 Windows coverage를 최신 Linux 100% 증명으로 대신하지 않습니다. 최신 14행은 CI의 넓은 rustfmt 좌표로 imported_constants.rs:605-607, own_css_template.rs:36-40, vanilla_extract_css_capture.rs:141,151-152, 테스트 checker vanilla_extract_css_key_slots_tests.rs:19,22,25이며 제외·억제 없이 보완할 다음 검증 항목입니다.

열린 조사 항목: 준비 문법을 16링크로 묶은 별도 실험은 기본 native test stack에서 overflow하여 채택하지 않았습니다. 같은 100,000노드 입력을 main 78d7c2b2에서 단 한 번 비교한 결과도 STATUS_STACK_OVERFLOW였으므로 새 테스트 변경만의 회귀가 아니라 기존 문제입니다. 최적화된 공개 WASM에서는 같은 입력이 성공했습니다. 이 단위에서 제품 코드를 고치거나 스택을 늘리지 않았으며 해결 완료로 표시하지 않습니다. 채택한 8링크 입력은 기본 native stack의 관련 54개 테스트를 모두 통과합니다.

새로 생기는 빌드 오류: 이번 테스트 구성 변경에는 없습니다. 남는 항목은 위 Linux 커버리지 14행, 외부 registry timeout, 기존 native stack 조사 및 WASM 크기 결정입니다. 크기 원인 분석과 제한적인 visitor 통합 실험은 별도로 보존했지만 예산과 속도 조건을 충족하지 못하여 브랜치에는 포함하지 않았습니다. 최신 예산은 그대로 유지합니다.

owjs3901 and others added 14 commits October 4, 2026 06:06
Refs #695

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…nding

Refs #695

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…graphs

Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@github-actions

github-actions Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Changepacks

@devup-ui/wasm@1.0.83 → 1.0.84 - bindings/devup-ui-wasm/package.json

Patch

  • A project module re-exporting Devup UI (export { Box, css } from '@devup-ui/react', export * from '@devup-ui/react', export { styled as s }, export * as Devup, a default export of an import, chains of barrels and the compat entry) now works: a file importing Box or css from it compiles exactly as if it imported from the package, following the barrel through the resolver (relative paths, tsconfig paths, package exports), and hasDevupUI sees such a file. Members read from a namespace or default import of the package (Devup['css'], const { css } = Devup, Devup.css as a value) compile where the build can follow them, Devup.x for a name the package compiles being read like the named import. New build errors, located at the use: what a barrel re-exports but the build cannot read (an unresolvable export * or module, a namespace of modules re-exporting the package) is an error where its name is used instead of a runtime crash, and a namespace member read by a key the build cannot know (Devup[key]), written, or destructured in a form it cannot follow (a rest, a computed key, a default value, a nested pattern, an exported declaration, or members mixed with ones that stay at runtime) is an error that names the members to read. A namespace passed on whole (Object.keys(Devup), spyOn(Devup, 'css'), export default Devup) is left as it is
  • css(a, b) composing classes whose styles the build knows (a const bound to css() in the file, or a css() result another module exports with a rule object every value of which is known) merges their styles: a later part's declaration replaces an earlier one's for the same property, selector, breakpoint and layer, also under conditions (css(base, cond && danger)) and for ||/?? parts, where the classes used to be joined and the stylesheet order picked the winner. vanilla-extract style([a, b]) passes each composed style as its own argument, so the later one wins, and a style composed again later (style([a, b, a])) is kept. Classes the build does not know (strings, props, CSS Modules) are kept as they are
  • styled(Base) extending a styled component the file binds to a const renders Base's tag directly with Base's styles composed under its own, so the extension's declarations replace Base's for the same property, selector, breakpoint and layer instead of losing to them by stylesheet order; Base's attrs apply before the extension's. attrs merge as styled-components merges them: className is joined with the caller's, style is merged and other props replace earlier ones. On an element, a className or style spread after the explicit prop now wins, as React merges props in the order they are written
  • Emotion's now compiles at build time with no runtime: the element becomes what its child function ({ css, cx, theme }) => ... renders, each css and cx call becomes the classes it composes (later styles replace earlier ones; css reads strings as CSS text and its tagged templates split around mixins; cx keeps unknown classes, reads { name: condition } objects as conditional classes and composes nested css and cx calls), and theme.a.b in their values becomes var(--a-b). Numbers in css rules are px lengths, as Emotion reads them, and top-level constants are inlined. New build errors, each at file:line:col: a without exactly one child function taking { css, cx, theme } that gives what it renders at once (attributes, other children, rest or default parameters, async or generator functions, several statements); reading the theme other than as theme.a.b in a css value; using css or cx other than by calling them; a cx object with a spread, getter or method; parts css and cx cannot compose (runtime calls, spreads, a condition choosing between styles and classes). @devup-ui/react/compat exports ClassNames with the ClassNamesContent and ClassNamesArg types, and the @emotion/react declarations include them
  • Emotion and styled-components component selectors now compile at build time: a styled component the file defines that another style selects (${Child} { ... } in CSS text, [Child] or [&:hover ${Child}] as a rule key) gets a short marker class, which only such components get, and the selector reads it as .marker; a component extending it, or an element inlining it for its css prop, keeps the marker. Selectors written without & now nest under the component as stylis nests them (ul { ... } is & ul, a selector list nests each selector, :hover applies to the component itself) instead of becoming global rules, and rule-object keys starting with ., #, [, *, >, + or ~ are read as nested selectors instead of properties
  • Emotion's css prop compiles at build time while @emotion/react is aliased: on tags and Devup UI components always, and on every element once the file imports @emotion/react or @emotion/styled or names @emotion/react in a @jsxImportSource pragma; jsx, jsxs and jsxDEV from @emotion/react/jsx-runtime (or jsx-dev-runtime) and jsx from @emotion/react compile it too, so libraries built with Emotion's JSX runtime do as well. The prop becomes the element's className, with CSS variables in its style for values only the runtime gives: arrays and conditions compose with a later part replacing what an earlier one sets, css() classes the file knows compose by their styles, strings and templates are CSS text, css`` mixins split the text around them, a function of the theme reads theme.a.b as var(--a-b), unitless numbers are px as in Emotion (constants included), and a className holding known css() classes overrides the prop as Emotion's registered classes do. A styled component the file defines renders its tag in the element's place when the prop overrides its styles and it renders a tag with no attrs or props read and the element has no spread, as or forwardedAs. Emotion's JSX runtime imports become react/jsx-runtime, the pragma names react, and jsx comes from @devup-ui/react/compat (React's createElement); @devup-ui/react/compat/css-prop types the prop on React.Attributes. New build errors, each with file:line:column and the code: a css prop part the build cannot read (a call, an element), a style object declared inside a function or with let, a binding only running the module gives or code changes, a theme function that does more than return rules or reads the theme other than as theme.a.b in a value, an interpolation CSS text cannot place or a mixin inside a nested rule, and a css prop overriding a styled component's styles where its tag cannot be rendered in place. Composing css() with a part that reads a known binding (such as a keyframes name) now reads its value
  • A project whose tsconfig.json (or jsconfig.json) builds JSX with Emotion (compilerOptions.jsxImportSource of @emotion/react, through extends and project references too) now compiles the css prop on every element of every file, and its .tsx and .jsx files are built with React's JSX runtime through a /** @jsxImportSource react */ pragma, which a file's own JSX pragma overrides, so the bundler no longer imports Emotion's runtime. The plugins read the setting into a new @emotion/react/jsx-runtime alias (importAliases can turn it off with false, and it is left out when @emotion/react is not aliased); @devup-ui/react/compat/emotion-jsx-runtime declares Emotion's JSX runtimes as React's so the project type-checks without Emotion installed. plugin-utils exports readJsxImportSource, and mergeImportAliases takes the JSX import source
  • style-order-range only checks styleOrder where the build reads it: a prop of a Devup UI component and a top-level key of a style object passed to css/globalCss/keyframes. A styleOrder key in nested data, in a prop value such as an element passed as a prop, or in a call of a function sharing a name with an Object.prototype member is no longer reported. The array, typography and media rules already skip non-style data, and css-utils-literal-only accepts a css()/keyframes() result held in a const inside a function. No new build errors.
  • hasDevupUI takes the import aliases and is true for a file extraction changes: one importing a redirected package (@emotion/styled, ...), naming @emotion/react in a @jsxImportSource pragma, or in a project whose tsconfig jsxImportSource is @emotion/react, so the Bun plugin no longer skips files whose only Devup UI is Emotion's css prop or an aliased import. Aliases of Devup UI now compile like the original: export const B = Box, const c = css; export { c as cc }, export const D = Devup and export const C = Devup.css in a barrel (the barrel module exports them as re-exports of the package, and what imports them follows them), export { Box } after an import, export default Box, const D = Devup namespace aliases, and const inner = css declared inside a function. A css() or keyframes() const that a function reads before its declaration compiles. New build error: a css()/keyframes() const read before its declaration runs (outside a function) is located and says to move the declaration above its first read
  • Report extraction, module-resolution and stylesheet execution failures at their original source locations with the cause and repair. Reject recoverable syntax errors, nondeterministic build-time reads, synthetic descriptor/function-source and legacy accessor reflection, and unsafe stylesheet execution fallbacks instead of silently changing CSS. Preserve module resolver and serialization exceptions, evaluate transitive helper side effects, and prevent placeholder-name collisions from losing styles. Match import package names only at exact or slash-delimited boundaries so sibling data packages remain external. Retain helper CSS loads in evaluation order with deduplicated portable relative specifiers and query suffixes, without CSS content dependencies. Report missing CSS or incompatible path roots as located errors, and reject host-recorded unknown CSS export observations even when caught; unused bindings, object passing and typeof follow default TypeScript/JavaScript import semantics.
  • Resolve compiled styling APIs and components by their lexical binding so shadowed local names, including minified library identifiers, remain ordinary JavaScript and JSX. No new build errors; existing diagnostics now apply only to the compiled binding they describe.
  • Styled components the build generates are wrapped in React's forwardRef, so a ref passed to them reaches the element they render on React 18 as well as React 19; the file imports forwardRef from react when it defines one
  • Styled components no longer pass every prop to the tag they render: $ props, theme and the props their style functions or attrs read are kept away from a tag unless it takes them as attributes, and shouldForwardProp (Emotion options or styled-components withConfig) is evaluated at build time. A shouldForwardProp the build cannot evaluate is a build error naming the file, line and code, with the forms it accepts. An element using a styled component the file defines drops props the component neither reads nor passes on; spread props are passed as written
  • Styled components render what their as prop names, defaulting to the tag or component they were defined with, and pass forwardedAs on as as, as styled-components and Emotion do; as used to reach the rendered tag as an attribute. Component.withComponent(target) on a styled component the file binds to a const builds a component rendering the same styles and attrs as target (a tag name or a component JSX can name), where it used to call a method the generated function does not have and throw
  • Tailwind classes in a className: each class compiles on its own and every class Tailwind does not define (custom, plugin and analytics classes) stays as written, where any recognized class used to rebuild the whole className without them and could rewrite part of another class; a class touching a template interpolation (icon-${name}) is left as written, and template classNames no longer get spaces inserted around interpolations. A class whose variant is not understood stays as written instead of applying unconditionally; variants follow Tailwind v4: stacked variants compose (hover:focus: matches the element itself), hover is guarded by @media (hover: hover), group-/peer- use the group/peer marker classes (and group-hover/name), and data-, aria-, has-, nth-, , **, supports-[…] and [&…]/[@media …] variants compile. Utilities emit all their declarations (size-, rounded-t-, truncate, sr-only, not-sr-only, text-sm with its line height, text-sm/6, leading-), translate/rotate/scale/skew compose through Tailwind's individual properties and registered variables (@Property) with negative values kept negative, and arbitrary values follow Tailwind's grammar: spaces for underscores except in url() and var() names, _ for an underscore, spaces around math operators, type hints, [property:value] and (--variable) shorthands. Words that only share a utility's prefix (select-wrapper, order-summary, cursor-foo) are no longer compiled

@devup-ui/bun-plugin@1.0.22 → 1.0.23 - packages/bun-plugin/package.json

Patch

  • Bun plugin works with Bun.build: DevupUI() (from @devup-ui/bun-plugin/register) serves the generated stylesheet to the bundler's CSS loader once every other module is loaded, so the build emits a CSS output with the styles of the whole bundle instead of an empty module; class names are short there and readable under the runtime (debug option). Files importing the packages Devup UI takes the place of (@emotion/react, @emotion/styled, styled-components, @vanilla-extract/css), @stylexjs/stylex, or a subpath or re-export of these or @devup-ui/react, are compiled instead of skipped
  • A project whose tsconfig.json (or jsconfig.json) builds JSX with Emotion (compilerOptions.jsxImportSource of @emotion/react, through extends and project references too) now compiles the css prop on every element of every file, and its .tsx and .jsx files are built with React's JSX runtime through a /** @jsxImportSource react */ pragma, which a file's own JSX pragma overrides, so the bundler no longer imports Emotion's runtime. The plugins read the setting into a new @emotion/react/jsx-runtime alias (importAliases can turn it off with false, and it is left out when @emotion/react is not aliased); @devup-ui/react/compat/emotion-jsx-runtime declares Emotion's JSX runtimes as React's so the project type-checks without Emotion installed. plugin-utils exports readJsxImportSource, and mergeImportAliases takes the JSX import source
  • hasDevupUI takes the import aliases and is true for a file extraction changes: one importing a redirected package (@emotion/styled, ...), naming @emotion/react in a @jsxImportSource pragma, or in a project whose tsconfig jsxImportSource is @emotion/react, so the Bun plugin no longer skips files whose only Devup UI is Emotion's css prop or an aliased import. Aliases of Devup UI now compile like the original: export const B = Box, const c = css; export { c as cc }, export const D = Devup and export const C = Devup.css in a barrel (the barrel module exports them as re-exports of the package, and what imports them follows them), export { Box } after an import, export default Box, const D = Devup namespace aliases, and const inner = css declared inside a function. A css() or keyframes() const that a function reads before its declaration compiles. New build error: a css()/keyframes() const read before its declaration runs (outside a function) is located and says to move the declaration above its first read

@devup-ui/components@0.1.60 → 0.1.61 - packages/components/package.json

Patch

  • Auto-update: depends on '@devup-ui/react' via a local workspace dependency

@devup-ui/eslint-plugin@1.0.22 → 1.0.23 - packages/eslint-plugin/package.json

Patch

  • style-order-range only checks styleOrder where the build reads it: a prop of a Devup UI component and a top-level key of a style object passed to css/globalCss/keyframes. A styleOrder key in nested data, in a prop value such as an element passed as a prop, or in a call of a function sharing a name with an Object.prototype member is no longer reported. The array, typography and media rules already skip non-style data, and css-utils-literal-only accepts a css()/keyframes() result held in a const inside a function. No new build errors.

@devup-ui/next-plugin@1.0.90 → 1.0.91 - packages/next-plugin/package.json

Patch

  • A project whose tsconfig.json (or jsconfig.json) builds JSX with Emotion (compilerOptions.jsxImportSource of @emotion/react, through extends and project references too) now compiles the css prop on every element of every file, and its .tsx and .jsx files are built with React's JSX runtime through a /** @jsxImportSource react */ pragma, which a file's own JSX pragma overrides, so the bundler no longer imports Emotion's runtime. The plugins read the setting into a new @emotion/react/jsx-runtime alias (importAliases can turn it off with false, and it is left out when @emotion/react is not aliased); @devup-ui/react/compat/emotion-jsx-runtime declares Emotion's JSX runtimes as React's so the project type-checks without Emotion installed. plugin-utils exports readJsxImportSource, and mergeImportAliases takes the JSX import source

@devup-ui/plugin-utils@1.0.17 → 1.0.18 - packages/plugin-utils/package.json

Patch

  • Webpack and Rsbuild builds hold every style in their stylesheets: a stylesheet module is built on its first import, so styles extracted later (the global styles of files webpack or Rsbuild reached late, often outside src) were missing from the output. The files the entries reach under src are now extracted before the build, the shared base on disk is kept current, and when a stylesheet still changed during the build it is compiled once more, writing only the complete result. Rsbuild serves each stylesheet from the current sheet instead of a module-wide string kept only when it grew, which left edits that shortened the CSS and later builds in the same process stale. plugin-utils adds computeReachableFiles
  • A project whose tsconfig.json (or jsconfig.json) builds JSX with Emotion (compilerOptions.jsxImportSource of @emotion/react, through extends and project references too) now compiles the css prop on every element of every file, and its .tsx and .jsx files are built with React's JSX runtime through a /** @jsxImportSource react */ pragma, which a file's own JSX pragma overrides, so the bundler no longer imports Emotion's runtime. The plugins read the setting into a new @emotion/react/jsx-runtime alias (importAliases can turn it off with false, and it is left out when @emotion/react is not aliased); @devup-ui/react/compat/emotion-jsx-runtime declares Emotion's JSX runtimes as React's so the project type-checks without Emotion installed. plugin-utils exports readJsxImportSource, and mergeImportAliases takes the JSX import source

@devup-ui/react@1.0.44 → 1.0.45 - packages/react/package.json

Patch

  • Emotion's now compiles at build time with no runtime: the element becomes what its child function ({ css, cx, theme }) => ... renders, each css and cx call becomes the classes it composes (later styles replace earlier ones; css reads strings as CSS text and its tagged templates split around mixins; cx keeps unknown classes, reads { name: condition } objects as conditional classes and composes nested css and cx calls), and theme.a.b in their values becomes var(--a-b). Numbers in css rules are px lengths, as Emotion reads them, and top-level constants are inlined. New build errors, each at file:line:col: a without exactly one child function taking { css, cx, theme } that gives what it renders at once (attributes, other children, rest or default parameters, async or generator functions, several statements); reading the theme other than as theme.a.b in a css value; using css or cx other than by calling them; a cx object with a spread, getter or method; parts css and cx cannot compose (runtime calls, spreads, a condition choosing between styles and classes). @devup-ui/react/compat exports ClassNames with the ClassNamesContent and ClassNamesArg types, and the @emotion/react declarations include them
  • Emotion's css prop compiles at build time while @emotion/react is aliased: on tags and Devup UI components always, and on every element once the file imports @emotion/react or @emotion/styled or names @emotion/react in a @jsxImportSource pragma; jsx, jsxs and jsxDEV from @emotion/react/jsx-runtime (or jsx-dev-runtime) and jsx from @emotion/react compile it too, so libraries built with Emotion's JSX runtime do as well. The prop becomes the element's className, with CSS variables in its style for values only the runtime gives: arrays and conditions compose with a later part replacing what an earlier one sets, css() classes the file knows compose by their styles, strings and templates are CSS text, css`` mixins split the text around them, a function of the theme reads theme.a.b as var(--a-b), unitless numbers are px as in Emotion (constants included), and a className holding known css() classes overrides the prop as Emotion's registered classes do. A styled component the file defines renders its tag in the element's place when the prop overrides its styles and it renders a tag with no attrs or props read and the element has no spread, as or forwardedAs. Emotion's JSX runtime imports become react/jsx-runtime, the pragma names react, and jsx comes from @devup-ui/react/compat (React's createElement); @devup-ui/react/compat/css-prop types the prop on React.Attributes. New build errors, each with file:line:column and the code: a css prop part the build cannot read (a call, an element), a style object declared inside a function or with let, a binding only running the module gives or code changes, a theme function that does more than return rules or reads the theme other than as theme.a.b in a value, an interpolation CSS text cannot place or a mixin inside a nested rule, and a css prop overriding a styled component's styles where its tag cannot be rendered in place. Composing css() with a part that reads a known binding (such as a keyframes name) now reads its value
  • A project whose tsconfig.json (or jsconfig.json) builds JSX with Emotion (compilerOptions.jsxImportSource of @emotion/react, through extends and project references too) now compiles the css prop on every element of every file, and its .tsx and .jsx files are built with React's JSX runtime through a /** @jsxImportSource react */ pragma, which a file's own JSX pragma overrides, so the bundler no longer imports Emotion's runtime. The plugins read the setting into a new @emotion/react/jsx-runtime alias (importAliases can turn it off with false, and it is left out when @emotion/react is not aliased); @devup-ui/react/compat/emotion-jsx-runtime declares Emotion's JSX runtimes as React's so the project type-checks without Emotion installed. plugin-utils exports readJsxImportSource, and mergeImportAliases takes the JSX import source

@devup-ui/reset-css@1.0.31 → 1.0.32 - packages/reset-css/package.json

Patch

  • Auto-update: depends on '@devup-ui/react' via a local workspace dependency

@devup-ui/rsbuild-plugin@1.0.67 → 1.0.68 - packages/rsbuild-plugin/package.json

Patch

  • Webpack and Rsbuild builds hold every style in their stylesheets: a stylesheet module is built on its first import, so styles extracted later (the global styles of files webpack or Rsbuild reached late, often outside src) were missing from the output. The files the entries reach under src are now extracted before the build, the shared base on disk is kept current, and when a stylesheet still changed during the build it is compiled once more, writing only the complete result. Rsbuild serves each stylesheet from the current sheet instead of a module-wide string kept only when it grew, which left edits that shortened the CSS and later builds in the same process stale. plugin-utils adds computeReachableFiles
  • A project whose tsconfig.json (or jsconfig.json) builds JSX with Emotion (compilerOptions.jsxImportSource of @emotion/react, through extends and project references too) now compiles the css prop on every element of every file, and its .tsx and .jsx files are built with React's JSX runtime through a /** @jsxImportSource react */ pragma, which a file's own JSX pragma overrides, so the bundler no longer imports Emotion's runtime. The plugins read the setting into a new @emotion/react/jsx-runtime alias (importAliases can turn it off with false, and it is left out when @emotion/react is not aliased); @devup-ui/react/compat/emotion-jsx-runtime declares Emotion's JSX runtimes as React's so the project type-checks without Emotion installed. plugin-utils exports readJsxImportSource, and mergeImportAliases takes the JSX import source

@devup-ui/vite-plugin@1.0.73 → 1.0.74 - packages/vite-plugin/package.json

Patch

  • A project whose tsconfig.json (or jsconfig.json) builds JSX with Emotion (compilerOptions.jsxImportSource of @emotion/react, through extends and project references too) now compiles the css prop on every element of every file, and its .tsx and .jsx files are built with React's JSX runtime through a /** @jsxImportSource react */ pragma, which a file's own JSX pragma overrides, so the bundler no longer imports Emotion's runtime. The plugins read the setting into a new @emotion/react/jsx-runtime alias (importAliases can turn it off with false, and it is left out when @emotion/react is not aliased); @devup-ui/react/compat/emotion-jsx-runtime declares Emotion's JSX runtimes as React's so the project type-checks without Emotion installed. plugin-utils exports readJsxImportSource, and mergeImportAliases takes the JSX import source

@devup-ui/webpack-plugin@1.0.71 → 1.0.72 - packages/webpack-plugin/package.json

Patch

  • Webpack and Rsbuild builds hold every style in their stylesheets: a stylesheet module is built on its first import, so styles extracted later (the global styles of files webpack or Rsbuild reached late, often outside src) were missing from the output. The files the entries reach under src are now extracted before the build, the shared base on disk is kept current, and when a stylesheet still changed during the build it is compiled once more, writing only the complete result. Rsbuild serves each stylesheet from the current sheet instead of a module-wide string kept only when it grew, which left edits that shortened the CSS and later builds in the same process stale. plugin-utils adds computeReachableFiles
  • A project whose tsconfig.json (or jsconfig.json) builds JSX with Emotion (compilerOptions.jsxImportSource of @emotion/react, through extends and project references too) now compiles the css prop on every element of every file, and its .tsx and .jsx files are built with React's JSX runtime through a /** @jsxImportSource react */ pragma, which a file's own JSX pragma overrides, so the bundler no longer imports Emotion's runtime. The plugins read the setting into a new @emotion/react/jsx-runtime alias (importAliases can turn it off with false, and it is left out when @emotion/react is not aliased); @devup-ui/react/compat/emotion-jsx-runtime declares Emotion's JSX runtimes as React's so the project type-checks without Emotion installed. plugin-utils exports readJsxImportSource, and mergeImportAliases takes the JSX import source

@codecov

codecov Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ
bindings/devup-ui-wasm/src/lib.rs 100.00% <ø> (ø)
bindings/devup-ui-wasm/src/resolver_state.rs 100.00% <100.00%> (ø)
libs/css/src/lib.rs 100.00% <100.00%> (ø)
libs/extractor/src/barrel.rs 100.00% <100.00%> (ø)
libs/extractor/src/barrel/aliases.rs 100.00% <100.00%> (ø)
libs/extractor/src/barrel/gate.rs 100.00% <100.00%> (ø)
libs/extractor/src/build_time_values.rs 100.00% <100.00%> (ø)
libs/extractor/src/build_time_values_execute.rs 100.00% <100.00%> (ø)
libs/extractor/src/build_time_values_mapping.rs 100.00% <100.00%> (ø)
...s/extractor/src/build_time_values_sandbox_tests.rs 100.00% <100.00%> (ø)
... and 60 more

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901 and others added 2 commits October 5, 2026 14:00
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
No conflicted files; retain PR changes and merge updated parent #742, which contains main 11790be.
No conflicted files; retain PR changes and merge updated parent #750, which contains main 11790be.
owjs3901 added a commit that referenced this pull request Oct 8, 2026
Merge #757 at 78ef660 after the genuine
#756 integration975f3371. Recursive merge bases74afb760 and6d0c9c83 produce
an identical tree3c14e7e427686d8802d1e0722afc33515d3eed28 with no conflicts
or source changes. Preserve both exact base histories and normal hook gates.

Keep the approved six incoming Tailwind expectation and two incoming ESLint
fixture reconciliations from the prior merge, current JSX capture/constant-fold
semantics, located metadata errors, and existing HEAD assertions/goldens.
F195 and the remaining coverage units are separate subsequent changes.

Refs #684 #685

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901 added a commit that referenced this pull request Oct 9, 2026
Refs #690, #693

Merge exact 78ef660 as the second parent of c464f90, preserving MERGE_HEAD through one real CI-unset hook with CARGO_BUILD_JOBS=2. The indexed tree 09c939d is identical to the previous HEAD; this is a history-only merge, not an ordinary empty commit. No rebuild or additional gate rerun is required for an identical tree by the coordinator's W35j instruction. Linux CI 37854211490 remains the coverage authority at 98.05 percent, 368 uncovered lines, with no failing test; meaningful coverage completion follows.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901 and others added 4 commits October 17, 2026 03:12
Refs #682 #695 #688 #689

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #682 #695 #688 #689

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #682 #694 #695

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #682 #683 #694 #695

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901 and others added 7 commits October 21, 2026 01:03
Refs #682 #695 #688 #689

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #682 #695 #688 #689

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #682 #695 #688 #689

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695, #688

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685, #694

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants