Skip to content

skills: stale teaching after the ui merge and the moved-verbatim refactors — objectui as a separate repo, three dead SKILL.md anchors, bootstrap.md pins 18.1.0, examples omit sharingModel, retired plugin-ai eval, $empty untaught #31114

Closed

Description

@objectstack-fleet

domain:skills#3 · huangyiirene · session_01J8VVAmFFuy5ap2gXYq25sy

Filing gate ③ (maintainer-directed) · class: b (the skill contradicts what it or the contract declares) with one coverage row named as such · reach: every agent that reads @objectstack/skills@18.3.0; items 1 and 3 are also what a human sees first when opening the catalog.
Filed from the skills review thread on the maintainer's words, verbatim (2026-11-07): 「按照你的建议立卡」 · 「时间久了,立卡的时候重新确认一下问题」. Every item re-read on main aa3e21cc (2026-11-07); review report https://claude.ai/artifact/UXUaprHxBYrXE8DfJpfRGU (P1 section). ⛔ Not a claim. Triage sets the grade and the lane; item 2's generator half lives in packages/spec/scripts and may be split to domain:spec.

Items (one PR, or two at whole-file boundaries)

  1. ObjectUI is still "a separate repo". skills/README.md:138 "../objectui — Studio UI (separate repo)" with a link to the archived repository; skills/objectui/README.md:3 (skills.sh badge for objectstack-ai/objectui), :10 (npx skills add objectstack-ai/objectui), :64 (repository link); skills/objectui/guides/page-builder.md:303 links the gantt README at github.com/objectstack-ai/objectui/blob/main/…. The UI lives at ui/ in this repository since cutover(ui-merge): the switch itself — freeze both repos, git subtree add objectui as ui/ with its adaptation commit, land 4a / PR B / 4b PR 2 in order, migrate open objectui branches and cards, archive the objectui repo (parent #25677, 5/6) #25752 and the objectui skill ships inside @objectstack/skills since aftercare(ui-merge): move the objectui skill bundle into the root skills/ catalog (decision C): token pricing, reserved-word uses, visibleOn alias, internal flag (parent #25677, Tier H) #25832. Fix: point at ui/ and the one pinned experimental_sync install the catalog README teaches at :18-24.
  2. The catalog index omits objectui. packages/spec/scripts/build-skill-docs.ts:287 filters skill directories by startsWith('objectstack-'), so the generated index in skills/README.md and the docs page list ten skills and never the eleventh, while skills/README.md:114-134 routes to objectui by hand. Fix: filter on "has SKILL.md and is not metadata.internal" (the predicate template-consistency.test.ts already applies), or state in the README why objectui is listed apart.
  3. Three anchors into sections that no longer exist in SKILL.md (left by the "moved verbatim" refactors): skills/objectstack-data/references/data-hooks.md:961 → ../SKILL.md#lifecycle-hooks; skills/objectstack-platform/rules/plugin-lifecycle.md:259 → ../SKILL.md#complete-plugin-example (the section is references/plugin-development.md ## Complete Plugin Example); skills/objectstack-platform/rules/service-registry.md:147-149 → ../SKILL.md#well-known-plugin-names--services (no such heading anywhere). The same sentence says the table has "13 rows" — a hand-written count Hand-written inventory counts in live docs, skills and READMEs drift silently: delete the number, keep the names or point at the source (cross-lane sweep) #27522's sweep missed; delete the number per that ruling.
  4. skills/objectstack-platform/references/bootstrap.md:147-148 pins "@objectstack/spec": "18.1.0" / "@objectstack/runtime": "18.1.0" in the starting package.json, while every SKILL.md frontmatter and the published package are 18.3.0. skills: objectstack-platform/references/bootstrap.md still teaches ^17.0.0 for every @objectstack/* dependency, while the scaffolders now write the exact version (the governed half of #25510) #25666 fixed this file from ^17.0.0 to an exact version once; it drifted again because nothing reads the body (see the gates card filed alongside).
  5. Examples omit sharingModel. skills/objectstack-data/SKILL.md:65 says a publish with no authored sharingModel is refused with security-owd-unset (maintainer ruling 2026-08-13). Yet rules/relationships.md has 12 ObjectSchema.create calls and 2 sharingModel; rules/lifecycle.md 4/0; rules/datasources.md 1/0; skills/objectstack-platform/references/bootstrap.md 1/0; references/plugin-development.md 1/0. An AI copies the example and meets the refusal the skill itself describes. Fix: author sharingModel on every complete object example (fragments that show one key may say so).
  6. System columns declared as fields. skills/objectstack-data/references/examples-objects.md:45-46 declares created_at / created_by as ordinary fields; rules/indexing.md:210-212 indexes tenant_id as if authored. packages/spec/src/data/object.zod.ts:3121 injects the audit columns through systemFields.audit (default true) and the tenant column through systemFields.tenant. The implementer confirms whether an explicit declaration is refused or merely shadowed, then rewrites the examples with business fields and one sentence on systemFields.
  7. A retired package in an eval. skills/objectui/evals/project-setup.json:20 expects the answer to list @object-ui/plugin-ai; the package was retired by retire the zero-consumer surface: nine dead modules (2,211 LOC), plugin-ai, runner's publish flag, test-only reset helpers on public barrels, the providers trio, 122 dead i18n keys, root orphans #25921 and skills/objectui guides still teach @object-ui/plugin-ai, a package retired by #25921 (PR #27042) #27048 removed it from the guides but not from this fixture, so the eval now rewards a wrong answer. Fix: replace with a live plugin from ui/packages/.
  8. Coverage row (not a wrong sentence): skills/objectstack-query/rules/filters.md:5-27 (Operator Reference) and SKILL.md:125 teach $null / $exists but never $empty, which packages/spec/src/data/filter.zod.ts:1829 / :1905 declare on the operator schemas and which is the lowering target of the view filter pair is_empty / is_not_empty (:2760-2763). Implementer first confirms $empty is accepted on the query where path (FILTER_OPERATORS membership, :3367), then adds the row; $regex / $options stay out (retired at protocol 17, migrations/entries/semantic/17.filter-regex-options-retired.ts).
  9. Optional, one line: skills/objectstack-upgrade/SKILL.md:128 lists objectstack-pm-dispatch in the skills remove roster with no word that the skill was deleted (Delete the published skills/objectstack-pm-dispatch skill — a stale three-state copy of the internal PM protocol with no known consumer, shipped into every new app — and retire its catalog row, docs page, frame-sync copy, tier-table entry, ratchet pins and gate fixtures (maintainer ruling 2026-09-10) #17311); a reader takes it for a live skill. Add "(removed in 18; present only in older installs)".

Acceptance

  • Relative links and #anchors under skills/** resolve (the implementer runs a link walk; the gates card proposes making it a check).
  • Every complete object example carries sharingModel; check:skill-refs, check:skill-docs, liveness, token ratchet green; evals touched for items 5–8.
  • Level: skills/** text (Tier H) plus, for item 2, packages/spec/scripts/build-skill-docs.ts: '@objectstack/skills': patch changeset (and '@objectstack/spec': patch if the generator moves), Clause-②: no, Metadata-protocol: none.

Dedupe (REST search, open and closed)

Related: #25832, #25752, #27522, #25666, #27048, #14297, #17311.

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    documentationImprovements or additions to documentation
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Nov 7, 2026
  2. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p2 · domain:skills · 2026-11-07T11:54Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    Claim: PM loop round 17 · 2026-11-07T13:45Z
    Session: session_01J8VVAj7CvjkGXvgXzd6RZ7
    Account: huangyiirene
    Branch: claude/project-thread-4ejvqq (the card thread's designated branch; dev session session_01J8VVAjQXxnSqEopTLRDyHp)
    Worktree: objectstack-issue-31114
    Domain: domain:skills
    Seat: domain:skills#3
    File surface: item 1 skills/README.md, skills/objectui/README.md, skills/objectui/guides/page-builder.md; item 2 packages/spec/scripts/build-skill-docs.ts (the skill-directory filter) and its regenerated output (cross-seat note for packages/spec/scripts, per the triage); item 3 skills/objectstack-data/references/data-hooks.md (the dead anchor), skills/objectstack-platform/rules/plugin-lifecycle.md, rules/service-registry.md; item 4 skills/objectstack-platform/references/bootstrap.md; item 5 complete object examples in skills/objectstack-data/rules/relationships.md, rules/lifecycle.md, rules/datasources.md, skills/objectstack-platform/references/bootstrap.md, references/plugin-development.md; item 6 skills/objectstack-data/references/examples-objects.md, rules/indexing.md; item 7 skills/objectui/evals/project-setup.json; item 8 skills/objectstack-query/rules/filters.md, skills/objectstack-query/SKILL.md; item 9 skills/objectstack-upgrade/SKILL.md (one line); eval cases for items 5–8 in the touched skills' evals/*.json; .changeset/*.md; scripts/check-skills-token-ratchet.mjs only by standing ruling 6513306068 for a measured remainder (stop on breach)
    Container & model: M, mode:thread, project-default model, effort: high. dispatch-gates --tier is run by the thread and reported; any mandate above this thread's is waived by the maintainer's standing order in this project (2026-11-03) and said so in the PR body; this seat runs the contract review.
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (published teaching left stale by the ui merge and the moved-verbatim refactors)
    Thread-read: 6706611171
    Premise: holds on main 5f003744 per the card's re-read on aa3e21cc; the thread re-measures each item and confirms items 6 and 8 from code before editing them.
    Serial constraints: skills/objectstack-data/references/examples-objects.md is also changed by PR #31127 (#31113); item 6's edit there lands after that PR merges, by merging origin/main. The seat runs serially (one card) by the maintainer's word of 2026-11-07.

    Changeset '@objectstack/skills': patch (plus '@objectstack/spec': patch if the generator ships in a published package). Fixes #31114. Tier read by check-governed-merges at the PR.

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 7, 2026
  5. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    ACCEPT → PR #31152 comment 6709202544, head 356cc7ae. Tier H: pm:awaiting-merge, approval requested from os-zhuang and hotlong. Seat rulings A–C (item 7 and the examples-objects.md half of item 6 were already correct; item 3's service-registry anchor exists in plugin-development.md) are recorded in the PR body. Follow-up: #31158 (releases overview and upgrading.mdx still point at the archived objectui repository).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationdomain:skillsDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions