Conversation
|
Size Report
Startup median (7 runs, lower is better):
|
|
Reviewed at 20495c4. The fragment parser, the assembly order, and the The branch conflicts with main, which is the next blocker. When you rebase, please move the One design question: I did not find a smaller design for the script itself, since changesets or towncrier would add a dependency to replace about 200 lines of pure string transforms. Is the tag-pinned byte-identity test the one part that should not stay, since it only guards a one-time migration? If it stays, the Two smaller points. The failing Android Smoke Tests job (the alert result row did not appear after five scrolls) looks unrelated: the diff touches no |
…lease PRs no longer share one insertion point at the top of `## Unreleased`, which was the repo's most frequent merge-conflict file. A PR instead adds changelog.d/<slug>.md, and the npm version lifecycle script now folds every fragment present into a new `## <version>` section (deterministic kind, then fragment name, then position order) and deletes the consumed fragments. release:prepare runs the assembler in --check mode so a release cannot ship with unconsumed fragments.
Pins determinism, kind ordering, all four refusal cases, the no-fragments pass-through, and a scratch-directory run of both CLI modes. Registers the suite in the unit-core project and updates the release-script assertions in npm-package-scripts.test.ts for the new version/release:prepare strings.
A PR that only adds a changelog fragment should skip CI/size/device lanes the same way a root-doc-only PR does. Extends the existing pin test to assert changelog.d/2799-example.md is ignored by all six workflows too.
docs/agents/pull-requests.md and CONTRIBUTING.md now say a user-visible change adds a changelog.d/<slug>.md fragment and that PRs never edit CHANGELOG.md directly; the gesture-deprecation policy page updates its one reference to recording an entry under Unreleased.
…agment-name enumeration gap CHANGELOG.md still carried "## Unreleased" while the version script now refuses to assemble fragments into a changelog that has one, which would block the first release after a fragment lands. No bullet was added after the v0.21.13 tag, so the whole block becomes one historical section, and a repo-guard test now pins the absence of the heading. readFragments filtered to *.md while the repo-guard test and parseFragment did not, so a fragment named without a .md extension slipped past --check and the version script and stayed in changelog.d forever. readFragments now enumerates every non-README entry and parseFragment rejects a missing .md extension, so the same list drives assembly, --check and the test.
…ched-on-refusal CLI writes Adds pinning tests for the leading-indented-line and unknown-kind parseFragment branches, a CLI-level double-run refusal against an already-released version heading, and a check that a refusal leaves CHANGELOG.md and the pending fragment byte-identical on disk. Also covers a fragment missing the .md extension being rejected loudly by both --check and the default run, since readFragments and the CLI share one enumeration. Trims the module header comment down to the non-narrative essentials.
The rebase onto origin/main brought three CHANGELOG.md edits that landed after the v0.21.13 tag this branch's migration used as its base: two new bullets and a rewrite of an existing one. Replaying the Unreleased-heading rename over that history folded all three under the released heading, crediting changes to versions that never shipped them. Move each post-tag change into its own changelog.d fragment instead, and restore the rewritten bullet to its v0.21.13 wording under the released heading. Add a repository-guard test that reads the tag's own Unreleased block and asserts the migrated section is byte-identical to it, so a future stale-base migration fails the suite instead of merging clean.
…ag change readFragments ignores dotfiles, so a stray .DS_Store no longer aborts npm version; every other entry still has to be a valid fragment. The #2864 fragment restated the unsettled-surface fix that v0.21.13 already shipped. It now names only what changed after the tag: the unsettledGesture field renamed to postGestureOutcome, the no-effect kind, and disclosure on interactions. The vitest lane comment now says the migration guard runs one git show.
20495c4 to
9ec54d3
Compare
|
Addressed the review at 20495c4. New head: 9ec54d3. Rebase. Rebased onto
Byte-identity test. Its value stops when this PR merges. After that, the section is history, and the follow-up guard PR makes direct CHANGELOG.md edits fail. Until then, it is the check that catches rebase drift like #2865's and #2915's. My suggestion: keep it through merge, and delete it in the guard PR. The Android Smoke Tests. The failure ( Validation at 9ec54d3. |
|
The code at 9ec54d3 reads correctly: the conflict from the earlier pass is resolved, and the fragment assembly works at version time as written. I read the script, the package.json wiring, and the script-string pin test. I did not run the changelog-release tests or a scratch Since this review, #2922 has merged and removed CHANGELOG.md in favor of generated release notes. That takes the other design, and this PR now conflicts with main. Should this PR be closed, or is there a part of the fragment flow you want to keep on top of #2922? |
Summary
Closes #2877 (migration half; the guard workflow is the follow-up PR the issue orders second).
Adds a
changelog.d/<issue>-<slug>.mdfragment format so PRs stop editingCHANGELOG.mddirectly.scripts/changelog-release.tsexposes a pureparseFragment/assembleChangelogcore plus a thinCLI, wired into
package.json'sversion/release:preparelifecycle:npm versionfolds pendingfragments into a new version section (kind-rank order, independent of file order) and deletes the
consumed fragments. Dotfiles in
changelog.d/are ignored. Six CI workflows gainchangelog.d/**to
paths-ignore. Docs (docs/agents/pull-requests.md,CONTRIBUTING.md,changelog.d/README.md,website/docs/docs/migrating-gestures.md) now describe the fragment workflow. One-time migrationfolds
## Unreleasedinto## 0.15.1 – 0.21.13, rebased onto currentorigin/mainand re-derivedso the migrated section matches the tagged
Unreleasedblock byte-for-byte (enforced by a newself-test). Every bullet main added after v0.21.13 is a fragment (#2491, #2788, #2796, #2860, #2864,
#2915).
The CI guard refusing a direct
CHANGELOG.mdedit is intentionally not in this branch — asame-PR guard would fail this PR's own migration commit. It ships as the follow-up PR.
Touched files: 22.
Validation
Tested at
9ec54d3b5a731747b54d3856e295fd1010151023(rebased ontoorigin/mainefce352, the tipat push time).
pnpm check:affected --run: PASS, exit 0,check:affected: all runnable checks passed.changelog-release,npm-package-scripts,root-docs-paths-ignore: all pass (includesthe tag byte-identity guard and the new dotfile CLI test).
## Unreleasedblock is in the migrated section or in a fragment. The oneexception is fix(interaction): carry one post-gesture outcome on the tree and disclose it on every route #2864's rewrite of a released bullet: that fragment now states only the post-tag
change.
0.21.14gives one Changed bullet (fix(interaction): carry one post-gesture outcome on the tree and disclose it on every route #2864) and fiveFixed bullets.
Remaining risk: until the Guard PR merges, nothing yet blocks a direct
CHANGELOG.mdedit, so everymain CHANGELOG edit before merge needs one more rebase into a fragment. The byte-identity test
catches a missed one.