Skip to content

fix: repair main tests, docs lint and Tailwind test isolation - #780

Merged
owjs3901 merged 2 commits into
mainfrom
fix/sheet-hover-order-oklch
Oct 14, 2026
Merged

owjs3901 merged 2 commits into
mainfrom
fix/sheet-hover-order-oklch

Conversation

@owjs3901

@owjs3901 owjs3901 commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Refs #770, #734, #735, #753, #739

요약

  • main에 #770의 hover 상태 순서 회귀 테스트와 #734의 Tailwind v4 팔레트가 각각 병합되면서 테스트 10개가 실패했습니다. 테스트는 기존 v3의 hex 색상을 기대하지만 실제 CSS는 v4의 oklch() 색상을 출력합니다.
  • libs/sheet/src/lib.rs의 다섯 예상 CSS 문자열에서 색상 리터럴만 현재 팔레트 값으로 수정합니다. 프로덕션 코드, selector, hover guard, 반응형 조건, CSS 순서와 모든 assertion은 그대로입니다.
  • 별도로 병합된 #735의 no-runtime-read 규칙이 docs: add build-error reference with verified fixes #753 문서의 두 예제를 검사하면서 lint도 실패합니다. 복구 예제는 css()를 직접 호출하도록 고치고, 의도적으로 잘못된 consume(css) 예제는 같은 문서에 이미 쓰이는 tsx-error fence로 표시합니다. 규칙을 끄거나 약하게 만들지 않습니다.
  • 전역 Tailwind theme/palette를 교체하는 테스트와 동시에 실행되던 새 유틸리티 테스트에서 간헐적으로 decoration-red-500이 기본 색상 대신 var(--red-500)을 관측했습니다. 전역 상태 접근 경로를 확인한 테스트 48개에만 기존 #[serial] 패턴을 추가합니다. 전역 상태를 읽지 않는 테스트 6개는 병렬 실행을 그대로 유지합니다.

동작

  • 사용자에게 출력되는 코드와 CSS는 바뀌지 않습니다. 테스트 기대값과 문서 예제만 바로잡으며 프로덕션 코드는 수정하지 않습니다.

새로 생기는 오류

  • 없습니다.

남는 한계

  • 이번 수정으로 새로 생기는 한계는 없습니다.

검증

  • 수정 전 main a2b74d0f 기준의 동일 테스트에서 #EF4444, #3B82F6, #22C55E, #6B7280와 실제 oklch() 출력의 차이로 10개 실패를 재현했습니다.
  • 수정 후 Rust 1.99 cargo test --workspace, cargo fmt --all -- --check, cargo clippy --workspace --all-targets -- -D warnings를 통과했습니다.
  • 기존 tsx-error 사용 예: build-errors/page.mdx의 mutated-const-alias before 예제(수정 전 1898행)를 비롯한 잘못된 입력 예제들이 동일한 fence를 사용합니다.
  • 전역 theme 변경 테스트를 함께 포함한 Tailwind 테스트 1,285개를 24 test threads로 20회 반복 실행했습니다. 총 25,700개 테스트 실행이 모두 통과했고 snapshot 변경은 없습니다.
  • 복구 문서의 css() 직접 호출 예제는 실제 WASM 경로에서 return "a"와 .a{color:red}로 컴파일됨을 확인했습니다. styling runtime은 생성되지 않습니다.
  • 일반 로컬 설정(CI unset)의 표준 hook을 통과했습니다. Linux PR CI의 100% coverage gate는 별도로 확인합니다.

전역 상태 접근 테스트 목록

C는 declarations_of/parse_class에서 custom_utility를 거쳐 DEFINITIONS를 읽는 경로, S는 spacing theme, P는 color token/palette, T는 이름별 theme, V는 custom variant/breakpoint, M은 전환 기본값, K는 theme keyframes 접근입니다. 기존 전역 상태 변경 테스트와 동일한 unkeyed serial lock을 사용합니다.

모듈 테스트 전역 상태 접근 경로
tailwind_children space_adds_margins_between_the_children S (space-x-4)
tailwind_children divide_reverse_style_and_color children_utility -> color_value, P (divide-red-500)
tailwind_children unknown_children_utilities_stay_as_written S (space-x-huge); P (divide-xyz); C on failed child utilities
tailwind_children children_utilities_apply_under_variants_to_the_children S (space-x-4), V (md, focus)
tailwind_children children_rules_register_their_variables S (space-x-4)
tailwind_color palette_is_the_default_theme_of_v4 C, P (bg-red-500); unsupported text namespace checks also read DEFINITIONS
tailwind_color opacity_modifier_mixes_with_transparent C, P (bg-red-500/50)
tailwind_color invalid_color_stays_as_written C, P (bg-unknown, bg-red-500/abc)
tailwind_color important_marks_every_declaration C; spacing_scale (p-4); P (bg-red-500/50!); T(blur) (blur-sm!)
tailwind_color important_applies_under_variants C, spacing_scale (hover:p-4!), V (hover)
tailwind_effects blur_composes_through_its_variable C; filter_utility -> function_value / bare_value, T(blur)
tailwind_effects filter_functions_set_their_own_variable C (brightness-50); numeric filter parsing follows this registry read
tailwind_effects backdrop_filter_functions_compose_too C; filter_utility -> function_value, T(blur) (backdrop-blur)
tailwind_effects filter_and_backdrop_filter_read_every_function C (filter, filter-none), before fixed filter output
tailwind_effects two_filters_add_up_instead_of_overwriting C, T(blur) (blur-sm)
tailwind_effects unknown_filters_stay_as_written C; T(blur) (blur-huge)
tailwind_effects shadow_sizes_follow_the_default_theme C; shadow_utility, T(shadow)
tailwind_effects shadow_colors_set_the_color_the_shadows_read C, T(shadow); is_shadow_token -> TOKEN_REGISTRY.read(); P (shadow-red-500)
tailwind_effects shadow_inherit_and_unknown_shadows C, T(shadow); is_shadow_token -> TOKEN_REGISTRY.read(); P (shadow-huge)
tailwind_effects linear_gradients_use_the_syntax_of_v4 C (bg-linear-to-t), before gradient parsing
tailwind_effects conic_and_radial_gradients C (bg-conic)
tailwind_effects arbitrary_gradients_carry_their_own_stops C (bg-linear-[...])
tailwind_effects gradients_v4_does_not_define_stay_as_written C (bg-gradient-to-r); fallback color lookup also reaches P
tailwind_effects gradient_stops_compose_through_variables C; stop_utility -> color_value, P (from-red-500)
tailwind_effects gradient_stop_positions C (from-10%), before position parsing
tailwind_effects unknown_gradient_stops_stay_as_written C; stop_utility -> color_value, P (from-nothing)
tailwind_effects gradient_rules_register_the_stop_variables C, P (from-red-500)
tailwind_effects modifiers_and_variants_apply_to_composed_utilities C, T(blur), V (hover:blur-sm)
tailwind_effects ring_widths_draw_the_ring_composed_with_the_shadows C (ring-2), before width parsing
tailwind_effects ring_colors_inset_rings_and_offsets C; ring_utility -> shadow_color -> color_value, P (ring-red-500)
tailwind_effects unknown_rings_stay_as_written C; ring_utility -> shadow_color -> color_value, P (ring-nothing)
tailwind_effects drop_shadow_sizes_compose_into_filter C; drop_shadow_utility, T(drop-shadow)
tailwind_effects drop_shadow_without_a_size_none_colors_and_arbitrary_values C, T(drop-shadow); shadow_color -> color_value, P (drop-shadow-red-500)
tailwind_misc fixed_utilities C (table-fixed); perspective-near also reaches reads_unsupported_theme -> theme_value / namespace_is_reset
tailwind_misc line_clamp_clamps_to_a_number_of_lines C (line-clamp-3)
tailwind_misc text_decoration_offsets_and_outlines C; misc_utility -> plain -> color_value, P (decoration-red-500)
tailwind_misc border_widths_draw_in_the_border_style C (border-2), before width parsing
tailwind_misc border_styles_set_the_style_the_widths_draw_in C (border-solid)
tailwind_misc border_spacing_sets_both_axes_unless_one_is_named C; border_spacing -> spacing -> spacing_scale, S (border-spacing-2)
tailwind_misc logical_sides_scroll_spacing_and_indent C; plain / negated -> spacing_scale / spacing, S (start-4, -start-4)
tailwind_misc unknown_utilities_stay_as_written C; S (border-spacing-huge); P (decoration-nothing)
tailwind_motion transitions_read_the_easing_and_duration_utilities_set C, M (transition); expected-value helpers also call timing / duration
tailwind_motion duration_sets_the_variable_a_transition_reads C (duration-150), before numeric duration parsing
tailwind_motion ease_sets_the_variable_a_transition_reads C, T(ease) (ease-in, including arbitrary fallback lookup)
tailwind_motion initial_and_delay C (duration-initial, delay-150)
tailwind_motion unknown_motion_stays_as_written C; T(ease) (ease-bouncy), T(animate) (animate-wobble)
tailwind_motion animations_bring_their_keyframes C, T(animate), K (animate-spin)
tailwind_motion arbitrary_animations_bring_the_keyframes_they_name C, T(animate) before arbitrary fallback; K (animate-[spin_3s_linear_infinite], also animate-none)

로컬 검증 기록: Windows Rust tarpaulin 98.09% (14771/15058), bun 99.96% 함수 / 99.90% 줄; 2809 Rust 테스트 및 5875 bun 테스트 전부 통과; 표준 hook의 전체 프로세스 최대 4.4 GB; Linux CI run 38540883299의 100% gate는 별도 확인 중입니다.

CI 38540883299 기록: lint / Rust·bun coverage gate / benchmark / vinext 통과; 두 landing E2E는 기존 hover-order 테스트 20개에서 Devup className의 v4 oklch 값을 v3 RGB로 기대해 실패했습니다(각각 144개 통과). 명시적 hex props 기대값과 모든 상태·순서 assertion을 유지하는 테스트 전용 후속 commit을 준비 중이며, green 이전에는 draft를 해제하지 않습니다.

후속 테스트 commit b71ca4e: Tailwind와 Devup className은 v4 oklch 기대값(index 0), 명시적 Devup hex props만 RGB 기대값(index 1)을 사용합니다. 모든 hover / active / focus / disabled / media / winner assertion은 유지했고, 실제 Chromium의 30개 사례 전부 통과했습니다(7.4초, 전체 프로세스 최대 1.352 GB); CI unset 표준 hook도 통과했습니다. 최초 hotfix 7960b48f와 함께 적용해야 합니다.

최종 CI 38547902330: publish / landing-next-e2e / vinext-rsc-css-e2e / benchmark / codecov/patch 모두 성공했습니다(head b71ca4e). MERGEABLE / CLEAN 확인 후 ready for review로 전환했으며, 실제 병합은 사용자가 진행합니다. 독립 gate review도 APPROVE이며 새 build error와 프로덕션 코드 변경은 없습니다.

owjs3901 and others added 2 commits October 14, 2026 18:03
Refs #770, #734, #735, #753, #739

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

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

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

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

Copy link
Copy Markdown
Contributor

Changepacks

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

Patch

  • Rewriting styled-components, Emotion and vanilla-extract imports keeps type-only imports type-only: import { type DefaultTheme, ThemeProvider } now leaves import type { DefaultTheme } on the package instead of a value import that made it a runtime dependency, and an import type declaration is left as written. spin.getName() on a keyframes() binding becomes the generated keyframes name instead of a call on a string that threw at runtime
  • The styled-components and Emotion compat ThemeProvider now gives its theme through React context: useTheme, withTheme and the new ThemeConsumer return the real theme object (an object merged over the outer theme, or what a theme function makes of it) instead of an empty Proxy of var() references, withTheme forwards refs, lets a caller's theme win and sets a displayName. Styles keep reading the CSS variables the provider declares. styled-components v6.4 createTheme is available from the compat entry, and ThemeConsumer and createTheme imports are redirected there instead of staying a runtime dependency on styled-components
  • Respect source-order property replacement across conditional spreads in styled rule objects, and document that styled callbacks cannot return runtime class names. No new build errors; existing located Cannot compose errors remain unchanged.
  • Typography documents the emitted default breakpoints, and source-backed integration tests keep the public breakpoint lists and range bounds synchronized with the production defaults. No runtime changes or new build errors.
  • 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.
  • The extractor guide shows reproducible native-element output, generated CSS-variable bindings, and actual atomic CSS rather than obsolete class names. Documentation only: no new build errors.
  • Selectors: a nested rule without & in a styled or css template is scoped to the component instead of becoming a global rule (.child {} and > p {} select descendants, :hover {} and ::before {} the component), and a rule nested in a selector list applies under each of its selectors; content keeps the quotes of its strings (content: 'x', content: ""); params go on the pseudo-class that takes them, so _groupNthChild gives :is(...):nth-child(2n) .a also when nested; a bare selectors key is a pseudo-class name, an attribute of the element or a descendant selector ('div p', '> p'), under a parent too, and keeps the case of class names; ::part(), ::slotted(), ::highlight(), ::picker() and the view-transition pseudo-elements get two colons. New build errors: a _name prop or selector key that names nothing (_notASelector, selectors={{ div: ... }}), and a string under a selector that is not CSS text (_hover="external-class")
  • stylex.attrs() gives the dynamic CSS variables it sets as style attribute text ("--a:" + value), as StyleX does for spreading onto non-React targets, instead of a style object; stylex.props() keeps the object React takes. The attrs() return type declares style as a string
  • 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
  • Order standalone nonresponsive hover-capability guards within their selector group so active, focus and disabled styles can override hover. Keep responsive Tailwind hover and Devup selector prop ordering unchanged. No new build errors.
  • Tailwind classes in a className follow Tailwind CSS v4: colors are the v4 default palette (oklch) and the colors and shadows of devup.json theme are usable as Tailwind theme values (bg-primary, text-text, shadow-card, as var(--token)); the opacity modifier (bg-red-500/50, /[71.37%], /(--alpha)) mixes with color-mix as v4 does; a trailing or leading ! makes every declaration important; blur, brightness, contrast, grayscale, hue-rotate, invert, saturate, sepia and their backdrop-* forms compose through Tailwind's custom properties instead of overwriting filter and backdrop-filter; gradients use bg-linear-, bg-conic- and bg-radial-* with from-, via- and to-* composing through the gradient variables (bg-gradient-to-* is not defined by v4 and stays as written); animate-* brings the @Keyframes it names and transition, duration, delay and ease follow v4; space-* and divide-* apply to the children like v4 (:where(& > :not(:last-child))); @Property rules are emitted only for the custom properties a class uses. Anything the build cannot reproduce exactly (drop-shadow-*) stays as written in the className. No new build errors
  • Tailwind classes in a className read the Tailwind CSS of the project: the file that imports tailwindcss (the tailwind.css option of devup.json, else a conventional path) gives @theme variables (colors, spacing, shadows, blurs, radii, easings, animations with their @Keyframes, default transitions, breakpoints), @Utility utilities and @custom-variant variants, and the Vite, webpack and Next.js plugins read it again when it or a CSS file it imports changes. Anything that cannot be read exactly, and the classes of namespaces the build does not read, stay as written. More of Tailwind CSS v4 compiles: ring-, inset-ring-, ring-offset-* and drop-shadow-* compose with shadows and filters, borders and outlines draw in --tw-border-style and --tw-outline-style (a border now shows its style), line-clamp, text decoration, border-spacing, logical and scroll spacing, tables, perspective, font-stretch and more; the arguments of clsx(), classnames() and classNames() and [...].join(' ') compile in place. Radii follow v4 (rounded-sm is 0.25rem, rounded-full is calc(infinity * 1px)). No new build errors
  • A styled-components or Emotion style function reading the theme by literal keys, such as p => p.theme.space[2] or ({ theme }) => theme.colors['brand'], now reads the CSS variable ThemeProvider declares (var(--space-2)). A theme read the build cannot turn into a CSS variable, such as p => p.theme, p => p.theme.brand() or theme.space[i], is a build error naming the file, line, column and code, where it used to read a theme object that does not exist at runtime and give undefined or throw
  • While @vanilla-extract/css is aliased, importing @vanilla-extract/recipes or @vanilla-extract/sprinkles is a build error naming the file, line and column: those packages generate CSS Devup UI does not compile, so their rules used to be silently missing from the stylesheet. The error says to write the styles with css(), or to disable the alias and build with the vanilla-extract plugin. Type-only imports are allowed
  • Skip source-map generation in the codeExtractWithoutSourceMap WASM export while preserving extracted code, CSS and dependencies. Add real WASM and Next loader regressions for map-enabled and map-disabled extraction. No new build errors.

@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
  • Tailwind classes in a className read the Tailwind CSS of the project: the file that imports tailwindcss (the tailwind.css option of devup.json, else a conventional path) gives @theme variables (colors, spacing, shadows, blurs, radii, easings, animations with their @Keyframes, default transitions, breakpoints), @Utility utilities and @custom-variant variants, and the Vite, webpack and Next.js plugins read it again when it or a CSS file it imports changes. Anything that cannot be read exactly, and the classes of namespaces the build does not read, stay as written. More of Tailwind CSS v4 compiles: ring-, inset-ring-, ring-offset-* and drop-shadow-* compose with shadows and filters, borders and outlines draw in --tw-border-style and --tw-outline-style (a border now shows its style), line-clamp, text decoration, border-spacing, logical and scroll spacing, tables, perspective, font-stretch and more; the arguments of clsx(), classnames() and classNames() and [...].join(' ') compile in place. Radii follow v4 (rounded-sm is 0.25rem, rounded-full is calc(infinity * 1px)). No new build errors

@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

  • The @devup-ui/react README and the css-utils-literal-only rule docs link their mention of build errors to the new Build Errors reference (https://devup-ui.com/docs/build-errors), which lists the build errors grouped by API; the docs sidebar lists the page after Supported Syntax & Limitations, whose Build errors section links to it. Documentation only: no new build errors
  • ESLint rules now check exactly what the build reads. The array, typography, media and styleOrder rules and css-utils-literal-only follow the import aliases the build compiles by default (@emotion/react, @emotion/styled, styled-components, @vanilla-extract/css) and the rules of styled (styled.div({...}), styled("div", {...}), styled(Base)({...}, {...}); not .attrs()), createGlobalStyle({...}) and the styles of Emotion Global, and check and fix a module-level const object that only styles read. Vanilla-extract stylesheets (.css.ts/.css.js) are no longer read as Devup UI. New rule no-runtime-read reports css/keyframes/styled/Box read as a value ("X is read at runtime, where it does not exist"), and css-utils-literal-only reports globals that do not exist where a .css.ts is evaluated (window, document, process, ...). No new build errors.
  • 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

  • Isolate the coordinator port file per owning process when another live next dev/build holds it, record the owner pid, and report port, pid and recovery when the coordinator is missing or unreachable
  • Tailwind classes in a className read the Tailwind CSS of the project: the file that imports tailwindcss (the tailwind.css option of devup.json, else a conventional path) gives @theme variables (colors, spacing, shadows, blurs, radii, easings, animations with their @Keyframes, default transitions, breakpoints), @Utility utilities and @custom-variant variants, and the Vite, webpack and Next.js plugins read it again when it or a CSS file it imports changes. Anything that cannot be read exactly, and the classes of namespaces the build does not read, stay as written. More of Tailwind CSS v4 compiles: ring-, inset-ring-, ring-offset-* and drop-shadow-* compose with shadows and filters, borders and outlines draw in --tw-border-style and --tw-outline-style (a border now shows its style), line-clamp, text decoration, border-spacing, logical and scroll spacing, tables, perspective, font-stretch and more; the arguments of clsx(), classnames() and classNames() and [...].join(' ') compile in place. Radii follow v4 (rounded-sm is 0.25rem, rounded-full is calc(infinity * 1px)). No new build errors
  • Skip source-map generation in the codeExtractWithoutSourceMap WASM export while preserving extracted code, CSS and dependencies. Add real WASM and Next loader regressions for map-enabled and map-disabled extraction. No new build errors.

@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
  • Tailwind classes in a className read the Tailwind CSS of the project: the file that imports tailwindcss (the tailwind.css option of devup.json, else a conventional path) gives @theme variables (colors, spacing, shadows, blurs, radii, easings, animations with their @Keyframes, default transitions, breakpoints), @Utility utilities and @custom-variant variants, and the Vite, webpack and Next.js plugins read it again when it or a CSS file it imports changes. Anything that cannot be read exactly, and the classes of namespaces the build does not read, stay as written. More of Tailwind CSS v4 compiles: ring-, inset-ring-, ring-offset-* and drop-shadow-* compose with shadows and filters, borders and outlines draw in --tw-border-style and --tw-outline-style (a border now shows its style), line-clamp, text decoration, border-spacing, logical and scroll spacing, tables, perspective, font-stretch and more; the arguments of clsx(), classnames() and classNames() and [...].join(' ') compile in place. Radii follow v4 (rounded-sm is 0.25rem, rounded-full is calc(infinity * 1px)). No new build errors

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

Patch

  • The @devup-ui/react README and the css-utils-literal-only rule docs link their mention of build errors to the new Build Errors reference (https://devup-ui.com/docs/build-errors), which lists the build errors grouped by API; the docs sidebar lists the page after Supported Syntax & Limitations, whose Build errors section links to it. Documentation only: no new build errors
  • The styled-components and Emotion compat ThemeProvider now gives its theme through React context: useTheme, withTheme and the new ThemeConsumer return the real theme object (an object merged over the outer theme, or what a theme function makes of it) instead of an empty Proxy of var() references, withTheme forwards refs, lets a caller's theme win and sets a displayName. Styles keep reading the CSS variables the provider declares. styled-components v6.4 createTheme is available from the compat entry, and ThemeConsumer and createTheme imports are redirected there instead of staying a runtime dependency on styled-components
  • The README no longer claims every CSS-in-JS pattern compiles: it describes what the build compiles and that anything it cannot know is a CSS variable or a located build error, and links the new Supported Syntax & Limitations page, which lists what compiles, the style override rules (where a later part wins and where the CSS cascade decides), Baseline 2024 browser support, that a component taking the css prop must pass className and style on, the runtime-only APIs and how each is handled, and the known limitations
  • stylex.attrs() gives the dynamic CSS variables it sets as style attribute text ("--a:" + value), as StyleX does for spreading onto non-React targets, instead of a style object; stylex.props() keeps the object React takes. The attrs() return type declares style as a string

@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
  • Tailwind classes in a className read the Tailwind CSS of the project: the file that imports tailwindcss (the tailwind.css option of devup.json, else a conventional path) gives @theme variables (colors, spacing, shadows, blurs, radii, easings, animations with their @Keyframes, default transitions, breakpoints), @Utility utilities and @custom-variant variants, and the Vite, webpack and Next.js plugins read it again when it or a CSS file it imports changes. Anything that cannot be read exactly, and the classes of namespaces the build does not read, stay as written. More of Tailwind CSS v4 compiles: ring-, inset-ring-, ring-offset-* and drop-shadow-* compose with shadows and filters, borders and outlines draw in --tw-border-style and --tw-outline-style (a border now shows its style), line-clamp, text decoration, border-spacing, logical and scroll spacing, tables, perspective, font-stretch and more; the arguments of clsx(), classnames() and classNames() and [...].join(' ') compile in place. Radii follow v4 (rounded-sm is 0.25rem, rounded-full is calc(infinity * 1px)). No new build errors

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

Patch

  • Tailwind classes in a className read the Tailwind CSS of the project: the file that imports tailwindcss (the tailwind.css option of devup.json, else a conventional path) gives @theme variables (colors, spacing, shadows, blurs, radii, easings, animations with their @Keyframes, default transitions, breakpoints), @Utility utilities and @custom-variant variants, and the Vite, webpack and Next.js plugins read it again when it or a CSS file it imports changes. Anything that cannot be read exactly, and the classes of namespaces the build does not read, stay as written. More of Tailwind CSS v4 compiles: ring-, inset-ring-, ring-offset-* and drop-shadow-* compose with shadows and filters, borders and outlines draw in --tw-border-style and --tw-outline-style (a border now shows its style), line-clamp, text decoration, border-spacing, logical and scroll spacing, tables, perspective, font-stretch and more; the arguments of clsx(), classnames() and classNames() and [...].join(' ') compile in place. Radii follow v4 (rounded-sm is 0.25rem, rounded-full is calc(infinity * 1px)). No new build errors

@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
  • Tailwind classes in a className read the Tailwind CSS of the project: the file that imports tailwindcss (the tailwind.css option of devup.json, else a conventional path) gives @theme variables (colors, spacing, shadows, blurs, radii, easings, animations with their @Keyframes, default transitions, breakpoints), @Utility utilities and @custom-variant variants, and the Vite, webpack and Next.js plugins read it again when it or a CSS file it imports changes. Anything that cannot be read exactly, and the classes of namespaces the build does not read, stay as written. More of Tailwind CSS v4 compiles: ring-, inset-ring-, ring-offset-* and drop-shadow-* compose with shadows and filters, borders and outlines draw in --tw-border-style and --tw-outline-style (a border now shows its style), line-clamp, text decoration, border-spacing, logical and scroll spacing, tables, perspective, font-stretch and more; the arguments of clsx(), classnames() and classNames() and [...].join(' ') compile in place. Radii follow v4 (rounded-sm is 0.25rem, rounded-full is calc(infinity * 1px)). No new build errors

@codecov

codecov Bot commented Oct 14, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ
libs/extractor/src/tailwind_children.rs 100.00% <ø> (ø)
libs/extractor/src/tailwind_color.rs 100.00% <ø> (ø)
libs/extractor/src/tailwind_effects.rs 100.00% <ø> (ø)
libs/extractor/src/tailwind_misc.rs 100.00% <ø> (ø)
libs/extractor/src/tailwind_motion.rs 100.00% <ø> (ø)
libs/sheet/src/lib.rs 100.00% <ø> (ø)

... and 12 files 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.

@owjs3901
owjs3901 marked this pull request as ready for review October 14, 2026 10:30
owjs3901 added a commit that referenced this pull request Oct 14, 2026
Refs #688 #707 #776 #702 #780

Includes exact patches 7960b48 and b71ca4e

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 14, 2026
Refs #689, #780

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@owjs3901
owjs3901 merged commit 1430cc2 into main Oct 14, 2026
5 checks passed
@owjs3901
owjs3901 deleted the fix/sheet-hover-order-oklch branch October 14, 2026 11:53
owjs3901 added a commit that referenced this pull request Oct 14, 2026
Refs #687, #780

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.

1 participant