Repository navigation
Commit 3a7a60a
docs: give the @objectstack/skills install line for the project's own package manager (#24973)
Fixes #24926
Clause-②: no
## What changed
Three `content/docs/**` pages printed `npm install --save-dev
"@objectstack/skills@$(node -p …)"` as the only install command. Each
one now gives the install line for the project's own package manager, in
the same shape as PR #24922 (`content/docs/releases/v18/18-0.mdx` step
1):
- the pnpm line in the block;
- a one-line comment with the npm and yarn spellings;
- the rule "add the package with the manager that installed the
project", followed by the npm failure as measured.
| site | old → new | measurement |
|:--|:--|:--|
| `content/docs/upgrading.mdx`, step 4, the "From 17.x to 18" block |
`npm install --save-dev "@objectstack/skills@$(node -p …)"` → `pnpm add
-D "@objectstack/skills@$(node -p …)"`, plus the line `# npm: npm
install --save-dev "@objectstack/skills@…" · yarn: yarn add -D
"@objectstack/skills@…"`, plus the rule sentence | M1 pnpm exit 0 · M2
the old line exit 1 · M3 npm exit 0 · M4 yarn exit 0 |
| `content/docs/ai/skills.mdx`, § Installing skills | same change | M1
to M4 |
| `content/docs/ai/skills-reference.mdx`, § Installing skills, step 1 |
same change. Also: the 17.x refusal now names pnpm's
`ERR_PNPM_NO_MATCHING_VERSION` beside npm's `ETARGET`, and the
18.0.0-next.0 note runs `npx skills list` before `npx skills remove
--all` | M1 to M4, M5, M6 |
| `skills/README.md` (≈`:11`) | **not in this PR.** The file is governed
(Tier H, `domain:skills`). The `domain:devx` seat moves it to a
`domain:skills` card when this one lands | — |
| `skills/objectstack-upgrade/SKILL.md` (≈`:129`) | **not in this PR**,
for the same reason | — |
`upgrading.mdx` already said to run `npx skills list` before `--all`
("Run `npx skills list` first"), so that sentence is unchanged.
`skills.mdx` does not print `--all`.
## Measured
Node 22.22.0. Each scaffold was created in its own new, empty directory
under the session scratchpad. The command was copied from the page: the
pnpm line, or a spelling from the comment with its `@…` filled in with
the same version expression.
| # | manager | project | command | exit | `@objectstack/skills` line in
`package.json` afterwards |
|:--|:--|:--|:--|:--|:--|
| M1 | pnpm 10.28.0 | `create-objectstack@18.0.0` scaffold,
pnpm-installed | `pnpm add -D "@objectstack/skills@$(node -p …)"`, the
line every site now keeps | `0` | `"18.0.0"`, written in place of the
template's `"^18.0.0"` |
| M2 | npm 10.9.4 | a second `create-objectstack@18.0.0` scaffold,
pnpm-installed | `npm install --save-dev "@objectstack/skills@$(node -p
…)"`, the line every site kept | `1` | not written: `npm error Cannot
read properties of null (reading 'edgesOut')`; `package.json` unchanged
(`"^18.0.0"`) |
| M3 | npm 10.9.4 | `create-objectstack@18.0.0` scaffold, npm-installed.
pnpm was taken off `PATH`, so the scaffolder chose npm and wrote
`package-lock.json` | `npm install --save-dev
"@objectstack/skills@$(node -p …)"`, the comment's npm spelling | `0`,
**it succeeds** | `"^18.0.0"`: npm saves with its default `^` prefix, so
the value is the template's |
| M4 | yarn 1.22.22 | `create-objectstack@18.0.0 --skip-install`, then
`yarn install` (exit `0`, `yarn.lock`) | `yarn add -D
"@objectstack/skills@$(node -p …)"`, the comment's yarn spelling | `0` |
`"18.0.0"` |
| M5 | pnpm 10.28.0 | `create-objectstack@17.7.0 --skip-skills`,
pnpm-installed (`@objectstack/spec` 17.7.0) | `pnpm add -D
"@objectstack/skills@$(node -p …)"` | `1` | not written:
`ERR_PNPM_NO_MATCHING_VERSION No matching version found for
@objectstack/skills@17.7.0`; unchanged |
| M6 | npm 10.9.4 | the M3 scaffold, with the version given as the
literal `17.7.0` | `npm install --save-dev "@objectstack/skills@17.7.0"`
| `1` | not written: `npm error code ETARGET`, `No matching version
found for @objectstack/skills@17.7.0.`; unchanged |
Notes on the readings:
- **M6 used a literal version.** No npm-installed 17.7.0 scaffold could
be built here: `create-objectstack@17.7.0`'s own `npm install` exited
`1` with the same `edgesOut` error, and again on a retry. So npm's 17.x
refusal was measured with the version written out.
- **Yarn's 17.x refusal** was also measured: `error Couldn't find any
versions for "@objectstack/skills" that matches "17.7.0"`, exit `1`. The
page does not name it.
- **pnpm, npm and yarn all re-sorted `dependencies` alphabetically** in
M1, M3 and M4. No other value changed.
## Gates
Local, at head `bd085862fc`. These are the 44 commands that `node
scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` derives from this diff, with each exit code
captured before any pipe.
- **All 44 exited `0`.**
- **Five needed a build first.** They answered exit `3` (prerequisite
not met) on the first pass, which is not a measurement:
- `check:doc-formula-expressions`, `check:doc-security-posture` and
`check:docs-transcript-drift` needed `@objectstack/lint` built;
- `@objectstack/spec check:docs` needed its generated tree;
- `@objectstack/spec check:skill-examples` needed
`@objectstack/client-react` built.
I built `@objectstack/lint...` and `@objectstack/client-react...` under
the verify lock (`VERDICT command-exit 0` both times) and re-ran the
five. Each exited `0`.
- **The builds left the worktree clean.** `git status --porcelain`
printed nothing afterwards.
- **`--ran` reconciliation:** `44 derived, 44 run, 0 NOT-MEASURED, 0
UNRUN` (it calls this "a DERIVED zero").
- **Selected verdict lines:**
- `check:doc-anchors`: 563 internal fragment links, each reaching a real
heading;
- `check:docs-single-h1`: 418 pages, no body-level heading-one;
- `check:docs-image-tag`: OK, 9 concrete pins against 18.0.0;
- `check:skill-docs`: `✓ content/docs/ai/skills-reference.mdx`, "Skill
docs in sync";
- `check:nul-bytes`: OK, no raw control bytes.
- **No package code changed,** so there is no package build, `pnpm test`
or `typecheck` to run. `test:repo` is left to CI.
- **Merge check:** `git merge-tree --write-tree origin/main HEAD` exited
`0` against `origin/main` `693352e4c2`. That is three commits past the
base, none of them under `content/docs/`.
## Changeset
This PR is labelled `skip-changeset`, because `content/docs/**` ships in
no package. Measured:
- no published package lists a `content` or `docs` path in its
`files[]`;
- no build step copies these pages into a package;
- after the build, I searched every path `@objectstack/spec` ships
(`dist`, `json-schema`, `liveness`, `prompts`, `llms.txt`, `README.md`,
`api-surface`) for five strings from the edited passages. Each matched 0
files. The positive control `defineStack` matched 93 files.
## Acceptance notes
- **One sentence beyond the install line, the rule and `npx skills
list`.** In `skills-reference.mdx`, the 17.x refusal sentence now names
the code that step 1 prints. Left alone, the page would put npm's
`ETARGET` under a pnpm command, which prints
`ERR_PNPM_NO_MATCHING_VERSION` (M5).
- **A sentence left as written.** `skills-reference.mdx` still says that
a bare `npm install --save-dev @objectstack/skills` installs whichever
version the registry tags `latest`. That is true as stated, and equally
true of a bare `pnpm add -D`. The card rules out other prose changes, so
it stays. Carrier: none.
- **A sixth site the card does not list.**
`packages/skills/README.md:28`, the published `@objectstack/skills`
README, prints the same `npm install --save-dev` line as its only step
1. That is the M2 command. The README is in the package's `files[]`, so
this text is on the npm page and in the tarball. It is outside this PR's
file surface, and changing it publishes (a `patch` changeset for
`@objectstack/skills`). It is reported to the seat to join the follow-up
card with the two `skills/**` rows.
- **`create-objectstack@17.7.0` cannot install with npm here.** Its own
`npm install` (npm 10.9.4, no lockfile) exits `1` with `edgesOut`.
17.7.0 is a superseded release, and 18.0.0's npm path succeeds (M3).
Carrier: none.
- **pnpm and yarn write the exact version; npm writes a caret range.**
pnpm and yarn write `"18.0.0"` and npm writes `"^18.0.0"`. None of the
three pages says which. The sentence in `releases/v18/18-0.mdx`, "The
command writes the exact version", is about its pnpm line, and M1 agrees
with it.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp)_
Co-authored-by: Claude <noreply@anthropic.com>1 parent 0715fac commit 3a7a60a
3 files changed
Lines changed: 14 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
| 22 | + | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
| 28 | + | |
| 29 | + | |
27 | 30 | | |
28 | 31 | | |
29 | 32 | | |
30 | 33 | | |
31 | | - | |
| 34 | + | |
32 | 35 | | |
33 | 36 | | |
34 | 37 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
| 32 | + | |
| 33 | + | |
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
| 37 | + | |
| 38 | + | |
36 | 39 | | |
37 | 40 | | |
38 | 41 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
108 | 108 | | |
109 | 109 | | |
110 | 110 | | |
111 | | - | |
| 111 | + | |
| 112 | + | |
112 | 113 | | |
113 | 114 | | |
114 | 115 | | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
115 | 119 | | |
116 | 120 | | |
117 | 121 | | |
| |||
0 commit comments