Skip to content

fix(style-order): align editor diagnostics and checkpoint extraction work - #766

Open
owjs3901 wants to merge 105 commits into
mainfrom
fix/style-order-everywhere
Open

owjs3901 wants to merge 105 commits into
mainfrom
fix/style-order-everywhere

Conversation

@owjs3901

@owjs3901 owjs3901 commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Refs #684, #685 (W38: JSX 외 styleOrder 및 리터럴 CSS 메타데이터). 선행 #750과 W39 통합 merge 7391e11a의 stacked #756/#757 이력을 포함합니다. 최신 통합에서는 #756 f2fc451793a8b6ee42a2f2a0dcd8bae09cd601a5와 #757 78ef66021a69a8b2d1fbf575839b6e022745408f를 genuine two-parent merge 975f3371, 932a2b26로 차례로 반영했습니다. 로컬 통합은 GitHub 병합이 아닙니다. 읽기 전용 조회에서 #756/#757/#763은 모두 OPEN/mergedAt=null입니다. #756과 #757이 실제 병합된 뒤에만 #766을 병합해야 하며 자동 병합하지 않습니다.

상태: HEAD 4c5527d, 최종 CI 38121147325 / success. 이 head에서 Linux Rust coverage 100.00%(17528/17528 lines), Bun 6472 pass/0 fail, lint와 나머지 세 job(benchmark, landing-next-e2e, vinext-rsc-css-e2e)의 green을 확인한 뒤 본문을 확정하고 ready로 전환했습니다. Never merge — 사용자만 병합합니다.

요약

css()와 styled()의 조건부 styleOrder, JSX 및 jsx-runtime 경로의 클래스 선택과 순서 레이어를 일관되게 컴파일합니다. 정적 전역 순서는 실제 oN 레이어에 등록하고, 순서가 효과 없는 API나 증명 불가능한 명시적 메타데이터는 authored 위치의 빌드 오류로 보고합니다. 객체 styleOrder와 리터럴 style-order는 CSS 선언으로 누출하지 않습니다.

승인된 F195의 여섯 실제 seam과 별도 named fix A / B / C1 / C1b / C1c / spread를 전달했습니다. 이후 arrow/helper/diagnostic/logical/saved/leaf 및 이번 session의 coverage-only units를 아래 chronological 순서로 구분합니다. 기능 수정과 test-only 증거를 혼동하지 않습니다. 의존성·스타일링 런타임·sheet 정렬·workflow·threshold·coverage exclusion은 추가/변경하지 않았으며 changepack은 모두 Patch입니다. Linux coverage를 닫기 위해 호출 경로로 도달 불가능함을 증명한 branch만 behavior-neutral하게 제거·분리한 production unit 여섯 개(94c84404, e2d46d25, 49145f4e, a320ff36, e8420b91, 4c5527d7)와 test-only coverage unit 여럿을 전달했습니다. 생성 출력·오류 문구·767 snapshot은 byte-identical입니다.

동작

순서·오류·합성·평가 정책

  • 명시적 순서는 정확한 ECMAScript Number 정수 1~254, 또는 부호·공백·선행 0 없는 정규 십진 문자열입니다. '01'은 invalid, +'01'은 exact Number 1로 valid입니다. 공유 exact StringToNumber / canonical parser와 build/editor 허용 집합을 유지합니다. #763은 아직 OPEN이므로 나중에 병합되는 PR이 공유 파서와 겹치는 선언을 reconcile해야 합니다. 겹치는 selector/index.ts, css.ts, global-css.ts, keyframes.ts와 기존 create-global-style.ts 선언 재사용 이력도 유지합니다.
  • 유효한 순서로 한정되는 조건식과 && 미선택은 지원합니다. false && 2는 Order::Absent, true ? 2 : '01'은 미선택 invalid arm도 Definitive 오류입니다. ErrorDisposition / OrderError를 타입으로 전달하며 오류 문구로 분류하지 않습니다. NeedsEvaluation만 genuinely exact/static Boa fallback을 허용합니다. condition/getter/보간은 authored 평가 위치와 lazy/한 번 읽기를 보존하며 소스의 서로 다른 두 읽기를 합치지 않습니다.
  • 비함수 styled 순서는 construction에서 캡처, 함수 보간은 원래 closure/조기 반환을 유지하여 render마다 한 번 평가합니다. attrs·상속·withComponent·ref/as/forwardedAs·prop filtering을 유지합니다. 닫힌 생성 결과의 선언 provenance만 정적 합성하며 외부 class token으로 provenance를 추측하지 않습니다. 같은 property/selector/breakpoint/named-layer/numeric-order에서는 later part가 이깁니다.
  • 리터럴 CSS는 scope·quote/comment/escape/function/attribute selector/custom-property token stream을 먼저 읽습니다. bare 숫자는 exact Number, quoted 문자열은 decoded canonical string, 정확한 보간은 primitive type, 혼합 보간은 문자열 의미를 유지합니다. scope 뒤의 순서도 전체 scope에 적용하며 inner explicit order가 inherited order보다 우선합니다. 덮어쓴/빈/comment 보간 효과도 유지합니다.
  • globalCss / Emotion Global / createGlobalStyle / 지원 globalStyle은 static order를 실제 oN 레이어에 둡니다. runtime global selection에는 class selector가 없으므로 dynamic order는 오류입니다. keyframes / fontFaces / font-face / native StyleX는 cascade order가 no-effect인 문맥으로 위치 기반 거부를 유지합니다. selector/layer record와 namespace·일반 데이터의 같은 이름은 메타데이터로 오인하지 않습니다.
  • style-order-range는 lexical import/alias와 shadow를 따릅니다. explicit props bag은 styleOrder:0이나 style-order도 일반 데이터입니다. 승인된 prop_modify_utils / order_forward는 styling-input origin으로 forwarding copy만 필터링합니다. runtime-only known Devup factory input에서는 generated native object rest로 정확히 두 메타데이터 키만 제거하며 getter 순서/한 번 읽기·class/style/title/symbol/descriptor는 유지합니다. runtime-only order는 CSS 효과도 DOM 전달도 없습니다. blanket key-name filter나 imported runtime helper가 아닙니다.
  • selector-group → breakpoint sort와 typography t layer는 이 PR에서 바꾸지 않습니다. responsive가 non-responsive 뒤에 오는 정책은 같은 selector group 안에서입니다. 그룹 간 우선순위와 main #705의 실제 hover/active 순서 결함을 혼동하지 않습니다.

F195 — 전달된 여섯 seam (71b09f67)

  1. Payload carriers: lib.rs::ExtractStyleProp<'a,E=Expression>와 extractor/mod.rs::ExtractResult는 실제 supplied payload만 parameterize합니다. 조건/selector와 다른 필드는 원래 Expression/데이터를 유지하고 clone/map은 constructor payload를 잃지 않습니다.
  2. Composition normalization: Composition::{apply,apply_conditional,overlays,into_props}는 E를 보존하고 into_normalised는 Static / Conditional / Supplied / Diagnostic / Unreadable을 normalization 지점에서 직접 구성합니다. erased Vec를 classifier/assert로 되찾지 않습니다. 기존 CascadeKey/Choice/Overlay·정렬·승자 정책은 그대로입니다.
  3. Shared emission/merge: gen_class_names / gen_class_name / merge_expression_for_class_name은 default Expression entry를 유지하고 ONE emit_prop / ONE merge_roots를 공유합니다. local normalized top-level만 다섯 변형이며 descendant는 동일 recursive grammar를 사용합니다. generic arbitrary-expression singleton, equality(특히 Logical descendant), trimming/spacing/owned winner를 보존합니다.
  4. Local source factories + actual captures: known_parts/known_side/folded_side/push_choice/part_props 및 literal_scope의 local counterparts가 실제 constructor box를 공급합니다. UncapturedSource / CapturedSource / NonemptyCaptures는 unchanged capture pass의 실제 nonempty vector로 연결됩니다. guessed flag/cache/slot/name/origin 또는 fake witness를 넣지 않습니다. FinishedClass = String / Template / Call / Conditional의 네 outer span만 복원하고 최종 assignment에서 한 번 erase합니다. CapturedClassBody의 Identifier/StaticMember/ComputedMember는 실제 capture-backed body에만 존재합니다.
  5. Typography constructors + RuleClass transport/yield: 실제 typography TemplateLiteral 및 typography_lookup::dynamic의 CallExpression box 두 producer를 **RuleClass::{Template,Call}**로 보존합니다. extract_rule_styles / extract_rule_member_styles / apply_with_payload는 필요한 recursive transport만 수행합니다. yield_typography / yield_normalised_typography는 같은 declaration/skip traversal과 selector/breakpoint 정책을 공유합니다.
  6. Typed Call factory: utils::call_with_values_box는 기존 Call constructor를 factor하며 call_with_values의 Expression entry도 유지합니다. argument/parameter 순서, flags, parenthesized arrow callee, optional=false와 inner spans를 보존합니다.

Default inference 이유와 delegates: default generic arguments는 annotated type은 보존하지만 payload-free constructor의 unconstrained E를 추론하지 못해 실제 E0282가 발생했습니다. 승인된 Expression-facing Composition::default(generic Default도 유지), ExtractStyleProp::extract → extract_payload, into_extract → into_extract_payload로 기존 caller/test annotation 없이 inference anchor를 복원했습니다. private payload recursion은 operation당 하나이며 default delegate로 재귀하지 않습니다. 이는 seventh seam이나 duplicated algorithm이 아닙니다.

다섯 unused internal facade 제거 근거: whole-workspace tracked+nonignored-untracked caller/import/alias/function-reference proof 이후 아래 default facade만 제거했습니다. payload backend와 실제 outer API는 유지합니다. coverage exclusion/artificial reference/visibility widening이 아닙니다.

제거된 facade 실제 caller proof / 제거 이유
create_static_styles definition만 있고 calls/imports/function references가 0; 실제 생산자는 create_static_styles_payload 사용
typography_style definition만 있고 references가 0; typography_style_payload가 실제 경로
conditional_typography definition만 있고 references가 0; conditional_typography_payload가 실제 경로
dynamic_style expression facade caller 0; gen_style cfg(test)의 동명 helper는 별개이며 ExtractDynamicStyle을 직접 구성; lib.rs 언급은 comment
extract_style_from_member_expression function definition만 존재; expression import는 extract_rule_member_styles, mod registration은 module이지 facade export가 아님; lib.rs 언급은 comment

literal_context::reject는 다섯 제거 항목에 포함하지 않습니다. production은 reject_payload를 사용하고 reject는 #[cfg(test)]로 원래 test/body/assertion 그대로 보존했습니다. 실제 caller가 있는 unreadable/unreadable_key/place_in_layer와 default outer extract_style_from_expression도 유지합니다.

Helper-arm 정책: restoration helper의 Call/Logical/ComputedMember/other arms(G110–113)은 parsed Call / Logical / Member / Binary를 실제 default carrier/emitter에 공급하는 source-fed control입니다. arbitrary generic singleton contract를 검사하지, 불가능한 local success나 fake cache/seeded enum state를 만들어 coverage를 주장하지 않습니다. 역사적 O242–244 generic folded_side는 독립 obligation이며 최신 목록에 없다는 이유만으로 제거/커버 완료로 치지 않습니다. F199 no-op은 unchanged preservation control입니다.

A — ClassNames complete literal scope (cbfcd87f)

ClassNamesCalls는 원래 template_parts validation을 FIRST 수행한 뒤 Ok에서만 complete metadata-bearing cloned quasi를 lowering합니다. 따라서 color:red;${external};style-order:2의 root red가 scope 전체 order2에 남고 외부/known mixin 및 getteronce를 유지합니다. 단순 whole-template lowering으로 기존 nested-mixin 거부를 없애지 않습니다. 첫 candidate의 nested-mixin acceptance/base drop은 거절·수정했고 원래 1:160 located error는 byte-exact입니다.

허용된 Oracle 변경은 literal-mixin / known-mixin / nested-known-rules의 CSS/sheet만 세 건입니다: root red는 o2로 이동하고 inner blue는 o3 유지; JS/map 및 다른 fields는 unchanged입니다. 실제 red .a{color:red} → green @layer o2;@layer o2{.a{color:red}}. public 16 observations, parked source 두 회귀와 추가 nested-mixin rejection control이 통과했습니다. parser/capture/emitter/F195/root/sheet source 정책을 바꾸지 않았습니다.

B — ClassNames missing literal selection (41958f11)

실제 Emotion React 11.14.0 ClassNames callback cx와 ReactDOM 19.3 SSR default/development에서 missing key는 primitive empty string / noThrow / getteronce임을 확인했습니다. pre-fix public #766은 raw undefined/noThrow였고 exception은 오래된 .trim() test helper에서 발생했습니다. inherited path repair를 승인받아 별도 named B로 수정했으며 F195/A regression으로 재분류하지 않습니다.

guard는 pure literal string OBJECT table, static/noncomputed/nonprototype data key와 pure StringLiteral value를 가진 directClass-result boundary에만 적용합니다. existing typed string_class와 saved-tag typeof === 'string' guard를 사용해 missing saved tag와 실제 'undefined'/primitive undefined selector의 legitimate key를 구분합니다. {a:'external-a',undefined:'collision'}에서 missing은 '', 실제 undefined key는 collision을 유지합니다. selector를 재실행하지 않고 실제 capture arg에서 한 번 읽으며 raw ?? / || controller는 그대로입니다.

18 local source cases / 24 public observations / 3 collision observations가 통과했습니다. Oracle 변경은 literal-member / literal-missing의 JS/map만 두 건이며 CSS/styles/sheet와 다른 fields는 unchanged, A의 세 CSS 변화도 유지합니다. 모든 cx 입력을 정규화했다는 주장이 아닙니다. broader arbitrary dynamic/prototype/nonstring/effectful/computed-key/array fidelity는 inherited 별도 한계입니다.

C1 — bare-return order callback (48d708b4)

USER decision: order callback의 bare return/undefined는 omission과 동일한 no order, outside layers입니다. p=>{if(p.stop)return;return 2;} 및 sync function의 stopped branch가 continued order2를 상속하던 결함을 수정했습니다. 변경은 literal_callback_order::value() selection seam만입니다. 초기 missing alternate는 cloned yes가 아니라 original test && yes와 parser의 Order::Absent 표현을 사용하며 명시적 alternate/앞선 selected candidate는 기존 test ? yes : no를 유지합니다. explicit undefined 메타데이터 전반을 새로 허용하는 정책은 아닙니다.

plain/effectful arrow/function과 valued6/7 early-return을 포함한 새 local regression 6개에서 orders [None,Some(2)], exact one-token class와 render별 getteronce를 확인했습니다(기존 6 controls 포함 focused12PASS). mapped/plain × single/split × arrow/function = 8 real WASM observations가 통과하고 trace [built,get,early,get,tail]는 유지합니다.

새 C1 fixture에서만 의도된 JS class selection / CSS unlayered red alternative / corresponding map 변경이 있습니다. single CSS는 @layer o2;@layer o2{.b{color:red}}.a{color:red}: stopped a는 outside layer, continued b는 o2입니다. split은 a-a/a-b와 global o2 prelude를 사용합니다. generated code의 authored boundary space를 고쳐 쓴 증거가 아닙니다. original 767 snapshot hashes / 48 raw probes / 22 whole Oracle JSONs는 post-A/B419 baseline 대비 byte-exact, normalization/banner allowance/새 golden 수락은 없습니다. sheet source는 unchanged이고 새 error category는 없습니다.

C1b — terminal-bare / all-bare callback wrapper (410b2e5)

기존 terminal-valued route를 유지하면서 supported normal exits의 bare return/falloff를 허용했습니다. wrapper와 capture_literal_styled의 한 consumer seam에서 실제 empty prepared steps를 omission으로 소비하며 제거되는 원래 metadata를 검증합니다.
뒤의 all-bare가 앞의 direct order를 지우되 다시 살리지 않으며 later/inner order·mixin·real spread는 유지합니다. opaque 효과/default/getter 및 pure callback도 원래 호출을 보존하고 OrderStep/value/preparer/parser/capture policy/signature는 바꾸지 않습니다.
여섯 named 출력 terminal-arrow / terminal-function / terminal-arrow-effects / terminal-function-effects / allbare-arrow / allbare-function은 각각 네 mode에서 rejection→compiled로 바뀌었습니다. mixed는 order2/unlayered, all-bare는 whole CSS/sheet/selected classes/declarations가 omission과 같으며 JS는 호출을 유지합니다.
기존 rejection의 정확한 bare/tail-effect/missing-else 세 입력만 positive reconciliation했고 async/generator와 다른 기존 assertions/goldens는 유지했습니다. static-mixin omission과 spread current-bug controls는 다음 별도 unit에서 수리했습니다.

C1c — no-order static css() mixin supplier (ca8e20d)

styled-only depth0 Statement의 실제 singleton finite producer를 primitive CSS-text folding 전에 보존합니다. splitter/segment를 분리하고 default path는 그대로 두며 prepare_styled_template fallback만 새 entry를 사용합니다.
이미 red CSS를 내보내면서 className을 잃던 no-styleOrder mixin을 수리했습니다. 강한 omission 비교는 유지하고 named undefined current-bug control만 corrected string behavior로 reconcile했습니다.
16 outputs를 검증했고 whole CSS/sheet는 red baseline과 동일하며 all-bare code/map/runtime/CSS도 동일합니다. C1b248 whole outputs는 byte-exact이고 sheet source 변경은 없습니다. main 도입 원인은 unchecked입니다.

Spread — recursive supplier / construction capture (19b38fa)

실제 recursive literal_tree lowering을 styled capture 전에 공급하고 typed Preserve / Construction의 한 walk에서 각 source spread를 원래 property 위치에 캡처합니다. 기존 reach/unsafe/recursive-or-snapshot 결정은 유지합니다.
real-spread-nested / real-spread-nested-absence × single/split × map/plain = 8 contracts만 located rejection에서 정상 출력으로 바뀌었습니다. valued는 unlayered root red와 hover blue o2/o3, bare는 whole omission styling과 render당 한 번 호출을 보존합니다.
public248은 240 whole unchanged + 8 corrected, C1c16도 whole exact입니다. scalar source-order/repeated-spread/later-orange/throw controls는 complete inventory·inline 값·sentinel과 뒤 효과 비실행까지 검사하며 comment-hole rejection은 확대 허용하지 않습니다.

Arrow — keyframes audit coverage-only (fcffdf4)

실제 Parser의 expression-arrow camel/quoted-kebab metadata를 원래 key/span과 no_effect로 감사합니다. metadata-free/block audit은 empty이고 public callback의 unsupported verdict는 유지합니다.
6 cases PASS와 임시 arrow recursion omission의 실제 실패 후 복원을 기록했습니다. production/기존 test body/golden 변경은 없습니다.
private wide의 세 target counters는 lossless uint64 positive 증거일 뿐 Linux retirement/global100이나 호출 횟수로 해석하지 않습니다.

Helper — typed assertion coverage-only (6ecb1ee)

typed static_color / class_tokens가 실제 ClassName과 독립 token을 함께 검사하고 non-Dynamic enum 전체를 exact Static multiset으로 비교합니다. dynamic metadata·8/9-rule inventory·inline·source/effect/sentinel assertions는 유지합니다.
네 wrong-EXPECTED checks가 실제 실패했고 각 시도 뒤 frozen bytes를 복원했습니다. production/fixture/golden/public output/new error 변경은 없습니다.
실제 support39/oracle28 measured counterlines는 positive이며 metadata XML class는 UNMEASURED / NOT COVERED입니다. named PASS나 실패 증거를 누락된 coverage counters 대신 쓰지 않습니다.

Diagnostic — literal-mixin metadata coverage-only (31e623c)

실제 Parser/SemanticBuilder/visitor와 scoped literal supplier를 통과시켜 invalid255/externalOrder/getRules의 authored offset·disposition·surviving inventory 및 valid/orderless/conditional selection을 검사합니다. hidden theme field도 typed Eq로 보존합니다.
16 diagnostics observations / 134 checks / 0 failures,16 whole baseline byte comparisons가 PASS입니다. invalid255의 located2:80, ordered blue/red, unlayered 및 true-red/false-green/guardonce를 유지합니다.
native12 PASS와 다섯 wrong-EXPECTED 실패/복원, nine targets 및57 measured positive counters를 별도 기록했습니다. absent classes/functions는 계속 UNMEASURED / NOT COVERED이며 새 error category는 없습니다.

Logical — finite logical selection / nested guards coverage-only (7558c88)

실제 imported makeCss outer-render producer와 one-expression ClassNames child를 사용합니다. finite provenance의 logical/conditional 및 nested guard 선택을 complete typed inventory·selected tokens/declarations·once/lazy trace로 검사합니다.
15 native cases PASS, selection/hidden inventory/order/trace의 네 expected-only 실패 뒤 전체 frozen hashes를 복원했습니다. 독립 literal-array reference는 compile-only이며 render하지 않습니다.
four-mode SDK의 whole CSS/header/rules/order/layers/sheet와 56 truth rows를 검증했습니다.19 exact positive targets와 five new classes의 locally unmeasured 상태는 서로 다른 증거이며 production/policy/golden 변경은 없습니다.

Saved — saved-finite provenance coverage-only (ddd7c01)

state mutation 전에 저장한 실제 OR/AND/coalesce/conditional const와 parts→array alias의 index0/public consumer를 사용합니다. 두 producer의 eager construction, empty/nonempty 및 lazy fallback을 보존합니다.
32 native cases PASS, filtering 전 hidden fields를 포함한 full typed Eq·exact tokens/declarations/order/traces와 네 expected-only 실패/복원을 기록했습니다. mutation patch/hash의 일부는 사후 RECONSTRUCTED이며 최초 실행에서 캡처했다고 주장하지 않습니다.
SDK는 128 truth rows, 현재 logical sibling은56 rows에서 whole CSS/layers/sheet·선택·효과를 검사했습니다.12 positive exact targets와 absent three new classes의 UNMEASURED_NOT_COVERED를 유지하며 production/기존 assertion/golden 변경은 없습니다.

Leaf — captured static-member replay coverage-only

10 cases (8 public + 2 native replay)가 PASS입니다. empty/nonempty literal·constant/interpolated template·static getter·computed key/getter에서 exact class/order/space/selection/declarations/multiplicity/trace와 hidden-field typed Eq를 검사합니다.
native는 실제 alias transform→Parser/SemanticBuilder→capture_style_argument vector→CapturedSource.class/read_in
을 거쳐 원래 semantic StaticMember와 captured-original payload를 원래 환경에서 한 번 replay합니다. public post-capture StaticMember reachability 증명은 아닙니다.
selection/hidden CssVariable field/order/trace의 네 expected-only 실패는 각각 exit101/0 passed/1 failed이며 compile error 없이 실패하고 다음 시도 전2317 frozen hashes를 복원했습니다.
private XML의 M81 / M96 / M97은 unique EXACT owner와 positive lossless uint64 counters로 검증했습니다. four new test classes는 UNMEASURED_NOT_COVERED, references는 compile-only/never rendered, SDK whole-CSS는 8 fixtures × 4 modes PASS입니다.

Unit 2 — styled fallback / attrs / order provenance coverage-only

12 cases PASS로 nested-statement legacy fallback, async expression callback located rejection, restored attrs의 title/id/style/class 합성과 mixed producer/order-return provenance rejection을 검사합니다. public extract와 독립 complete typed inventories/전체 located error를 사용합니다.
40 target groups 중 24 REACHABLE /16 caller-proven UNREACHABLE /0 SPLIT-NEEDED로 분류했습니다. sparse-array 가설은 실제 public rejection 뒤 폐기했고 private state를 만들어 대체하지 않았습니다.
이 unit의 변경은 test-only입니다(commit c225e9b6, 정상 hook 통과). private wide LLVM에서 24개 target line이 모두 positive였고 workspace는 4447/0입니다. 16개 caller-dominated group은 아래 production unit에서 별도로 검증·처리했습니다. local 측정을 Linux coverage100으로 바꾸지 않습니다.

Unit 3 — ClassNames composition coverage-only

18 cases PASS입니다(commit 995dddeb). literal/empty/template class order, finite-right fallback, saved finite array index/later override, original-parts rejection, runtime typography 및 실제 computed-member capture/replay를 검사합니다.
22 REACHABLE /1 SPLIT-NEEDED /14 UNREACHABLE target groups를 caller/source로 분류했습니다. full typed inventory·selected declarations·exact spaces/trace/located errors는 독립 기대값이며 실제 출력에서 golden을 만들지 않습니다.
이 unit은 test-only입니다. private wide LLVM에서 22개 target line(M70–M75, M77–M80, M83–M85, M87, M89, M98–M104)이 모두 positive이며 workspace는 4465/0입니다. 첫 측정에서 M83이 ZERO여서 CSS-text typography 가설을 폐기하고 important-suffix capture가 TemplateLiteral을 다시 만드는 실제 입력으로 교체했습니다.

Unit 4a / 4b — visit·block·outcomes / constants·roots·utils coverage-only

4a (f06d0af9): 22 cases. 리터럴 object spread styled(styled.x(...{object}))의 explicit order·responsive·css-prop inline eligibility, normalised supplied/conditional root와 typography, finite spread의 test 1회 읽기, unreadable callback·rules·css capture의 exact located error, legacy tagged-template fallback을 검사합니다. 17개 target line이 positive이고 workspace는 4487/0입니다.
4b (1a460c74): 16 cases. closed local rules의 diagnostic/unreadable 보존과 원래 error 위치, equality가 보존되는 typography payload, runtime JSX array/conditional spread, vanilla-extract metadata 직렬화(number / explicit null), imported record producer(call·tagged template)와 saved-producer 조건(empty/nonempty/mixed)을 검사합니다. 17개 target line이 positive이고 workspace는 4503/0입니다.
두 unit 모두 test-only이며 production/snapshot/oracle 변경이 없습니다.

Production dead-branch removal — 두 unit (94c84404, e2d46d25)

Linux가 미커버로 보고한 branch 중 호출 경로와 dominating guard로 도달 불가능함을 확인한 것만 behavior-neutral하게 제거·분리했습니다(가짜 테스트·coverage exclusion 없음). 각 unit은 독립 read-only gate review가 APPROVE했습니다.

  • 94c84404: with_component의 Option 제거(M10), prepares_styled·callback_result의 live shape만 match(M11, M124–M129), 중복 prepare guard 두 개(M130, M132), 중복 block-body·spread-snapshot rejection(M65, M140, M141), ClassNames local rule reader의 항상 None이던 element 인자(M106–M109), ConditionalEmission::clone_expression(M43), Expression의 미사용 conditional constructor를 ClassConditional trait로 분리(M46, M47), literal_locations::place(span을 constant_literal_at로 전달, M48).
  • e2d46d25: disassemble된 이름이 도달할 수 없는 raw-marker 진단 제거(M3), finite-style Choice 제거와 Row의 flags/keys 분리(M35, M36; cross-kind clash 거부는 동일), captured/uncaptured source가 공유하는 local_body(M69), legacy·local이 공유하는 known_style_side(M76, M137), order_property를 단일 matches!로(M112). 함께 추가한 witness test 9 cases는 custom prefix로 keyframes 이름이 styleOrder key와 같아지는 입력(M12/M13), boolean-literal 조건(M34), block의 runtime class 반환(M63/M64), css prop 안의 nested class helper(M133–M136), ordered tag 선택(M138)을 검사합니다.
  • 두 unit 모두 생성 출력·오류 문구·767 snapshot은 byte-identical이고(WASM 재빌드 후 spread 248 / C1c 16 / diagnostics 16(134 checks) whole-exact), frozen item(OrderStep, order value·preparer signature, parser, capture policy)과 외부 사용 pub item은 바꾸지 않았습니다. 바뀐 signature는 모두 crate 내부입니다.
    unit2/3 report의 proposal 중 구현하지 않은 항목은 delivered fix로 취급하지 않습니다(아래 한계 참조).

Production dead-branch removal 후속 — 네 unit (49145f4e, a320ff36, e8420b91, 4c5527d7)

Linux run 38117359230(49145f4e, 99.94%, 10 uncovered)과 38119153290(a320ff36, 99.98%, 3 uncovered)이 남긴 line만 같은 기준으로 닫았습니다: 호출 경로로 도달 불가능함을 증명한 branch만 behavior-neutral하게 제거·분리하고, 가짜 테스트나 coverage exclusion은 쓰지 않았습니다.

  • 49145f4e: ClassNames source class(string·template·conditional, capture된 경우 identifier·member)를 typography RuleClass::Call payload와 분리해 UncapturedSourceClass/CapturedSourceClass로 옮겼습니다. clone_source_expression, read_in, string_class의 도달 불가능한 Call arm, 미사용 read_call, captured source default arm이 사라집니다(LocalOutput trait는 from_rule을 payload 쪽에 두고, source→output 경계는 composed_class_local과 literal scope에 있습니다). 값이 class를 내보내지 않는 선택된 key를 extract_style_from_expression과 gen_class_names로 검사하는 witness 1 case(M38)를 추가했습니다. 첫 초안은 M37/M39용 가짜 테스트를 포함해 reviewer가 거부했고 commit 전에 제거했습니다.
  • a320ff36: 실제 witness 두 개 — finite-style union conflict(theme token 해석만 다르고 class 이름이 같은 두 css() width를 조건식으로 선택; M40)와 ClassNames 안의 invalid styleOrder 옆 literal-scope spread drain(M105). behavior-neutral 제거: finite_callback 충돌 loop를 FiniteStyles::union fold로(M111), style-call order 검사의 accessor/method arm(getter·setter·method는 order parser가 먼저 항상 거부하는 function value; M113·M114), order prescan과 attribute reader의 도달하지 않는 Unsupported fallback(한 번 parse, 같은 disposition·message; M115·M116), wrapped order callback의 wildcard(WrappedCallback은 Arrow/Function enum; M123).
  • e8420b91: finite_styles::outcomes::text를 AstKind::from_expression 한 번 변환 후 다섯 reader(string literal, template, conditional, || fallback, computed lookup)를 or_else로 잇는 구조로 나눴습니다. 다섯 shape는 서로 겹치지 않고 각 reader는 순수 함수라 declined sub-expression을 포함한 모든 입력에서 반환 Option이 같으며 pub emitted()·text() signature도 그대로입니다. M37/M39의 default arm이 사라지고 가짜 테스트는 없습니다.
  • 4c5527d7: 문자열 attribute가 string_order를 직접 읽게 하고 문자열만 받던 jsx_expression_to_style_order를 제거했습니다(같은 Static 결과, 거부 시 같은 Definitive 오류). 이 함수를 쓰던 test 하나는 expression_to_style_order로 같은 값을 분류합니다. 이 unit은 별도 독립 review 없이 commit body의 동등성 설명과 아래 final gate로 검증했습니다.
  • 네 unit 모두 생성 출력·오류 문구·767 snapshot은 byte-identical이며 rebuilt WASM에서 spread 248 / C1c 16 / diagnostics 16 parity를 다시 실행했습니다. 49145f4e, a320ff36, e8420b91은 독립 read-only gate review가 APPROVE했습니다.

전달된 coverage/test-only 이력과 base reconciliation

W38i D (2245be99)는 실제 parser/extract_style_from_expression wrapper를 통한 typography source-fed 여섯 case와 RuleClass clone/into_expression/condition span/order/once-only getter assertions를 추가한 test-only unit입니다. production/source policy 변경이나 Linux numerator credit이 아닙니다. 이전 REST-B의 conditional literal mixin selected red/blue 보존과 parenthesized @supports nested wrapper 보존도 delivered 이력으로 유지합니다.

#756 통합에서는 Tailwind07/08/09/14/15 once-only 및 folded10을 source/trace 계약에 맞춰 reconcile했습니다. nested metadata ESLint fixture는 정확히 두 개 valid→invalid, 원본 source/span은 그대로이고 일반 데이터는 계속 ignored입니다. incoming base snapshot blobs는 승인된 통합 이력이지 F195/A/B/C1의 새 golden acceptance가 아닙니다. 이전 132 Rust snapshot 및 forwarding-origin 15 golden의 개별 hash/field review, DOM class-order review, Boa test-wrapper stack fix와 마지막 rstest case 뒤 serial annotation 이력은 원본 hash·field review 및 실패/수정 기록에 그대로 보존합니다.

새로 생기는 오류

  • 원래 #766의 located build-error 정책은 유지합니다: explicit 0/255/negative/fraction/nonfinite Number; noncanonical string(leading zero/sign/space/unit/exponent/decimal text); null/boolean/explicit undefined 및 valid order로 증명되지 않는 explicit 값/branch; runtime global order; keyframes/font-face/native StyleX no-effect metadata; invalid literal token/primitive interpolation.
  • quote/comment/URL/selector/custom-property 안의 단순 텍스트와 일반 props/namespace/record key는 order declaration이 아닙니다. 실제 file:line:col, authored key/value/expression/import span을 유지하고 synthetic offset/line1로 대체하지 않습니다.
  • 전달된 기능 수정과 coverage-only units에서 추가 error category: NONE. A의 기존 nested-mixin1:160 rejection도 그대로입니다. C1의 callback bare-return absence는 위 USER decision 범위의 omission이지 explicit invalid metadata에 대한 blanket 예외가 아닙니다. 아래 원본 15개 블록의 실제 오류 출력은 삭제하거나 재생성하지 않습니다.

남는 한계

  • external runtime className은 CSS cascade를 따르며 외부 token에서 build provenance를 추측하지 않습니다. broader dynamic/prototype/nonstring/effectful/computed-key/array cx fidelity와 runtime-only unknown styling key는 blanket compatibility 대상이 아닙니다.
  • main fix(extractor): compile Tailwind classes one by one with v4 variants and declarations #705 hover/active ordering은 별도 PR #770의 수정이며 여기서 고치지 않았습니다. 저장된 OPEN/non-draft/mergedAt=null은 역사 상태이지 현재 main 병합 증거가 아닙니다. 기존 기능 units의 sheet source 변경은 없습니다.
  • conditional-spread last-explicit-orange precedence finding은 coordinator가 OUT OF SCOPE로 라우팅했습니다. metadata 없는 별도 결함을 #766에서 수정하지 않았으며 main 도입 원인은 unchecked입니다.
  • Emotion numeric width는 별도 OUT OF SCOPE입니다. metadata 없는 Emotion/css width4→16px, Emotion/styled→4px은 hash-pinned PRE-extension binary의 역사 측정이며 기대는 둘 다4px입니다. current 재현/원인/수정 완료는 주장하지 않습니다.
  • vanilla-extract fontFace/globalFontFace trap은 fix(extractor): compile vanilla-extract theme contracts across modules #761 소유입니다. order metadata rejection만 fix(style-order): align editor diagnostics and checkpoint extraction work #766 범위이고 순서 없는 trap 수정이나 fix(extractor): compile vanilla-extract theme contracts across modules #761 branch 통합은 없습니다.
  • native replay는 captured-original payload 증거이지 public post-capture StaticMember reachability가 아닙니다. same-release Windows/Linux rustfmt equivalence는 재구성 가정이며 runner-wide bytes를 직접 다운로드한 증거가 아닙니다.
  • local XML에서 absent new test classes는 UNMEASURED / NOT COVERED입니다. positive counters·named PASS·fail-capability·caller proof로 누락된 측정이나 Linux retirement/global100을 대신하지 않습니다.
  • 발견했으나 고치지 않은 한계(OUT OF SCOPE로 라우팅): styled.div(p=>{return p.cls;})처럼 block callback이 runtime class를 반환하면 현재 Cannot compose ... a rule object, a class, or a condition 오류로 거부됩니다(BranchReads가 쓰는 optional-chain slot을 두 번째 known_parts가 거부). 소유자가 결함으로 판단하면 수정하고 해당 witness test(w38r_u6_order.rs)의 기대값을 교체해야 합니다. 지금은 현재 동작의 compatibility evidence일 뿐 승인된 계약이 아닙니다.
  • coverage 잔여: 없음. 이전 본문 시점에 남아 있던 inherited HOLD 아홉 identity(M40, M41, M105, M111, M113–M116, M123)와 dead arm 후보(M82, M86, M88, M90–M95의 source-class Call arm, M37–M39의 text() default arm)는 witness test 또는 behavior-neutral 제거·분리(위 후속 unit 포함)로 모두 닫혔습니다. 최종 수치: Linux uncovered line 0 (100.00% = 17528/17528).

검증

  • 최종 CI: HEAD 4c5527d, run 38121147325, 결과 success. 최종 Linux Rust/Bun/coverage/job별 수치: publish job success — Rust coverage 100.00% (17528/17528 lines covered), Rust workspace test 4519 passed / 0 failed(1 + 530 + 4 + 1 + 42 + 149 + 3792), Bun test 6472 pass / 0 fail(86 files, All files 100.00 / 100.00), lint(cargo fmt --check, clippy -D warnings, eslint) 단계 success, Codecov upload success; benchmark, landing-next-e2e, vinext-rsc-css-e2e 모두 success. 위 수치는 해당 run의 publish job 로그에서 직접 확인했습니다.
  • 저장된 마지막 handoff의 completed Linux checkpoint는 ddd7/run38069245793, coverage-only FAILURE 99.20%=17445/17586,141 EXACT/0 UNKNOWN/30paths, Rust4425/0, 다른 세 jobs SUCCESS, publish Bun UNREACHED/Codecov SKIPPED입니다. 이는 최종 run 대체나 outage 주장이 아닙니다.
  • leaf unit local gates: byte-identical source의 fmt/Rust1.99 clippy/workspace 4435/0, real WASM/root build, Bun6472/0, lint0errors/2baselinewarnings PASS. 이후 unit별 workspace raw summaries 합계는 4447 → 4465 → 4487 → 4503 / 0 fail이며 production unit 두 개는 fmt, Rust1.99 workspace/all-targets clippy -D warnings, cargo test --workspace(snapshot 변경 없음), 실제 WASM/root 재빌드, Bun 6472/0(aggregate 표 100%), lint 0 errors / baseline warnings 2를 다시 통과했습니다. 최종 head의 local gate 수치: 4c5527d(tree 124468dd)에서 cargo fmt --all -- --check, Rust 1.99 clippy --workspace --all-targets -D warnings, cargo test --workspace 4519 passed / 0 failed, 실제 WASM·root 재빌드, Bun 6472 pass / 0 fail(All files 100.00 / 100.00), lint 0 errors / baseline warnings 2, 보호 parity(767 snapshots / 48 raw probes / 22 whole Oracle JSON byte-exact, C1 eight raw + eight runtime exact, spread 248 + C1c 16 + diagnostics 16) 모두 PASS.
  • 767 snapshots /48 raw probes /22 whole Oracle JSONs byte-exact, C1 eight raw + eight runtime byte-exact, manual11PASS를 유지합니다. F195 preservation, A의 named3 CSS-only, B의 named2 JS/map-only와 이후 별도 기능 deltas를 구분하고 새 fixture를 역사 golden에 덮어쓰지 않습니다.
  • leaf SDK four-mode whole-CSS PASS:8 fixtures ×4 modes,34checks/0blocked. independent references는 compile-only/never rendered이고 complete header/rules/order/layers/sheet와 selected classes/declarations/once effects를 비교합니다.
  • 보호 parity spread248 + C1c16 + diagnostics16 PASS, diagnostics 134checks/0fail/16whole baseline byte comparisons. mode별 기대 오류를 정상 acceptance로 바꾸거나 exported map/whole output을 축약하지 않습니다.
  • Bun displayed aggregate100은 각 file100/Linux100이 아닙니다. 기존 Vite99.67/uncovered365를 유지하며 hook success도 Windows Rust100이나 Linux100 증거가 아닙니다. unavailable/timed-out LSP를 clean diagnostics로 주장하지 않습니다.
  • 각 coverage-only unit은 wide-format(Rust 1.99 rustfmt) archive의 private LLVM 측정에서 목표 line의 positive counter를 확인했습니다(lossless uint64 digits이며 호출 횟수·Linux retirement가 아닙니다). 새 test class는 로컬 XML에 나타나지 않아 UNMEASURED / NOT COVERED로 남기며 Linux가 권위입니다. unavailable/timed-out LSP는 clean diagnostics로 주장하지 않습니다. 사용자만 병합하며 workers는 never merge입니다.

역사 증거와 보존 경계

전체 원본 아카이브·개별 hash/field review·Linux exact mapping/ledger·gate receipts는 private evidence로 보존합니다. 공개 본문에는 private 상대 링크나 파일명 링크를 넣지 않습니다. 과거 숫자/실패/판단은 체크포인트 기록이며 최종 CI를 대체하지 않습니다.

  • Boa Script::parse의 test-only 외부 wrapper stack overflow, 원본 bytes/깊이 controls 및 이전 coverage 실패 이력은 원시 실패/수정 기록으로 보존합니다. production/assertions/default stack/workflow 변경이나 이전 Linux writer 신원 확정으로 해석하지 않습니다.
  • 이전132 Rust snapshots, forwarding-origin15goldens, 두 forwarding fragment 강화,11DOM class-order review,164-case table/10lexical probes/소비자26의 hash·field review를 보존합니다. incoming fix(extractor): preserve JavaScript semantics across values and element calls #756 base blobs는 승인된 통합 이력이지 이후 named fix의 새 golden acceptance가 아닙니다.
  • serial annotation 위치 변경의 controlled Windows red/green/lazy-guard 증거, typography source-fed6 test-only 및 REST-B 보존도 delivered 이력이며 현재 Linux numerator credit으로 환산하지 않습니다.
  • 아래 원본15 historical proof blocks는 입력/JS/CSS/banner/path/탭/개행을 포함한 원래 line108부터 EOF까지 byte-exact입니다. 현재 HEAD acceptance나 이후 named units의 새 출력으로 재해석하지 않습니다.

실제 프로브 출력 — 원본 15개, historical byte-exact

아래는 W38d 원본의 입력/변경 전/후 전체 출력입니다. JS/CSS/banner/path/탭/개행을 변경하거나 재생성하지 않았습니다. 현재 HEAD acceptance나 A/B/C1의 새 출력으로 읽지 않습니다. 합친 fixture의 keyframes 거부와 격리 정상 경로도 그대로 유지합니다.

order-css

입력과 변경 전/후 전체 WASM 출력
import { css } from '@devup-ui/react'
export const plain = css({ color: 'blue', styleOrder: active ? 1 : 2 })

변경 전:

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

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.a{color:blue}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.a{color:blue}

변경 후:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const plain = ((__devupValue0) => `${__devupValue0 ? "a" : ""} ${__devupValue0 ? "" : "b"}`)(active);

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.a{color:blue}}@layer o2{.b{color:blue}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.a{color:blue}}@layer o2{.b{color:blue}}

order-styled

입력과 변경 전/후 전체 WASM 출력
import { styled } from '@devup-ui/react'
export const Card = styled('div', { color: 'green', styleOrder: active ? 1 : 2 })

변경 전:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { forwardRef as __devupForwardRef } from "react";
export const Card = __devupForwardRef((__devupRefProps, __devupRef) => (({ style, className, as: DevupAs = "div", forwardedAs, ...rest }) => <DevupAs {...(({ "theme": __devupOmit0, ...__devupDom }) => __devupDom)(rest)} as={forwardedAs} className={["a", className].filter(Boolean).join(" ")} style={style} />)({
	...__devupRefProps,
	ref: __devupRef
}));

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.a{color:green}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.a{color:green}

변경 후:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { forwardRef as __devupForwardRef } from "react";
export const Card = ((__devupValue0) => ((__devupEnvironment0Component) => (__devupEnvironment0Component["__devupEnvironment0"] = (__devupEnvironment0Continue) => __devupEnvironment0Continue(__devupValue0), __devupEnvironment0Component))(__devupForwardRef((__devupRefProps, __devupRef) => ((__devupStyleProps) => (({ style, className, as: DevupAs = "div", forwardedAs, ...rest }) => <DevupAs {...(({ "theme": __devupOmit0, ...__devupDom }) => __devupDom)(rest)} as={forwardedAs} className={[`${__devupValue0 ? "" : "a"} ${__devupValue0 ? "b" : ""}`, className].filter(Boolean).join(" ")} style={style} />)(__devupStyleProps))({
	...__devupRefProps,
	ref: __devupRef
}))))(active);

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.b{color:green}}@layer o2{.a{color:green}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.b{color:green}}@layer o2{.a{color:green}}

order-jsx

입력과 변경 전/후 전체 WASM 출력
import { Box } from '@devup-ui/react'
export const App = <Box color="red" styleOrder={active ? 1 : 2} />

변경 전:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const App = <div className={active ? "a" : "b"} />;

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.a{color:red}}@layer o2{.b{color:red}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.a{color:red}}@layer o2{.b{color:red}}

변경 후:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const App = ((__devupValue0) => <div className={__devupValue0 ? "a" : "b"} />)(active);

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.a{color:red}}@layer o2{.b{color:red}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.a{color:red}}@layer o2{.b{color:red}}

order-runtime

입력과 변경 전/후 전체 WASM 출력
import { Box } from '@devup-ui/react'
import { jsx } from 'react/jsx-runtime'
export const Runtime = jsx(Box, { color: 'pink', styleOrder: active ? 1 : 2 })

변경 전:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { jsx } from "react/jsx-runtime";
export const Runtime = jsx("div", { className: active ? "a" : "b" });

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.a{color:pink}}@layer o2{.b{color:pink}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.a{color:pink}}@layer o2{.b{color:pink}}

변경 후:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { jsx } from "react/jsx-runtime";
export const Runtime = jsx("div", ((__devupValue0) => ({ className: __devupValue0 ? "a" : "b" }))(active));

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.a{color:pink}}@layer o2{.b{color:pink}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.a{color:pink}}@layer o2{.b{color:pink}}

order-global

입력과 변경 전/후 전체 WASM 출력
import { globalCss } from '@devup-ui/react'
globalCss({ body: { color: 'gray', styleOrder: 2 }, styleOrder: 2 })

변경 전:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
;

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer b;@layer b{body{color:gray;style-order:8px}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer b;@layer b{body{color:gray;style-order:8px}}

변경 후:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
;

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2;@layer o2{body{color:gray}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2;@layer o2{body{color:gray}}

order-keyframes

입력과 변경 전/후 전체 WASM 출력
import { keyframes } from '@devup-ui/react'
export const fade = keyframes({ from: { opacity: 0, styleOrder: 2 }, to: { opacity: 1 } })

변경 전:

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

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@keyframes a{from{opacity:0}to{opacity:1}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@keyframes a{from{opacity:0}to{opacity:1}}

변경 후:

=== ERROR ===
C:/Users/devfive3901/AppData/Local/Temp/opencode/workers/w38-style-order/order-keyframes.tsx:2:53: `keyframes()` cannot use `styleOrder` at build time: styleOrder is reserved cascade metadata and has no effect in this API

order-semantics-base

입력과 변경 전/후 전체 WASM 출력
import { Box, css, styled, globalCss, keyframes } from '@devup-ui/react'
import { jsx } from 'react/jsx-runtime'
const plain = css({ color: 'blue', styleOrder: active ? 1 : 2 })
const Card = styled('div', { color: 'green', styleOrder: active ? 1 : 2 })
globalCss({ body: { color: 'gray', styleOrder: 2 }, styleOrder: 2 })
const fade = keyframes({ from: { opacity: 0, styleOrder: 2 }, to: { opacity: 1 } })
export const App = <Box color="red" styleOrder={active ? 1 : 2} className={plain} animationName={fade}><Card /></Box>
export const Runtime = jsx(Box, { color: 'pink', styleOrder: active ? 1 : 2 })

변경 전:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { forwardRef as __devupForwardRef } from "react";
import { jsx } from "react/jsx-runtime";
const plain = "a";
const Card = __devupForwardRef((__devupRefProps, __devupRef) => (({ style, className, as: DevupAs = "div", forwardedAs, ...rest }) => <DevupAs {...(({ "theme": __devupOmit0, ...__devupDom }) => __devupDom)(rest)} as={forwardedAs} className={["b", className].filter(Boolean).join(" ")} style={style} />)({
	...__devupRefProps,
	ref: __devupRef
}));
;
const fade = "c";
export const App = <div className={active ? "a d e" : "a f g"}><Card /></div>;
export const Runtime = jsx("div", { className: active ? "h" : "i" });

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer b,o1,o2;@layer b{body{color:gray;style-order:8px}}@keyframes c{from{opacity:0}to{opacity:1}}@layer o1{.e{animation-name:c}.h{color:pink}.d{color:red}}@layer o2{.g{animation-name:c}.i{color:pink}.f{color:red}}.a{color:blue}.b{color:green}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer b,o1,o2;@layer b{body{color:gray;style-order:8px}}@keyframes c{from{opacity:0}to{opacity:1}}@layer o1{.e{animation-name:c}.h{color:pink}.d{color:red}}@layer o2{.g{animation-name:c}.i{color:pink}.f{color:red}}.a{color:blue}.b{color:green}

변경 후:

=== ERROR ===
C:/Users/devfive3901/AppData/Local/Temp/opencode/workers/w38-style-order/order-semantics-base.tsx:6:46: `keyframes()` cannot use `styleOrder` at build time: styleOrder is reserved cascade metadata and has no effect in this API

order-literal-css

입력과 변경 전/후 전체 WASM 출력
import { css } from '@devup-ui/react'
export const plain = css`style-order: 2; color: blue; &:hover { style-order: 3; color: green; }`

변경 전 (객체 lane 체크포인트, 리터럴 처리 전):

=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const plain = "a b c d";

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.d{color:blue}.b{style-order:8px}.c:hover{color:green}.a:hover{style-order:12px}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.d{color:blue}.b{style-order:8px}.c:hover{color:green}.a:hover{style-order:12px}

변경 후:

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

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2,o3;@layer o2{.b{color:blue}}@layer o3{.a:hover{color:green}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2,o3;@layer o2{.b{color:blue}}@layer o3{.a:hover{color:green}}

order-literal-styled

입력과 변경 전/후 전체 WASM 출력
import { styled } from '@devup-ui/react'
export const Card = styled.div`style-order: 2; color: green;`

변경 전 (객체 lane 체크포인트, 리터럴 처리 전):

=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { forwardRef as __devupForwardRef } from "react";
export const Card = __devupForwardRef((__devupRefProps, __devupRef) => ((__devupStyleProps) => (({ style, className, as: DevupAs = "div", forwardedAs, ...rest }) => <DevupAs {...(({ "theme": __devupOmit0, ...__devupDom }) => __devupDom)(rest)} as={forwardedAs} className={["a b", className].filter(Boolean).join(" ")} style={style} />)(__devupStyleProps))({
	...__devupRefProps,
	ref: __devupRef
}));

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.b{color:green}.a{style-order:8px}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.b{color:green}.a{style-order:8px}

변경 후:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { forwardRef as __devupForwardRef } from "react";
export const Card = __devupForwardRef((__devupRefProps, __devupRef) => ((__devupStyleProps) => (({ style, className, as: DevupAs = "div", forwardedAs, ...rest }) => <DevupAs {...(({ "theme": __devupOmit0, ...__devupDom }) => __devupDom)(rest)} as={forwardedAs} className={["a", className].filter(Boolean).join(" ")} style={style} />)(__devupStyleProps))({
	...__devupRefProps,
	ref: __devupRef
}));

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2;@layer o2{.a{color:green}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2;@layer o2{.a{color:green}}

order-literal-global

입력과 변경 전/후 전체 WASM 출력
import { globalCss } from '@devup-ui/react'
globalCss`body { style-order: 2; color: gray; &:hover { style-order: 3; color: blue; } }`

변경 전 (객체 lane 체크포인트, 리터럴 처리 전):

=== CODE ===
import "@devup-ui/react/devup-ui.css";
;

=== CSS (this file) ===

=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */body{style-order:2;color:gray;&:hover{style-order:3;color:blue}}

변경 후:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
;

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2,o3;@layer o2{body{color:gray}}@layer o3{body:hover{color:blue}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2,o3;@layer o2{body{color:gray}}@layer o3{body:hover{color:blue}}

order-literal-emotion

입력과 변경 전/후 전체 WASM 출력
import { css } from '@emotion/react'
export const plain = css`style-order: 2; color: blue;`

변경 전 (객체 lane 체크포인트, 리터럴 처리 전):

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

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.b{color:blue}.a{style-order:8px}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.b{color:blue}.a{style-order:8px}

변경 후:

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

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2;@layer o2{.a{color:blue}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2;@layer o2{.a{color:blue}}

order-literal-sc

입력과 변경 전/후 전체 WASM 출력
import styled from 'styled-components'
export const Card = styled.div`style-order: 2; color: green;`

변경 전 (객체 lane 체크포인트, 리터럴 처리 전):

=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { forwardRef as __devupForwardRef } from "react";
export const Card = __devupForwardRef((__devupRefProps, __devupRef) => ((__devupStyleProps) => (({ style, className, as: DevupAs = "div", forwardedAs, ...rest }) => <DevupAs {...(({ "theme": __devupOmit0, ...__devupDom }) => __devupDom)(rest)} as={forwardedAs} className={["a b", className].filter(Boolean).join(" ")} style={style} />)(__devupStyleProps))({
	...__devupRefProps,
	ref: __devupRef
}));

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.b{color:green}.a{style-order:8px}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */.b{color:green}.a{style-order:8px}

변경 후:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
import { forwardRef as __devupForwardRef } from "react";
export const Card = __devupForwardRef((__devupRefProps, __devupRef) => ((__devupStyleProps) => (({ style, className, as: DevupAs = "div", forwardedAs, ...rest }) => <DevupAs {...(({ "theme": __devupOmit0, ...__devupDom }) => __devupDom)(rest)} as={forwardedAs} className={["a", className].filter(Boolean).join(" ")} style={style} />)(__devupStyleProps))({
	...__devupRefProps,
	ref: __devupRef
}));

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2;@layer o2{.a{color:green}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2;@layer o2{.a{color:green}}

order-literal-sc-global

입력과 변경 전/후 전체 WASM 출력
import { createGlobalStyle } from 'styled-components'
export const Global = createGlobalStyle`body { style-order: 2; color: gray; }`

변경 전 (객체 lane 체크포인트, 리터럴 처리 전):

=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const Global = () => null;

=== CSS (this file) ===

=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */body{style-order:2;color:gray}

변경 후:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
export const Global = () => null;

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2;@layer o2{body{color:gray}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o2;@layer o2{body{color:gray}}

order-literal-dynamic

입력과 변경 전/후 전체 WASM 출력
import { css } from '@devup-ui/react'
const events = []
function choose() { events.push('order'); return true }
export const plain = css`style-order: ${choose() ? 1 : 2}; color: blue;`

변경 전 (객체 lane 체크포인트, 리터럴 처리 전):

=== ERROR ===
C:/Users/devfive3901/AppData/Local/Temp/opencode/workers/w38-style-order/order-literal-dynamic.tsx:4:22: `css()` cannot use `choose()?1:2` at build time: its values must be literals, theme tokens or constants, or be computed from them

변경 후:

=== CODE ===
import "@devup-ui/react/devup-ui.css";
const events = [];
function choose() {
	events.push("order");
	return true;
}
export const plain = ((__devupValue0) => `${__devupValue0 ? "a" : ""} ${__devupValue0 ? "" : "b"}`)(choose());

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.a{color:blue}}@layer o2{.b{color:blue}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@layer o1,o2;@layer o1{.a{color:blue}}@layer o2{.b{color:blue}}

order-literal-keyframes

입력과 변경 전/후 전체 WASM 출력
import { keyframes } from '@devup-ui/react'
export const fade = keyframes`from { style-order: 2; opacity: 0; } to { opacity: 1; }`

변경 전 (객체 lane 체크포인트, 리터럴 처리 전):

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

=== CSS (this file) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@keyframes a{from{opacity:0;style-order:8px}to{opacity:1}}
=== CSS (whole sheet) ===
/*! devup-ui v1.0.82, | Apache License 2.0 | https://devup-ui.com */@keyframes a{from{opacity:0;style-order:8px}to{opacity:1}}

변경 후:

=== ERROR ===
C:/Users/devfive3901/AppData/Local/Temp/opencode/workers/w38-style-order/order-literal-keyframes.tsx:2:38: `keyframes()` cannot use `styleOrder` at build time: styleOrder is reserved cascade metadata and has no effect in this API

owjs3901 and others added 30 commits October 1, 2026 21:16
…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>
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>
owjs3901 and others added 29 commits October 9, 2026 02:06
Keep authored literal metadata and its source locations through the real parser,
capture and emission paths, with 86 source-backed batch-B regression cases.

Supply CssText::value and finite_text with boxed TemplateLiteral ownership;
consume existing cursor declaration ranges in css_to_style_declaration instead
of reparsing them. Coalesce the source-proven callback terminal/body guards and
remove css_prop_value's already-successful duplicate raw-template preflight.

Carry numeric OrderEnvelope/OrderStep payloads through the wrapper-only
styled_callbacks::prepare_order_body/prepare_order_callback and
block_callbacks::Returns::visit_return_statement/prepare_order_block_callback
seams. Collect after BranchReads and before capture-array emission, retaining
finite-first no-order precedence, real return-slot guards, nested-return
exclusion and rightmost alternate/previous/consequent selection. The shared
capture_prepared_callback emission preserves generic callback output.

Fix conditional literal mixins in literal_scope so the selected true/red branch
is not lost, and preserve nested statements in parenthesized grouping at-rules
through global::remove_opaque/statements and is_grouping. Register only private
source-fed visit restoration tests; preserve every old assertion and snapshot.

F195 local-root transport is deliberately unchanged and deferred to separately
reviewable commits under the coordinator's six-seam approval. No new build-error
category, visibility widening, styling runtime, dependency or coverage exclusion.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Merge #756 at f2fc451, retaining the
style-order metadata policy and forwarding/callback provenance from faff4a0.
Keep the current scope-aware style-order-range rule and clarify that nested
style metadata is checked while ordinary props and data are ignored.

Coordinator-approved integration reconciliation: the incoming
test_tailwind_keeps_other_classes cases 07, 08, 09, 14 and 15 retain the
current once-only __devupValue0 controller captures; case 10 folds the
truthy literal a without reading the right side of OR. See the source-fed
failure evidence D/W38g-756-test-conflict.md and successful executed controls
W38g-756-tailwind-qa3.log. Existing HEAD assertions and goldens are unchanged.

Reclassify exactly the two incoming ESLint fixtures containing nested zero
and a computed styleOrder zero from valid to invalid, retaining their source
and ordinary props/data controls. #766 reads metadata at those positions;
#756 alone predated it. Pin the 2+1 original diagnostic locations, as recorded
in W38g-756-eslint-focused.log. Rule production behavior is unchanged.

Fresh gates: Rust1.99 clippy, default workspace4119/0, rebuilt WASM/root,
Bun6472/0 aggregate100%, lint0errors/2baselinewarnings, original48probes with
only the incoming1.0.82-to1.0.83 banner delta, and named literal/wrapper QA.
The incoming guarded-hover/active cascade finding is reported separately,
not fixed by this merge, per coordinator attribution instructions.

Refs #684 #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
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>
Refs #684, #685

Complete F195/O252 as one reviewable and revertible constructor-preserving unit.
The carrier, normalization, emission, rule transport and local finish must be
integrated together; intermediate stages lack required typed suppliers/consumers.

Six approved seams:
1. ExtractStyleProp and ExtractResult transport payloads with the default
   Expression type parameter, constructive map/clone and one extraction engine.
2. Composition apply/apply_conditional/overlays/into_props preserve payloads and
   construct private normalized top-level products inside overlays.
3. Shared gen_class_names/gen_class_name/merger constructor operations retain one
   recursive emitter and one merger, including arbitrary Expression singletons.
4. Local known_parts/known_side/folded_side/push_choice/part_props/literal_scope
   counterparts retain actual class boxes and the genuine nonempty capture owner.
5. Typography Template/Call constructors and necessary recursive rule/yield
   transport retain their boxes through the typed RuleClass backend.
6. A boxed CallExpression constructor is factored from call_with_values, retaining
   the Expression entry, argument/parameter order, flags and inner spans.

Default type parameters do not drive unconstrained expression inference.
Retain the approved crate-internal Expression-facing Composition::default and
default extract/into_extract delegates to private payload-generic recursion;
do not annotate or rewrite existing callers or assertions.

Remove only five compiler-reported unused private default facades after workspace
caller proof; keep literal_context::reject test-only for its unchanged old test.
No factory mode, warning suppression, public visibility widening or seventh seam.

Restore only the final outer String/Template/Call/Conditional span, then erase
once. F199 no-op, source grammar, clone semantics, naming, finite origins and
capture evaluation order remain unchanged. Add 46 real-source control cases;
park the independently approved A/B regressions outside this F195 unit.

All 767 old snapshot hashes are unchanged; libs/sheet has an empty diff.
Fresh candidate JS/CSS/maps/errors match all 48 original real-WASM probes and
22 public Oracle controls byte for byte without normalization or allowances.
Rust1.99 clippy, 4165 workspace tests, 6472 Bun tests (aggregate100), lint and
11 generated timing observations pass; lint has only the two baseline warnings.
No new build-error category, styling runtime, dependency or assertion/golden edit.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Bug A: validate literal mixins before lowering the complete metadata-bearing ClassNames template, so root red retains order 2 across external and known mixins while authored getters run once. Preserve the existing located rejection of nested mixins; add two source-fed ordered-red regressions and a public nested-error regression. Original snapshot JS/style values, raw48 probes and unrelated Oracle outputs stay unchanged; the three named root-red CSS outputs now use o2. No sheet, capture, parser policy, runtime helper or new build-error category.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Bug B: match the real Emotion ClassNames cx empty-string result for ordinary literal string tables at the direct-parts result boundary, using the existing typed string_class and conditional constructors. Require the actual saved primitive key tag before lookup so a missing selection cannot collide with a property named undefined; preserve both the real undefined key and once-only authored getter. This corrects inherited class-result behavior, not an F195 regression. Add 18 source-fed raw type/value/trace regressions and controls, including positive a/b and nullish/logical controllers. Only literal-member and literal-missing Oracle JS/maps intentionally change; old snapshots, raw48, styles and sheet stay exact. No capture, selection, controller, source factory, merger, default API, finished-root, runtime helper or new build-error category change.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add six real parsed object cases through the normal expression extraction wrapper, registered typography producers, conditional styleOrder 2/3 alternate cloning, RuleClass Template/Call transport and conversion. Assert source-owned object/condition spans, exact red declarations and both orders, real payload forms, selected classes and once-only authored order/typography getters. Target the fresh I35-I39 Linux ledger obligations without fake payload constructors, source-state seeds or any production change; new formatted test stays at 100 lines plus one parent registration. Existing assertions/goldens and the full767 snapshot, raw48 probe and whole22 Oracle outputs stay byte-identical with no exceptions; sheet diff empty. C1 bare-return callback semantic issue is separately parked and not touched. Linux coverage advance remains to be measured on this commit.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Named C1: a bare return selects no style order, exactly as omitted metadata. At value selection, an initial missing alternate uses the existing falsy && Order::Absent path rather than cloning the other branch; explicit alternates and previous selections remain intact.

Four public-source arrow/function regressions prove unlayered stopped red, order-2 continued red and once-only getters/effects; two valued-return controls preserve earlier selections. Fresh WASM checks both CSS modes and extraction exports. Existing 767 snapshots, 48 raw probes and 22 whole Oracle JSONs remain byte-identical; no intended Oracle or snapshot changes, no sheet/parser/capture/runtime changes or new build errors.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Named order-block supplier coverage unit: styled_callbacks passes the actual FunctionBody to prepare_order_block_callback, while original-root capture and the single invocation remain in the caller after body preparation. Remove only J113/J114 callee root and body guards because the input type makes those states unreachable; no fabricated invalid-root tests or coverage exclusions.

Generic block preparation, return traversal/indexing, finite and expression paths, capture order and C1 selection remain unchanged. Real C1 and original wrapper controls pass; 767 snapshots, 48 raw probes, 22 whole Oracle JSONs and all eight C1 WASM/runtime receipts remain byte-identical. No sheet, old assertion, runtime, parser, dependency or new build-error change.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Test-only named finite-outcome unit: real parsed Member and registry-backed responsive hover Enum carriers pass through default extraction, actual generation and FiniteStyles::emitted without reconstructed props, cached origins or fake Choice rows. Exact raw results and independent declaration variants, values, levels, selectors and orders stay correlated; missing/null keys exercise the actual lookup fallback.

The public ClassNames companion obtains its actual registered origin and executes all eight authored global-getter boolean triples over three keys: 24 selected results with exactly three source reads, independently proving all six reachable pairs rather than weakening correlation. Direct plain-flag cases retain their four correlated outcomes. Initial new-fixture top-level Enum and shared-public-flag assumptions were corrected only after actual producer and getter proof; old tests/helpers/assertions remain unchanged.

Two additive children of 81 and 98 formatted lines share their actual source producer and expected-only atom oracle, with their two registrations in the same compiling unit. Zero production or sheet changes; original 767 snapshots, 48 raw probes, 22 whole Oracle JSONs and eight C1 WASM/runtime receipts remain byte-identical. J70/J71 and unproven shapes remain held, no advance Linux coverage credit or new build errors.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Name this approved two-seam unit C1b: retain the old terminal-valued
wrapper route, admit the supported structural normal-exit skeleton, and
consume actual empty prepared steps as absent literal metadata. Retain
every authored invocation, default, getter and effect. Validate removed
original metadata and keep later orders, nested scopes and real spreads.

The six named terminal-arrow, terminal-function, terminal-arrow-effects,
terminal-function-effects, allbare-arrow and allbare-function fixtures
change from located invalid-order errors to correctly selected styles.
Explicit unsupported control flow, async and generators stay unchanged.

Obsolete-test reconciliation: move exactly p=>{return;},
p=>{trace.push('tail')} and p=>{if(p.active)return 2} from the old
literal_w38b_callbacks.rs rejection table to positive regressions for
their full order vectors, selected red classes and once-only traces.
Every other original assertion and golden remains unchanged.

Keep the callback-mixin comparator, own all-bare static css() red-class
assertion, named no-order undefined-class current-behavior control and
eight named public spread-bug controls. The static css() omission defect
and public real-spread supplier defect are separate approved next units,
not silently repaired or declared accepted here. Linux coverage remains
the release authority; no coverage exclusion or threshold change.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Name this independent approved unit C1c. Styled template preparation now
separates a statement interpolation before primitive CSS text folding
only when its actual existing finite provenance has one producer result
at top-level structural depth. The original expression, source span and
semantic IDs supply the declarations; no class spelling or cached witness
stands in for real provenance.

Move only the touched template splitter and segment builder into one
bounded child, retaining the default template_parts path and behavior.
Only the styled fallback calls the provenance-aware entry. Leave value
positions, authored primitives without provenance, nested and multi-result
behavior, parser/capture/wrapper/preparers/OrderStep/value policy unchanged.
Do not decompose untouched css_prop host production or move old tests.

The no-styleOrder static css() mixin now selects the red class it already
emits; the explicitly ordered all-bare counterpart stays unchanged, with
no intended CSS rule/order/layer delta. Preserve the restored original
strong omission comparator byte-for-byte and its independent source-fed
supplier, selection, composition and invariant controls.

Reconcile the specifically named C1b current-behavior no-order typeof
undefined control to the corrected string-class result, retaining its
source, red declarations and once-only getter trace. The all-bare positive
control and callback-mixin comparator remain unchanged. Main11790 origin
is unchecked; the separately approved public real-spread supplier unit
and Linux100 release work remain, not a silent parity exception here.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Deliver the separately approved W38m spread-supplier unit after C1c.
Recursively lower the actual styled argument before literal callback capture.
Share the existing walker through typed preservation and construction entries,
and reuse the unchanged source-spread shape/snapshot decisions at the original
property position. Move only the touched production walk into one bounded child;
keep all old tests, parser, OrderStep, value/preparer and capture policy intact.

Correct exactly eight named public outputs: real-spread-nested and
real-spread-nested-absence, each single/map, single/plain, split/map and
split/plain. The former now retains root red and hover blue in o2/o3; the latter
matches the whole omission CSS, selected classes and declarations while the
authored pure callback still executes once per render. There are no new build
errors or runtime styling helpers.

Add genuine source-fed supplier, preservation, metadata, eligibility and opaque
effect/default regressions. Preserve the actual no-order rejection of the three
comment-hole effect fixtures instead of widening eligibility; independently
proven scalar spread controls check complete static/dynamic inventories, exact
inline values, construction order, repeated-spread effects, later orange override
and identical sentinel throws stopping every later operation. Reconcile only new
test assumptions about the canonical style-order key and test-harness ownership.
Correct the new private plain-map assertion after the unchanged binding proved
that both public exports request Generate; no production map change.

Final gates: 4360 Rust tests, 6472 Bun tests with aggregate display 100% functions/lines, Rust 1.99
workspace/all-target clippy, fmt, fresh WASM/root build and lint. Final public
binary e87ad8dd has all 240 other whole outputs unchanged, all eight corrected
contracts verified, C1c 16 whole receipts unchanged, and all 767 snapshots,
48 raw probes, 22 whole Oracle outputs, C1 raw/runtime controls and manual QA
unchanged. Rust LSP requests time out; no clean-LSP claim or installation.
The pre-existing Vite Bun row remains 99.67 at closing brace line 365, identical
to the C1c baseline; aggregate display is not a claim of exact 100% in every file.

The separate no-order conditional-spread precedence finding is coordinator-routed
outside PR766 and remains unfixed here. Main behavior was not built or classified.
Linux coverage/ready remain later release work, not credited by Windows gates.

Refs #684 #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Deliver the coordinator-approved M58-M60 test-only coverage unit after the
separate spread fix. Add two small source-fed test children and two registrations;
the rejection registration follows the original complete production body.
No production behavior, parser, policy, public signature, old assertion or golden
changes, and no new build errors.

Real Oxc expression-arrow fixtures for styleOrder and quoted style-order require
the exact original key offset and no-effect diagnostic. Metadata-free and block
audits remain empty without implying public callback support. Public keyframes
fixtures retain the existing no-effect and unsupported-call diagnostics; unsupported
block and metadata-free arrows remain unsupported. All six tests pass.

The temporary counterfactual removing only arrow recursion makes the metadata
test fail while both audit controls pass; original production bytes restored.
An unregistered exact staged-tree archive formatted with the current CI config
matches the original whole production prefix and lexical owner proofs. Its focused
LLVM run passes all six tests and records positive uint64 XML hits at wide40-42
for M58-M60; raw counters are retained losslessly, not counted as Linux/global100.
No excluded lines, lowered threshold, fabricated producer or failure-arm test.

Final gates: 4366 Rust tests, 6472 Bun tests with aggregate display100, fmt,
Rust1.99 workspace/all-target clippy, fresh WASM/root builds and lint with exactly
two baseline warnings. All248 whole post-spread public outputs, C1c16 and the
original767 snapshots/48 raw/22 whole Oracle/C1 raw-runtime/manual controls remain
byte-exact on final e87ad8dd binary. Rust LSP timeouts remain; no installation or
clean-LSP claim. Inherited Vite99.67/365 remains unchanged.

Linux after the push remains authority for retirement and all remaining deficits.
Three test-helper failure-arm gaps, finite injectivity and typed caller obligations
remain mapped/HOLD; no fake failure tests or removal credit.

Refs #684 #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Totalize the three approved test-only scalar expectation helpers. Typed
static_color and class_tokens retain source-derived expectations and assert
both the actual ClassName variant and its independently computed token.
Keep every non-Dynamic output variant in exact Static-multiset equality,
preserving multiplicity and rejection of unexpected rules without a separate
unreachable panic arm. All dynamic properties, metadata, inline values,
selected tokens, fixtures, effects and sentinel checks remain unchanged.

The three files are inseparable: the typed class_tokens signature requires
both the scalar inventory and metadata expectation consumers to change with it.
Four temporary wrong-expectation demonstrations fail at the intended checks,
and each restoration matches the frozen formatted candidate bytes exactly.
No manufactured output, failure-arm test, exclusion or threshold change.

Full local gates pass: 4366 Rust tests, 6472 Bun tests with aggregate displayed
100 percent coverage, fmt, Rust 1.99 clippy, WASM/root builds and lint with only
the two baseline warnings. All 248 post-spread plus 16 C1c whole outputs,
767 snapshots, 48 raw probes, 22 whole Oracle receipts, C1 controls and manual
scenarios remain byte-identical on the final production binary.

No production change, new build error or public output delta. The inherited
Vite per-file coverage row is not a claim of exact per-file 100 percent;
Linux coverage remains the release authority. Conditional-spread precedence
remains routed elsewhere and is not fixed by this test-only unit.

Refs #684 #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Exercise real parser and semantic suppliers, exact diagnostic locations and dispositions, complete surviving style inventories, conditional class selection, and once-only guard effects. Production code and protected outputs remain unchanged. Private XML proves nine targets and all 57 measured new counters positive; five absent classes and two absent conditional wrappers remain honestly unmeasured locally, with named passing cases and wrong-expected fail-capability evidence. Linux CI remains coverage authority.

Refs #684, #685

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

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

Add source-fed empty/nonempty saved-result OR and coalesce cases, lazy nested
conditional guards, orderless and nullish controls, and the existing located
multi-statement child rejection. Compare complete typed inventories including
hidden fields, exact selected classes/declarations, effects and independent
literal inventories. Production, snapshots and prior tests stay unchanged.

Preserve nineteen exact positive target proofs, fifteen named native cases and
four restored wrong-expected failure demonstrations. Five new test classes
absent from local XML remain unmeasured locally, not covered; Linux CI is the
coverage authority. Rebuilt four-mode SDK QA compares complete CSS, rule order
and layers with independently authored compile-only references, while all
protected output contracts remain byte-identical. No new build-error category.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add 32 source-fed saved OR, AND, coalesce, conditional and array-alias cases,
including eager construction, post-choice state mutation and lazy fallback
controls. Compare complete typed inventories including hidden fields, exact
selected classes/declarations/order and traces, with independent literal data.
Production, existing assertions and protected snapshots remain unchanged.

Twelve exact positive private target proofs are retained with three absent new
classes honestly unmeasured, not covered. Four real wrong-expected failures
were immediately restored byte-exactly; mutation patch/hash reconstruction is
explicitly retrospective. Rebuilt four-mode SDK whole-CSS/order/layer checks
and all protected output contracts pass. Linux CI remains the coverage authority.
No new build-error category.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ten named controls: eight public ClassNames leaf shapes (literal, constant and interpolated templates, static getter, computed getter and key) with an independently authored typed inventory, exact class strings and once-only effects, plus two native replays of an actual captured StaticMember through capture_style_argument, from_actual, CapturedSource::class and read_in. Tests only; no production, snapshot or oracle change.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ed order provenance

Twelve public-path cases: nested-statement styled templates that keep the tag (arrow, function and class callbacks, noncallback copying), six attrs forms restored after failed tag preparation (plain, computed, spread, object merge, arrow, function) and the async-arrow and mixed producer/numeric order-return rejections with exact located errors. Tests only; no production, snapshot or oracle change.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
… computed-member sources

Eighteen public-path and native-replay cases for the Emotion ClassNames composition seams: literal, void and captured-template sides, finite right-hand fallbacks, saved finite array indexing with later-layer override, original-part rejections reporting the exact consumer, typography template payloads and a captured computed member replayed once with key and getter effects. Tests only; no production, snapshot or oracle change.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ography roots and callback preflight errors

Twenty-two public-path cases: styled calls whose argument is a literal object spread (explicit order, responsive values, css-prop inline eligibility), normalised conditional/supplied roots beside typography, finite spreads reading their test once, located errors for unreadable or unsupported callbacks, rules and css capture, and the legacy tagged-template fallback. Tests only; no production, snapshot or oracle change. A scoped nested styled callback inside ClassNames overflows the stack and is reported separately.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
… roots and JSX runtime spreads

Sixteen public-path cases: closed local rules keeping diagnostic and unreadable observations with their original error locations, equality-preserved typography payloads, runtime JSX spreads over arrays and conditionals, vanilla-extract metadata serialisation (number and explicit null), imported record producers (call and tagged template) and saved-producer conditions over empty, nonempty and mixed results. Tests only; no production, snapshot or oracle change.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
… no input can reach

Behavior-neutral removal of branches proven unreachable from their callers so Linux line coverage can close without fake tests: with_component no longer returns Option, prepares_styled and callback_result match only the live shapes, two redundant prepare guards, the always-None element parameter of the ClassNames local rule readers, the duplicate block-body and spread-snapshot rejections, ConditionalEmission::clone_expression, the unused Expression conditional constructor (ClassConditional trait split) and literal_locations::place (span threaded into constant_literal_at). Generated output, errors and all 767 snapshots stay byte-identical; WASM, Bun and protected spread 248, C1c 16 and diagnostics 16 parity were re-run on the rebuilt binary.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…an, block-return and css-prop helper paths

Behavior-neutral splits and removals so the remaining Linux gaps close without fake tests: the raw literal-marker diagnostic that no disassembled name can reach, the finite-style Choice kind (Row split into flags and keys, cross-kind clashes still rejected), one shared parts-or-unsupported body for captured and uncaptured ClassNames sources, one shared known-style side used by the legacy and local classifiers, and order_property as a single matches!. Nine public-path witness cases cover the keyframes name colliding with the styleOrder key through a custom prefix, boolean-literal conditions, block returns of runtime classes (current rejection pinned), nested class helpers in a css prop and ordered tag choices. Output, errors and all 767 snapshots stay byte-identical; WASM, Bun and protected spread 248, C1c 16 and diagnostics 16 parity were re-run.

Refs #684, #685

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

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

Source classes (strings, templates, conditionals and, when captured, identifiers and members) no longer share the FinishedClass and CapturedClassBody types with typography RuleClass::Call payloads: UncapturedSourceClass and CapturedSourceClass have no Call arm, the LocalOutput trait keeps from_rule for the payload side, and the source-to-output crossings sit in composed_class_local and the literal scope. This deletes the unreachable Call arms of clone_source_expression, read_in and string_class, the unused read_call and the captured source default arm. One witness case (selected key whose value emits no class, through extract_style_from_expression and gen_class_names) covers the absent-key outcome of the finite emitter. Output, errors and snapshots stay byte-identical; WASM, Bun and protected spread 248, C1c 16 and diagnostics 16 parity were re-run on the rebuilt binary.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…e unreachable order-glue fallbacks

Real witnesses for the finite-style union conflict (two css() widths that differ only in theme-token resolution but share class names, selected by a conditional) and for the literal-scope spread drain beside an invalid styleOrder inside ClassNames, plus behavior-neutral removals: the finite_callback collision loop now folds through FiniteStyles::union, the accessor/method arm of the style-call order check (getters, setters and methods are function values the order parser always rejects first), the never-taken Unsupported fallback of the order prescan and attribute reader (parse once, same dispositions and messages), and the wildcard of the wrapped order callback (WrappedCallback is an Arrow or Function enum). Output, errors and snapshots stay byte-identical; WASM, Bun and protected spread 248, C1c 16 and diagnostics 16 parity were re-run on the rebuilt binary.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…per emitted shape

finite_styles::outcomes::text now converts the node once with AstKind::from_expression and tries five single-purpose readers (string literal, template, conditional, || fallback, computed lookup) through or_else, each starting with the library accessor and ?, instead of one match with impossible default arms for expressions the emitter never produces. The returned Option is identical for every input including declined sub-expressions (the five shapes are pairwise disjoint and each reader is pure), the pub emitted() and text() signatures are unchanged and no test, exclusion or unreachable placeholder is involved. Output, errors and snapshots stay byte-identical; WASM, Bun and protected spread 248, C1c 16 and diagnostics 16 parity were re-run on the rebuilt binary.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
… string attributes reach it

After the order-glue restructure the styleOrder attribute reader sends expression containers, elements and fragments through checked_order or its own placeholder errors, so jsx_expression_to_style_order only ever received string literals and its container and fallback arms were left uncovered by Linux (utils.rs). The string attribute now reads string_order directly (same Static result, same Definitive error on rejection) and the dead function is removed; the one unit test that used it classifies the same values through expression_to_style_order. Output, errors and snapshots stay byte-identical; WASM, Bun and protected spread 248, C1c 16 and diagnostics 16 parity were re-run on the rebuilt binary.

Refs #684, #685

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@owjs3901
owjs3901 marked this pull request as ready for review October 11, 2026 07:55
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