Skip to content

chore: release v3.0.0 - #152

Open
edloidas wants to merge 7 commits into
masterfrom
claude/v3-release-prep-ifsqmr
Open

chore: release v3.0.0#152
edloidas wants to merge 7 commits into
masterfrom
claude/v3-release-prep-ifsqmr

Conversation

@edloidas

@edloidas edloidas commented Jul 30, 2026

Copy link
Copy Markdown
Owner

Cuts v3.0.0 stable from 3.0.0-beta.0. Three commits: the release notes and docs, a repo hygiene pass, then the dedicated release commit to tag.

Changelog: the [Unreleased] section was missing the build and packaging track that landed after beta.0, so it now covers the per-file tsc emit, the generated src/version.ts, the dropped main/types fields, the unpkg/jsdelivr fields (#125), the packed-tarball and browser smoke gates plus workflow hardening (#126, #149), and the bench sampling-mode fix (#143). Renamed to [3.0.0] - 2026-07-30 with the link reference repointed at the tag.

Added MIGRATION.md, shipped in the tarball via files. v3 carries nine breaking changes across two prereleases, and a consumer upgrading from 2.x otherwise had to reconstruct the path from two prerelease sections. Every claim was checked against the built library, which surfaced two behaviours the prerelease sections do not state: v2's 4d10!>8f1 does not parse in v3 at all (v2's >N meant >=N, and a bare ! combined with a success count reads the threshold as the explode target), and v2 clamped pool totals with Math.max(result, 0) where v3 returns the real negative.

README: install instructions narrowed to pnpm and bun, npm/yarn fences dropped, npx roll-parser kept. @next stripped from the install, CDN, and CLI examples; both badges repointed off the prerelease dist-tag; status block rewritten for a stable release. Related projects removed, along with the competitor reference in applyPenetratingExplode's doc comment. Author URL corrected to edloidas.io.

Hygiene pass (#153): deleted the four superseded planning docs under .claude/docs/, harvesting three limitations they tracked that were documented nowhere else — division does not floor, ** has no overflow guard, and integer literals above Number.MAX_SAFE_INTEGER lose precision. All three verified against the build and added to the README, so they land inside the tag. Added expectRollError and converted 72 toThrow + try/catch + code-check blocks; the helper is excluded from both tsconfig.build.json and files, and the tarball still packs 150 files. Synced .claude/rules/testing.md with the error-code contract gate and the in-process CLI policy.

Note on merging and tagging: release.yml's precheck job gates publishing on the tag commit being on origin/master, so the tag needs to go on master's tip after this merges. Do not squash — the release commit is deliberately dedicated to the version bump, and squashing folds the docs and hygiene changes into it.

Closes #153

Claude Code session

Documented the build and packaging track that landed after beta.0: the
per-file `tsc` emit, generated `src/version.ts`, dropped `main`/`types`,
`unpkg`/`jsdelivr` fields, the packed-tarball and browser smoke gates,
action pinning, and the bench sampling-mode fix
Added `MIGRATION.md` covering the packaging change, the entry-point
mapping, the result-shape moves, throwing instead of returning `null`,
the two notation forms that do not carry over, and unclamped pool totals
Shipped `MIGRATION.md` in the published tarball via `files`
Narrowed the install instructions to `pnpm` and `bun`, dropping the
`npm` and `yarn` fences and keeping `npx roll-parser` for one-off use
Repointed the npm and Node badges off the prerelease dist-tag and
rewrote the status block for a stable release
Removed the `Related projects` section and the competitor reference in
`applyPenetratingExplode`'s doc comment
Corrected the author URL to `edloidas.io`

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@edloidas edloidas changed the title chore: release v3.0.0 #150 chore: release v3.0.0 Jul 30, 2026
Removed the four superseded planning docs in `.claude/docs/` — `PRD.md` still
described ESM+CJS output and a Bun-only runtime, and `GAPS.md` listed 13 fixed
findings as open
Documented three limitations harvested from `GAPS.md` before deleting it:
division does not floor, `**` has no overflow guard, and integer literals above
`Number.MAX_SAFE_INTEGER` lose precision
Added `expectRollError` in `src/test-helpers.ts`, excluded from the build and
the tarball, and converted 72 `toThrow` + `try`/`catch` + code-check blocks to
one-line calls
Synced `.claude/rules/testing.md` with the patterns the suite relies on: the
error-assertion helper, the error-code contract gate, and the in-process CLI
policy that keeps subprocess tests to the two files that need them

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@edloidas
edloidas force-pushed the claude/v3-release-prep-ifsqmr branch from 537dfe6 to 1d8ae7b Compare July 30, 2026 22:48
Fixed doc claims that did not match behavior, each verified against the build:
`failures` is present as `0` without a fail threshold rather than absent, the
success-count arithmetic example used `5d6>=5 * 2` which the parser rejects
(`{5d6>=5}+2` works), the `VERSION` example still showed `3.0.0-beta.0`, the
`getErrorSpan` snippet dereferenced a possibly-undefined span, and the changelog
named a lowercase `version` export
Replaced the exhaustive-switch promise on `RollParserErrorCode` with `default`-arm
guidance — codes may be added in a minor release, so exhaustiveness is not safe
Reworded the `Math.random` claim in README and CONTRIBUTING: no roll path calls
it, but default `SeededRNG` seeding does
Documented the multi-sub-roll group sort rejection in README known limitations,
and refreshed the bundle sizes that had drifted to 10.86 kB / 5.11 kB / 213 B
Added the CLI breaking change and the three missing `parse*` rows to
`MIGRATION.md`, and pinned both migration examples to `createMockRng` so their
stated totals are exact
Set `cancel-in-progress: false` on the release workflow — a second tag could
cancel a run between `npm publish` and the GitHub Release step
Made `release:dry` reuse `validate`, so publishing gates on coverage and
`check:size` instead of a bare `bun test`
Overrode `brace-expansion` to 5.0.8, clearing the GHSA-mh99-v99m-4gvg advisory
that reached the tree through TypeDoc, and added the npm ecosystem to Dependabot
Enabled `treatWarningsAsErrors` in TypeDoc with the two internal symbols
declared `intentionallyNotExported`
Guarded `prepare` so hook installation cannot fail packaging outside a git work
tree

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@edloidas
edloidas force-pushed the claude/v3-release-prep-ifsqmr branch from 1d8ae7b to 1b59304 Compare July 30, 2026 23:04
edloidas and others added 2 commits July 31, 2026 01:20
Removed `.claude/rules/typescript.md` and `.claude/rules/testing.md`, whose conventions a blind five-agent trial reproduced from the codebase alone.
Added six drop-in `biome.json` style rules — `noNestedTernary`, `noDefaultExport`, `useImportType`, `useConsistentArrayType`, `useConsistentTypeDefinitions`, and `noDoubleEquals` — replacing the prose they duplicated.
Added `.claude/rules/project-testing.md` holding only the three prohibitions code cannot teach, since code shows just the positive case.
Reduced `comments.md` to 46 lines and narrowed `// ?` to unsettled code, documenting the prefix colors that motivate the convention.
Reduced `rng.md` to 28 lines, delegating the MockRNG draw-order spec to the README section that already owns it.
Repointed five source comments and the `bunfig.toml` coverage note away from the deleted rule files.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…154

Demoted 63 `// ?` comments across 19 files to plain `//`, reindenting their continuation lines to keep the text column aligned.
Kept the 13 blocks that flag genuinely unsettled code: forged-AST test dodges, unreachable and defensive branches, the Bun argument-list ceiling, the accepted `keptIndices` model leak, and the self-fulfilling chmod assertion.
Aligned the codebase with the narrowed `// ?` definition in `.claude/rules/comments.md`, so the source no longer teaches the wider "rationale for unusual patterns" reading.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@edloidas
edloidas force-pushed the claude/v3-release-prep-ifsqmr branch from 1b59304 to 4bcd01e Compare July 30, 2026 23:20
edloidas and others added 2 commits July 31, 2026 01:29
Set `auto = "disable"` so a missing package fails the build instead of being
auto-installed at runtime
Dropped `minimumReleaseAgeExcludes` — the three-day gate now covers Biome,
TypeScript, and `@types/bun` too. All currently locked versions predate the
window, so a clean install is unaffected; future toolchain bumps wait three days
Raised `.bun-version` from 1.3.11 to 1.3.14, the current release and the version
local validation runs. Every workflow reads this file, so it stays the only
place the version lives
Rewrote the package description: the library runs on Node, Bun, and browsers,
and "Bun-optimized" undersold that

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Bumped `package.json` from `3.0.0-beta.0` to `3.0.0`
Regenerated `src/version.ts` via `generate:version`
Renamed the `[Unreleased]` changelog section to `[3.0.0] - 2026-07-30`
and repointed the link reference definition at the tag

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@edloidas
edloidas force-pushed the claude/v3-release-prep-ifsqmr branch from 4bcd01e to cb2da13 Compare July 30, 2026 23:30
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.

chore: repo hygiene pass before v3

2 participants