Repository navigation
Commit a8f2afa
skills(ui-merge): move the objectui skill bundle into the root skills/ catalog (decision C) (#26097)
<!-- claude-projects-attribution: {"github_login":"os-tesla"} -->
_Requested by **Tesla** · [project
thread](https://claude.ai/code/project/chan_01AXsQkLFKRdQCqQ3RTr6Jao?thread=cmsg_01AXsQkLFKRdQCqQ3RTr6JaoUZLA31GTDTu7xXLQYnV3cw)_
Fixes #25832
Part of #25677 (decision C aftercare).
Clause-②: no
Metadata-protocol: none
**Tier H** (`skills/**`). This PR stays a draft until an authorized
GOVERNED_APPROVERS review. It also carries two maintainer-only ratchet
entries, listed under 维护者速读 below.
## 维护者速读(草稿)
**改了什么**:objectui 的技能包从 `ui/skills/objectui` 搬进仓根 `skills/objectui`,去掉
`metadata.internal: true`,`@objectstack/skills` 从此带上 `objectui` 这个技能(共
11 个)。切换 PR 里因为撞门禁被回退的 J 系列 19 号补丁在 `main` 上重新落地,读这个包的 ui 测试和脚本跟着改路径。
**为什么改**:你裁的 C 是一个技能目录服务两个产品。切换时用 `internal: true` 把包藏起来,现在从合并后的仓装技能的
agent 拿不到任何 objectui 技能。
**风险与代价(含回滚)**:
- **要你点头的第一项(token 棘轮)**:`scripts/check-skills-token-ratchet.mjs` 新增 27
行 `CEILINGS`,每行按落地计数定价、零余量,发布目录多出 50,614 token;不抬任何已有的上限。
- **要你点头的第二项(角色词基线)**:`scripts/role-word-baseline.json` 新增 1 行
`skills/objectui/guides/auth-permissions.md: 13`。「role」保留词 38 处里改写 24
处,1 处放进 better-auth 线格式围栏,剩下 13 处是 `@object-ui/permissions` 真实 API 的
`roles` 键和 D3 改名的历史说明。
- 回滚就是 revert 本 PR,包回到 `ui/skills` 并重新隐藏。
**席位意见**:
**你要做的**:批准本 PR,就等于同意上面两项入账(27 行定价、角色词基线 1 行 13
处)。如果不同意其中一项,在评论里说明,我按你的意见改。
## What changed
- **The move (patch 19 of the cutover series, re-applied on `main`).**
`git mv ui/skills/objectui skills/objectui` (27 renames).
`ui/scripts/skill-bundle-root.mjs` decides where the bundle lives (the
ui root in fixtures, else the monorepo root above it), and the ui gates
(`check-skills-paths`, `check-skill-examples`,
`check-skill-eval-tokens`, `check-doc-json-fences`,
`check-shell-escape-residue`), their tests, `markdown-test-inputs`,
`doc-version-claims`, `layered-read-declared-path-4016` and four package
tests read it through the helper. `@objectstack/spec`'s
`check-skill-examples` leaves `skills/objectui` to the ui gate, which
judges it against the built `@object-ui/*` types.
`scripts/check-skill-identifier-liveness.mjs` indexes `ui/packages`,
where the two identifiers the bundle cites are implemented. The one
rejected hunk (`doc-version-claims.test.ts` import) was re-applied by
hand, because `main` had gained a `root-ci` import there since the patch
was cut.
- **`skills/objectui/SKILL.md`.** `metadata.internal: true` is removed.
`compatibility:` now reads `Requires @objectstack/spec 18.x; …`, and
`metadata.version` is stamped by `check-skill-compatibility-version.mjs
--fix` (`2.0` → `18.1.0`).
- **Reserved word (ADR-0090 D3).** Expression examples gate on
`data.status`, `user.email` or a position instead of a `role` field. The
testing guide's evaluator example reads `user.position`. Prose says
"positions", "grant key" or "permission checks". The
`@object-ui/permissions` example renames its local array to
`definitions` (the `roles` prop and keys are the package's real API and
stay). `UserMenu`'s comment no longer claims it shows a role, because
the component renders none. The better-auth display fields move into a
fenced block marked `os:vendor-wire better-auth`.
`ui/packages/permissions/src/__tests__/skill-guide-permission-config.test.tsx`
pins the guide example verbatim, so it carries the same edits.
- **`visibleOn`.** `guides/schema-expressions.md`'s "Combined
conditions" example uses `visibleWhen`, the canonical key in
`@object-ui/types` `BaseSchema` (`visibleOn` there is `@deprecated
ADR-0089 — use visibleWhen`).
- **`plugin-development.md`.** The color input passes `value ?? ''`
instead of a hard-coded black hex fallback. `check:pm-skill-id-lint`
read the all-decimal hex as an issue id. This keeps the epic PM's ruling
on patch 19, option (a).
- **Token ratchet.** 27 `CEILINGS` rows, each pinned at its landed count
with zero headroom, under a comment block that cites decision C. No
existing row moves.
- **Role-word baseline.** One row was added:
`"skills/objectui/guides/auth-permissions.md": 13`. The `--update` diff
touches no other row.
- **Readers.** `skills/README.md` points to `./objectui/SKILL.md`
instead of the objectui repository. `ui/skills-lock.json` points to
`../skills/objectui`.
- **Changeset.** `@objectstack/skills` patch
(`.changeset/25832-objectui-skill-in-catalog.md`).
## The five gates on the card, before → after
"Move" is the raw move commit `0c57048f` (patch 19 plus the flag
removal, nothing else). "Head" is this PR's head.
| Gate | `main` `bbf70614` | Move `0c57048f` | Head |
|---|---|---|---|
| `node scripts/check-skills-token-ratchet.mjs` | 0 (bundle not in
`skills/`) | **1**: 27 of 91 files unpriced | **0**: 81 authored files
within ceilings, 10 generator-owned |
| `… --self-test` | 0 | **1**: 2 failures (unpriced files; SKILL.md
ceilings 10 vs 11) | **0**: 79 cases |
| `pnpm check:role-word` | 0 | **1**: 7 files, 38 new uses | **0** |
| `@objectstack/spec` repo test
`src/ui/visibility-alias-keys-retirement.test.ts` | — | **1 failed / 11
passed** (`skills/objectui/guides/schema-expressions.md authors
"visibleOn"`) | **12 / 12** |
| `node scripts/check-ci-filter-parity.mjs` (+ `--self-test`) | 0 / 0
(120 assertions) | 0 / 0 | 0 / 0: no count to update, because
`skills/**` is a `@objectstack/skills#build` input covered by `core` on
`main` |
| `pnpm --filter create-objectstack test` (template-consistency "skills
catalog boundary") | 0 (bundle hidden by `internal: true`) | — | **0**:
18 files / 269 tests, flag removed |
The visibility row's "before" was measured on head with only
`schema-expressions.md` restored from `0c57048f`. The restore leg was
checked with `git diff HEAD` (empty) and blob `9b97e3c4a6`.
Role-word split: 38 → 24 rewritten, 1 fenced (`os:vendor-wire
better-auth`), 13 baselined. The 13 are `auth-permissions.md`'s
`@object-ui/permissions` API (`ObjectPermissionConfig.roles`, the
`roles` prop and keys, about 9 uses) and the paragraph recording the D3
`roles` → `positions` retirement (4 uses).
## `skills/**` readings (lines are the measure; token counts from the
ratchet's convention)
- **Whole bundle:** 5428 → 5434 lines (+6). `auth-permissions.md` 409 →
416 (the vendor-wire fence). `SKILL.md` 143 → 142 (the `internal` line).
The other 25 files are unchanged in length. Raw bytes/4 50582 → 50619.
- **Changed files:** `SKILL.md`, `guides/architecture.md`,
`guides/auth-permissions.md`, `guides/page-builder.md`,
`guides/plugin-development.md`, `guides/schema-expressions.md`,
`guides/testing.md` and `rules/protocol.md`. All except the two above
keep their line count. `skills/README.md` stays at 133 → 133.
- **Catalog SKILL.md sum:** 4383 → 4525 lines (+142, the objectui
`SKILL.md`).
- **Priced catalog:** ratcheted subtotal +50,614 tokens (the 27 new
rows). Bundle total 206,118 tokens. The `@objectstack/skills` build
copies 92 files across 11 skills.
## Verification (head 12e779c)
- `skills` CLI: `npx skills@1.7.2 add ./skills --list` → "Found 11
skills", `objectui` listed. `pnpm --filter @objectstack/skills build` →
92 files across 11 skills, read back byte-identical.
- Skills family: `check:skill-compatibility`,
`check:skill-identifier-liveness`, `check:skill-frame-sync`,
`check:skill-top-level-keys`, `check:pm-skill-id-lint` 0.
`@objectstack/spec` `check:skill-refs`, `check:skill-docs`,
`check:skill-examples` 0 (after `@objectstack/spec` and the
`client-react` / `client` closures were built).
- ui gates (`ui/scripts`): `check-skills-paths`, `check-skill-examples`
(after the scoped build its `--build-filter` names),
`check-skill-eval-tokens`, `check-doc-json-fences`,
`check-shell-escape-residue` all 0.
- ui tests: `ui/scripts/__tests__/` 180 files passed, 2 skipped / 5273
tests passed. The 14 package test files that read the bundle: 159/159.
**Derived gates (head `12e779cd`):** `node scripts/pm/dispatch-gates.mjs
--commands` derives 107 families (100 commands at `67d25683` plus 7
changeset-family commands after the changeset commit). 106 exit 0.
`--ran` reconciliation: 107 of 107 accounted, 0 unrun.
`check-plugin-teardown-shape --self-test` first exited 3 because its
pinned commit `621a4876` was missing from the shallow clone. After `git
fetch origin 621a487… --depth=1` it exits 0 (48 cases). **NOT
MEASURED:** `pnpm check:dual-build-cjs-loads`, exit 3 (prerequisite:
every published package needs a `dist/`, so it needs a full workspace
build). The diff changes no package's build output except
`@objectstack/skills`' copied catalog, so it is left to CI's Lint & Repo
Gates.
**Push-environment battery (head `12e779cd`):** `GITHUB_ACTIONS=true
GITHUB_EVENT_NAME=push node scripts/pm/check-dispatch-gates.mjs`: 2182
cases pass (1901 fast + 265 slow = 2166 partitioned, plus the census), 0
failed, exit 0.
## Acceptance notes
- **The generated catalog index omits `objectui`.**
`packages/spec/scripts/build-skill-docs.ts` admits only `objectstack-*`
directories, so the `skills/README.md` index table and the
skills-reference page list 10 skills. The CLI, the package and the
README's hand-written routing line all see 11. Admitting a
non-`objectstack-` skill there is a generator change, outside this card.
Carrier: the epic PM.
- **A `skills/objectui/**`-only PR does not trigger the ui lanes.** The
ci.yml `filter` job's `ui` glob is `ui/**`, so the ui skill gates ported
into Lint UI no longer see the bundle's own edits. This is bill item 35.
Its owner is the 4b ci.yml work (#25712, Tier H). This PR does not touch
`.github/workflows/**`.
- **The `ui/skills/**` register row is now empty.** `GOVERNED_SURFACES`,
the CODEOWNERS `/ui/skills/` line and AGENTS.md Prime Directive #14
still name `ui/skills/**`. The root `skills/**` row governs the bundle
now. Dropping the row is an AGENTS.md / pm-dispatch SKILL.md edit at
zero line headroom, so it is left to the 4b governance rewrite.
- **`@object-ui/permissions` still spells its grant keys `roles`.** That
is objectui's own API, older than ADR-0090 D3. Renaming it is a code
change, not a guide change, and the 13 baselined uses go away with it.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01XB8hLKWX18hti3qKrQAJfm)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 1bbb7bf commit a8f2afa
51 files changed
Lines changed: 320 additions & 116 deletions
File tree
- .changeset
- packages/spec/scripts
- scripts
- skills
- objectui
- evals
- guides
- rules
- ui
- content/docs/guide
- packages
- components/src/__tests__
- permissions/src/__tests__
- types/src/__tests__
- scripts
- __tests__
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
415 | 415 | | |
416 | 416 | | |
417 | 417 | | |
418 | | - | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
419 | 430 | | |
420 | 431 | | |
421 | 432 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
257 | 257 | | |
258 | 258 | | |
259 | 259 | | |
260 | | - | |
| 260 | + | |
261 | 261 | | |
262 | 262 | | |
263 | 263 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
680 | 680 | | |
681 | 681 | | |
682 | 682 | | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
683 | 724 | | |
684 | 725 | | |
685 | 726 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
45 | | - | |
| 45 | + | |
| 46 | + | |
46 | 47 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
123 | 123 | | |
124 | 124 | | |
125 | 125 | | |
126 | | - | |
127 | | - | |
| 126 | + | |
| 127 | + | |
128 | 128 | | |
129 | 129 | | |
130 | 130 | | |
| |||
File renamed without changes.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | | - | |
8 | 7 | | |
9 | | - | |
| 8 | + | |
10 | 9 | | |
11 | 10 | | |
12 | 11 | | |
| |||
31 | 30 | | |
32 | 31 | | |
33 | 32 | | |
34 | | - | |
| 33 | + | |
35 | 34 | | |
36 | 35 | | |
37 | 36 | | |
| |||
File renamed without changes.
File renamed without changes.
0 commit comments