Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .changeset/complete-next-one.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@primitree/core': patch
'@primitree/dtcg': patch
'@primitree/cli': patch
'@primitree/hooks': patch
'@primitree/mcp': patch
'primitree': patch
---

Accept npm's prerelease bootstrap dist-tags and complete the package-family release after the `1.0.0-next.0` attempt stopped after publishing `@primitree/core`.
2 changes: 1 addition & 1 deletion .changeset/pre.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@
"@primitree/mcp": "0.0.0",
"primitree": "0.0.0"
},
"changesets": ["primitree-one"]
"changesets": ["complete-next-one", "primitree-one"]
}
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ jobs:
if: github.event.deleted != true && github.ref_type == 'tag'
runs-on: ubuntu-latest
needs: [quality, packed-consumer]
timeout-minutes: 30
timeout-minutes: 45
environment: npm
permissions:
contents: read
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ Access Token or a network request. Enterprise teams can use the live API hooks.
"mcpServers": {
"design-tokens": {
"command": "npx",
"args": ["-y", "@primitree/mcp", "--tokens", "./variables.json"]
"args": ["-y", "@primitree/mcp@next", "--tokens", "./variables.json"]
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/content/docs/concepts/figma-mcp.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ Point the server at a raw local variables export or the output from `primitree b
"mcpServers": {
"design-tokens": {
"command": "npx",
"args": ["-y", "@primitree/mcp", "--tokens", "./design-tokens"]
"args": ["-y", "@primitree/mcp@next", "--tokens", "./design-tokens"]
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions apps/docs/content/docs/mcp/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description: Serve repository design tokens to an MCP client.
---

```bash
npm i -D @primitree/mcp
npm i -D @primitree/mcp@next
```

`@primitree/mcp` requires Node.js 24 or newer. The server reads any variables JSON shape listed in [Export variables](/docs/getting-started/export-variables), or a built `design-tokens/` directory.
Expand All @@ -16,7 +16,7 @@ npm i -D @primitree/mcp
"mcpServers": {
"design-tokens": {
"command": "npx",
"args": ["-y", "@primitree/mcp", "--tokens", "./variables.json"]
"args": ["-y", "@primitree/mcp@next", "--tokens", "./variables.json"]
}
}
}
Expand All @@ -26,7 +26,7 @@ Or point at built output:

```json
{
"args": ["-y", "@primitree/mcp", "--tokens", "./design-tokens"]
"args": ["-y", "@primitree/mcp@next", "--tokens", "./design-tokens"]
}
```

Expand Down
13 changes: 7 additions & 6 deletions docs/launch/v1.0.0-next.0.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Primitree 1.0.0-next.0

Status: Released 2026-08-17.
Status: Partial release 2026-08-17. `@primitree/core` reached npm; five packages did not.

Primitree checks a local DTCG source against project layer and owner rules. The
first public prerelease also reserves the unscoped `primitree` package name, so
Expand All @@ -24,14 +24,15 @@ implementation or a separate configuration format.
files. Its check mode reports drift without writing.
- `@primitree/hooks` reads generated token output in React applications.
- `@primitree/mcp` exposes loaded token graphs to MCP clients.
- `primitree`, `@primitree/core`, `@primitree/dtcg`, `@primitree/cli`,
`@primitree/hooks`, and `@primitree/mcp` share version `1.0.0-next.0`.
- The reviewed artifacts prepared all six packages at `1.0.0-next.0`. The
attempt published `@primitree/core` and stopped before the other five.

## Prerelease channel

Install this version through npm's `next` tag. The release workflow verifies
that `latest` does not point to the prerelease. Stable `1.0.0` will move the
package family to `latest` after prerelease testing and a separate review.
The package-family publication stopped after `@primitree/core` reached npm.
The other five packages and the GitHub Release were not published. npm assigned
both `next` and its required bootstrap `latest` to the core prerelease. The
reviewed `1.0.0-next.1` candidate supersedes this partial attempt.

## Requirements

Expand Down
48 changes: 48 additions & 0 deletions docs/launch/v1.0.0-next.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Primitree 1.0.0-next.1

Status: Released 2026-08-17.

Primitree checks a local DTCG source against project layer and owner rules. This
candidate completes the package-family prerelease after the `1.0.0-next.0`
attempt stopped after publishing `@primitree/core`.

```sh
npx primitree@next check
```

The unscoped launcher forwards to `@primitree/cli`. It does not contain a
second command implementation or a separate configuration format.

## Release highlights

- `primitree check` evaluates a configured DTCG source and reports stable policy
findings.
- `primitree inspect` traces one token through its alias chain, owners, and
direct dependents.
- `primitree diff` reports token changes, affected aliases, and policy changes.
- `primitree build` writes DTCG, Resolver, CSS, Tailwind CSS, and TypeScript
files. Its check mode reports drift without writing.
- `@primitree/hooks` reads generated token output in React applications.
- `@primitree/mcp` exposes loaded token graphs to MCP clients.
- `primitree`, `@primitree/core`, `@primitree/dtcg`, `@primitree/cli`,
`@primitree/hooks`, and `@primitree/mcp` share version `1.0.0-next.1`.

## Prerelease channel

Install this version through npm's `next` tag. npm may also assign `latest` to
a prerelease while a package has no stable version. `next` is the authoritative
prerelease channel, and stable `1.0.0` will establish the stable `latest` tag
after a separate review.

## Requirements

- Node.js 24 or newer
- React `^19.0.0` and SWR `^2.3.7` for `@primitree/hooks`

## Migration

The React package moved from `@figma-vars/hooks` to `@primitree/hooks`. The
legacy npm package ends at version 4.0.0.

Read the [migration guide](https://primitree.com/docs/hooks/migration) and the
[README](https://github.com/marklearst/primitree/blob/v1.0.0-next.1/README.md).
65 changes: 32 additions & 33 deletions docs/releasing.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,12 @@ must be the exact version prefixed with `v`.
Packages publish in dependency order: core → dtcg → cli → hooks → mcp →
primitree. Stable versions use npm's `latest` dist-tag. Versions ending in
`-next.N` use `next` and GitHub marks their release as a prerelease. The release
controller also removes an unexpected `latest` tag from every prerelease
package, including when `latest` points to an older prerelease. It preserves a
stable `latest` and verifies that `next` identifies the exact version before
continuing.
controller verifies that `next` identifies the exact version before continuing.
npm may also assign a prerelease `latest` while creating a package without
stable history. The controller accepts that bootstrap state while the complete
published history contains no stable version. It rejects that state after a
stable release, preserves any stable `latest`, and does not mutate `latest`
during a prerelease.

## Release artifact boundary

Expand Down Expand Up @@ -184,27 +186,31 @@ the previous phase.
Run the complete local preflight, require the version pull request checks when
one exists, and verify @primitree ownership, 2FA, and new-package rights. Confirm
the protected npm and GitHub environments and rulesets are ready. Confirm the
repository has no remote tags or GitHub Releases:
candidate tag and GitHub Release do not exist. Prior immutable tags and releases
may remain:

```bash
set -euo pipefail
REMOTE_TAG_REFS=$(git ls-remote --tags origin)
test -z "$REMOTE_TAG_REFS"
GITHUB_RELEASES=$(
gh release list --repo marklearst/primitree --json tagName
CANDIDATE_TAG_REFS=$(
git ls-remote --tags origin \
"refs/tags/v$VERSION" \
"refs/tags/v$VERSION^{}"
)
test "$GITHUB_RELEASES" = '[]'
test -z "$CANDIDATE_TAG_REFS"
CANDIDATE_RELEASE_COUNT=$(
gh release list \
--repo marklearst/primitree \
--limit 1000 \
--json tagName \
--jq "[.[] | select(.tagName == \"v$VERSION\")] | length"
)
test "$CANDIDATE_RELEASE_COUNT" = 0
```

Make the source repository public before creating any npm package. This lets
package pages, provenance, issue links, and source links resolve to the same
public project. Review the visibility change in GitHub. Run and verify the
single repository mutation:
Verify that the source repository remains public. This lets package pages,
provenance, issue links, and source links resolve to the same public project:

```bash
gh repo edit marklearst/primitree \
--visibility public \
--accept-visibility-change-consequences
test "$(gh repo view marklearst/primitree --json visibility --jq '.visibility')" = PUBLIC
```

Expand Down Expand Up @@ -1017,8 +1023,8 @@ Approve the protected `npm` environment job. The workflow performs the
bootstrap token-authenticated publish, verifies npm provenance against the
expected repository, workflow, tag, and commit, smoke-tests the public
packages, and creates or resumes the immutable GitHub Release from the same
eight files. Record the run ID, package pages, `next` dist-tags, absence of the
prerelease from `latest`, provenance, release notes, asset digests, and final
eight files. Record the run ID, package pages, exact `next` dist-tags, observed
`latest` values, provenance, release notes, asset digests, and final
prerelease URL.

### 6. Configure all six trusted publishers
Expand Down Expand Up @@ -1204,23 +1210,16 @@ npm publish "$ARTIFACT_DIR/primitree-$VERSION.tgz" --registry=https://registry.n

### Wrong dist-tag

Inspect and repair a dist-tag without republishing. A prerelease must remain on
`next` and must not occupy `latest`. Remove `latest` whenever the listing shows
that it points to a prerelease, including an older prerelease; preserve it when
it points to a stable version.
Use this core example for the package whose dist-tag needs repair:
Inspect and repair the authoritative dist-tag without republishing. A
prerelease must remain on `next`. A package without a stable version may keep a
prerelease on `latest`; do not remove or move that bootstrap tag. Preserve a
stable `latest` after one exists. Use this core example for the package whose
`next` tag needs repair:

```bash
npm dist-tag ls "@primitree/core" --registry=https://registry.npmjs.org
npm dist-tag add "@primitree/core@$VERSION" next --registry=https://registry.npmjs.org
LATEST_VERSION="$(
npm view "@primitree/core" dist-tags.latest --registry=https://registry.npmjs.org
)"
if printf '%s\n' "$LATEST_VERSION" |
grep -Eq '^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)-'
then
npm dist-tag rm "@primitree/core" latest --registry=https://registry.npmjs.org
fi
npm dist-tag ls "@primitree/core" --registry=https://registry.npmjs.org
```

### Bad package contents
Expand Down Expand Up @@ -1289,7 +1288,7 @@ run. Require GitHub to report a single `publish` job, a skipped or cancelled
conclusion, and no steps:

```bash
VERSION=${VERSION:-1.0.0-next.0}
: "${VERSION:?Set VERSION to the wrong pushed tag version}"
[[ "$VERSION" =~ ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)-next\.(0|[1-9][0-9]*)$ ]]
OLD_RUN_ID=123456789
set -euo pipefail
Expand Down
14 changes: 14 additions & 0 deletions packages/cli/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
# Changelog

## 1.0.0-next.1 (2026-08-17)

### Patch Changes

- Accept npm's prerelease bootstrap dist-tags and complete the package-family
release after the `1.0.0-next.0` attempt stopped after publishing
`@primitree/core`.
- Updated dependencies
- @primitree/core@1.0.0-next.1
- @primitree/dtcg@1.0.0-next.1

## 1.0.0-next.0 (2026-08-17)

Release record: This version was not published. The package-family attempt
stopped after `@primitree/core` reached npm.

### Major Changes

- Launch the Primitree 1.0 package family.
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ the REST API.
- [`@primitree/mcp`](https://www.npmjs.com/package/@primitree/mcp) serves token data through MCP.

Read the [Primitree documentation](https://primitree.com) or review the
[1.0.0-next.0 changelog](CHANGELOG.md).
[1.0.0-next.1 changelog](CHANGELOG.md).

## License

Expand Down
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@primitree/cli",
"version": "1.0.0-next.0",
"version": "1.0.0-next.1",
"description": "Build, compare, check, scaffold, and export Figma Variables token projects.",
"author": "Mark Learst",
"license": "MIT",
Expand Down
11 changes: 11 additions & 0 deletions packages/core/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,18 @@
# Changelog

## 1.0.0-next.1 (2026-08-17)

### Patch Changes

- Accept npm's prerelease bootstrap dist-tags and complete the package-family
release after the `1.0.0-next.0` attempt stopped after publishing
`@primitree/core`.

## 1.0.0-next.0 (2026-08-17)

Release record: `@primitree/core` reached npm. The other five packages and the
GitHub Release were not published.

### Major Changes

- Launch the Primitree 1.0 package family.
Expand Down
2 changes: 1 addition & 1 deletion packages/core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ characters, so do not log it.
- [`@primitree/hooks`](https://www.npmjs.com/package/@primitree/hooks) provides React hooks.

Read the [Primitree documentation](https://primitree.com) or review the
[1.0.0-next.0 changelog](CHANGELOG.md).
[1.0.0-next.1 changelog](CHANGELOG.md).

## License

Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@primitree/core",
"version": "1.0.0-next.0",
"version": "1.0.0-next.1",
"description": "Types and functions for normalizing, resolving, comparing, and updating Figma Variables.",
"author": "Mark Learst",
"license": "MIT",
Expand Down
13 changes: 13 additions & 0 deletions packages/dtcg/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,20 @@
# Changelog

## 1.0.0-next.1 (2026-08-17)

### Patch Changes

- Accept npm's prerelease bootstrap dist-tags and complete the package-family
release after the `1.0.0-next.0` attempt stopped after publishing
`@primitree/core`.
- Updated dependencies
- @primitree/core@1.0.0-next.1

## 1.0.0-next.0 (2026-08-17)

Release record: This version was not published. The package-family attempt
stopped after `@primitree/core` reached npm.

### Major Changes

- Launch the Primitree 1.0 package family.
Expand Down
2 changes: 1 addition & 1 deletion packages/dtcg/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ Use [`@primitree/cli`](https://www.npmjs.com/package/@primitree/cli) when you
want Primitree to write these files to disk.

Read the [Primitree documentation](https://primitree.com) or review the
[1.0.0-next.0 changelog](CHANGELOG.md).
[1.0.0-next.1 changelog](CHANGELOG.md).

## License

Expand Down
2 changes: 1 addition & 1 deletion packages/dtcg/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@primitree/dtcg",
"version": "1.0.0-next.0",
"version": "1.0.0-next.1",
"description": "Read Primitree's supported DTCG 2025.10 value subset into Core and convert Figma variables to DTCG, Resolver contexts, CSS, Tailwind CSS, and TypeScript.",
"author": "Mark Learst",
"license": "MIT",
Expand Down
14 changes: 14 additions & 0 deletions packages/hooks/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
# Changelog

## 1.0.0-next.1 (2026-08-17)

### Patch Changes

- Accept npm's prerelease bootstrap dist-tags and complete the package-family
release after the `1.0.0-next.0` attempt stopped after publishing
`@primitree/core`.
- Updated dependencies
- @primitree/core@1.0.0-next.1
- @primitree/dtcg@1.0.0-next.1

## 1.0.0-next.0 (2026-08-17)

Release record: This version was not published. The package-family attempt
stopped after `@primitree/core` reached npm.

### Major Changes

- Launch the Primitree 1.0 package family.
Expand Down
Loading
Loading