Skip to content

Commit 197fbe2

Browse files
docs(skills): the two READMEs the skills package ships install the catalog from @objectstack/skills at the installed spec's version; the GitHub path is the next channel only (#23232)
Fixes #22668 Clause-②: no (docs and README text) The closing half of ruling A on #22649 (record 6096124407), at the tier `skills/**` mandates. PR #23220 (`Part of #22668`) rewrote the four docs pages; this PR rewrites the two READMEs the `@objectstack/skills` package ships — `skills/README.md` (the catalog's front page, copied into the tarball as `dist/skills/README.md`) and `packages/skills/README.md` (the npm page) — and adds the patch changeset. Both now give the install the docs give: add `@objectstack/skills` at the installed `@objectstack/spec`'s version, then `npx skills experimental_sync`; the GitHub path is named once, as the `next` channel. No `SKILL.md` is touched, and the generated index block in `skills/README.md` is untouched. ## 维护者速读(草稿) ### 改了什么 - `skills/README.md`(目录首页,随 `@objectstack/skills` 发布为 `dist/skills/README.md`)的安装段落:不再教 `npx skills add objectstack-ai/objectstack/skills …`,改为两步 —— 按项目已安装的 `@objectstack/spec` 版本安装 `@objectstack/skills`,再 `npx skills experimental_sync --agent claude-code -y`。GitHub 路径只保留一句,作为 `next` 渠道(未发布的 `main`,用于试用下一版的 skills,不用于已发布项目)。生成的 index 块一字未动。 - `packages/skills/README.md`(npm 页面):裸装 `npm install --save-dev @objectstack/skills` 改为钉版本的命令;删掉从未发布过的 `@objectstack/skills@17.7.0` 示例;写明版本自 `18.0.0-next.0` 起提供(无 17.x,17.x 项目第一步会报 `ETARGET`);写明 `experimental_sync` 会跳过 `skills add` 装的 skill,脚手架项目须先 `npx skills remove --all`;更新口径改为「随其他 `@objectstack/*` 一起升 `@objectstack/skills`,再重跑 sync」。 - 新增 `.changeset/22668-skills-readme-install.md`:`@objectstack/skills` 的 patch changeset(两份 README 都在 tarball 里)。 ### 为什么改 - 两份 README 教的是 #22649 裁决 A 之前的安装方式。npm 页面上的裸装命令,在依赖 `@objectstack/spec@17.7.0` 的项目上今天实测会装上 `18.0.0-next.0`(registry 的 `latest`),即下一个大版本的目录;首页仍教从 GitHub `main` 安装,拿到的目录与项目的 spec 版本无关。 - 与 #23220 的四个 docs 页面保持同一条命令、同一句版本说明、同一个 `next` 渠道句,读者从 npm、GitHub、docs 三处看到的是一套说法。 ### 风险与代价(含回滚) - 只改两份 markdown 和一个 changeset,不改任何代码、`SKILL.md` 或 schema;`check:skill-docs` 绿,`dist/skills/README.md` 构建后与源文件逐字节一致。 - 风险在文字本身:两处「自 `18.0.0-next.0` 起提供」「脚手架到 `18.0.0-next.0` 仍用 `skills add`」是对今天 registry 的实测陈述;#22659(脚手架改为从包安装)落地后,后一句需随之改写(见 Acceptance notes)。 - 回滚:revert 本 PR 即可;changeset 未被消费前删除即无痕,已发布则随下一次 patch 发布回退文字。 ### 席位意见 (留空,席位定稿) ### 你要做的 - 这是 Tier H 受管面(`skills/**`):PR 保持 draft,等你的 APPROVED review 后由席位落地;不挂 auto-merge。 - 两个待裁问题仍是上一轮报告里的:17.x 项目要不要一次性发布 `@objectstack/skills@17.7.0`(只有维护者能做,PD15);以及 #22659 落地时同步改写两处「Through `18.0.0-next.0`」句。 ## What changes, file by file - `skills/README.md` (the install paragraph, lines 5–23; the generated index block and everything below it are byte-identical to `main`): - the two-step install with the version pinned to the installed spec's: `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 your spec's; - the update story: bump `@objectstack/skills` with the other `@objectstack/*` packages, then re-run the sync; - which versions exist: published from `18.0.0-next.0` on (there is no 17.x release); `--copy`, scaffolded projects and the rest point at the [Skills reference](https://objectstack.ai/docs/ai/skills-reference#installing-skills) (the `#installing-skills` heading exists on `main` today); - the one `next` channel sentence naming the GitHub path: `npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y` reads the catalog straight from the repository's unreleased `main` — for trying the next version's skills, not for a released project. - Removed: the `--all` multi-runtime paragraph and the `/skills` subpath sentence, both about the GitHub `add` path as the install. - `packages/skills/README.md` (the npm page; `files` lists `README.md`): - the paragraph that said "A project that depends on `@objectstack/skills@17.7.0` reads the skills written for `@objectstack/spec` 17.7.0" now says it of "`@objectstack/skills` at the version of its `@objectstack/spec`" — 17.7.0 of this package was never published; - the install section: the same two commands as above, numbered as in the reference; what the sync writes (links per agent, `--copy`); "Keep the version in step 1: a bare install installs whichever version the registry tags `latest`, not your spec's"; - **Updating** (bump with the other `@objectstack/*` packages, re-run the sync), **Which versions exist** (from `18.0.0-next.0` on; a 17.x project's step 1 refuses with `ETARGET`), **Projects scaffolded by `create-objectstack`** (through `18.0.0-next.0` the scaffolder uses `skills add` from the `next` channel; the sync skips those; `npx skills remove --all` or by name, then steps 1 and 2); - **The `next` channel** keeps its section, with the same sentence as the docs; "How the tree is produced" is unchanged; the Related link to the reference gains the `#installing-skills` anchor. - `.changeset/22668-skills-readme-install.md`: `"@objectstack/skills": patch`, `Clause-②: no`, the before and after in prose. Both READMEs ship in the tarball (`files`: `dist`, `README.md`, `CHANGELOG.md`; the build copies `skills/**` into `dist/skills/**`), so this is a published change and `skip-changeset` does not apply. ## Consistency with PR #23220 (the docs half) #23220 merged while this PR was being verified (squash `01a3421f42`, 2026-10-13T10:13Z); the four docs pages on `origin/main` are byte-identical to its head `7a3bc7f47`, which is what the READMEs were aligned against. Read side by side with `content/docs/ai/skills-reference.mdx` and `skills.mdx` there: the step-1 command, the step-2 command and its flags, the sentence "the catalog's version is then your spec's", the update story, the "published from `18.0.0-next.0` on" line, the scaffolded-project remedy (`npx skills remove --all`, or by name) and the `next` channel sentence are the same words. `skills/README.md` carries the short form `skills.mdx` carries and links to the reference for the rest; `packages/skills/README.md` carries the reference's full set, because the npm page has no docs page beside it. ## Measured on the claim's day (2026-10-13), not taken from the card Throwaway projects under the session scratchpad, against the registry, npm 10.9.4, node 22.22.0, skills CLI 1.7.2 (every exit captured before any pipe; logs under `issue-22668/r2-probes/`): - `npm view @objectstack/skills dist-tags versions`: `latest` and `next` both `18.0.0-next.0`; versions `0.0.0-stage`, `18.0.0-next.0`. `@objectstack/spec`: `latest` 17.7.0, `next` 18.0.0-next.0. `create-objectstack`: the same two tags. - (a) a project on `@objectstack/spec@17.7.0`: the bare `npm install --save-dev @objectstack/skills` exits 0 and installs `18.0.0-next.0` (saves `^18.0.0-next.0`) — the sentence the npm page now carries. (b) The pinned step 1 on that project exits 1: `npm error code ETARGET` / `No matching version found for @objectstack/skills@17.7.0`. - (c) a project on `@objectstack/spec@next` (18.0.0-next.0): step 1 exits 0 and saves `^18.0.0-next.0`; `npx skills experimental_sync --agent claude-code -y` exits 0 and links 10 skills — `.agents/skills/NAME` to `../../node_modules/@objectstack/skills/dist/skills/NAME`, `.claude/skills/NAME` to `../../.agents/skills/NAME`; `skills-lock.json` records `sourceType: node_modules`, `version: 18.0.0-next.0`. - (d) the scaffolder's sequence: `npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y` from GitHub exits 0; the sync after it exits 0 and prints `Skipped NAME from @objectstack/skills: installed with skills add from objectstack-ai/objectstack` for all 10; after `npx skills remove --all` (exit 0) the sync installs all 10 from the package. - The published `@objectstack/skills@18.0.0-next.0` tarball: its `README.md` is byte-identical to `packages/skills/README.md` at the base commit `920bc12a24` (the npm page carries the text this PR replaces), and its `dist/skills/README.md` is byte-identical to `skills/README.md` at that commit. - The build: `pnpm --filter @objectstack/skills build` under the verify lock, `VERDICT command-exit 0` — self-test 9 cases, "65 file(s) across 10 skill(s) copied from skills/** into dist/skills and read back byte-identical"; `cmp skills/README.md packages/skills/dist/skills/README.md` is clean, so the new front page is what the tarball will carry. ## Readings the `skills/**` rule asks for - `skills/README.md`: 126 → 128 lines, 8,078 → 8,322 bytes (+2 lines, +244 bytes), all inside the install paragraph: 10 lines about the GitHub `add` path removed (the `--all` paragraph, the subpath sentence), 12 added (the package install, the update story, the versions line, the `next` channel). The file is outside `check:skills-token-ratchet`'s population (its header, "population 3: OUTSIDE — skills/README.md") and outside `check:pm-skill-ratchet`'s map. - The bundle's `SKILL.md` sum: 4,409 → 4,409 lines over 10 files (no `SKILL.md` touched). - `packages/skills/README.md` (not under `skills/**`): 55 → 74 lines, 2,786 → 4,024 bytes. ## Gates All at `3f11f00524` (worktree `objectstack-issue-22668-readme`, base `920bc12a24` = `origin/main` at claim time, the branch's empty probe commit `150da61aa5` fast-forwarded onto it). Every exit code was captured before any pipe (`cmd > log 2>&1; EXIT=$?`); logs are under the session scratchpad, `issue-22668/r2-gates/`. - `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (no paths: the change set comes from the merge base, 3 paths) derived 66 commands. Pass 1 ran all 66 plus two I added because `packages/skills/README.md` is in their population: `check:published-readme-links` and `check:published-readme-exports`. Result: 64 exit 0, 4 exit 3 (`PREREQUISITE NOT MET`, read as NOT MEASURED, not as red): `check:doc-formula-expressions`, `check:dual-build-cjs-loads`, `check:lean-entry-closure`, `check:published-readme-exports`. - After `pnpm turbo run build --filter='@objectstack/lint...' --filter='@objectstack/formula...' --filter='@objectstack/objectql...' --concurrency=2` under the verify lock (14 tasks, 4m20s, `VERDICT command-exit 0`), `check:doc-formula-expressions` and `check:lean-entry-closure` re-ran to exit 0 ("22 record-scoped formula example(s) across 474 files / 1391 TS blocks judged clean"; "2 published condition(s) measured from a real load"). - `--ran` reconciliation over the 68 recorded exit codes: `66 derived famil(ies) accounted for — 65 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)`, `0 UNRUN`. The one is `check:dual-build-cjs-loads`, which loads every package's `dist/`; `check:published-readme-exports` (outside the derivation) refuses for the same reason — the built type entries. **NOT MEASURED locally**, reason: both read built output of packages this diff does not touch (two markdown files and a changeset; no source, `exports` or type entry moves), and the prerequisite is the full build — a turbo dry-run on this tree reads 81 of 82 build tasks as cache MISS — on a shared box. `Lint & Repo Gates` runs both on the PR; a declared narrowing, not a skip. - The card's named gates: `pnpm --filter @objectstack/spec run check:skill-docs` exit 0 (`✓ skills/README.md`, `✓ content/docs/ai/skills-reference.mdx`, "Skill docs in sync": the generated index block is untouched). `check:skill-compatibility`, `check:skill-frame-sync`, `check:skill-identifier-liveness`, `check:corpus-claim-drift`, `check:doc-authoring`, `check:doc-route-spelling` (advisory and self-test), `check:nul-bytes`, `check:pm-governed-merges`, and the changeset gates — `check:empty-changeset --base origin/main`, `check:changeset-no-major`, `check:adr-0087-registration`, `check:changeset-gate-self-tests`, `check:pm-changeset-deadline-census`, `check:published-files` — all exit 0. `check:published-readme-links` exit 0: "226 outbound link(s) across 103 published markdown file(s): 0 root-relative, 0 non-canonical origin(s), 28 docs-site page(s) resolved, 2 anchor(s) verified" (the `#installing-skills` anchor is one of the two). - Control characters: a grep for the C0 range, DEL and the two C1-adjacent bytes (`[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]`, `-naP`) over the three files has no hits (exit 1); `check:nul-bytes` exit 0. No HTML comment is added; the two in `skills/README.md` are the generated block's own markers, untouched. - `pnpm lint`, narrowed and proven: eslint's own config answers for all three files `File ignored because no matching configuration was supplied` (`eslint --no-inline-config --format json` over them: 3 results, 0 errors, that one warning each), so the population this diff can reach is 0 of eslint's; `eslint.config.mjs` enables no type-aware linting (no `parserOptions.project`, its own line 328 says so), so no untouched file's verdict can move. A measurement, not a skip. - Step ① (`pnpm --filter '@objectstack/skills^...' build`): `@objectstack/skills` has no workspace dependencies, so the closure is empty. Step ②: the package declares no `test` or `typecheck` script (`build` and `prepublishOnly` only), so there is none to run — and a zero-match `--filter` run would exit 0 having run nothing, which is why it is not cited; its `build` ran under the lock (above) and proved the copy byte-identical. No reverse verification or ablation applies to a docs-only diff. - The derivation printed a STALE TREE note at the `--ran` read: `origin/main` moved 8 commits (to `01a3421f42`) while the battery ran, and 4 of the files it derives from changed. Read: `lint.yml` / `ci.yml` add `check:authorable-surface` and `check:docs` steps (`packages/spec` families; this diff touches no spec path) and `scripts/ci/lane-verdict.mjs` replaces `scripts/report-unmeasured-gate-tail.mjs` (gate reporting, not a gate); none names these three paths. The only other overlap with this PR's subject is #23220 itself landing (below). The branch is not re-merged onto that `main`: the diff is disjoint from everything that landed, and the queue rebuilds on current `main` when the PR is landed. ## Acceptance notes - Tier H: the diff touches `skills/**`, so this PR stays a draft until the maintainer's approval; no seat readies it or arms auto-merge. - When the `create-objectstack` card (#22659 remains open) lands the package-based scaffolder, the "Through `18.0.0-next.0` …" paragraph in `packages/skills/README.md` goes stale and that PR owes the rewording, as #23220's two sentences do. It stays true as written for every scaffolder version up to and including `18.0.0-next.0`. - 17.x projects: both READMEs state what is measured and nothing more — no 17.x `@objectstack/skills` exists. The choice between leaving it there (the docs' current line) and a one-time `@objectstack/skills@17.7.0` publish from the tag (a release act, the maintainer's) is the open question in the report; neither README documents the tag sparse-clone path, which is a second GitHub channel ruling A excludes. - `h46ClaimNamesBranch` (the predicate `check:closing-target-claim` imports) answers `true` for this branch against the claim extension 6142814394 and `false` for #23220's branch, read offline from the comment's body; `Fixes #22668` is therefore the closing keyword here, and #23220 keeps `Part of`. - The commit trailer pair is the model-free form AGENTS.md requires. --- _Generated by [Claude Code](https://claude.ai/code/session_012zwsLMxQBwHUYJgPyrpEvx)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 01a3421 commit 197fbe2

3 files changed

Lines changed: 60 additions & 26 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
"@objectstack/skills": patch
3+
---
4+
5+
docs(skills): both READMEs the package ships install the catalog from `@objectstack/skills` at the installed `@objectstack/spec`'s version, and name the GitHub path only as the `next` channel (#22668)
6+
7+
Clause-②: no
8+
9+
`README.md` (the npm page) and `dist/skills/README.md` (the catalog's front page, copied from the repository's `skills/README.md`) are the two READMEs this package ships. Both now give the same two-step install the docs give: `npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")"`, then `npx skills experimental_sync --agent claude-code -y` — the catalog's version is then the installed spec's.
10+
11+
Before: the npm page taught a bare `npm install --save-dev @objectstack/skills`, which on a project depending on `@objectstack/spec` 17.x installs `18.0.0-next.0`, the next major's catalog (the registry's `latest`); its example named `@objectstack/skills@17.7.0`, a version that was never published; and it did not say that the sync skips every skill a `skills add` installed, which is every project `create-objectstack` scaffolded through `18.0.0-next.0`. The catalog's front page still taught `npx skills add objectstack-ai/objectstack/skills …` as the install command for existing projects.
12+
13+
Both pages now state which versions exist (published from `18.0.0-next.0` on; no 17.x, so step 1 answers `ETARGET` there), the update story (bump `@objectstack/skills` with the other `@objectstack/*` packages, then re-run the sync), and the GitHub path once, as the `next` channel: the unreleased `main`, for trying the next version's skills, not for a released project. Nothing under `dist/skills/*/` changes.

‎packages/skills/README.md‎

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,53 @@ that released this version.
1111
It is published from the Changesets `fixed` group, so its version is always the
1212
version of `@objectstack/spec`, `@objectstack/cli` and every other
1313
`@objectstack/*` package released with it. A project that depends on
14-
`@objectstack/skills@17.7.0` reads the skills written for `@objectstack/spec`
15-
17.7.0 — never the ones already teaching the next major, and never a catalog
16-
that has moved on since the project was created.
14+
`@objectstack/skills` at the version of its `@objectstack/spec` reads the skills
15+
written for that spec — never the ones already teaching the next major, and
16+
never a catalog that has moved on since the project was created.
1717

1818
## Installing the skills into an agent's directory
1919

2020
The catalog is read from `node_modules`, so it follows the version the project
21-
depends on. With this package in `devDependencies`, the
22-
[skills CLI](https://www.npmjs.com/package/skills) syncs it into the detected
21+
depends on. Install it at the version of the `@objectstack/spec` your project
22+
has installed — the catalog's version is then your spec's — and let the
23+
[skills CLI](https://www.npmjs.com/package/skills) sync it into your coding
2324
agent's own skills directory (`.claude/skills/` for Claude Code, and so on):
2425

2526
```sh
26-
npm install --save-dev @objectstack/skills
27-
npx skills experimental_sync
27+
# 1 · the catalog, at the version of your installed @objectstack/spec
28+
npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")"
29+
30+
# 2 · link it from node_modules into your agent's skills directory
31+
npx skills experimental_sync --agent claude-code -y
2832
```
2933

3034
`experimental_sync` discovers the skills at `dist/skills/<skill>/SKILL.md` of
31-
every dependency and links or copies them for the agent runtimes it detects
32-
(`--agent <name>` names one; `--copy` copies instead of linking). Re-running it
33-
after `pnpm up @objectstack/skills` — which moves with the rest of the
34-
`@objectstack/*` set — refreshes the installed catalog.
35+
every dependency and links each one into the named agent's skills directory
36+
(`--agent <name>` names the runtime — `codex`, `cursor`, …; `--copy` writes real
37+
files instead of links). Keep the version in step 1: a bare
38+
`npm install --save-dev @objectstack/skills` installs whichever version the
39+
registry tags `latest`, not your spec's.
40+
41+
**Updating.** The catalog moves only with your ObjectStack version: bump
42+
`@objectstack/skills` with the other `@objectstack/*` packages, then re-run the
43+
sync (step 2, same flags).
44+
45+
**Which versions exist.** The package is published from `18.0.0-next.0` on;
46+
there is no 17.x release of it, so on a project whose `@objectstack/spec` is
47+
17.x step 1 refuses with `ETARGET` (`No matching version found`).
48+
49+
**Projects scaffolded by `create-objectstack`.** Through `18.0.0-next.0` the
50+
scaffolder installs the skills from the `next` channel below with `skills add`,
51+
and step 2 skips every skill a `skills add` installed (it prints `Skipped …
52+
installed with skills add`). Remove them first — `npx skills remove --all`, or
53+
name the `objectstack-*` skills if you added others — then run steps 1 and 2.
3554

3655
## The `next` channel
3756

3857
The repository's `skills/` tree on `main` is the catalog of the **next**
3958
release. `npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y`
40-
reads it directly from GitHub — for trying the skills of the version that is
41-
not published yet, not for a released project.
59+
reads it straight from the repository's unreleased `main` — for trying the next
60+
version's skills, not for a released project.
4261

4362
## How the tree is produced
4463

@@ -51,5 +70,5 @@ of truth, reviewed and gated there.
5170

5271
## Related
5372

54-
- [Skills reference](https://objectstack.ai/docs/ai/skills-reference) — every skill in the catalog, with what it covers.
73+
- [Skills reference](https://objectstack.ai/docs/ai/skills-reference#installing-skills) — every skill in the catalog, with what it covers, and the install reference.
5574
- [`@objectstack/spec`](https://www.npmjs.com/package/@objectstack/spec) — the schemas the skills point at (`node_modules/@objectstack/spec/src/**/*.zod.ts`), shipped at the same version.

‎skills/README.md‎

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,25 @@
22

33
Domain-scoped instructions for AI coding assistants (Claude Code, Copilot, Cursor)
44
working in **any ObjectStack app** — this monorepo *and* third-party projects.
5-
`npm create objectstack` installs them into new apps automatically; existing
6-
projects add (or update) the bundle with:
5+
They ship as the npm package `@objectstack/skills`, released with the other
6+
`@objectstack/*` packages at one shared version. Install it at your installed
7+
`@objectstack/spec`'s version — the catalog's version is then your spec's — and
8+
sync it from `node_modules` into your agent's directory:
79

810
```bash
9-
npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y
11+
npm install --save-dev "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")"
12+
npx skills experimental_sync --agent claude-code -y
1013
```
1114

12-
Name your own runtime after `--agent` (`codex`, `cursor`, …) — the bundle is
13-
byte-identical whichever you name, and it lands **once**, in that agent's own
14-
directory (`.claude/skills/` for `claude-code`). Replacing
15-
`--skill '*' --agent claude-code -y` with `--all` is the multi-runtime opt-in:
16-
it installs for every runtime the CLI knows and writes the bundle to **three**
17-
destinations instead of one — a full real copy in **both** `.agents/` and
18-
`agent/`, plus `.claude/` symlinks pointing into `.agents/`.
15+
Name your own runtime after `--agent` (`codex`, `cursor`, …). To update, bump
16+
`@objectstack/skills` with the other `@objectstack/*` packages, then re-run the
17+
sync. The package is published from `18.0.0-next.0` on (there is no 17.x release);
18+
`--copy`, projects scaffolded by `npm create objectstack` and the rest are in the
19+
[Skills reference](https://objectstack.ai/docs/ai/skills-reference#installing-skills).
1920

20-
The `/skills` subpath matters: it is the published catalog boundary — pointing
21-
the skills CLI at the repo root would also pick up repo-internal skills.
21+
**The `next` channel.** `npx skills add objectstack-ai/objectstack/skills --skill '*' --agent claude-code -y`
22+
reads the catalog straight from the repository's unreleased `main` — for trying
23+
the next version's skills, not for a released project.
2224

2325
Each **domain** skill is self-contained: a `SKILL.md` with YAML frontmatter, plus a
2426
`references/_index.md` that points into the authoritative Zod sources in

0 commit comments

Comments
 (0)