You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Skills optimization flight — skills/objectui: RESTRUCTURE (≈ −21,600 tok of 64,022, −34%) — ~19% of the package is addressed at a contributor to this repo (console-development.md, no-touch-zones.md, half of architecture.md), one rule stated up to four times, 11 vestigial guide frontmatters, and three evals that fail correct answers #7251
Member card of the skills catalog optimization program objectstack-ai/objectstack#14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectui origin/main67dadd6. Full findings table = audit record: the dev posts audit/objectui/findings.md (seat scratchpad) verbatim as the first comment at claim time. Published skills/** is a governed surface in this repo (maintainer ruling 批 #7, ui#6866): .md content ⇒ maintainer review, draft PR, human merge.
Audit summary
29 files, 64,022 tokens (guides 45,065 · rules 8,602 · SKILL.md 2,272 · README.md 1,113 · evals 6,079); largest file guides/console-development.md 7,600 tok (11.9%). Enforcement here: exactly one skills gate, check:skills-paths (paths in prose code spans exist on disk — green, 92/93), and nothing else: no token ratchet, no os:check fence gate (grep -rc "os:check" skills/objectui/ = 0), doc-link/component-type/snippet gates all exclude skills/**. Real usage (437 schema-catalog JSONs + apps + examples), true authoring frequencies: text 702, flex 248, stack 153, button 126, card 93, box 84, form 81 … against 230 registered types the package names ~98. Every @object-ui/* import in a TS fence resolves at 67dadd6 (@object-ui/mobile exists). Verdict RESTRUCTURE: ~12,000 tok addressed at a contributor to THIS repo (customer installs have no apps/console/, no packages/components/src/ui/**, no pnpm-workspace.yaml); ~8% in-package duplication; ~5% restating objectstack anchors; 11 vestigial standalone-skill frontmatters; the router (the file's only decision-changing construct) buried under 90 lines of preamble.
Top findings
#
id · span
proposal
Δtok
1
OUI-B-01 · guides/console-development.md:1-510 — addressed at a maintainer of this repo
Correctness (zero delta, HIGH, fix in this flight)
OUI-H-01evals/mobile.json:36-44 requires useSwipe/useLongPress — zero hits repo-wide; the API is useGesture (packages/mobile/src/index.ts:25): the eval fails a correct answer.
OUI-H-03evals/page-builder.json eval 2 requires the literal token props — inverting the package's most-repeated rule (rules/protocol.md:94-147).
OUI-H-04 all four app-composition evals require "type": "object" while the guide writes {type:'object', …}.
OUI-G-03schema-expressions.md:649 "a ${...} on title/label/value/description is never evaluated" — false on declaring types (EXPRESSION_BINDABLE_TEXT_KEYS_BY_COMPONENT; pinned in SchemaRenderer.bindableTextKeys.test.tsx) and contradicted by :47.
OUI-G-02page-builder.md:415-416 "gantt field config may also be hoisted to top-level props" — getGanttConfig reads schema.gantt or flat schema.*, never schema.props; the word is node (:427-428 says so).
OUI-G-01 ~25 lines of Chinese in page-builder.md / project-setup.md violate the package's own Core Principle 0, incl. a copy-pasteable fence with "label": "状态" (:379).
README.md:79 "stays in sync with the packages/ tree" — @object-ui/sdui-parser (14 importers) and @object-ui/react-runtime (5) appear nowhere; architecture.md:36 "@object-ui/data-* … REST, ObjectQL, GraphQL" — only packages/data-objectstack/ exists.
evals/protocol.json — three prompts on the node-vs-props-vs-properties decision, +450, paid by OUI-B-08 (the eval set covers 11 of 12 guides and 0 of 4 rules files; no token ratchet in this repo, so a new fixture file is allowed here).
(Tooling, separate follow-up card — not this flight) the os:check fence-marker convention + a port of objectstack's check-skill-examples.ts: 123 TypeScript fences are checked by nothing.
Flight scope
IMPLEMENT, split-by-file allowed with a report, as separate commits so the maintainer can drop any one: (a) contributor-only content OUT of the customer bundle — guides/console-development.md and rules/no-touch-zones.md move to a repo-internal skill under .claude/skills/ (new directory, user-invocable: false, a one-line pointer where the router listed them; also governed, same PR), the monorepo halves of architecture.md / project-setup.md / testing.md / README.md:45-97 deleted; (b) the gantt kitchen-sink moved to packages/plugin-gantt/README.md; (c) the four duplicate clusters merged into their rules/* anchor with pointers; (d) the 11 vestigial frontmatters deleted; (e) cross-package duplicates (C-01 → objectstack-ui, C-02 → objectstack-data, C-03 → objectstack-formula) deleted with one-line pointers; (f) the router first in SKILL.md with accurate trigger phrasing for the two under-described guides; (g) every correctness item above; (h) additions 1–2. Update scripts/skills-path-baseline.json only if check:skills-paths demands it.
DEFER: OUI-E-01 (gate port → a follow-up domain:skills card in this repo, filed by the dev as out-of-scope); OUI-A-01/A-02 (cross-repo routing with objectstack-ui → "follow-up" note); OUI-F-03 (@object-ui/runner / collaboration retire-surface → one row each, never the last mention).
Flight constraints (binding)
Draft PR(s) against objectui main, first line Fixes #<this card> on the closing one (Part of #<this card> on earlier splits); governed ⇒ stays draft; ⛔ never mark ready; review requests are the seat's step.
⛔ Never edit objectstack files; a missing/weaker anchor there goes in the PR body under "follow-up for ".
No token ratchet here — the discipline is the value gate: every ADD paid by a deletion in the same package; report per-file token delta (ceil(utf8 bytes/4)) before/after.
Gates: pnpm check:skills-paths, pnpm lint, pnpm type-check (this repo's spelling), the doc gates the changed paths trigger, plus the repo's check:governed-queue-guard --test <paths> (its exit 3 is the governed verdict, not a red); record the head sha. Changeset: objectui has no skip-changeset label — an empty-frontmatter changeset if the repo's rule asks for one on a skills/** change, ⛔ never request a label.
PR body: per-item 落点 | before | after keyed by finding id; per-file token delta; moved-file map; needs:contract-review on both carriers (G-02/G-03 are renderer-contract claims).
Member card of the skills catalog optimization program objectstack-ai/objectstack#14292 (maintainer mandate 2026-09-02, verbatim: 「审核所有的 skills,进行全面的优化。」). Filed by the skills lane seat (session
session_01LraLgQVGq8egUwfYZpbYt1). Read-only audit at objectuiorigin/main67dadd6. Full findings table = audit record: the dev postsaudit/objectui/findings.md(seat scratchpad) verbatim as the first comment at claim time. Publishedskills/**is a governed surface in this repo (maintainer ruling 批 #7, ui#6866):.mdcontent ⇒ maintainer review, draft PR, human merge.Audit summary
29 files, 64,022 tokens (guides 45,065 · rules 8,602 · SKILL.md 2,272 · README.md 1,113 · evals 6,079); largest file
guides/console-development.md7,600 tok (11.9%). Enforcement here: exactly one skills gate,check:skills-paths(paths in prose code spans exist on disk — green, 92/93), and nothing else: no token ratchet, noos:checkfence gate (grep -rc "os:check" skills/objectui/= 0), doc-link/component-type/snippet gates all excludeskills/**. Real usage (437 schema-catalog JSONs + apps + examples), true authoring frequencies:text702,flex248,stack153,button126,card93,box84,form81 … against 230 registered types the package names ~98. Every@object-ui/*import in a TS fence resolves at 67dadd6 (@object-ui/mobileexists). Verdict RESTRUCTURE: ~12,000 tok addressed at a contributor to THIS repo (customer installs have noapps/console/, nopackages/components/src/ui/**, nopnpm-workspace.yaml); ~8% in-package duplication; ~5% restating objectstack anchors; 11 vestigial standalone-skill frontmatters; the router (the file's only decision-changing construct) buried under 90 lines of preamble.Top findings
guides/console-development.md:1-510— addressed at a maintainer of this repo.claude/skills/(separate commit)styling.md:260-316+page-builder.md:252-304+project-setup.md:124-164+SKILL.md:139-140), expression table ×3,data-tabletrap ×3,columns/2xl×3rules/*anchor + pointersguides/page-builder.md:356-458— 1 plugin of 19 takes 33% of the guidepackages/plugin-gantt/README.md(separate commit), keep a 10-line minimalguides/*.md:1-4×11 +:8openers ×12 — vestigial frontmatter no runtime readsguides/architecture.md:14-90, 171-189— monorepo package placement:84-89+:91-126app-composition.md:13-110vs objectstack-ui:857-893, 634-648— verbatim duplicateschema-expressions.md:304-401— CEL list-view tier owned by objectstack-formula (:309-313says so)rules/no-touch-zones.md:1-136+SKILL.md:89-93— forbids editing a path no customer hasproject-setup.md:252-339, 437-444— workspace/Turbo/vitest guard/vercelconsole-development.md:117-134— deleted-symbols tablepage-builder.md:6-39, 502-530— preamble + restatement ofSKILL.md:131-151+ eval promptsschema-expressions.md:258-302vs objectstack-data:250-296—visibleWhen/readonlyWhen/requiredWhentaught twice with divergent spellingsREADME.md:45-97— eval-authoring instructions shipped to every customer sessiontesting.md:10-61— this repo's vitest projects, coverage thresholdsSKILL.md:15-19, 37-39, 49-55— router buried under positioning/style/doc-driven proseCorrectness (zero delta, HIGH, fix in this flight)
evals/mobile.json:36-44requiresuseSwipe/useLongPress— zero hits repo-wide; the API isuseGesture(packages/mobile/src/index.ts:25): the eval fails a correct answer.evals/page-builder.jsoneval 2 requires the literal tokenprops— inverting the package's most-repeated rule (rules/protocol.md:94-147).app-compositionevals require"type": "object"while the guide writes{type:'object', …}.schema-expressions.md:649"a${...}ontitle/label/value/descriptionis never evaluated" — false on declaring types (EXPRESSION_BINDABLE_TEXT_KEYS_BY_COMPONENT; pinned inSchemaRenderer.bindableTextKeys.test.tsx) and contradicted by:47.page-builder.md:415-416"gantt field config may also be hoisted to top-levelprops" —getGanttConfigreadsschema.ganttor flatschema.*, neverschema.props; the word is node (:427-428says so).page-builder.md/project-setup.mdviolate the package's own Core Principle 0, incl. a copy-pasteable fence with"label": "状态"(:379).README.md:79"stays in sync with thepackages/tree" —@object-ui/sdui-parser(14 importers) and@object-ui/react-runtime(5) appear nowhere;architecture.md:36"@object-ui/data-*… REST, ObjectQL, GraphQL" — onlypackages/data-objectstack/exists.Three funded additions
flex/stack/box/container/grid— type string, key props, when to pick which), +250, paid by OUI-B-03 — the Add automated testing infrastructure and CI/CD workflows #2/Add public roadmap, VitePress documentation site, and GitHub Pages deployment #3/Fix documentation deployment for www.objectui.org #6 most-authored types get zero mentions package-wide.evals/protocol.json— three prompts on the node-vs-props-vs-propertiesdecision, +450, paid by OUI-B-08 (the eval set covers 11 of 12 guides and 0 of 4 rules files; no token ratchet in this repo, so a new fixture file is allowed here).os:checkfence-marker convention + a port of objectstack'scheck-skill-examples.ts: 123 TypeScript fences are checked by nothing.Flight scope
IMPLEMENT, split-by-file allowed with a report, as separate commits so the maintainer can drop any one: (a) contributor-only content OUT of the customer bundle —
guides/console-development.mdandrules/no-touch-zones.mdmove to a repo-internal skill under.claude/skills/(new directory,user-invocable: false, a one-line pointer where the router listed them; also governed, same PR), the monorepo halves ofarchitecture.md/project-setup.md/testing.md/README.md:45-97deleted; (b) the gantt kitchen-sink moved topackages/plugin-gantt/README.md; (c) the four duplicate clusters merged into theirrules/*anchor with pointers; (d) the 11 vestigial frontmatters deleted; (e) cross-package duplicates (C-01 → objectstack-ui, C-02 → objectstack-data, C-03 → objectstack-formula) deleted with one-line pointers; (f) the router first inSKILL.mdwith accurate trigger phrasing for the two under-described guides; (g) every correctness item above; (h) additions 1–2. Updatescripts/skills-path-baseline.jsononly ifcheck:skills-pathsdemands it.DEFER: OUI-E-01 (gate port → a follow-up
domain:skillscard in this repo, filed by the dev as out-of-scope); OUI-A-01/A-02 (cross-repo routing with objectstack-ui → "follow-up" note); OUI-F-03 (@object-ui/runner/collaborationretire-surface → one row each, never the last mention).Flight constraints (binding)
main, first lineFixes #<this card>on the closing one (Part of #<this card>on earlier splits); governed ⇒ stays draft; ⛔ never mark ready; review requests are the seat's step.ceil(utf8 bytes/4)) before/after.pnpm check:skills-paths,pnpm lint,pnpm type-check(this repo's spelling), the doc gates the changed paths trigger, plus the repo'scheck:governed-queue-guard --test <paths>(its exit 3 is the governed verdict, not a red); record the head sha. Changeset: objectui has noskip-changesetlabel — an empty-frontmatter changeset if the repo's rule asks for one on askills/**change, ⛔ never request a label.needs:contract-reviewon both carriers (G-02/G-03 are renderer-contract claims).Refs: objectstack#14292 (anchor) · objectstack#14296 (batch-1 decisions) · objectstack#13658 / #7094 (truth sweep) · #7097 (breakpoint gate candidate).