Skip to content

Release plumbing for 4.0.0-alpha.0 - #872

Merged
titouanmathis merged 2 commits into
mainfrom
feat/v4-alpha-release
Aug 26, 2026
Merged

Release plumbing for 4.0.0-alpha.0#872
titouanmathis merged 2 commits into
mainfrom
feat/v4-alpha-release

Conversation

@titouanmathis

Copy link
Copy Markdown
Contributor

What

The release plumbing for 4.0.0-alpha.0, so tagging is the only step left.

Follows #871, which gave v4 the @studiometa/js-toolkit name.

Changes

publish.yml

  • The test step ran v3's Node suite with coverage. That directory now holds v4, whose specs run in a real browser, so the job installs Chromium and runs npm test. Coverage goes with it: this suite writes no clover report, and the pull-request job is where coverage is measured.
  • Adds npm run check:package before publishing. It packs the package and runs the tarball through a Node, a browser and a TypeScript consumer with the workspace aliases removed, so what passes is what a consumer installs. Nothing gated the tarball before.
  • No version gate, and a comment saying why. A tag publishes the packages on the branch it points at, and the workflow runs from the ref of the tag. A 4.x tag here publishes v4; a 3.x tag on 3.x publishes v3 from that branch's copy of this file.

Versions

@studiometa/eslint-plugin-js-toolkit moves to 4.0.0-alpha.0 with the framework. Its rule set already targets v4 (configs.v4), and both packages publish from this branch to the same next dist-tag.

Changelog

A 4.0.0-alpha.0 section. The Unreleased entries belonging to the 3.x line stay on the 3.x branch, which carries the same file. What is left here describes v4 and points at the migration guide — a rewrite has no meaningful line-by-line diff against 3.9.0. Every API name in it was checked against the sources.

What happens on the tag

Tag 4.0.0-alpha.0
Matches the existing *.*.* trigger
dist-tag next (the workflow's prerelease branch already maps alpha)
latest unchanged at 3.9.0
GitHub release marked as a prerelease

next currently points at 3.9.0-beta.2 and moves to 4.0.0-alpha.0, so @studiometa/js-toolkit@next becomes a breaking major. The release notes should say so.

Verification

npm run lint clean, npm run build clean. The publish workflow itself is only exercised by the tag, so the two steps it gained were run locally against this tree: npm test (113 files, 1569 tests) and npm run check:package (596 files, 306.6 kB packed, three consumers).

🤖 Generated with Claude Code

https://claude.ai/code/session_011izFBQT4AsFcD4tVZz1f7R

The publish workflow needed three changes for the release commit to prove
what it ships.

- It ran v3's Node suite with coverage. That directory now holds v4,
  whose specs run in a real browser, so the job installs Chromium and
  runs `npm test`. Coverage is dropped with it: this suite writes no
  clover report, and the pull-request job is where coverage is measured.
- It publishes `npm run check:package` before the tarball goes out. That
  script packs the package and runs the result through a Node, a browser
  and a TypeScript consumer with the workspace aliases removed, so what
  passes is what a consumer installs. Nothing gated the tarball before.
- It needs no version gate, and a comment now says why: a tag publishes
  the packages on the branch it points at, and the workflow runs from the
  ref of the tag. A `4.x` tag here publishes v4; a `3.x` tag on the `3.x`
  branch publishes v3 from that branch's copy of this file.

`@studiometa/eslint-plugin-js-toolkit` moves to 4.0.0-alpha.0 with the
framework. Its rule set already targets v4, and both packages publish from
this branch to the same `next` dist-tag.

The changelog gets a 4.0.0-alpha.0 section. The `Unreleased` entries that
belonged to the 3.x line stay on the `3.x` branch, which carries the same
file; what is left here describes v4 and points at the migration guide,
since a rewrite has no meaningful line-by-line diff against 3.9.0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011izFBQT4AsFcD4tVZz1f7R
@github-actions

Copy link
Copy Markdown

Export size

Bundled per export with peer dependencies left external, dynamic imports excluded and the output minified; sizes are gzipped.

✅ No export size changes.

Unchanged (196)

@studiometa/js-toolkit

Export Size (gzip) Diff
(barrel) 22.72 kB
BREAKPOINTS 774 B
Base 8.59 kB
DIAGNOSTICS 714 B
DRAG_MODES 162 B
EVENTS 153 B
MOUNT_ATTRIBUTE 69 B
SWAP_MODES 129 B
children 244 B
component 11.65 kB
createContext 468 B
createFallbackProvider 1.32 kB
createGroup 1.07 kB
createLocalStorage 2.32 kB
createMemoryStorageProvider 1.21 kB
createService 640 B
createServiceMixin 1015 B
createSessionStorage 2.32 kB
createStorage 2.3 kB
createUrlSearchParamsInHashProvider 1.21 kB
createUrlSearchParamsInHashStorage 2.34 kB
createUrlSearchParamsProvider 1.21 kB
createUrlSearchParamsStorage 2.34 kB
defaultScheduler 1.49 kB
defineManifest 979 B
domUpdate 1.23 kB
emitExtendable 1.08 kB
fromMetaGlob 203 B
fromWebpackContext 131 B
getBreakpoints 774 B
getInstance 128 B
getInstances 2.86 kB
getMountedInstances 2.87 kB
getUnmountedInstances 2.87 kB
inject 176 B
injectContext 672 B
injectContextSync 630 B
jsonSerializer 95 B
localStorageProvider 1.2 kB
memoryStorageProvider 1.21 kB
namespaceQualifier 120 B
nextFrame 115 B
on 8.93 kB
perTarget 322 B
provide 185 B
provideContext 700 B
provideRootContext 746 B
read 126 B
registerComponent 11.26 kB
registerComponents 11.27 kB
registerManifest 11.32 kB
reportDiagnostic 329 B
sessionStorageProvider 1.2 kB
setBreakpoints 803 B
signal 921 B
subscribeContext 1.43 kB
swap 2.89 kB
test 11.77 kB
toggle 177 B
until 172 B
urlSearchParamsInHashProvider 1.2 kB
urlSearchParamsProvider 1.2 kB
useBreakpoint 1.44 kB
useDrag 3.35 kB
useInView 1.42 kB
useKey 1.46 kB
useMediaQuery 1.05 kB
useMutation 1.4 kB
usePointer 1.85 kB
usePrefersReducedMotion 1.09 kB
useRaf 1.94 kB
useResize 1.42 kB
useScroll 2.67 kB
useScrollProgress 3.64 kB
useWindowScroll 2.65 kB
useWindowSize 1.43 kB
utils 9.25 kB
utils/DEFAULT_DAMP_FACTOR 109 B
utils/INERTIA_FRAME 97 B
utils/MAX_SPRING_RATIO 100 B
utils/SCROLL_ALIGNMENTS 117 B
utils/SCROLL_AXES 100 B
utils/TRANSFORM_PROPS 137 B
utils/TRANSITION_OPTIONS 132 B
utils/camelCase 449 B
utils/capitalize 119 B
utils/clamp 133 B
utils/clamp01 149 B
utils/clampDampFactor 157 B
utils/createEaseInOut 120 B
utils/createEaseOut 91 B
utils/createElement 638 B
utils/createRange 205 B
utils/damp 211 B
utils/debounce 121 B
utils/decayOver 162 B
utils/deepmerge 312 B
utils/easeInCirc 94 B
utils/easeInCubic 81 B
utils/easeInExpo 97 B
utils/easeInOutCirc 150 B
utils/easeInOutCubic 141 B
utils/easeInOutExpo 150 B
utils/easeInOutQuad 139 B
utils/easeInOutQuart 140 B
utils/easeInOutQuint 140 B
utils/easeInOutSine 156 B
utils/easeInQuad 80 B
utils/easeInQuart 81 B
utils/easeInQuint 81 B
utils/easeInSine 104 B
utils/easeLinear 77 B
utils/easeOutCirc 121 B
utils/easeOutCubic 111 B
utils/easeOutExpo 124 B
utils/easeOutQuad 110 B
utils/easeOutQuart 112 B
utils/easeOutQuint 111 B
utils/easeOutSine 132 B
utils/enterTransition 679 B
utils/fold 200 B
utils/getOffsetSizes 268 B
utils/historyPush 391 B
utils/historyReplace 392 B
utils/inertiaDecay 199 B
utils/inertiaFinalValue 187 B
utils/inertiaStep 232 B
utils/inertiaTimeConstant 178 B
utils/isBoolean 90 B
utils/isDefined 87 B
utils/isFunction 86 B
utils/isNull 78 B
utils/isNumber 103 B
utils/isObject 115 B
utils/isString 89 B
utils/kebabCase 421 B
utils/leaveTransition 679 B
utils/lerp 120 B
utils/loadImage 245 B
utils/loadLink 772 B
utils/loadScript 692 B
utils/lockScroll 561 B
utils/lowerCase 84 B
utils/map 128 B
utils/matrix 150 B
utils/mean 147 B
utils/memo 217 B
utils/noop 62 B
utils/noopValue 76 B
utils/objectToURLSearchParams 266 B
utils/pascalCase 434 B
utils/random 93 B
utils/randomInt 132 B
utils/randomItem 163 B
utils/round 130 B
utils/saveActiveElement 568 B
utils/scrollPosition 857 B
utils/scrollTo 1.86 kB
utils/selectorFor 2.77 kB
utils/setClassesOrStyles 218 B
utils/smoothTo 2.82 kB
utils/snakeCase 421 B
utils/spring 343 B
utils/throttle 151 B
utils/transform 286 B
utils/transition 577 B
utils/trapFocus 711 B
utils/untrapFocus 583 B
utils/upperCase 84 B
utils/wait 103 B
utils/withLeadingCharacters 142 B
utils/withLeadingSlash 152 B
utils/withTrailingCharacters 143 B
utils/withTrailingSlash 153 B
utils/withoutLeadingCharacters 127 B
utils/withoutLeadingCharactersRecursive 144 B
utils/withoutLeadingSlash 138 B
utils/withoutTrailingCharacters 129 B
utils/withoutTrailingCharactersRecursive 147 B
utils/withoutTrailingSlash 140 B
utils/wrap 154 B
viewTransition 1.66 kB
warn 321 B
watchAttributeNamespace 2.54 kB
watchAttributes 2.02 kB
whenDOMSettled 2.34 kB
withDrag 4.02 kB
withInView 2.11 kB
withKey 2.14 kB
withMutation 2.09 kB
withPointer 2.52 kB
withRaf 2.62 kB
withResize 2.1 kB
withScroll 3.33 kB
withScrollProgress 4.33 kB
write 124 B

@github-actions

github-actions Bot commented Aug 26, 2026

Copy link
Copy Markdown

Code Review

Risk: Low — The release workflow now validates and publishes the v4 packages on Ubuntu, with no blocking defects identified.

Updates the publish job to install Chromium, run the browser-based toolkit tests, validate the packed package, and retain coverage for the ESLint plugin. It also versions the ESLint plugin for the v4 alpha release and replaces the unreleased changelog content with the 4.0.0-alpha.0 release notes.


Review usage: 19,448 in (11,966 cached) / 593 out tokens — $0.0071 (openrouter/openai/gpt-5.6-luna, thinking: low)

Reviewed by @weareikko/code-review v0.9.5 for commit 0cccdde.

Previous review runs

Previous run archived 2026-08-26T19:49:31Z

Code Review

Risk: High — blocking issues remain — resolve them before merge.

Updates the publish workflow to run the v4 browser suite, validate the packed package, and publish both packages as 4.0.0-alpha.0 under the next dist-tag. It also replaces the prior unreleased changelog entries with the v4 alpha release notes.

1 issue found:

  • issue (blocking).github/workflows/publish.yml:55 — Playwright dependency installation fails on macOS runners

Review usage: 63,294 in (40,897 cached) / 989 out tokens — $0.0190 (openrouter/openai/gpt-5.6-luna, thinking: low)

Reviewed by @weareikko/code-review v0.9.5 for commit b467e98.

Comment thread .github/workflows/publish.yml
@codecov

codecov Bot commented Aug 26, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.55%. Comparing base (2c32178) to head (0cccdde).

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #872   +/-   ##
=======================================
  Coverage   94.55%   94.55%           
=======================================
  Files          38       38           
  Lines        1176     1176           
  Branches      498      498           
=======================================
  Hits         1112     1112           
  Misses         57       57           
  Partials        7        7           
Flag Coverage Δ
eslint-plugin-js-toolkit 94.55% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 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.

`playwright install --with-deps` installs system dependencies through
`apt`, so it only does its job on Ubuntu — and the release job, which now
runs the browser suite, was on `macos-latest`.

Ubuntu also makes the release run the suite in the same environment
`tests.yml` verifies every pull request in, which is what a release job
should be doing.

Reported by @weareikko/code-review on #872.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011izFBQT4AsFcD4tVZz1f7R
@github-actions

github-actions Bot commented Aug 26, 2026

Copy link
Copy Markdown

mount benchmarks

Base and head measured on this runner, alternating over 3 rounds each; every value is the median of the round medians. Running both sides on one machine is what removes cross-machine noise — a cached baseline from another runner would put it back.

A move under 25%, or on a benchmark under 5 ms, is not reported as a change: it is inside the measured noise of a shared runner.

No benchmark moved beyond the noise floor.

Within noise (18)
Group Benchmark Base Head us / component Change
mount 1000 components, one insertion control — declared but unregistered 1.90 ms 2.40 ms 2.40 +26.3%
mount 1000 components, one insertion flat 17.1 ms 16.4 ms 16.40 -4.1%
mount 1000 components, one insertion in-view — one controller per element 28.8 ms 28.5 ms 28.50 -1.0%
mount 1000 components, one insertion nested 4 deep 14.1 ms 14.5 ms 14.50 +2.8%
mount 1000 components, one insertion realistic — 5 refs, 3 options, 4 handlers 70.9 ms 71.0 ms 71.00 +0.1%
mount 1000 components, one insertion responsive option — breakpoint cascade per mount 16.4 ms 16.4 ms 16.40 0.0%
mount 1000 flat components, 1 vs 10 insertions 1 insertion 11.9 ms 11.7 ms 11.70 -1.7%
mount 1000 flat components, 1 vs 10 insertions 10 insertions 12.4 ms 12.5 ms 12.50 +0.8%
mount 5000 components, one insertion control — declared but unregistered 17.7 ms 17.8 ms 3.56 +0.6%
mount 5000 components, one insertion flat 66.9 ms 69.2 ms 13.84 +3.4%
mount 5000 components, one insertion in-view — one controller per element 155.0 ms 153.0 ms 30.60 -1.3%
mount 5000 components, one insertion nested 4 deep 66.6 ms 66.2 ms 13.24 -0.6%
mount 5000 components, one insertion realistic — 5 refs, 3 options, 4 handlers 328.7 ms 332.1 ms 66.42 +1.0%
mount 5000 components, one insertion responsive option — breakpoint cascade per mount 82.7 ms 87.3 ms 17.46 +5.6%
mount 5000 flat components, 1 vs 10 insertions 1 insertion 66.4 ms 65.2 ms 13.04 -1.8%
mount 5000 flat components, 1 vs 10 insertions 10 insertions 69.5 ms 67.6 ms 13.52 -2.7%
unmount 1000 flat components, one removal flat 2.40 ms 2.60 ms 2.60 +8.3%
unmount 5000 flat components, one removal flat 13.3 ms 14.2 ms 2.84 +6.8%

@titouanmathis
titouanmathis merged commit a0bd0d8 into main Aug 26, 2026
10 checks passed
@titouanmathis
titouanmathis deleted the feat/v4-alpha-release branch August 26, 2026 19:51
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