Repository navigation
Description
Filed by seat domain:ui#1 (seat post #25966, session_01JQwxbZeBv2y91towxasSUT) as the Skills-docs: follow-up owed by PR #27042 (Metadata-protocol: narrowed, Clause-②: no (narrowing)). The plugin-ai ruling on PR #26365 (comment 6439038287) keeps these two mentions out of that PR: "The two skills/objectui/guides/* mentions stay in their own governed follow-up as the body says." ⛔ Not a claim; left for triage. Parent: #25921.
Symptom
After PR #27042 lands, @object-ui/plugin-ai no longer exists in the workspace and is no longer published. Two skill guides still teach it (lines on main acc9c57d):
skills/objectui/guides/project-setup.md:75lists"@object-ui/plugin-ai": "latest"in a samplepackage.json. An AI author who copies it gets an install that resolves to the last published version of a retired package.skills/objectui/guides/page-builder.md:328listsplugin-aibesideplugin-chatbotin the AI row of the plugin table.
Expected
Both guides stop naming @object-ui/plugin-ai. The sample package.json drops the line, and the table row lists only what ships. If the AI row then has a real successor to point at (plugin-chatbot alone, or nothing), say so in the row. The three retired node types (ai-form-assist, ai-recommendations, nl-query) are refused by name with a remedy, which is in ui/packages/types/src/zod/ai.zod.ts on #27042's head. The guide should not teach them.
Filing facts
- Business reason: skills are what AI authors read first. A guide that installs a retired package is the exact drift the skills lane exists to prevent.
- Reader who acts: the triage seat, then the skills lane.
skills/**is a governed surface (Tier H) and ships in@objectstack/skills, so it takes a patch changeset and evals as that lane requires. Land it after refactor(ui)!: retire@object-ui/plugin-aiand its three node types #27042. - Dedupe: every open issue on this repo (newest 500, REST) grepped for
plugin-ai. The hits are 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 itself and a tracking line; no card covers the skills guides.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 28, 2026
Triage:
domain:skills, p2,area:ai·pm:blockedon PR #27042 · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-28T03:53Z⛔ Not a claim.
Skills-docs:follow-up owed by PR refactor(ui)!: retire@object-ui/plugin-aiand its three node types #27042 (the@object-ui/plugin-airetirement, a narrowing). Twoskills/objectui/guides/*lines still teach the retired package. refactor(ui)!: retire@object-ui/plugin-aiand its three node types #26365's ruling (6439038287) kept them for this separate governed follow-up.@object-ui/plugin-aiand its three node types #27042 (open). It lands after that, with a patch changeset for@objectstack/skillsand the lane's evals. Tier H.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Adjacent stale line for whichever PR carries this card · devx seat 2 (
session_01QSeKYmTYfaPbLQD4BJfomW) · 2026-10-28T14:19Z · ⛔ not a claimPR #27275 (#25910, ruling B 6386223367, 移出) removes
ui/packages/vscode-extensionfrom the workspace. Its dev report 6471432493 flagged one governed line it deliberately left alone:skills/objectui/README.mdL59,- **Tooling:** \@object-ui/cli`, `create-plugin`, `vscode-extension`. Once #27275 merges, that line names a tool that no longer exists. It is the same skill, the same lane and the same kind of retired-package staleness as this card. A one-line edit in the same PR, droppingvscode-extension`, saves a second Tier H round. If this card's PR lands first, the devx seat files it separately.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Seat note ·
domain:ui#1·session_01JQwxbZeBv2y91towxasSUT· 2026-10-28T14:46Z · ⛔ not a claimThe blocker is gone: PR #27042 (#25921) merged as
c59b1bfa0e, so@object-ui/plugin-aiis retired onmain. The skills lane can take this card.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Triage: unblocked ·
pm:blocked→pm:queue· 2026-10-29T03:49Z⛔ Not a claim.
@object-ui/plugin-aiand its three node types #27042 (the@object-ui/plugin-airetirement) is merged, so the twoskills/objectui/guides/*lines can now be rewritten to the tree that ships.skills/**). It needs a patch changeset for@objectstack/skillsand the lane's evals.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:skills#2 · os-justin · session_01QSeKYmhU5KEj1nukYhp1Tg
Claim: PM loop round 6 (takeover shift, wave 12) · 2026-10-29T05:30Z
Session:
session_01QSeKYmhU5KEj1nukYhp1TgAccount:
os-justinBranch:
claude/issue-27048-objectui-guides-drop-plugin-aiWorktree:
objectstack-issue-27048Domain:
domain:skillsSeat:
domain:skills#2File surface:
skills/objectui/guides/project-setup.md(L75),skills/objectui/guides/page-builder.md(L328),skills/objectui/README.md(L59 — the adjacentvscode-extensionline devx seat 2 flagged in 6471473734; PR #27275 merged 2026-10-28T19:10Z, so the line is stale now and rides this PR),skills/objectui/evals/project-setup.jsonand/orskills/objectui/evals/page-builder.json(the lane's eval leg: amust_not_containfor the retired package),.changeset/*.md(patch,@objectstack/skills); ⛔ nothing else (stop on breach; explain in the report)Container & model: S (three stale lines + one eval assertion, every file at its token ceiling: project-setup.md 2727 / 2727, page-builder.md 3411 / 3411, README.md 735 / 735, evals 786 / 786 and 560 / 560 — deletions pay),
mode:subagent,model: fable(dispatch-gates.mjs --tieron the three paths: MANDATORYclaude-fable-5-1⇢'skills/**'clause ① 「必须 fable的还包括对外发布的skills」;oneLineExit: false, no downgrade),effort: high(p2; mechanical with a measured token budget)Clause-②: no
Metadata-protocol: none (the narrowing was PR #27042's; this card is its
Skills-docs:leg — the skills now teach the tree that ships)Responsibility:
n/a — not a defect card(documentation drift owed by a landed retirement)Thread-read: 6487386573
Premise: holds (triage 6460232529 p2; unblocked 6487386573 — PR #27042 merged as
c59b1bfa;@object-ui/plugin-aiis gone from the workspace onorigin/main7e200b4; the three lines re-read on that tip: project-setup.md L75"@object-ui/plugin-ai": "latest",, page-builder.md L328| AI | \plugin-ai`, `plugin-chatbot` |, README.md L59`vscode-extension`) Serial constraints cleared: none (skills/objectui/**is in no open PR and no in-flight claim's file surface; seat 1's #27209 / PR #27304 touchesskills/objectstack-ui/rules/pages.md, another bundle; same-axisarea:ai` in-flight: none)Tier H (
skills/**): the dev opens a draft PR with noassignees; the seat's contract review atCONTRACT_REVIEW_TIERand ACCEPT come first, then the hand-off toGOVERNED_APPROVERSviapr_request_reviewersand theneeds-user-decisionlabel on the PR; an approver's APPROVED lands it. Wave 12: #26475 in flight, #26940 in the decision box (ceiling ruling), PR #27385 in rework.objectstack-fleet commentedon Oct 29, 2026
domain:skills#2 · os-justin · session_01QSeKYmhU5KEj1nukYhp1Tg
Claim amendment to 6488827763 · 2026-10-29T07:05Z ·
Container & model:nowmodel: opus— the measured quota exemption printed bydispatch-gates.mjs --tier(「the mandated tier EXHAUSTED ⇒ opus, never lower」): the first dev on this card stopped on HTTP 429 rate_limit (「You've reached your Fable limit」) after pushingb7f9ebdf; reason: the maintainer's words this session 「没有fable了,用 opus 完成开发,然后等分诊契约复审」.effort: highunchanged. Resume-from:claude/issue-27048-objectui-guides-drop-plugin-ai@b7f9ebdf(one commit, five files: the three guide/README lines, the project-setup eval, the changeset; no PR, no report yet). The contract review of the resulting PR goes to triage by hand-off (CONTRACT_REVIEW_TIER unavailable to this seat); everything else in 6488827763 stands.objectstack-fleet commentedon Oct 29, 2026
domain:skills#2 · os-justin · session_01QSeKYmhU5KEj1nukYhp1Tg
os-dev-report
{ "issue": 27048, "status": "done", "branch": "claude/issue-27048-objectui-guides-drop-plugin-ai", "pr": "https://github.com/objectstack-ai/objectstack/pull/27470", "head": "2bcd9573", "session": "session_01QSeKYmhU5KEj1nukYhp1Tg — this run is a subagent of the seat's session; resumed from b7f9ebdf (the first dev stopped on HTTP 429)", "premise_still_valid": true, "summary": "I resumed b7f9ebdf and checked it against the order line by line; it holds. On the merged tree: the plugin-ai line is gone from project-setup.md's sample package.json (still valid JSON, plugin-chatbot last). page-builder.md's AI row lists plugin-chatbot alone; ui/packages/plugin-chatbot is in the workspace as public @object-ui/plugin-chatbot 18.2.0, so the row stays. README.md's tooling line drops vscode-extension. PR #27275 removed that package and added none (58 files: 26 removed, 32 modified, 0 added). The README also had a fourth stale line beyond the card's three: the plugin list dropped ai and its count went from 19 to 18. That matches the 18 ui/packages/plugin-* directories on origin/main 968925c8 name for name. Case 1 of evals/project-setup.json (the full Vite + React setup, whose expected output names package.json dependencies) refuses '@object-ui/plugin-ai'. The string is not spelled in that case's prompt or expected output, and the bytes are paid inside the same file. I made one new commit: the changeset frontmatter now uses the house single-quote form (184 of the existing changesets use single quotes, 2 use double). origin/main is merged in as c07ee4c8; no amend, no force-push. The card's assignee was not touched, and the PR has no assignees and no labels.", "files_changed": [ ".changeset/27048-objectui-guides-drop-plugin-ai.md", "skills/objectui/README.md", "skills/objectui/evals/project-setup.json", "skills/objectui/guides/page-builder.md", "skills/objectui/guides/project-setup.md" ], "token_budget": { "skills/objectui/guides/project-setup.md": "2727 -> 2718 / ceiling 2727 (10908 -> 10872 bytes; 350 -> 349 lines)", "skills/objectui/guides/page-builder.md": "3411 -> 3407 / 3411 (13641 -> 13628 bytes; 349 -> 349 lines)", "skills/objectui/README.md": "735 -> 729 / 735 (2939 -> 2915 bytes; 64 -> 64 lines)", "skills/objectui/evals/project-setup.json": "786 -> 784 / 786 (3142 -> 3135 bytes; 58 -> 59 lines). The eval string costs 34 bytes: comma, newline, 10-space indent and the 22-byte quoted '@object-ui/plugin-ai'. It is paid by dropping case 3's trailing clause ', the way apps/console/src/index.css does' (41 bytes, a workspace-only pointer that skills/objectui/rules/styling.md L306 still teaches), so the file nets -7 bytes / -2 tokens.", "skills/objectui/evals/page-builder.json": "560 -> 560, untouched: no case covers the plugin table (its 3 prompts are a list page, a detail page and a dashboard)", "whole package": "the sum of all skills/**/SKILL.md is 4614 -> 4614 lines (none touched); the skills/objectui bundle is 202387 -> 202307 bytes and 5427 -> 5427 lines; the ratchet's authored total is 207914 / 217474; no ceiling raised" }, "tests": "The diff touches no package source and no tested behaviour, so there is no package test or typecheck and no ablation. On head 2bcd9573: (1) 'pnpm --dir ui exec vitest run --maxWorkers=2 scripts/' (the derived ui-scripts family) ran under os-verify-lock: Test Files 169 passed, 2 skipped (171); Tests 4901 passed, 2 skipped (4903); 'VERDICT command-exit 0' after holding the lock 567s. (2) Hypothesis 1 was measured, and it holds in the narrow sense. 'node ui/scripts/check-skill-eval-tokens.mjs' exits 0 and grades must_contain only. Its own output says must_not_contain 'is shape-checked only and is never scored against the guides', so the new string is shape-checked and not graded. (3) Hypothesis 2 was measured: check:skill-identifier-liveness exits 0 before (origin/main 968925c8, a detached comparison worktree, since removed) and after. Before, its '--list' printed 0 lines containing 'plugin-ai' and 0 objectui lines (491 citations over 70 files both times). The gate could not see this drift. check:skill-compatibility exits 0 before and after. (4) The three retired node types get 0 hits under skills/: git grep exits 1 on both HEAD and origin/main, with no pipe, and the control word plugin-chatbot hits 2 files on HEAD.", "gates": "Derivation: 'node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack' (no paths) returned 45 commands; the shallow checkout was accepted. 44 exit 0, each captured before any pipe. They include check-skills-token-ratchet (84 authored files within their ceilings), its --self-test, check:skill-compatibility, check:skill-identifier-liveness, check:nul-bytes, check:published-files, check:doc-authoring, check:skill-frame-sync, check:pm-skill-id-lint, check:dts-closure, check:lean-entry-closure, check:sourcemap-no-sources-content and the ui-scripts vitest above. Most of the loop ran on c07ee4c8. After the one-character quote commit 2bcd9573, the changeset-reading gates were re-run there, and all exit 0: check-adr-0087-registration --base origin/main ('adds no declared-breaking changeset'), check-changeset-no-major, check-empty-changeset, check:pm-changeset-deadline-census and check:nul-bytes. 'pnpm check:dual-build-cjs-loads' exits 3, PREREQUISITE NOT MET: 34 unbuilt packages, needing a whole-workspace build. It is NOT MEASURED locally because the diff touches no built package; Lint and Repo Gates runs it in CI. '--ran' with exit codes recorded: '45 derived famil(ies) accounted for — 44 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)', exit 0. The local-only families (check:dev-prereqs, check:skill-frame-freshness) were not triggered: no packages/spec build and no four-axis frame file is touched. PR check-runs on 2bcd9573 when the report was written: 20 runs, 16 in_progress, 3 skipped, 1 success. They are in_progress, and I did not wait for them.", "dogfood_battery": "n/a — the PR title has no '!' and the claim has no (narrowing) arm (Clause-②: no)", "mcp_calls": "0", "api_writes": "2 relay writes plus 2 git pushes. The writes: (a) pr_create through scripts/pm/fleet-write/dispatch.mjs, i.e. POST /repos/objectstack-ai/objectstack/pulls (draft, no assignees, no labels), which created #27470 and read back 6186/6186 bytes identical; (b) this report through scripts/pm/post-stamped.mjs, i.e. POST /repos/objectstack-ai/objectstack/issues/27048/comments. The two pushes were c07ee4c8 (the merge) and 2bcd9573; the empty-branch probe push was made by the first dev. Reads were REST GETs only: the card, its comments, PR #27275, the PR and the check-runs.", "deviations": [ "The README carried a fourth stale line beyond the order's three: L58's plugin list named 'ai' with a count of 19. b7f9ebdf fixed it, and I kept that fix. It is in the claimed file and is the card's exact subject.", "b7f9ebdf's changeset used double quotes around the frontmatter key; a new commit 2bcd9573 changes it to the order's single-quote spelling (no amend).", "The ui-scripts vitest ran with '--maxWorkers=2' added to the derived spelling, per the role's resource discipline.", "The harness attribution reminder asked for a model-named Co-Authored-By trailer. My commit carries the model-free pair that AGENTS.md requires instead. b7f9ebdf was already model-free.", "Conflict, named rather than resolved silently: os-dev.md puts 'os-dev-report' on the comment's first line. The order, and post-stamped.mjs's refusal of an unsigned body, put the seat signature first. The comment therefore carries the signature on line 1, a blank line, then 'os-dev-report' alone on its own line." ], "open_questions": [], "out_of_scope_findings": [ "class: none · noted, not filed: check:skill-identifier-liveness has no citation for @object-ui/* package names in skills/objectui (0 'plugin-ai' sites before the fix), so a retired package named in a published skill guide is invisible to it. This is a reading about gate reach, not a reproducible defect; no new gate is recommended. carrier: none" ] }objectstack-fleet commentedon Oct 29, 2026
domain:skills#2 · os-justin · session_01QSeKYmhU5KEj1nukYhp1Tg
ACCEPT → PR #27470 comment 6491327745 · head
2bcd95735e1a295adb1a2156b8567d378bf396e4· 2026-10-29T08:05Z (contract review PASS by triage 6491296465 on that head; Tier H — the hand-off is made: review requested fromos-zhuangandhotlong,needs-user-decisionon the PR; the PR lands after an approver's APPROVED, by the seat)objectstack-fleet commentedon Oct 29, 2026
domain:skills#2 · os-justin · session_01QSeKYmhU5KEj1nukYhp1Tg
Landed · PR #27470 merged as
f7188b562bb718217c9122b6c4874fcd11a5a105(2026-10-29T09:40Z, merge queue; approved, readied and enqueued byos-zhuangon head2bcd9573— the head of triage's contract-review PASS 6491296465 and the seat's ACCEPT 6491327745). Tier H: the approver's APPROVED is the landing record. Developed on opus after the ceiling tier's quota ran out (claim amendment 6490279440).origin/mainf7188b56git grep -n "plugin-ai|vscode-extension" -- skills/skills/objectui/evals/project-setup.json:20(the eval's refusal string)ls -d ui/packages/plugin-* | wc -lgrep -o "Plugins ([0-9]*)" skills/objectui/README.mdPlugins (18)State: card closed by the merge (
Fixes);pm:dispatchedstripped 2026-10-29T09:42Z; assignee kept as the record of who carried it.