Conversation
…rations css(a, b) composing classes whose styles the build knows, bound to css() in the file or exported by another module, merges their atoms per property, selector, breakpoint and layer, conditions included, instead of joining classes whose winner the stylesheet order picked. vanilla-extract style([...]) passes each composed style as its own argument, keeping a style composed again later. Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…asurable Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…JSX spreads win Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…led order and JSX element className Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…etting Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…e parts Refs #688 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #689 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…uate shouldForwardProp at build time Refs #689 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ring Refs #689 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #691 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
… and conditional styles Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…h Emotion Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ed parameters Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ead through namespaces Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…akes from the visitor Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…eclared after their use Refs #695, #686 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>
…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 #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 #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 #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690; prerequisite PR #715 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690; prerequisite PR #708 with #715 and #756 preserved Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ed entrypoints Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ders Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…gaps Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…paths Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Contributor
Changepacks@devup-ui/wasm@1.0.83 → 1.0.84 - bindings/devup-ui-wasm/package.jsonPatch
@devup-ui/bun-plugin@1.0.22 → 1.0.23 - packages/bun-plugin/package.jsonPatch
@devup-ui/components@0.1.60 → 0.1.61 - packages/components/package.jsonPatch
@devup-ui/eslint-plugin@1.0.22 → 1.0.23 - packages/eslint-plugin/package.jsonPatch
@devup-ui/next-plugin@1.0.90 → 1.0.91 - packages/next-plugin/package.jsonPatch
@devup-ui/plugin-utils@1.0.17 → 1.0.18 - packages/plugin-utils/package.jsonPatch
@devup-ui/react@1.0.44 → 1.0.45 - packages/react/package.jsonPatch
@devup-ui/reset-css@1.0.31 → 1.0.32 - packages/reset-css/package.jsonPatch
@devup-ui/rsbuild-plugin@1.0.67 → 1.0.68 - packages/rsbuild-plugin/package.jsonPatch
@devup-ui/vite-plugin@1.0.73 → 1.0.74 - packages/vite-plugin/package.jsonPatch
@devup-ui/webpack-plugin@1.0.71 → 1.0.72 - packages/webpack-plugin/package.jsonPatch
|
Codecov Report✅ All modified and coverable lines are covered by tests.
... and 57 files with indirect coverage changes 🚀 New features to boost your workflow:
|
Refs #690 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901
marked this pull request as ready for review
October 5, 2026 21:39
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #690 (W37: StyleX position/view-transition identity, API 및 entrypoint). #758 위에 쌓은 브랜치이며 #758이 먼저 병합되어야 합니다. PR base는
main입니다.요약
positionTry()/viewTransitionClass()호출이 파일명과 API명만으로 같은 이름을 받던 충돌을 수정합니다.viewTransitionClass()의group,imagePair,old,new를 실제 view-transition pseudo-element 규칙으로 컴파일합니다. 일반 DOM 클래스 규칙을 출력하지 않습니다.hasDevupUIgate와 맞춥니다. 알려진 StyleX API 호출은 컴파일되거나 원본 위치의 빌드 오류가 되며 JS에 남지 않습니다..call/.apply/.bind및 함수값 escape, 모든 표현식 위치의 types-only loader를 차단하고 Linux CI의 48개 uncovered line을 의미 있는 회귀 테스트로 보완합니다.동작
이름과 선언
하나의 injective 이름 함수가 파일 식별자·API 구분·canonical 내용을 구분자가 포함된 UTF-8 hex로 lossless encoding합니다. 방문 순서, 다른 파일, 클래스 번호 counter, 유한 hash를 사용하지 않아 서로 다른 입력 identity의 충돌 가능성이 남지 않습니다. 같은 파일의 같은 canonical 내용은 이름을 공유합니다.
positionTry선언은 정렬하고, view-transition 슬롯과 선언은 upstream과 같이 enumeration 순서를 보존합니다. 빈 객체와 명시적인 빈 슬롯은 다릅니다. keyframes/변수 참조를 통해 counter가 다시 유입되지 않도록 필요한 StyleX dependency 이름도 같은 함수를 사용합니다.group::view-transition-group(*.<name>)imagePair::view-transition-image-pair(*.<name>)old::view-transition-old(*.<name>)new::view-transition-new(*.<name>)숫자 길이는 px, duration은 ms,
fontWeight/opacity등은 올바른 unitless 값입니다. Devup spacing 배율을 적용하지 않습니다. 선언의 정적으로 알려진null/undefined/false는 생략하며, 마지막 중복 선언이 생략 값이면 앞선 값도 남지 않습니다. 슬롯 자체는 flat 선언 객체여야 합니다.외부 모듈에서 평가한 view-transition 상수도 같은 계약을 사용합니다. 상수를 JS literal로 재구성할 때 생기는 중첩 record의 괄호를 adapter에서 제거해, 유효한 슬롯 객체가 읽히지 않던 문제를 회귀 테스트로 수정했습니다.
Upstream 계약과 의도적 차이
대상은 설치된
@stylexjs/babel-plugin@0.19.1및 immutable commit1fcb9a51cbecad2c82255e0f4b45cc072fa1a95a입니다. 실제 Babel probe도 수행하여 아래 upstream 출력과 omission을 확인했습니다.positionTry({top:0,width:100})의 upstream LTR 출력은top:top;top:0;width:width;width:100px;이지만 Devup은 유효한top:0;width:100px;만 출력합니다. tuple 변환 41–58, serializer 94–101.animationDuration:500,fontWeight:700의 실제 upstream 출력은animation-duration:500px;font-weight:700px;입니다. Devup은500ms와 unitless700을 사용합니다. dashify 후 lookup 38–44, suffix 표 109–182.Entry Sources
@stylexjs/stylex@devup-ui/react/stylex@devup-ui/reactstylex및 root namespace의.stylex; 다른 runtime export는 보존@devup-ui/react/compat/stylex실제 entrypoint가 존재하므로 package exports를 만들거나 제거하지 않고 빌드 인식을 수정했습니다.
stylex라는 unscoped source, 임의 prefix/subpath, root의 개별positionTryexport를 새로 인정하지 않습니다. 기존 generic root default namespace는 StyleX default entrypoint와 구분하여 다른 Devup 동작을 보존합니다.최종 public surface는
PositionTryStyles(40개의 optional position key),ViewTransitionStyles(optional 네 슬롯),StylexDeclarations(flatstring | number | null | undefined | falseleaf)입니다. 기존 root namespace와 실제/stylexexport 및 upstream ambient 타입에 반영합니다. W24의 타입 PR은 이전 베이스가 컴파일하던 flat transition surface를 기준으로 하므로, 두 PR 중 나중에 병합하는 쪽이 이 최종 네 슬롯 계약으로 타입을 reconcile해야 합니다.PositionTryStyles의 최종 허용 key는 다음 40개입니다(모두 optional, readonly):ESLint의
css-utils-literal-only도 같은 source와 lexical binding을 인식합니다. 변경한 rule 경로는index.ts, 신규stylex-bindings.ts, 신규__tests__/stylex-bindings.test.ts이며 모두packages/eslint-plugin/src/rules/css-utils-literal-only/아래입니다. W24 lint 스택과 병합할 때 이 세 경로를 reconcile해야 합니다. 다른 ESLint rule은 수정하지 않았습니다.새로 생기는 오류
모두
파일:줄:열: <API> cannot use <코드> at build time: <필요한 입력>형식의 위치와 원인을 포함합니다.positionTry()의 whitelist 밖 key, CSS kebab-case alias/custom-property key, 또는viewTransitionClass()의 네 슬롯 밖 key/기존 flat 선언 입력..call/.apply/.bind(literal computed 및 분리한 member 포함), 다른 호출의 인자 전달, 객체·배열 저장은 API명·사용 형태·원본 위치와call the API directly해결 방법을 포함한 오류입니다. 기존 named import, alias, namespace member의 직접 호출은 계속 컴파일하며 관련 없는 member 및 shadowed 사용자 함수는 보존합니다.@devup-ui/react/compat/stylex를 member call의 loader, 단독 require, 대입, 인자·객체·배열, 허용된 root loader의 중첩 인자 또는 dynamic import로 실행해도 loader 위치에서 오류입니다. type-only import와 import-type 참조, shadowed require는 보존합니다.cssUtilsLiteralOnly진단이 발생합니다. 새 messageId나 억제 주석은 추가하지 않았습니다.남는 한계
var(...)문자열은 사용할 수 있습니다.검증
수정 전 real-WASM probe: 서로 다른 position 호출이 모두
--a, 서로 다른 flat view 호출이 모두a; 네 슬롯 객체는 오류; 실제 root/subpath import의 API 호출은 JS에 남았습니다.변경 후 real-WASM 출력 (
/src/qa.tsx; styling runtime import 없이 실제 실행):W24의 root 및 subpath
create/propsJSX fixture는 모두 아래 실제 출력으로 바뀝니다:기존 flat
viewTransitionClass({animationDuration:'1s'})는 이제 위치가 포함된 오류입니다. 예:w37-flat.tsx:2:56: stylex.viewTransitionClass() cannot use animationDuration ... its slots are group, imagePair, old and new. Runtime duration은w37-runtime.tsx:3:67의 실제 leafduration, 슬롯group, 선언animationDuration을 명시합니다.cargo test --workspace: 총 3,241 통과/0 실패, extractor 2,524 unit + 3 integration 포함. 기존 focused StyleX 635, residual suite 38에 더해 R1 전용 28 cases 통과; Rust 1.99 strict workspace/all-target clippy 및 fmt 통과.bun run build, declared dist entrypoint 검증 통과. Source 타입 harness와 실제 dist/package exports를 복사한 consumer에서 각각 1 positive + 19 negative 통과.37335990069(1ec8eff3)은 Rust tests가 모두 통과했으나 99.67% (14,347/14,395), 변경 코드 48 uncovered line 때문에 실패했습니다. Codecov outage가 아니며 뒤의 Bun CI는 실행되지 않았습니다. 그 48개 line은 unique 임시 HEAD tree의 CI-format mapping으로 추적했고 회귀 테스트와 불가능한 guard의 제거로 보완했습니다.f99c5eb4adfad3d5bd054499b4e16f96ba12f942(커밋09dd7d3d+f99c5eb4)의 Linux run37359456436은 **99.97% (14,443/14,448)**였습니다. 원래 48개 miss는 모두 닫혔고 새 boundary 파일 두 개의 5개 line을 추가 보완했습니다. Build/entrypoint/tarball/lint 및 다른 세 job은 통과했으나 당시 publish의 coverage threshold에서 멈췄으므로 Codecov outage가 아니었습니다.667aa623025002322b2c3506bae60b6fadbbc928, Linux run 37366885193: publish job 전체 통과, Rust **100.00% (14,448/14,448)**였습니다. 마지막 5개 line도 실제 mutation/export 및 shadowed control 회귀 테스트로 닫혔습니다. publish의 build/entrypoint/tarball/lint/Rust+Bun/landing E2E 등 실행된 필수 검증은 모두 통과했습니다.benchmark,landing-next-e2e,vinext-rsc-css-e2e는 실행 step 없이 cancelled되었습니다. Coordinator가 확인한 GitHub-hosted runner 할당 장애(04:11 KST부터,The job was not acquired by Runner of type hosted even after multiple attempts)이며 코드 실패나 Codecov 장애가 아닙니다. 전체 run을 green이라고 주장하지 않습니다. Workflow를 변경하거나 반복 재실행하지 않았으며, GitHub 복구 후 coordinator가 취소된 job을 재실행합니다. 직전f99c5eb4의 동일 production source에서는 이 세 job이 모두 통과했고, 마지막 커밋은 test-only입니다.667aa623WASM에서 여섯 JS 잔존을 재현한 뒤, 기존 Oxcvisit_binding_pattern호출 한 줄로 올바른 seam을 수정했습니다. 바깥 loader 예외·runtime pattern·shadowing·erased type을 보존하는 adjacent 28 cases와 rebuilt 139 QA로 확인했으며, 새 R1-only gate verdict는 APPROVE / HIGH, 남은 semantic blocker는 없습니다.ca0d7168e7b07db93063b0c2701a432edb9d322e, 최종 Linux run **37374977910**는 전체 SUCCESS입니다. Rust 100.00% (14,449/14,449),publish,benchmark,landing-next-e2e,vinext-rsc-css-e2e네 job 모두 통과했습니다. 최종 run에는 outage 예외를 적용할 필요가 없습니다. PR은 ready로 전환하며 병합·close·approve는 하지 않습니다.B1/B2 실제 전후 출력
수정 전에는 아래 호출과 loader가 JS에 그대로 남았습니다 (
w37b-before-boundary.json).동일 입력의 수정 후 real-WASM 결과 (
w37b-after-boundary.json):R1 binding pattern도 동일 입력의 before/after를 기록했습니다: