Skip to content

test: gate packed release compatibility and isolate compiler state - #767

Merged
owjs3901 merged 8 commits into
mainfrom
test/release-compat
Oct 20, 2026
Merged

owjs3901 merged 8 commits into
mainfrom
test/release-compat

Conversation

@owjs3901

@owjs3901 owjs3901 commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Refs #683 (W25: INF-21, PLG-26, INF-03, INF-02, INF-05). #746 및 최신 main 802c0635를 실제 두 부모 merge로 통합합니다. #746과 #789는 이미 main에 병합되었습니다.

요약

  • 일반 WASM artifact의 내부 테스트용 resetStateForTesting()과 production resetBuildState()를 구분합니다. 전체 테스트 reset은 sheet/resolver, 모든 map/설정, reservation phase/miss, frozen atom plan, 여섯 theme registry 필드, 일곱 Tailwind 정의 구성요소, shorthand map/flag 및 호출 thread의 imported/stripped cache를 초기화합니다.
  • Rust의 scope guard는 각 소유자의 전체 상태를 이동 보관하고 정상 종료·중첩·unwind에서 정확히 복원합니다. 기존 serial lock과 thread-bound TLS guard를 유지하고 production scratch/reservation 동작은 바꾸지 않습니다.
  • 실제 일반 artifact의 29개 WASM export와 reset 동작을 검증합니다. import가 필요한 경로에서 예전 resolver가 제거되고 다른 새 resolver가 적용됨을 확인하며 단순 export 존재 검사로 대체하지 않습니다.
  • Next의 네 namespace 참조를 초기화하고 resolver를 재설치합니다. 명시적 root와 per-test override를 사용하며 queued write를 정리한 뒤 spy를 복원합니다.
  • Bun의 실제 register/setup 및 terminal callback을 await합니다. native registration/clearAll identity, 실제 연속 Bun.build, source reservation 및 deferred CSS를 검증하고 handwritten Bun plugin의 coverage 제외만 제거합니다. 공개 session counter reset이나 전역 clearAll은 추가하지 않습니다.
  • built package를 tarball로 설치하는 독립 consumer에서 공개 plugin API로 production build를 실행하고 Chromium/Firefox/WebKit의 실제 computed style을 검사합니다. 생성 class명·파일명·chunk 구조를 고정하지 않습니다.

동작

Vite, Rsbuild, standalone Webpack, Next Webpack, Next Turbopack의 두 CSS mode에서 초기 build와 같은 길이의 source/theme/import 편집 및 prop 제거 뒤 재빌드를 검사합니다. layout/spacing/color, imported styling module, 반응형, hover, extends theme 및 동적 CSS variable 갱신을 확인합니다. unsafe Vite single-CSS 입력은 위치가 있는 기존 build error로 거부되어야 합니다.

2026-10-07의 두 product finding은 모두 main에서 수정되었습니다. Rsbuild per-file imported-module color 누락은 이미 main에서 수정되었고, standalone/Next Webpack의 extends-theme color 누락은 main에 병합된 #789가 수정합니다. #789는 packed CJS index가 worktree source URL 대신 실제 module.filename에서 loader를 해석하여 별도의 theme-empty WASM을 선택하지 않게 합니다. 이 PR은 그 수정이나 fixture를 우회·복제하지 않고 최신 main의 실제 shipping output을 다시 검증합니다.

build/browser는 순차 실행합니다. foreground watchdog은 관측한 PID generation을 정확한 Linux start tick 또는 Windows birth/UTC tick으로 확인하며 메모리·조상·개별 signal 전후를 검증합니다. 양 OS의 native SIGKILL 오류를 구조화된 code/syscall로 분류하고 localized message를 파싱하지 않습니다. primary/cleanup 오류를 보존하고 나머지 owned identity 정리를 계속합니다. watchdog/inspection/cleanup 실패는 정상 compiler build-error로 승인하지 않습니다.

새로 생기는 오류

새 애플리케이션 build error는 없습니다. 기존 styles.mjs:1:61: css() cannot use window.name at build time 경로를 실제 production build에서도 검사합니다. watchdog의 6 GiB/10분 초과, process inspection 및 cleanup 실패는 검증 finding으로 남고 styling runtime·fallback을 추가하지 않습니다. CI의 Linux Rust/Bun 100% 기준과 #746의 WASM size budget 및 benchmark 기준을 유지합니다.

남는 한계

  • production 재빌드 검증이며 dev-server HMR 전체 검증은 아닙니다.
  • standalone Webpack은 설치된 최신 Next에 포함된 Webpack의 공개 compiler API와 CJS plugin을 사용합니다. Next가 standalone default-minifier 모듈을 배포하지 않는 toolchain 제약 때문에 기존 public production 설정 optimization.minimize:false를 유지합니다. 독립 설치/다른 Webpack 또는 default-minifier 호환성을 주장하지 않습니다.
  • process generation 검사와 PID signal은 원자적 pidfd/OS handle 소유권이 아닙니다. check-to-signal TOCTOU 및 관측 사이에 완전히 사라지는 descendant의 한계가 있습니다. 로컬 검증은 별도 Windows whole-job guard로 소유한 process만 정리합니다.
  • reset/guard는 기존 serial 규율 아래 quiescent test boundary용입니다. active resolver/evaluation callback 중 reset이나 panic=abort의 Drop을 보장하지 않습니다.
  • generated pkg/dist는 Bun handwritten-source 100% metric 밖이며 실제 ABI/packed browser 동작 검증과 구분합니다. LSP 미설치/daemon timeout은 compiler/test 통과와 구분합니다.

검증

  • 최신 stable Rust 1.99.1 / Bun 1.4.3 / Node 26.12.0 / Playwright 1.64.1을 사용했습니다. 모든 로컬 Rust gate는 기본 stack, jobs=2, CI unset이며 build/test는 6 GiB whole-job guard 아래 순차 실행했습니다.
  • cargo fmt --all, strict workspace/all-target Clippy 및 cargo test --workspace: 5,578 통과 / 0 실패 / 0 ignored, 최대 whole-job working set 3.428 GiB입니다.
  • binding 디렉터리의 명시적 normal WASM rebuild, root package build, verify:dist: 통과했습니다. 일반 artifact의 실제 Node SDK 검증은 29 exports, import-dependent old resolver 제거/다른 새 resolver 적용, 정확한 empty sheet/maps/settings 및 idempotence를 확인했습니다.
  • full Bun: 6,591 통과 / 0 실패 / 89 snapshots / 함수·라인 100%. preload 회귀 9/0. bun lint는 0 errors / 기존 warnings 20개이며 Windows PID assertion은 수정·skip하지 않았고 재발하지 않았습니다.
  • process memory/ownership/supervisor 및 실제 owned root+child 종료 검증: 34 통과 / 0 실패 / 0 skip. 모든 local whole-job drain은 assigned=0/listed=0이며 종료 후 owned server/browser/compiler process가 남지 않았습니다.
  • 전체 packed release matrix: 5 targets × 2 CSS modes × 초기/편집 2회 × 3 browsers = 60 browser runs, 20 production artifact revisions 및 unsafe Vite negative build를 모두 통과했습니다. 59 commands / finding 0 / supervisor errors 0 / 합산 232.71초 / 최대 관측 private memory 474,628,096 bytes, 별도 outer whole-job 최대 1.354 GiB입니다. 성공한 private fixture root도 제거되었습니다.
  • unsafe 입력의 실제 출력: styles.mjs:1:61: css() cannot use window.name at build time: its values must be literals, theme tokens or constants, or be computed from them. 이 한 건만 정상 compiler exit1로 승인하며 모든 다른 command는 exit0입니다.
  • Chromium 156.0.8078.4 / Firefox 157.0 / WebKit 27.2에서 초기 theme rgb(23, 57, 91), 편집 뒤 rgb(91, 57, 23), theme padding 11px, imported color rgb(19, 87, 155), imported padding 9px → 8px 및 prop 제거를 실제 HTTP-linked output으로 확인했습니다.
  • main 기준 benchmark baseline, WASM budget/source resolver/bindgen verifier, lockfile 및 보호된 Windows production PID test는 그대로이며 managed changepack 네 항목은 모두 Patch입니다. workflow는 기존 release-compat와 main의 webpack-extends-theme를 각각 완전한 job으로 보존합니다.

정상 hook을 한 번 실행하여 lint, native 5,578/0, Bun 6,591/0·함수/라인100을 통과했습니다. hook의 Windows Rust coverage는 **97.88%(20,817/21,267)**이며 Linux 100%로 주장하지 않습니다. 12 GiB hook guard의 최대 working set은 4.601 GiB이고 drain=0입니다.

Head는 53b34f676d92ded9bf677028267029cbf967213b, 부모는 991e9eab29a3437c675957feb443952be1324d87 및 main 802c063530841c2076635808012bed9bb15506e3이며 tested/staged/committed tree는 모두 4dc3297e30daa9d13842f0d92316e36b3362fc4a입니다. 정상 push 완료, working tree는 clean입니다. W62k source gate는 APPROVE/HIGH이며 PR/release/CI 승인과 구분합니다.

최종 Linux CI

정확한 head 53b34f676d92ded9bf677028267029cbf967213b의 run 39290651671은 SUCCESS입니다. publish, release-compat, wasm-size, benchmark, webpack-extends-theme, landing-next-e2e, react-18, vinext-rsc-css-e2e 여덟 검증 job 모두 SUCCESS이며 PR에서 release/deploy-pages는 의도대로 SKIPPED입니다.

  • 실제 Linux tarpaulin 100.00%(14,825/14,825), full Bun 6,591/0·함수/라인100, preload 9/0을 raw publish log에서 확인했습니다. changepack, clean checkout, landing 양 mode, Codecov를 포함한 publish 전체가 통과했습니다.
  • Linux packed matrix도 59 commands / 60 browser runs / finding 0 / supervisor errors 0이며 located unsafe Vite exit1 한 건만 승인합니다. 합산 157.95초, 최대 private memory 1,087,209,472 bytes입니다. 별도 guarded package build는 exit0 / 169.58초 / 2,031,538,176 bytes입니다.
  • 실제 tested synthetic commit 9071def6e88885dc7e62d03178c6c0059d3cf5f2의 부모는 main 802c0635와 이 head입니다. API와 artifact의 tree를 확인했으며 tested/staged/committed tree 4dc3297e와 동일합니다. WASM comparison base는 이 synthetic commit의 첫 부모이며 base/candidate의 도구 binary hash와 bindgen ABI 0.2.129도 동일합니다.
  • 유지한 WASM budget 네 항목 전부 통과: WASM raw 5,878,534 ≤ 5,937,152, gzip 2,135,088 ≤ 2,156,544, glue raw 43,087 ≤ 44,032, gzip 7,325 ≤ 8,192 bytes입니다. 기존 1%/1KiB-rounding 규칙을 바꾸지 않았습니다.
  • benchmark는 동일 run의 실제 3 samples로 통과했으며 baseline/tolerance/calibration/CSS 기준을 바꾸지 않았습니다. devup-ui 14.933s / 71,048,420 bytes / CSS494, devup-ui-single 14.639s / 71,030,855 bytes / CSS395, vinext-devup-ui 3.227s / 1,248,050 bytes / CSS14,873입니다.

이전 f01f04cb의 실패나 W62j의 source-only 승인으로 현재 green을 대신 주장하지 않습니다. 현재 PR은 OPEN/DRAFT/CLEAN이고 작업자는 draft 상태를 전환하지 않았으며 ready 전환과 검토·병합은 사용자에게 남깁니다.

owjs3901 and others added 5 commits October 8, 2026 00:55
Refs #683

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

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

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

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

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

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

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

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

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

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

codecov Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ
...ndings/devup-ui-wasm/src/atom_hoist_measurement.rs 100.00% <ø> (ø)
bindings/devup-ui-wasm/src/atom_tests.rs 100.00% <ø> (ø)
bindings/devup-ui-wasm/src/lib.rs 100.00% <100.00%> (ø)
bindings/devup-ui-wasm/src/state.rs 100.00% <100.00%> (ø)
bindings/devup-ui-wasm/src/state/tests.rs 100.00% <100.00%> (ø)
bun.setup.ts 100.00% <100.00%> (ø)
libs/css/src/atom_hoist.rs 100.00% <ø> (ø)
libs/css/src/class_map.rs 100.00% <ø> (ø)
libs/css/src/debug.rs 100.00% <ø> (ø)
libs/css/src/file_map.rs 100.00% <ø> (ø)
... and 13 more

... and 2 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

owjs3901 and others added 3 commits October 8, 2026 03:01
Refs #683

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

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

Refs #683

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

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

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 20, 2026 02:13
@owjs3901
owjs3901 merged commit 280e75b into main Oct 20, 2026
11 checks passed
@owjs3901
owjs3901 deleted the test/release-compat branch October 20, 2026 02:13
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