Skip to content

skills(ui-merge): move the objectui skill bundle into the root skills/ catalog (decision C) - #26097

Merged
os-zhuang merged 7 commits into
mainfrom
claude/project-thread-w3eisz
Oct 26, 2026
Merged

os-zhuang merged 7 commits into
mainfrom
claude/project-thread-w3eisz

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Tesla · project thread

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 621a4876… --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


Generated by Claude Code

…patch 19 re-applied on main)

Claude-Session: https://claude.ai/code/session_01XB8hLKWX18hti3qKrQAJfm
Co-authored-by: Claude <noreply@anthropic.com>
…e objectui bundle

Claude-Session: https://claude.ai/code/session_01XB8hLKWX18hti3qKrQAJfm
Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XB8hLKWX18hti3qKrQAJfm
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json aa2f8e31f3ef355f576ba65bed672ff923614592 → packageMentionDocs.

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling labels Oct 26, 2026
@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 26, 2026 12:22
@os-zhuang
os-zhuang added this pull request to the merge queue Oct 26, 2026
Merged via the queue into main with commit a8f2afa Oct 26, 2026
71 checks passed
@os-zhuang
os-zhuang deleted the claude/project-thread-w3eisz branch October 26, 2026 13:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tests tooling

Projects

None yet

3 participants