Repository navigation
fix(sheet): keep global CSS, imports and cascade layers in written order - #701
Merged
Merged
Conversation
Global rules, @import and @font-face were stored in sorted sets and custom layers were declared alphabetically, so a later rule or layer could lose to an earlier one. The extractor now numbers global rules and records the first-use order of layers; the sheet emits them in that order. Refs #685 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #685 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
CI reformats sources to one-line calls before tarpaulin, which put the reported misses on the repeated add_css early return and a font-face struct field. Cover the repeated add_css/add_import/add_font_face calls and build the font face in one statement. Refs #685 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
|
…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>
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 #691 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This was referenced Oct 3, 2026
No conflicted files; preserve composition changes and main ESLint checks.
No conflicted files; combine updated parent and PR changes.
No conflicted files; combine updated parent and PR changes.
Conflicted file: libs/extractor/src/lib.rs. Retain both composition helper and regression tests from PR 706 and Tailwind per-class regression tests from main 11790be; take rewritten main Tailwind implementation with Rust 1.99 assertions. bun.lock regenerated by bun install; no snapshots were hand-merged. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Merge updated parent PR 706 (30247ba), containing main 11790be. Conflicted file: libs/extractor/src/prop_modify_utils.rs. Preserve PR 707's last-written className/style spread semantics and no spread_props parameter with capacity 2, together with main's per-class Tailwind compiler. No snapshots were hand-merged. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901
commented
Oct 14, 2026
owjs3901
left a comment
Contributor
Author
There was a problem hiding this comment.
이 pr은 문제가 있다고 생각한다. 왜냐하면 기본적으로 global css의 경우 file 형태로 이루어 지며 완전히 기존의 속성을 제거하고 교체하는 방식이므로 order가 필요없을 터이다.
Refs #688 #707 #776 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #688 #707 Keep the visitor unchanged at module scope so coverage analysis does not invent an uncovered nested declaration Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #688 #710 #707 Retain inherited captures for withComponent and as in JSX and TypeScript renderers 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>
Refs #691 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #691 #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Keep main keyframe identity and synthetic Tailwind registration deduplication. Refs #685 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 #691 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 #685 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
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 #685
요약
사용자가 #701을 유지하기로 결정했습니다. 같은 파일 안에서는 일반 CSS와 같이 더 아래에 작성한 선언이 이기도록 전역 CSS 작성 순서를 보존합니다.
main의 #699(globalCss theme/responsive token, import 객체, named layer 및 layer 이름 검증)와 #698(theme 수정)는 이미 병합된 기능이며 이번 PR의 새 기능이 아닙니다. 해당 부분은 main 구현을 유지하고, main의 #743 정렬 삽입과 dead-property 검증도 그대로 보존했습니다.
동작
globalCss,imports,fontFaces및 같은 객체 안의 shorthand/longhand 선언에 파일 내 작성 순서를 적용합니다.실제 public WASM과 Chromium에서 확인한 출력 및 winner:
body{color:red}body{color:blue}body{color:red;color:blue}marginTop:'10px',m:0body{margin-top:10px;margin:0}@layer zz,aa;새로 생기는 오류
없습니다. 이번 순서 수정은 새 빌드 오류를 추가하지 않습니다. main에 이미 있는 layer 이름 및 dead-property 오류는 그대로 유지합니다.
남는 한계
파일 간 경로 정렬, selector group/breakpoint 순서 및 imports/font/raw 등의 출력 category 분리는 기존 규칙을 유지합니다. 전체 프로젝트의 module 실행 순서나 임의 category/wrapper 사이의 완전한 interleaving을 보장한다고 주장하지 않습니다.
검증
CARGO_BUILD_JOBS=2, 6GB 전체 job 감시로 fmt/clippy 및 workspace Rust 테스트 3,985개 통과했습니다.fd11618fcc97429d17730bc6c734a8a87a4383c97ddf5ebd02f9e7cf99e28505입니다.최종 갱신
2026-10-15: main
a6ecc125를 실제 두 부모 merge commite410272686a3a54d733a7ffb39ea8581ef331268으로 반영했습니다. 부모는 기존 fix(sheet): keep global CSS, imports and cascade layers in written order #7016d068db0와 maina6ecc125입니다.독립 gate 재검토 APPROVE 후 정상 전체 pre-commit hook(lint, tarpaulin, Bun test)을 통과했습니다. hook은 기본 stack/jobs2/12GB 감시로 실행했고 실제 peak는 4.604GB, 남은 owned process는 0입니다.
로컬 Windows tarpaulin은 98.26% (17,305/17,612)이며 이를 Rust 100%로 보고하지 않습니다. 현재 head의 Linux CI에서는 별도의 100% 기준을 확인합니다.
현재 head
e410272686a3a54d733a7ffb39ea8581ef331268의 CI 38747132150가 SUCCESS입니다. publish, benchmark, landing-next-e2e, vinext-rsc-css-e2e가 모두 통과했고 Linux Rust 커버리지 100% (12,460/12,460), Bun 5,909 pass / 0 fail 및 함수·라인 커버리지 100%, Bun plugin preload regression 8 pass / 0 fail을 확인했습니다.2026-10-17: 통합 검사에서 #701과 #707을 함께 넣으면 빌드가 깨지는 문제(E0004: #701이 추가한
ExtractStyleValue::LayerOrder를 #707의 전수 match가 처리하지 않음)를 찾아, #701을 갱신된 fix(extractor): forward refs from generated styled components #722(50a107a2, fix(extractor): compose styled extensions, merge attrs and let later JSX spreads win #707~fix(extractor): forward refs from generated styled components #722 포함) 위에 실제 두 부모 merge(1e0fccaa)로 쌓았습니다. fix(extractor): forward refs from generated styled components #722 바로 다음에 병합해야 합니다.visit_style_value_expression의 metadata no-op 분기에 LayerOrder를 추가하고, 공개 styled 경로에서는 도달하지 않는다는 점(LayerOrder는 최종 수집 단계에서만 만들어짐)을 주석으로 남겼습니다. 분기를 직접 실행하는 내부 visitor 테스트와, styled 상속·캡처와 layer 순서가 함께 동작하는 공개 fixture를 추가했습니다. 이어서 Linux 커버리지(넓은 rustfmt)에서 주석 때문에 패턴이 한 줄로 합쳐지지 않아 6줄이 미커버로 잡히던 것을, 주석을 분기 위로 옮겨 해결했습니다(94dcddb6, 동작 변화 없음).