Skip to content

ci: fail the benchmark job on a Devup UI regression and keep a WASM size budget - #746

Merged
owjs3901 merged 17 commits into
mainfrom
ci/benchmark-regressions
Oct 19, 2026
Merged

owjs3901 merged 17 commits into
mainfrom
ci/benchmark-regressions

Conversation

@owjs3901

@owjs3901 owjs3901 commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

Refs #683 (NXT-21, INF-16, NXT-22, INF-26, INF-17)

main 기반 CI 전용 PR입니다. #744의 최신 도구 설정과 기존 두 부모 병합 이력을 유지하며, #788/#768이 병합된 main 347baaf9를 실제 두 부모 merge로 통합했습니다. 관리 패키지 배포 코드를 바꾸지 않아 승인된 대로 changepack은 추가하지 않습니다.

요약

  • 기존 benchmark 회귀 게이트를 유지하고 절대 WASM 상한을 같은 작업에서 빌드한 기준 대비 상대 비교로 교체합니다.
  • PR 기준은 오래된 event base가 아니라 실제 테스트 synthetic merge(github.sha)의 첫 번째 부모입니다. 후보는 그 synthetic merge이며 main push는 기존 event.before/event.after를 유지합니다.
  • 두 SHA를 빌드 전에 step summary에 기록합니다. 첫 부모나 실제 commit 객체가 없으면 표시된 실패로 끝내며 event base로 대체하지 않습니다.

동작

benchmark는 같은 샘플 수3회의 순환 cold build, 같은 실행 Tailwind 대비 시간 비율, 기존 허용치 max(10%, 2 × 보정 비율의 상대 범위), 총 출력 기준×1.01 및 CSS 기준+max(5%,32바이트)를 그대로 사용합니다. 필수 행 누락/샘플 정책 불일치도 실패하며 다른 라이브러리 행과 SemanticBuilder 벤치는 정보용입니다. 승인된 세 total-output bytes 외 시간/보정/허용치/CSS/README 표를 변경하지 않았습니다.

독립 읽기 전용 wasm-size 작업은 ubuntu-latest/최신 action major/Rust stable/최신 Bun,Node,wasm-pack,wasm-opt를 공유하여 두 정확한 소스를 별도 target/pkg에서 연속 빌드합니다. 각 committed Cargo.lock의 wasm-bindgen ABI와 맞는 CLI만 소스별 빌드 의존성으로 해석하고 같은 ABI는 같은 바이너리를 사용합니다. 누락/오래된 lockfile은 cargo metadata --locked에서 실패합니다.

네 지표(WASM/glue 각각 raw/gzip)의 허용치는 ceil(baseBytes * 1.01 / 1024) * 1024입니다. 같은 Node gzip(level9) 구현으로 실제 바이트를 측정하고 commit/tree, 도구/파일 SHA-256, 크기/한도/차이를 JSON artifact와 summary에 보존합니다. 기준 빌드 실패를 건너뛰거나 이전 산출물/다른 lockfile로 대체하지 않습니다.

새로 생기는 오류

제품 빌드 오류나 스타일링 런타임은 추가하지 않습니다. 기존 benchmark 회귀, 네 WASM/glue 지표의 허용치 초과, 잘못된 commit/첫 부모/lockfile/파일/출처 정보 또는 기준/후보 빌드 실패는 CI 오류입니다. 첫 부모 누락 시 source-resolution FAIL summary/비정상 종료가 발생하며 SHA 환경 변수는 내보내지 않습니다.

남는 한계

기존 시간 허용치 및 WASM1%/1KiB 올림 여유 이내 증가는 통과합니다. 러너 간 절대 시간 비교와 정보용 행에 별도 판정을 추가하지 않았습니다. 의도적인 허용치 변경은 정책 diff와 실제 artifact를 함께 리뷰해야 합니다.

시연 #748은 실제256KiB 비활성 WASM custom section과 기존3초 지연으로 39135955917에서 상대 크기/benchmark 게이트 실패를 입증했고 관리자가 닫았습니다. 크기 측정값을 조작하거나 시연을 제품에 병합하지 않았습니다.

검증

  • 최종 정상 push head a600650e6bd91b9497b8dbc61fc80936a7870b23의 matching CI39205735701 SUCCESS입니다. benchmark/publish/wasm-size/landing-next-e2e/react-18/vinext-rsc-css-e2e 모두 성공했고 PR의 release/deploy는 의도대로 skip입니다. 실제 merge62427277(부모2db57ddb+main347baaf9) 이력을 유지합니다.
  • 실제 Linux Rust 14,003/14,003=100.00%, Bun 6,573/0 및 함수/라인100%, Bun preload race9/0입니다. 이전 main의 changepack 오류는 병합된 #788로 해결되었습니다.
  • shared Rust stable1.99.1/기본 스택/jobs2의 fmt/엄격 workspace all-target Clippy/native5,210/0, 명시적 binding WASM/root build, Bun6,573/0/함수·라인100%, lint0오류/기존20경고, 정상 exact-tree12GB hook 통과입니다. hook peak5.036GB/drain0, Windows Rust97.96%(19,667/20,077)는 Linux100% 대체 증거가 아닙니다.
  • first-parent/push/부모 누락/잘못된 객체/실제 Node CLI/Git 환경 격리46개 통과입니다. fixture는 Git 자체의 repo-local 변수 목록을 제거하여 상속 GIT_DIR/object-store가 다른 저장소를 변경하지 못하게 합니다. shared core.bare=false 유지, 전역 환경/cwd 변경 없음입니다.
  • 실제 최신 main merge347baaf9의 첫 부모cace4fca를 오래된 eventf014 대신 선택하는 Node26 CLI, 지정 push endpoints 유지, 실제 root commit의 FAIL summary/exit1을 재검증했습니다.

실제 WASM 비교

최종 테스트 checkout은 bad3c71b2e8df9ed40d811ced72f2282a5d0f26a이고 부모는 main347baaf9 + heada600650e입니다. 기준이 실제 첫 부모임을 artifact와 GitHub commit/tree API로 대조했습니다. 이 실행에서는 synthetic tree와 head tree가 같음을 확인했지만 이를 다른 실행에 일반화하지 않습니다. 사용자 결정대로 WASM size budget과 first-parent 비교는 그대로 유지했습니다.

지표 기준 실제 후보 허용치 차이
WASM raw 5,835,267 5,835,267 5,894,144 0
WASM gzip 2,115,769 2,115,769 2,137,088 0
glue raw 42,877 42,877 44,032 0
glue gzip 7,252 7,252 8,192 0

양쪽 WASM SHA256 d9ca1f4bf796281e2c33f1fd6decbdc6c8eead6763522faadc4817c755e4953c, glue 1047831e41251e5e670e799b57c88e55919f2b9dacde98a1651592f4f3cc6d1e로 각각 같습니다. Rust1.99.1/wasm-pack0.15.0/wasm-opt133/Bun1.4.3/Node26.12.0와 동일 ABI0.2.129의 동일 bindgen 바이너리를 기록했습니다.

승인된 최신 main 크기 갱신

이전 실행39198559499의 실제3샘플 artifact는 시간/CSS/다른 행이 모두 통과했지만 total-output만 devup-ui71,047,404, devup-ui-single71,033,778, vinext-devup-ui1,248,050으로 예전 기준을 초과했습니다. #768 의존성 업데이트가 병합된 독립 main 기반 #789의 성공 실행39194897926도 같은 행에서71,044,835/71,029,923/1,248,050을 측정했습니다. 관리자 승인으로 세 bytes 필드만 실제39198559499의71,047,404/71,033,778/1,248,050으로 갱신했습니다. 모든 시간/보정/허용치/CSS 필드가 완전히 보존됨을 구조 비교로 검증했으며 최종 새 실행39205735701에서도 모든 행이 통과했습니다. 도구 pin이나 허용치 완화는 없습니다.

…ize budget

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 3, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ
benchmark-gate.js 100.00% <100.00%> (ø)
benchmark-output.js 100.00% <100.00%> (ø)
libs/extractor/benches/semantic_pass_benchmark.rs 100.00% <100.00%> (ø)
...es/plugin-utils/src/__tests__/wasm-size-fixture.ts 100.00% <100.00%> (ø)
...n-utils/src/__tests__/wasm-size-sources-fixture.ts 100.00% <100.00%> (ø)
wasm-bindgen-version.js 100.00% <100.00%> (ø)
wasm-size-sources.js 100.00% <100.00%> (ø)
wasm-size.js 100.00% <100.00%> (ø)
🚀 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 2 commits October 3, 2026 23:02
…e first CI run of the new policy

Refs #683

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Merge #744 head 7a81003 containing main a935315. No new manual conflict files: .github/workflows/publish.yml cleanly inherits the hardened vinext/React18 job union and read-only validation with action SHA pins/timeouts. Preserve the calibrated benchmark manifest/baseline/results, regression rules, SemanticBuilder bench and WASM budgets byte-for-byte, plus all main published versions and acceptance steps.

Refs #683

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901 and others added 8 commits October 8, 2026 18:43
No conflicted files; retain PR changes and merge updated parent #744, which contains main 11790be.
Main 11790be intentionally emits complete Tailwind v4 font line-height declarations and property registrations, so CI 37758611477 produced 1491 CSS bytes for tailwind-turbo-devup-ui against the former 530-byte baseline. Follow the existing intentional-growth policy using that actual 18-target, three-sample artifact: append each measured seventh control ratio while retaining all six prior entries, regenerate baseline/results and both README benchmark blocks. Keep every gate, threshold formula, workflow step and WASM size budget unchanged; all nine artifact comparisons, provenance/calibration assertions, README renderer check and fresh WASM/root builds pass.

Refs #683

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

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

2026-10-15: main #743의 정렬된 쓰기로 보존된 450바이트 컴파일러 캐시는 브라우저 출력이 아니므로 측정에서 제외하고, 이전 #746의 동일한 실제 CSS 494바이트로 전용 writer를 실행해 기준만 보정했습니다. 기존 32바이트 여유(한도 526), 빌드 크기와 시간 규칙, 모든 보정 이력을 유지했습니다.

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

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

2026-10-15: main의 #743 결정론적 ABI·상태 초기화, #716 Emotion 처리와 #734/#739 Tailwind 확장 및 #744에 통합된 styled 캡처·렌더링 수정으로 발생한 WASM 증가를 Linux run 38655364885 측정으로 기존 writer를 실행해 반영했습니다. #744와 #746 바이너리는 동일하며 #746 자체의 제품 코드 증가는 0입니다. glue gzip은 기존 7168바이트 예산에서 이미 통과하므로 원래 glue 예산을 그대로 보존했고 WASM 두 필드만 변경했습니다.

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

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

2026-10-15: 이전 #746 fac1d7d4의 새 WASM/root 빌드로 측정한 실제 제공 CSS는 devup-ui-single 395바이트(기존 790에는 캐시 사본 포함), vinext-devup-ui 14873바이트(기존 29746에는 서버 사본 포함)입니다. 같은 이름 제한 writer로 이 두 행의 CSS 기준만 보정해 기존 공식의 한도 427/15616을 적용했고, 다른 모든 필드·시간 샘플·전체 빌드 크기 및 7회 보정 이력을 바이트 단위로 보존했습니다.

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

main의 #759, #749, #714, #717 통합 증가량을 동일 조건 로컬 비교와 Linux 실측으로 확인했으며 #744와 #746 바이너리는 동일합니다.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
owjs3901 and others added 3 commits October 18, 2026 20:50
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>
owjs3901 and others added 3 commits October 19, 2026 05:11
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>
@owjs3901
owjs3901 merged commit 802c063 into main Oct 19, 2026
9 checks passed
@owjs3901
owjs3901 deleted the ci/benchmark-regressions branch October 19, 2026 07:22
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