Repository navigation
Commit 01a3421
docs(skills): install the catalog from the installed @objectstack/skills package; the GitHub path is the next channel only (#23220)
Part of #22668
Clause-②: no (docs)
The docs half of ruling A on #22649 (record 6096124407): the four pages
that gave `npx skills add objectstack-ai/objectstack/skills --skill '*'
--agent claude-code -y` as the install command now install the catalog
from the `@objectstack/skills` package at the installed
`@objectstack/spec`'s version, and the skills reference names the GitHub
path once, as the `next` channel. This PR does not close the card: the
`skills/README.md` half is not in it (see "The split" below).
## What changes, page by page
- `content/docs/ai/skills-reference.mdx`, section "Installing skills"
(rewritten, outside the generated block):
- the two-step install: `npm install --save-dev
"@objectstack/skills@$(node -p
"require('@objectstack/spec/package.json').version")"`, then `npx skills
experimental_sync --agent claude-code -y`; the sentence that the
catalog's version is then the installed spec's;
- what the sync writes (links, `--copy`, `skills-lock.json`), and that a
bare `npm install --save-dev @objectstack/skills` takes the `latest`
tag, not the spec's version;
- the update story: bump `@objectstack/skills` with the other
`@objectstack/*` packages, then re-run the sync;
- which versions exist: the package is published from `18.0.0-next.0`
on, and a 17.x version answers `ETARGET`;
- new projects: through `18.0.0-next.0` the scaffolder installs from the
`next` channel with `skills add`, and the sync skips skills that `skills
add` installed, so they are removed first;
- the one `next` channel sentence naming the GitHub path: the unreleased
`main`, for trying the next version's skills, not for a released
project.
- Removed: the `--all` multi-runtime paragraph and the old callout. Both
described the GitHub `add` path, and the callout's claim that `--skill
'*'` "always installs the matching set for the `@objectstack/spec`
version in your project" was false for that path.
- `content/docs/ai/skills.mdx`, "Installing skills": the same two
commands, the version sentence, the update story and the 17.x line, then
a link to the reference for the rest.
- `content/docs/getting-started/build-with-claude-code.mdx`: in the
step-1 bullet the scaffolder no longer "runs `npx skills add …`". The
bullet says where the bundle comes from through `18.0.0-next.0` and
gives the package-based replacement. The "Keep the skills current"
bullet now gives the bump-then-sync story.
- `content/docs/getting-started/your-first-project.mdx`: scaffold step 3
and the section 7 upgrade sentence get the same two changes.
Every `npx skills add objectstack-ai/objectstack/skills` occurrence
under `content/docs` outside `releases/` is gone except the one `next`
channel sentence (`git grep -n "skills add objectstack-ai" --
content/docs ':!content/docs/releases'` gives 1 hit,
`skills-reference.mdx:41`).
## Measured on the claim's day (2026-10-13), not taken from the card
Every claim the pages make was read in throwaway projects under the
session scratchpad, against the registry:
- `npm view @objectstack/skills dist-tags` gives `latest` and `next`
both `18.0.0-next.0`. The versions are `0.0.0-stage` (the staged-publish
placeholder, "Temporary package placeholder for staged publishing") and
`18.0.0-next.0`. `@objectstack/spec` has `latest` 17.7.0 and `next`
18.0.0-next.0.
- The version binding: `.changeset/config.json` has one `fixed` group of
71 members that holds both `@objectstack/skills` and
`@objectstack/spec`. Every public `@objectstack/*` package in the
workspace is in it (0 outside, read off every `package.json`).
`.changeset/pre.json` is in `pre` mode with tag `next`.
- Installed package layout:
`node_modules/@objectstack/skills/dist/skills/` holds 10 skills (64
files) plus `README.md`. Every `SKILL.md` carries `compatibility:
Requires @objectstack/spec 18.x` and `metadata.version:
"18.0.0-next.0"`.
- The documented commands, on a project with `@objectstack/spec@next`:
- step 1 exits 0 and saves `"@objectstack/skills": "^18.0.0-next.0"`;
- `npx skills experimental_sync --agent claude-code -y` (skills CLI
1.7.2) exits 0 and syncs 10 skills: `.agents/skills/SKILL` links to
`../../node_modules/@objectstack/skills/dist/skills/SKILL`,
`.claude/skills/SKILL` links to `../../.agents/skills/SKILL`, and
`skills-lock.json` records `sourceType: node_modules`, `version:
18.0.0-next.0`.
- `--copy --agent claude-code` writes 64 real files under
`.claude/skills/`, no symlink and no `.agents/`. `--agent codex` writes
`.agents/skills/`.
- On a project with `@objectstack/spec@17.7.0`, step 1 exits 1 with `npm
error code ETARGET` / `No matching version found for
@objectstack/skills@17.7.0`. A bare `npm install --save-dev
@objectstack/skills` on that project exits 0 and installs
`18.0.0-next.0`, the catalog for the next major. That is why the pages
keep the version in the command.
- Scaffolded projects: the published `create-objectstack` 17.7.0 and
18.0.0-next.0 tarballs both run `skills add
objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y`
(`dist/index.js`).
- The scaffolder's exact sequence (that `add` from GitHub, then
`experimental_sync --agent claude-code -y`) prints `Skipped
objectstack-ai from @objectstack/skills: installed with skills add from
objectstack-ai/objectstack` for all 10 skills and changes nothing.
- After `npx skills remove --all`, the sync installs all 10 from the
package (`metadata.version: "18.0.0-next.0"`).
- Named removal (`npx skills remove objectstack-data objectstack-ui -y`)
removes exactly those two. A glob (`--skill 'objectstack-*'`) answers
`No matching skills found`, so the pages name the skills.
- The update story, simulated: after an in-place edit of a file under
`node_modules/@objectstack/skills` plus its `version` field,
`experimental_sync --copy` refreshed the copy and the lock's version. A
real second version does not exist yet.
## The split, and why the README half is not here
The claim's file surface allows `skills/README.md`'s install paragraph
only as a separate Tier H PR. `node scripts/pm/dispatch-gates.mjs
--tier` over that one path prints `Model tier — MANDATORY:
claude-fable-5-1 … 'skills/**' — clause ① (2026-09-10 ruling, verbatim
「必须 fable的还包括对外发布的skills」)`, with no one-line exemption for that root.
This run's tier is the default one, and the claim records no exit. So
the README PR was not authored here. The README PR is the one that
carries the card's closing keyword. The README also ships inside the
package as `dist/skills/README.md`, so its PR owes a `patch` changeset
for `@objectstack/skills`.
## Gates
All runs are at `7a3bc7f47`, with each exit code captured before any
pipe. Logs are under the session scratchpad.
- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` derived 42 commands for the 4 paths, and all
42 exit 0. The `--ran` reconciliation reads: `42 derived, 42 run, 0
NOT-MEASURED, 0 UNRUN` (`a DERIVED zero — all 42 recorded an exit code
and none of them is 3`).
- The card's named gates are among the 42: `pnpm
check:corpus-claim-drift`, `pnpm check:doc-authoring`, `pnpm --filter
@objectstack/spec run check:skill-docs`, and `node
scripts/check-doc-route-spelling.mjs --advisory` plus `--self-test`. The
route gate in enforce mode (no flag) also exits 0: `population clean`.
- Four gates first exited 3 (`PREREQUISITE NOT MET`), read as not
measured: `check:doc-formula-expressions`, `check:doc-security-posture`,
`check:skill-examples` and `check:docs-transcript-drift`. After
`@objectstack/formula`, `@objectstack/lint`, `@objectstack/client` and
`@objectstack/client-react` were built under the verify lock, all four
re-ran to exit 0.
- Docs link check, run the way `check-links.yml` runs it: `lychee 0.24.2
--offline --root-dir content --fallback-extensions mdx,md --config
lychee.toml` over `content/**/*.md`, `content/**/*.mdx`, `README.md` and
`ARCHITECTURE.md` exits 0 (`2453 Total … 0 Errors`). The new
`/docs/ai/skills-reference#installing-skills` links resolve.
- MDX compile of the four pages with the workspace's `@mdx-js/mdx`
3.1.1: all ok. A negative control, a bare less-than tag fragment, fails
to compile.
- `pnpm lint` (eslint) is not affected. The population comes from
eslint's own config: each of the four `.mdx` files answers `File ignored
because no matching configuration was supplied` (4 files in the
`--format json` output, 0 errors). The four pages are outside eslint's
population, so this diff cannot change any file's verdict.
- No package is touched and nothing publishes, so `skip-changeset`
applies (fast lane: `content/docs/**`).
## Acceptance notes
- When the `create-objectstack` card (#22659 remains open) lands the
package-based scaffolder, two sentences go stale and its PR owes the
rewording: "Through `18.0.0-next.0` …" on the reference page and in the
two getting-started step-1 texts. They stay true as written for every
scaffolder version up to and including `18.0.0-next.0`.
- 17.x projects: the pages say what is measured and nothing more: there
is no 17.x `@objectstack/skills`, so no catalog bound to 17.x exists.
One path does work technically: a sparse clone of the
`@objectstack/spec@17.7.0` tag's `skills/`, then `npx skills add ./PATH
--skill '*' --agent claude-code -y`, which wrote 64 files to
`.claude/skills/`. It is left out of the docs because it is a second
GitHub channel, and ruling A keeps the GitHub path only as `next`. The
skills CLI cannot take this repository's tags directly:
`tree/@objectstack/spec@17.7.0/skills` clones branch `@objectstack`, and
the URL-encoded form is not found. The choice is raised in the report.
- `packages/skills/README.md`, the published package's own README, still
teaches a bare `npm install --save-dev @objectstack/skills`. It is
outside this claim's surface and goes to the seat in the report.
---
_Generated by [Claude
Code](https://claude.ai/code/session_012zwsLMxQBwHUYJgPyrpEvx)_
Co-authored-by: Claude <noreply@anthropic.com>1 parent 6e6881e commit 01a3421
4 files changed
Lines changed: 49 additions & 38 deletions
File tree
- content/docs
- ai
- getting-started
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
18 | | - | |
19 | | - | |
| 17 | + | |
20 | 18 | | |
21 | 19 | | |
22 | | - | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
23 | 25 | | |
24 | 26 | | |
25 | | - | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
26 | 34 | | |
27 | 35 | | |
28 | | - | |
| 36 | + | |
29 | 37 | | |
30 | 38 | | |
31 | | - | |
32 | | - | |
33 | | - | |
| 39 | + | |
34 | 40 | | |
35 | | - | |
36 | | - | |
37 | | - | |
| 41 | + | |
38 | 42 | | |
39 | 43 | | |
40 | 44 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | | - | |
| 29 | + | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
| 32 | + | |
| 33 | + | |
37 | 34 | | |
38 | 35 | | |
39 | | - | |
| 36 | + | |
40 | 37 | | |
41 | 38 | | |
42 | 39 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
64 | 68 | | |
65 | 69 | | |
66 | 70 | | |
| |||
421 | 425 | | |
422 | 426 | | |
423 | 427 | | |
424 | | - | |
425 | | - | |
426 | | - | |
427 | | - | |
428 | | - | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
429 | 434 | | |
430 | 435 | | |
431 | 436 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
51 | 55 | | |
52 | 56 | | |
53 | 57 | | |
| |||
349 | 353 | | |
350 | 354 | | |
351 | 355 | | |
352 | | - | |
353 | | - | |
354 | | - | |
355 | | - | |
356 | | - | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
357 | 362 | | |
358 | 363 | | |
359 | 364 | | |
| |||
0 commit comments