* docs: lint prose with Vale Add Vale with an in-repo style, .vale/styles/pnpm, that turns the writing rules in AGENTS.md and the Google developer documentation style guide into lint rules. The stock Vale packages (Google, Microsoft, RedHat, write-good) were too noisy to block on, for example 1,300 passive-voice hits in the v12 docs alone, so the rules are written for this repo, following the GitLab model. Each one links the guideline it enforces. Levels: - error, fails CI: dashes, plain-word substitutions, condescending words, "please", "note that", hedges, puffery, optional plurals, exclamation marks, ellipses, curly quotes, generic link text, product spellings, sentence-case headings, repeated words, double spaces, implementation history in comments; in changesets, bold or italic emphasis, internal names and release-line names. - warning: future tense, sentences over 30 words, "instead of" and "so that" tails in changesets. - suggestion: passive voice. .vale.ini scopes the rules. Docs get every rule. Contributor Markdown and code comments keep dashes and headings as warnings until their roughly 8,100 em dashes are rewritten. Released changesets stay in .changeset/ and are not rewritten, so lint-prose.mjs lints only the changesets added since PROSE_BASE (the PR base in CI). The prose workflow installs a pinned, checksum-verified Vale release and runs `pnpm lint:prose`. The rest of this change rewrites the existing docs, READMEs, contributor Markdown, and code comments to pass the error-level rules. Only prose and comment text changed. Renamed headings keep their anchors. Spelling stays with cspell, which checks identifiers that Vale does not see. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: keep prose lint from flattening meaning --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
3.7 KiB
id, title, sidebar_label
| id | title | sidebar_label |
|---|---|---|
| versioning | Versioning Settings | Versioning |
Added in: v11.13.0
These settings configure pnpm's native workspace release management, driven by pnpm change and the bare pnpm version -r. See Release management for the workflow they belong to.
Where two workspace projects publish the same name, a project may be referenced by its ./-prefixed workspace-relative directory instead of its name in versioning.fixed, versioning.ignore, and the keys of versioning.lanes.
versioning.fixed
- Default: []
- Type: string[][]
Groups of packages that always release together at one shared version. The shared version is the highest current version in the group, bumped by the largest bump any member needs.
versioning:
fixed:
- ['@example/cli', '@example/napi']
A fixed group must move between lanes together, and must sit entirely inside or entirely outside an epic.
versioning.ignore
- Default: []
- Type: string[]
Packages permanently excluded from versioning and dependent propagation. A change intent that requests a real bump for an ignored package fails.
versioning:
ignore:
- '@example/internal'
versioning.maxBump
- Default: undefined (no cap)
- Type: 'patch', 'minor', 'major'
Caps the bump a release from the current checkout may apply. It is enforced on the final assembled release plan, after dependent propagation and fixed-group resolution, so a patch-only maintenance branch cannot accidentally ship a minor.
versioning:
maxBump: patch
versioning.lanes
- Default: {}
- Type: Record<string, string>
Maps a package to the release lane it is on. A lane is a parallel release track that emits X.Y.Z-<lane>.N prereleases; every unlisted package is on the reserved default lane, main, and releases stable versions.
versioning:
lanes:
'@example/cli': alpha
Lane names may contain only alphanumerics and hyphens, and cannot be purely numeric. main is reserved and cannot be assigned. Remove the entry instead, or use pnpm lane main --filter <pkg>.
versioning.epics
- Default: []
- Type: Array<{ lead: string, packages: string[] }>
Ties a group of member packages to a lead package, constraining every member's major version to a band derived from the lead's major: while the lead is on major M, members live in M*100 to M*100+99.
versioning:
epics:
- lead: '@example/app'
packages:
- './packages/**'
- '!./packages/private-*'
lead is a package name or a ./-prefixed workspace directory. packages is matched with pnpm's package selectors (name globs, ./-prefixed directory globs, and !-prefixed negations), evaluated in order, last match wins. A package can belong to at most one epic.
See Epics for how the band is enforced and re-based.
versioning.changelog.storage
- Default: 'registry'
- Type: 'registry', 'repository'
Where release changelogs live.
With registry, no CHANGELOG.md is committed: each release's section is composed at publish time and packed into the published tarball on top of the previously published version's changelog.
With repository, a CHANGELOG.md is committed in every package.
Private packages always use repository storage, as they are never published.
versioning:
changelog:
storage: repository