chore(promotion): promote next to 1.1.0 - #3029
Merged
Merged
Conversation
Co-authored-by: mathis <37186532+maaaathis@users.noreply.github.com> Co-authored-by: maaaathis <maaaathis@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: Lisa Stockmann <84317589+Lisa18289@users.noreply.github.com> Co-authored-by: Lisa18289 <Lisa18289@users.noreply.github.com>
Three conflicts, plus two cross-side interactions the merge creates. `loadProperties.ts` — `next` moved the properties table onto the generated component index (#2897); `main` taught it to hide `@deprecatedValues` and to tell that tag apart from a prop-level `@deprecated` (#2960, #2961). Kept `next`'s data source and ported `main`'s value hiding onto the new prop shape (key-based name, `type` as a string, optional `description`). Top-level `undefined`/`null` are not filtered here any more — the index generator already strips them, so the docs side only removes deprecated values. `buildComponentIndex.ts` — `main`'s new `@deprecatedValues` tag contains the substring `next`'s generator matched to set `deprecated: true`, so `Button`'s `color` came out of the merge flagged deprecated as a whole. Uses `main`'s `/@deprecated(?!\w)/` now; regression test added. `RemoteRatingSegmentElement.ts` — `main` put react-aria's `render` on the generator's global ignore list (#2966) after `next` had generated `RatingSegment` (#2863). Regenerated, which drops the `render` property that would have broken the whole mutation batch in remote. ADR 0004 §3 — took `main`'s passage: it already carries both the `publish-next.yml` → `publish.yml` rename (#2968) and the version-consistency guard paragraph (#2958). `pnpm-lock.yaml` — kept `next`'s. It is a strict superset of `main`'s (zero entries only on `main`; `next` already had the Dependabot bumps), and `pnpm install` reports it up to date against every merged manifest. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
# Conflicts: # apps/docs/package.json
Review found that dropping the gate's lower bound turned an era-specific transform into a corrupter of correct code, and I reproduced all of it. `imports-to-package-root` (since alpha.28) collapsed 94 subpath exports onto the package root, and it did that with a catch-all `else`. With no lower bound it reaches every 1.x project, where five of today's nine subpaths were collateral: `all-layered.css` became a JS import with the stylesheet silently gone, and `Rule` from `mittwald-password-tools-js` moved onto a root that does not export it. A default import became a named specifier along the way. It also cancelled another migration. Sorted by `since` it runs first, so it flattened `…/password-tools` before `password-tools-subpath-renamed` — the entry whose whole job is that path — could see it. Both then reported success while the file no longer compiled. Both have one cause, so one fix: an explicit leave-alone set. It holds every subpath the package still exports, plus `password-tools`, which another entry owns. Era code still migrates — verified both directions. Two independent tests pin it, one comparing the set against the real `exports` map so a new subpath cannot quietly become collateral again; both fail if a single entry is removed. Idempotency could never have caught this, and a comment in manifest.ts leaned on it as if it could. It proves a second pass over a transform's own output changes nothing — not that an era-specific transform is harmless against later code. Also from the review: - The dirty-tree guard treated every git exit 128 as "not a repository", so `detected dubious ownership` — the minimal CI container the guard exists for — read as a clean tree. It now matches the message, with `LC_ALL=C` pinning it. - `peerDependencies` were rewritten. A peer range states what a package supports, not what it installs; narrowing `^1.0.0` to `^1.0.14` is a breaking change to someone else's package made by a command they ran on their own. They are now reported and left, through one reporter `--dry` shares. - `engines.node` was `>=24.0.0` on a CLI consumers reach through `npx`. The only thing needing 24 was an import attribute for reading the version; that is a `readFileSync` now, and the floor is `>=22.0.0`. - `components-src` included the `MIGRATION.md` that `codemods:build` writes, with no edge between the projects, so its hash depended on task order. Excluded. - Ctrl+C at the codemod prompt rejected out of `runUpgrade` after the bump and install, showing an inquirer trace instead of what had happened. It now reports that and runs nothing. `@inquirer/prompts` also loads lazily, so `list` no longer pays for it. - `list --json` was a bare array that could not say which range it described — on the 1.x line `list` and `list minor` select the same entries. It now carries `range` and per-entry `catchUp`. This replaces a test that pinned the bare array; that test recorded the old shape, it did not defend it. - `kind`'s docblock still described the selection it once drove. It is descriptive now, and says so. Not fixed here, because it is not in the repo: `@mittwald/flow-codemods` does not exist on npm, and npm binds one Trusted Publisher per package. The first publish needs an npm-side bootstrap or `lerna publish from-package` aborts mid-release with the packages ahead of it already out. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…pgrade-cli-f87427
… read The `unit` job failed on the cancel case I added with the review fixes. It passed here and failed on the runner for one reason: `createChoose` read `process.env.CI` inside itself, underneath the parameters the caller passes. On a runner `CI` is set, so the prompt never ran, so it never rejected, so the cancel path the test asserts was unreachable. That is the second time a hidden environment read under an explicit parameter has produced a green local suite and a red CI one — picocolors self-disabling beneath the `color` argument was the first. So `isCI` is an input now, stated by `cli.ts` where reading the environment is the job, and TypeScript makes every call site name it. Two things fell out. The behaviour that read gave — a TTY on an unattended runner must not prompt — was untested, because no test could reach it; it has a case now. And the one existing test that wanted the prompt shown had to save, delete and restore `process.env.CI` around itself, with a comment explaining the workaround. That scaffolding is gone, and no test in this package touches `process.env` any more. Verified both ways: 251 tests with `CI=true` and with `CI` unset. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…pgrade-cli-f87427
Contributor
Coverage Report for ./packages/components/
File Coverage
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mfal
marked this pull request as ready for review
August 31, 2026 10:35
Contributor
🚀 Preview DeploymentPreview environments are ready:
Images:
|
mfal
enabled auto-merge (squash)
August 31, 2026 11:08
mfal
disabled auto-merge
August 31, 2026 11:17
mfal
enabled auto-merge (squash)
August 31, 2026 11:17
# Conflicts: # packages/components/MIGRATION.md
`guide.test.ts` pins the guide's newest anchor by id. The merge added a newer entry (`use-design-tokens-build-metadata-removed`, `since: 1.0.16`), so the expectation moves with it. `eslint.config.js` arrives from `main` carrying the `no-restricted-imports` ban on `@mittwald/flow-design-tokens/json/*` under `src/` — and `next` has a call site `main` never saw. `collectTokensInPath` reads only `path` and `value`, so `json-runtime/all-light.json` is a straight swap. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
chore(sync): resolve forward-merge conflict (main into next)
The promotion direction inverts `**/CHANGELOG.md merge=ours` (ADR 0004 §3), which is written for main → next. next's changelogs carry the prerelease line; promoting them would overwrite the stable history publish.yml extracts GitHub release bodies from. The graduation commit prepends the 1.1.0 entry. Its own commit because the merge above is a no-op in the healthy steady state — next already carries main — so there is no merge commit to absorb it (see #3030).
Captured from the Rating stories on this branch: maxValue={10}, fill="single"
and RatingSegment children, composed into one figure at 2x.
Committed rather than uploaded as a GitHub attachment: user-attachments has no
API, so that path cannot be automated. The release notes reference it by this
commit's SHA, which resolves during review and keeps resolving after the branch
is deleted — see #3030.
ins0
approved these changes
Aug 31, 2026
mfal
added a commit
that referenced
this pull request
Aug 31, 2026
The 1.1.0 promotion (#3029) brought feature work from `next` written against the old, numbered docs paths. Two prose conflicts (Rating's scale guideline, Align's codemod pointer) keep main's wording with this branch's paths, and the two new Rating examples land in the renamed directory. It also brought seven references to paths this branch removed, in files that did not exist when the rename ran: - `packages/codemods/project.json` pointed an nx input at `01-get-started/versioning/index.mdx`. A glob matching nothing contributes nothing to the task hash, so `test:unit` would have served stale cache when that page changed — silently. - `documented.test.ts` and `mdxToMarkdown.test.ts` read or assert old paths. - `USAGE.md` lists `/raw/**` paths for consumers. - The CodeBlock migration entry links the old path, and while it was being touched, the legacy `/overview` tab redirect with it. `MIGRATION.md` is an output of `nx build codemods`, so the fix went into `entry.md` and the artifacts were regenerated. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release 1.1.0
next→main1.0.16→1.1.0featcommits, no breaking changes)This PR graduates the line to the stable
1.1.0(version + changelog alreadybumped on the branch). Merging publishes all
@mittwald/flow-*packages to npmunder
latest, tags1.1.0, and creates the GitHub release from the curatednotes below.
The branch is
next(which carriesmainthrough1.0.16) plus three commits:the stable changelogs taken from
main, the figure below, and the graduation.It touches no source file of its own.
Upgrade across Flow versions with one command
Highlights
npx @mittwald/flow-codemods@latest upgradebumps every Flow dependency,installs, and runs the codemods for the range it crossed.
@mittwald/flow-codemodspackage carries the migration catalogue thatMIGRATION.mdis generated from — 23 entries, each carrying a codemod wherethe change can be applied mechanically.
flow-codemods list <revision>shows what a target version would touch beforeyou commit to it.
Ratingtakes a segment count (maxValue), single-segment filling(
fill="single"), and individualRatingSegmentchildren with their ownicons and labels.
@mittwald/flow-react-componentsnow shipsUSAGE.mdand a JSON componentindex, so a coding agent can answer component questions without the docs site.
The upgrade CLI
Upgrading Flow used to mean reading
MIGRATION.md, deciding which entriesapplied to your jump, and running codemods one at a time. The new
@mittwald/flow-codemodspackage does that for you.upgradedetects your package manager, refuses to run on a dirty working tree(
--allow-dirtyoverrides), and reports every file it declined.--drywritesnothing,
--printshows the transformed output, and--jsonmakeslistmachine-readable.
The catalogue is the single source for both the CLI and
MIGRATION.md: an entrydescribes what changed and how to migrate, and carries a codemod when the change
can be decided mechanically. Entries without one still tell you what to do by
hand — for those, the prose is the migration.
Rating: segment count, single fill, individual segments
RatinggainedmaxValue(default5) for the number of segments, andfill="single"to fill only the selected segment instead of every segment up toit.
For a scale whose segments are not interchangeable, pass
RatingSegmentchildren — they define how many segments there are (
maxValueno longerapplies) and each one takes its own icons and accessible label.
Both the component and
RatingSegmentwork in mStudio extensions.Documentation a coding agent can read
@mittwald/flow-react-componentsnow ships its own consumer guide, and the docssite is published in machine-readable form.
USAGE.md, shipped inside the package: how to build an application withFlow — component selection, layout and spacing, what is safe to depend on, and
the mistakes that come up most. Available offline, which is what makes it
usable from an agent's tool loop.
@mittwald/flow-react-components/component-index— a JSON index of everypublic component with its lifecycle status and props.
/llms.txt,/llms.json,/llms-full.txt, and every page as Markdown at/raw/<path>.md.Point your agent at
USAGE.mdand the component index; it stops guessingcomponent names and props.
Raw commits (148 total, 94 non-merge) — reference only, not published
feat (18)
fix (24)
refactor (5)
revert (1)
test (2)
docs (27)
chore (17)