Repository navigation
Conversation
Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #695 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Contributor
Changepacks@devup-ui/wasm@1.0.83 → 1.0.84 - bindings/devup-ui-wasm/package.jsonPatch
@devup-ui/bun-plugin@1.0.22 → 1.0.23 - packages/bun-plugin/package.jsonPatch
@devup-ui/components@0.1.60 → 0.1.61 - packages/components/package.jsonPatch
@devup-ui/eslint-plugin@1.0.22 → 1.0.23 - packages/eslint-plugin/package.jsonPatch
@devup-ui/next-plugin@1.0.90 → 1.0.91 - packages/next-plugin/package.jsonPatch
@devup-ui/plugin-utils@1.0.17 → 1.0.18 - packages/plugin-utils/package.jsonPatch
@devup-ui/react@1.0.44 → 1.0.45 - packages/react/package.jsonPatch
@devup-ui/reset-css@1.0.31 → 1.0.32 - packages/reset-css/package.jsonPatch
@devup-ui/rsbuild-plugin@1.0.67 → 1.0.68 - packages/rsbuild-plugin/package.jsonPatch
@devup-ui/vite-plugin@1.0.73 → 1.0.74 - packages/vite-plugin/package.jsonPatch
@devup-ui/webpack-plugin@1.0.71 → 1.0.72 - packages/webpack-plugin/package.jsonPatch
|
Codecov Report✅ All modified and coverable lines are covered by tests.
... and 38 files with indirect coverage changes 🚀 New features to boost your workflow:
|
This was referenced Oct 5, 2026
Merge updated parent PR 750 (74afb76), containing main 11790be. Conflicts: libs/extractor/src/prop_modify_utils.rs and conditional Tailwind snapshot. Share main's per-class Tailwind compiler between normal generation and PR 756 class capture, retaining semantic IDs and single evaluation. Regenerate the conditional snapshot to combine main's extra line-height declaration with the captured controller; retain all assertions and update five exact template-code expectations for PR 756 single-coercion IIFEs. Full workspace tests, fresh WASM/root builds and real WASM probe pass; no snapshots were hand-merged. Refs #686 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 8, 2026
owjs3901
added a commit
that referenced
this pull request
Oct 8, 2026
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>
owjs3901
added a commit
that referenced
this pull request
Oct 8, 2026
Merge #757 at 78ef660 after the genuine #756 integration975f3371. Recursive merge bases74afb760 and6d0c9c83 produce an identical tree3c14e7e427686d8802d1e0722afc33515d3eed28 with no conflicts or source changes. Preserve both exact base histories and normal hook gates. Keep the approved six incoming Tailwind expectation and two incoming ESLint fixture reconciliations from the prior merge, current JSX capture/constant-fold semantics, located metadata errors, and existing HEAD assertions/goldens. F195 and the remaining coverage units are separate subsequent changes. Refs #684 #685 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901
added a commit
that referenced
this pull request
Oct 8, 2026
Refs #690, #693 Merge exact f2fc451 retaining the current native/readback/provenance and incoming namespace/JS-semantics changes, without resetting merge state. Resolve five combined source/snapshot seams, use direct private tracking fields and current evaluate_located test API, and bind the incoming reachable-file helper to existing resolveSourceFile. Coordinator-approved merge-test alignments: lexical local require is not a module request; genuine unbound require keeps its original helper.ts:1:25 semantic site and unchanged cause/Fix/no-publication, while reference-free exploration falls back to entry.tsx:2:23 ingress; eight native consumer cases evaluate independent runtime sentinels, exact once-only getters/calls and wrong-slot/restoration instead of generated identifier spellings; only positive g uses valid styleOrder={undefined}, with the complete original invalid JSX retained as the located a.tsx:9:34 negative. All other fixtures and oracles remain unchanged; incoming capture/spread snapshot preserves the existing CJS_DYNAMIC alias. Full workspace4719, Rust1.99clippy, fresh WASM/root, Bun5535, preservation/API/carrier/graph and50both-mode browser positive/wrong-class/restoration gates passed. The prior advisory B Oracle result was lost to tool failure; coordinator authorized full-diff self-review and objective gates, not a claimed clean Oracle review. No contextual carrier/plugin delivery or out-of-scope Devup-only composition fix is included. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This was referenced Oct 11, 2026
Refs #682 #695 #688 #689 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
The extraction engine is moving to napi, so the WASM size budget no longer guards what ships. Its comment-stripping post-build step only hid wasm-bindgen 0.2.130's own glue growth and pulled a JS install into the WASM build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dcu across all manifests (apps/react-18 stays on React 18), cargo update, oxc 0.158. oxc_sourcemap stays on 9 since oxc_codegen 0.158 still uses it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`<Box {...{ animation: `${slide} 3s` }} />` compiled to a CSS variable
while the same attribute compiled to a static class, as it did on main.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
They only served the removed size budget and lengthen every WASM build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A statement whose value opens by assigning generated captures runs those assignments first wherever it runs, so they become a `const` right before it instead of a hoisted `let` plus a comma assignment. Captures in places that may not run keep the shared `let`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Once its stages are inlined, a styled renderer now keeps one scope where no name collides, declares constants where nothing reassigns, drops single-use temporaries, and destructures the DOM props out of its fresh `rest` ahead of the return instead of inside the JSX. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lations
A dynamic style whose capture the output no longer declares now records the
expression written in its place rather than the dropped name, and a value
interpolated in an untagged CSS template reaches its style variable as is,
as React already writes it as text, instead of through `${...}`.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ues in Captures no longer travel through `let` slots assigned in comma sequences. StyleX condition results, unit conversions and element captures are passed as arguments; a test that suspends is always an argument so `yield`/`await` stay in the authored function. A final pass turns a generated call in a statement's first-evaluated position into `const` declarations before the statement, when no name it declares is read elsewhere there, is a parameter, or could be seen by direct eval. Renderer simplification now splits sequences in head positions, folds single-write destructuring into `const`, runs to a fixed point, and simplifies frames only after inlining. Omitted styled props join the `$` filter instead of a destructuring record, and mixins read from set constants need no capture. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… before it
When `as` is the last prop that must be captured and names the element or
chooses between names, it stays where the element evaluates it first:
the props written before it are passed in, then the condition picks a
static element. `items.map` with `as={i.href ? 'a' : Link}` renders
`<a>`/`<Link>` again instead of a runtime `DevupAs`, reading `i.id`
before `i.href` as written.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ting it
An element call whose tag is only known at runtime was rebuilt from a
copy taken before its props were visited, and the replacement waited
for the next call or element to finish. A call left in its props, such
as `id: tick('id')`, finished first and took it, leaving the outer call
reading `__devupFactory0` and the captures where none were bound.
The call is now rebuilt after it and the values it captured are
visited, so the copy carries what they compile to. With that fixed,
reads of `const` bindings already set where they are read count as
constant for evaluation order, as the order model always described.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ue branches A generated declaration nothing reads, holding a value made only to be named, goes. One that only names a parameter or an import nothing writes or rebinds goes too, its reads reading that name instead, so `<__devupRecord10 />` after `const __devupRecord10 = Dyn` is `<Dyn />`. A generated arrow left only returning a value is written as it. A branch packet `test ? [true, value] : [false]` whose value is never `undefined` holds that value itself: which branch ran is whether it is defined, or whether it is truthy where it always is when given. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed values
A branch capture whose one branch gives a single value never
`undefined` and whose other gives none is now built as that value,
`test ? value : void 0`, where it is made, instead of being repacked
after the fact from the shape of its packet.
The build ran code for a style value even where the module handed the
binding it reads to unknown code, as long as the build could not read
that binding itself: `const made = make(); watch(made);` let
`css({ p: f() })` bake `made.p` in although `watch` may change it. What
such code reads is now checked where it runs: a value it hands on that
holds an object there computes nothing, leaving the error the build
gives for any value known only at runtime.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…onJS exports in order
- A constant string or array has its length, and a string its UTF-16
units, so `PRIMARY.length` is the number it is.
- A style prop of a component the module computes from constants with
its own code, such as `color={darken(0.4, PRIMARY)}`, is computed like
the arguments of `css()`. An element prop reads a hole or `undefined`
as it is, so a value JSON would turn into `null` is left to runtime.
- A conditional whose branches each give the styles one whole value is
captured as that one value, so `a === b ? `${a}` : `${a}`` no longer
repacks a flag no class reads.
- A string a template literal holds as a value is written as its text,
except in a tagged template, whose tag reads the parts as written.
- `CommonJS` exports are read as the top-level statements leave them in
order: `module.exports = { A: 'a' }; module.exports = { A: 'b' }`
exports `b`. Once `module.exports` holds another object, `exports.x`
writes to the one no importer reads, which the build baked in before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ches only for its effects Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The build wrote checks whose answer it had just written, fallbacks never
reached and values wrapped to be unwrapped again. Each is now written as
the code it means, running the same steps in the same order:
- The styled renderer no longer checks the record it wrote itself:
`[2] !== void 0` and `[1] === void 0` fold where the build knows the
slot, and a composing component reads the same classes as its own.
- A pass after the IIFEs unwrap simplifies what remains: `(0, f)()` to
`f()`, string-only `[...].filter(Boolean).join(" ")` to its text,
`"a" || x` and `x ?? void 0` to their left side, conditions read only
for whether they hold (`c ? true : false`, `c ? d : false`, a value
guarded by its own guard), conditionals of a known or repeated test,
templates held in templates, objects spread in place in objects and
JSX, `?.` on a generated name holding an object, and leading values a
sequence reads to drop.
- A generated constant declared as another is read as that one, found
by scope, so components repeating the same names lose them too.
- A conditional whose branches are the same code keeps its condition
only for its effects; the restore `branch_capture` did for it is gone.
Each rule keeps what reading changes: a member or name called through a
sequence keeps its `this` and indirect `eval`, a function keeps the name
it would infer, `typeof` is only dropped for declared names, and `key`
stays spread.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
JSX·styled 변환에서 불필요한 arrow와 정적 스타일 선택의 중간 맵·배열을 제거하고, JavaScript의 평가 순서와 단일 평가를 보존합니다. #791·#806을 포함한 main을 반영했습니다.
정적 스타일 선택은 아래처럼 직접 클래스 맵을 조회합니다. 선택 키가 고정되어 있으면 최종 클래스 문자열 하나로 접습니다.
apply_var_typography-5/6, 정적·반응형 객체 선택 등 11개 스냅샷을 단순화했으며 CSS·클래스·반응형 단계 메타데이터는 동일합니다. 태그용 배열 26개를 줄였습니다.jsx·jsxs·jsxDEV·createElement의 평가 순서, unknown spread,className·style우선순위를 보존합니다. 객체·배열에서 반응형 값을 선택할 때 없는 키를 읽어도 예외가 나지 않도록 optional chaining의 AST를 유지합니다.this, 직접·간접eval, 함수 이름, 매개변수 기본값, strict 모드, 지연 실행 참조를 실행 테스트로 검증합니다.790개 스냅샷의 생성 코드 AST를 모두 검사했습니다. 파싱 오류와 누락은 0개이며, 실제 렌더·콜백 arrow 723개와 동적 styled 대상의 인스턴스별 보존에 필요한 즉시 호출 4개가 남습니다. 새 arrow는 추가하지 않았습니다. 이번 정적 선택 단순화에는 정상·없는 키, null·undefined·Symbol, 중복 키·배열 구멍, 키 변환·예외·상속 조회와 평가 순서를 확인하는 회귀 테스트 71개와 spread 선택 실행 테스트 30개를 추가했습니다.
검증 커밋:
41f90ea7a7ddcb788f6aa09f77566fba7d7db11a검증 소스 트리:
48275cb127ac45ffedc33b8cbec9ba7f5b20d246정상 커밋 훅에서 포맷, 모든 target·feature의 Clippy(
-D warnings), ESLint와 전체 테스트를 실행했습니다.크기는 CI와 동일하게 gzip 레벨 9로 측정했습니다.
최신 커밋의 CI에서 8개 검증 모두 통과했습니다:
benchmark,wasm-size,landing-next-e2e,react-18,vinext-rsc-css-e2e,webpack-extends-theme,publish,release-compat.Rust 커버리지는 **100.00% (25148/25148 lines)**입니다. CI 크기 보고서의 소스 트리도 검증 커밋과 일치합니다.