Repository navigation
Commit 72b08ee
docs: hand-written inventory counts are deleted across skills, docs, READMEs and code comments; the names and the source of truth stay (#27542)
<!-- claude-projects-attribution: {"github_login":"marchtian"} -->
_Requested by **田騏** · [project
thread](https://claude.ai/code/project/chan_01VmuUhXU9SSUzqJYyXSmYSi?thread=cmsg_01VmuUhXU9SSUzqJYyXSmYSi6Px7HCkNBYctmRf2kDX4bR)_
domain:skills#1 · marchtian · session_017ihL2fNkBkNQ88EMzvcrPW
Fixes #27522
Clause-②: no
Metadata-protocol: none
## 维护者速读
- **改了什么:** 删掉手写的清单计数(「49 field types」「8 lifecycle events」「20 built-in
node types」「Plugins (18)」「30 functions」「36 built-in tokens」「26 built-in
metadata types」「10 built-in locales」「38 chart types」等):卡片清单表 16
行全部处理,再加本次扩扫到的 docs、examples、ui
README、代码注释里的同类计数;枚举出来的名字保留,`packages/metadata/README.md` 那张已经过时的类型表(列着
`trigger`、`validation`、`theme` 等根本不存在的类型)换成指向
`DEFAULT_METADATA_TYPE_REGISTRY` 的一句话。
- **为什么改:** 这些数字没有门禁对着目录核对,清单一动就错(showcase 写 38 种图表,spec 只有 20;README 写
26 种元数据类型,spec 有 31),错的数字比没有数字更误导读者和 AI 作者。
- **风险与回滚:** 纯文档、README、changeset 与两处代码注释(`packages/spec` 一行 `//`
注释,`ui/` 三个文件的注释),不改任何行为;回滚即还原本 PR。`skills/**` 为 Tier H。
- **先看:**
`packages/metadata/README.md`(唯一删掉一张表的地方)、`skills/objectstack-data/references/data-hooks.md`(「Why
so few?」那条说明)、`content/docs/api/error-catalog.mdx` 首句。
- **两分钟验证:** `node scripts/check-skills-token-ratchet.mjs`,预期最后一行 `✓
check-skills-token-ratchet: 84 authored bundle file(s) within their
ceilings`。
- **需要你做的:** `skills/**` 是 Tier H,落地需 os-zhuang 或 hotlong 批准;其余由席位落地。
## What changes
Rule applied, from the triage ruling: delete the number, or point at the
source of truth; a count that matters is generated or pinned by an
existing gate; no new gate.
### The card's Inventory table, every row taken
| File | Was | Now |
|:--|:--|:--|
| `skills/objectstack-data/SKILL.md` L41, L297 | 49 field types | the
names stay; the table in `rules/field-types.md` is the pointer |
| `skills/objectstack-data/rules/field-types.md` L9 | 49 available
options | the available options |
| `skills/objectstack-data/SKILL.md` L46 | the 8 lifecycle events | the
lifecycle events |
| `skills/objectstack-data/references/data-hooks.md` L10, L31, L46 | 8
lifecycle events; "Why only 8?" | lifecycle events; "Why so few?" (the
explanation of why `find` is the only read event stays) |
| `skills/objectstack-automation/SKILL.md` L54 | 20 built-in node types
| built-in node types (the node tables follow) |
| `skills/objectui/README.md` L58 | Plugins (18) | Plugins (the names
follow) |
| `skills/objectui/guides/schema-expressions.md` L231 | 30 functions |
"the whole registry" (the function table above it is the enumeration) |
| `content/docs/capabilities/views.mdx` L30 | 36 built-in tokens |
built-in tokens |
| `content/docs/releases/implementation-status.mdx` L45 | 14 lifecycle
events | the lifecycle events that actually fire (a living status page
per triage, not a release note) |
| `docs/qa/platform-checklist/README.md` L374 | 49 field types, 20 chart
types | field types, chart types (the gate-pinned `enumSource.expect` is
untouched) |
| `examples/app-showcase/README.md` L19, L72 | all 49 field types, all 8
view types, all 38 chart types | every field type, every view type,
every chart type |
| `packages/metadata/README.md` L195 | 26 built-in metadata types across
6 protocol domains, plus a table | a pointer at
`DEFAULT_METADATA_TYPE_REGISTRY` and `MetadataTypeSchema` (see
Acceptance notes: the table was wrong, not just stale) |
| `packages/metadata/ROADMAP.md` L23 | 26 built-in metadata types across
6 domains | the built-in metadata types of
`DEFAULT_METADATA_TYPE_REGISTRY`, by protocol domain |
| `packages/spec/PLUGIN_STANDARDS.md` L208 | 17 services across 13
plugins | services registered by plugins via `ctx.registerService()` |
| `ui/packages/i18n/README.md` L3, L7 | 10 built-in locales | built-in
locales (L7 still lists them) |
### The wider re-sweep (sites the card did not list)
Patterns: a digit, a `N+`, a parenthesised `(N)` or a spelled-out number
before an inventory noun, over `skills/**`, `content/docs/**`,
`docs/qa/**`, `examples/**`, package READMEs, `ui/**` READMEs, and
`.describe()` / JSDoc / code comments in `packages/spec/src` and
`ui/packages/*/src`.
- `skills/objectstack-query/SKILL.md` L238: "The six functions (…)" →
"The functions (…)".
- `skills/objectui/guides/plugin-development.md` L95: "The eleven
control kinds" → "The control kinds" (a code comment inside the guide).
- `content/docs/capabilities/index.mdx`: "40+ field types", "Nine
lenses", "Five trigger styles", "Seven approver styles, four decision
modes"; `data.mdx` L4 "40+ field types"; `approvals.mdx` L4, L10, L26
(two headings: "seven resolution styles", "four decision modes"; no page
linked those anchors, `check:doc-anchors` green); `automation.mdx` L4
"Five trigger styles"; `analytics.mdx` L4, L12, L29 "~20 / roughly
twenty chart families", "four report shapes".
- `content/docs/frontend/plugins/index.mdx` L24 "14+ official plugins"
(18 exist); `frontend/architecture-overview.mdx` L317–L330 "20+ hooks",
"91+ Shadcn UI atoms", "35+ field renderers", "20 plugin packages", "(15
more)".
- `content/docs/protocol/objectql/index.mdx` L114 and `schema.mdx` L1036
"20+ field types"; `query-syntax.mdx` L350, L1217 "all five drivers",
L1041 "All six functions".
- `content/docs/plugins/packages.mdx` L7 "72 package manifests", L27
"all 15 protocol domains"; `protocol/kernel/config-resolution.mdx` L149
"19 types"; `api/error-catalog.mdx` L7 "9 error categories and 56 error
codes" (the page itself is the catalogue; no gate pins either number).
- `examples/app-todo/README.md` L51 "20+ fields", L66 "Actions (8)", L73
"4 Key Metrics", L77 "Reports (5)", L84 "Automation Flows (4)";
`examples/app-showcase/README.md` L159 "six protocol domains".
- `ui/packages/components/README.md` L9 "60+ Components (46 from Shadcn
+ 14 custom)"; `ui/apps/console/README.md` L11 "15+ view plugins";
`ui/packages/types/README.md` L409 "50+ members";
`ui/packages/plugin-grid/README.md` L101 "20 values and 29 types";
`ui/packages/plugin-form/README.md` L968 "all five renderers";
`ui/packages/fields/README.md` L344, L354 "All four widgets", "all eight
read sites across the four widgets"; `ui/packages/i18n/README.md` L359
"three functions".
- Code comments: `packages/spec/src/kernel/metadata-plugin.zod.ts` L82
"`hook` (24 lifecycle events)" (`HookEvent` declares eight);
`ui/packages/app-shell/src/views/metadata-admin/i18n.ts` L6, L735 and
`registry.ts` L7 "27 metadata types" (`MetadataTypeSchema` declares 31);
`ui/packages/i18n/src/namespaces/studio/zh.ts` L3190 "the other 21 node
types". Comments only; no string a user sees carried a count.
### Kept, by name
- `content/docs/api/plugin-endpoints.mdx` L129 "all 12 routes": pinned
by the cloud repo's `ai-route-ledger.ts` conformance test the sentence
cites.
- `content/docs/api/client-sdk.mdx` L916 and
`packages/client/CLIENT_SPEC_COMPLIANCE.md` L10 "27 routes": a dated
audit measurement.
- `content/docs/ui/create-vs-edit-form.mdx` L92 "all 40 fields",
`protocol/kernel/index.mdx` L164 "200+ plugins" and L233 "15 languages":
hypotheticals, not inventories.
- `content/docs/frontend/plugins/plugin-editor.mdx` L73 and
`plugins/index.mdx` L169 "100+ languages": Monaco's inventory, not ours.
- `examples/README.md` L14, `examples/app-crm/README.md` L5 and
`getting-started/examples.mdx` L240–L244 ("10+ objects", "15+ actions
per domain", "5 AI agents"): HotCRM, an external repository.
- `skills/objectstack-i18n/SKILL.md` L242–L244 ("2-3 locales", "5-20
objects"): sizing thresholds, not counts.
- `ui/packages/fields/src/widgets/number-format.ts` L273 "10 locales x
18 values x 4 precisions": a recorded measurement.
- Counts of two or three that structure the paragraph enumerating them
("three run modes", "Three view kinds", "Three action types", "two
channels") in `skills/**`: left as written.
- Everything on the card's own out-of-scope list: release notes and
CHANGELOGs, `docs/audits/**`, `ui/docs/**` (ADRs, audits, design, RFCs),
`packages/spec/DEVELOPMENT_PLAN.md`,
`packages/core/PHASE2_IMPLEMENTATION.md`,
`packages/spec/liveness/README.md`,
`content/docs/permissions/system-context.mdx`, sample CLI output, the
computed "10 skills" and generated "106 components",
`skills/objectstack-ai/SKILL.md` L87.
### Skills readings (Tier H, `skills/**`)
Deletion only. Lines are unchanged in every touched file (no re-wrap);
tokens are `ceil(utf8 bytes / 4)` on the whole file, stamp line
included.
| File | Lines before → after | Tokens before → after |
|:--|:--|:--|
| `skills/objectstack-data/SKILL.md` | 472 → 472 | 6111 → 6106 |
| `skills/objectstack-data/rules/field-types.md` | 320 → 320 | 3151 →
3151 (one word swapped, equal bytes; ceiling 3158, PR #27475's
seven-token headroom there is intact) |
| `skills/objectstack-data/references/data-hooks.md` | 973 → 973 | 10066
→ 10064 |
| `skills/objectstack-automation/SKILL.md` | 452 → 452 | 6454 → 6453 |
| `skills/objectstack-query/SKILL.md` | 403 → 403 | 4173 → 4172 |
| `skills/objectui/README.md` | 64 → 64 | 729 → 728 |
| `skills/objectui/guides/schema-expressions.md` | 642 → 642 | 6571 →
6565 |
| `skills/objectui/guides/plugin-development.md` | 482 → 482 | 4184 →
4183 |
Whole package: the sum of every `SKILL.md` is 4610 → 4610 lines; the
ratcheted authored bundle is 207857 → 207840 tokens (the gate's own
figure after: `ratcheted (authored) 207840 / 217474`).
`@objectstack/skills` patch changeset:
`.changeset/27522-inventory-counts.md`.
## Tests
None added or changed: the diff is prose, READMEs, one changeset and
four code comments. No behaviour is tested by a count.
## Acceptance notes
- `packages/metadata/README.md`'s table was not merely stale. It listed
`validation`, `theme`, `workflow`, `trigger`, `schedule`, `manifest`,
`permission_set`, `role`, `profile`, `rag_pipeline`, `model` and
`prompt`, none of which is in `MetadataTypeSchema` (31 names on `main`),
and the spec's own comment says there is no `trigger` and no
`validation` metadata type. Keeping those names would have taught the
wrong thing, so the rule's second arm applies: the section now points at
the registry and keeps no copy.
- Serial constraint with PR #27475 (edits
`skills/objectstack-data/rules/field-types.md` L181): this PR edits L9
only; the branch is on today's `main` tip (`aef631b8`, which is an
ancestor of this head), so there was nothing to merge.
- Out of scope, noted and not filed (carrier: none):
`ui/packages/plugin-grid/README.md` keeps a hand-written export list
under "The complete public surface"; nothing reads it against
`src/index.ts`. Same class as this card, a different remedy (generate or
delete the list), and not a count.
- Cross-lane per triage 6495060086: one PR carries the skills, devx,
server, spec, ui and example halves; the claim declares the other lanes'
files; the extra sites above are named here as the seat asked.
## Verification
Local gates, run at `93c9b71f`, every exit code captured before any
pipe:
- `node scripts/check-skills-token-ratchet.mjs` → exit 0 (`✓
check-skills-token-ratchet: 84 authored bundle file(s) within their
ceilings; 10 generator-owned file(s) measured, not ratcheted.`), plus
`--self-test` → 0.
- `pnpm --filter @objectstack/spec build && check:generated` → `✓ All 14
generated artifacts are up to date` (check:docs, check:skill-docs,
check:skill-refs, check:api-surface, check:authorable-surface,
check:export-origins, check:liveness, check:strictness-ledger,
check:meta-url-spelling all ✓); `check:llms-txt` → 0.
- `pnpm check:doc-anchors`, `check:doc-authoring`,
`check:doc-frontmatter`, `check:docs-audit-scope`,
`check:docs-single-h1`, `check:docs-spec-enumerations`,
`check:docs-redirects`, `check:nul-bytes`, `check:issue-citations`,
`check:release-notes`, `check:release-page-status`,
`check:closed-ceremony-text`, `check:published-readme-links`,
`check:skill-compatibility`, `check:skill-frame-sync`,
`check:skill-identifier-liveness`, `check:pm-skill-id-lint`,
`check:org-identifier`, `check:keyed-text-bounds`,
`check:corpus-claim-drift`, `check:role-word`, `check:pm-prior-rulings`,
`check:platform-checklist`, `check:examples-live-imports`,
`check:spec-docblock-symbol-anchors`, `check:overlay-whitelist-table`,
`check:system-context-census`, and the `node scripts/check-*.mjs` docs
families the derivation named → all exit 0.
- NOT MEASURED locally, prerequisite not met (exit 3), left to CI:
`check:i18n` (needs the built CLI), `check:docs-transcript-drift` (needs
`@objectstack/lint` built), `check:skill-examples` (needs
`packages/client-react/dist`); `pnpm --filter @object-ui/i18n
type-check` and `@object-ui/app-shell type-check` stop on the unbuilt
`ui/packages/core` and `@object-ui/fields` closure (the diff in those
packages is comments only); every other family in `dispatch-gates
--commands` (repo-wide scans such as `pnpm lint`, the `ui/` test and
build lanes, Test Core) is CI's run and is cited from this PR's
check-runs.
- `node scripts/pm/dispatch-gates.mjs --ran` over the recorded subset:
see the os-dev-report comment on the card for the reconciliation line.
## Human Minimum
- [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic.
(one `//` comment changed)
- [x] 2. Every name I added uses the casing for its kind. (no names
added)
- [x] 3. No formatter ran; `pnpm lint` is CI's run.
- [x] 4. One issue, one branch off an up-to-date `main`, one pull
request.
- [x] 5. A change that publishes carries a changeset, and both
declaration lines are filled in here and in the changeset.
- [x] 6. `packages/spec` touched: `check:generated` reports all 14
artifacts current; nothing to regenerate for a comment.
- [x] 7. No hand edits to `content/docs/references/` or
`packages/*/CHANGELOG.md`;
`content/docs/releases/implementation-status.mdx` is the one
releases-tree file, a living status page the card and triage put in
scope, in a docs-only PR.
- [x] 8. Title, body and comments are in English.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_017ihL2fNkBkNQ88EMzvcrPW
---
_Generated by [Claude
Code](https://claude.ai/code/session_017ihL2fNkBkNQ88EMzvcrPW)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 6ca1a47 commit 72b08ee
40 files changed
Lines changed: 97 additions & 83 deletions
File tree
- .changeset
- content/docs
- api
- capabilities
- frontend
- plugins
- plugins
- protocol
- kernel
- objectql
- docs/qa/platform-checklist
- examples
- app-showcase
- app-todo
- packages
- metadata
- spec
- src/kernel
- skills
- objectstack-automation
- objectstack-data
- references
- rules
- objectstack-query
- objectui
- guides
- ui
- apps/console
- packages
- app-shell/src/views/metadata-admin
- components
- fields
- i18n
- src/namespaces/studio
- plugin-form
- plugin-grid
- types
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
| 12 | + | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | | - | |
| 29 | + | |
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
26 | | - | |
| 26 | + | |
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
16 | | - | |
| 15 | + | |
| 16 | + | |
17 | 17 | | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
30 | | - | |
| 30 | + | |
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
314 | 314 | | |
315 | 315 | | |
316 | 316 | | |
317 | | - | |
318 | | - | |
319 | | - | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
320 | 320 | | |
321 | 321 | | |
322 | 322 | | |
323 | 323 | | |
324 | | - | |
| 324 | + | |
325 | 325 | | |
326 | 326 | | |
327 | 327 | | |
328 | 328 | | |
329 | 329 | | |
330 | | - | |
| 330 | + | |
331 | 331 | | |
332 | 332 | | |
333 | 333 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| |||
0 commit comments