Repository navigation
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
Description
Ruled (plugin-ai): 6398569691 · letter A · 2026-10-25T13:58:53Z (retire @object-ui/plugin-ai: package, locale ai.* block, fixed-group entry, types/zod mirrors tombstoned; minor changeset with a breaking note)
维护者速读
一批每项都是 S、合起来可观的退役:9 个整文件模块共 2,211 行只有自己的 barrel 引用;@object-ui/plugin-ai 发布着却没有任何加载者(console 的 register-plugins.ts 不含它);runner 是无入口的 Vite 应用却 private: false 且在 fixed 发版组;公共 barrel 上有 9 个 reset*ForTesting 类助手;@object-ui/providers 与 @object-ui/react 同名的 provider 三件套只有一个示例在用;check-i18n-dead-keys 报告 122 个 CONFIRMED 死键(×10 语种);根目录若干孤儿。按 objectui#11608→#11616(PartialSchema)先例逐包一个 ! changeset。不加新门禁。
Measured (2026-10-24, HEAD 7981384; every absence claim ran with a positive control, SchemaRenderer 1,030 hits / plugin-map 144 files)
- Whole modules with zero consumers outside the package AND zero in-package importers (only the barrel line):
core/src/builder/schema-builder.ts451 LOC,core/src/protocols/DndProtocol.ts237,KeyboardProtocol.ts222,SharingProtocol.ts212 (their names appear only inside comments intypes/src/index.ts),react/src/hooks/useFocusManagement.ts248,useFocusTrap.ts138,usePageTransition.ts187,useSchemaPersistence.ts373,collaboration/src/LiveCursors.tsx143 — total 2,211 LOC. Repo-wide barrel census: 1,422 of 3,578 exported names have zero non-test code consumers outside their package (636 value exports, 402 of those also undocumented); worst ratios plugin-gantt 22/35, plugin-designer 16/38, collaboration 19/40, mobile 18/51. @object-ui/plugin-ai(736 LOC; registersai-form-assist,ai-recommendations,nl-query): 0 source importers; absent fromapps/console/src/register-plugins.tsandapps/console/vite.config.ts; owns anai.*block in every locale pack (26 lines inen.ts); listed in.changeset/config.json's fixed group.packages/runner: a Vite app (main.tsx,App.tsx, no barrel),private: false, nomain/exports, in the fixed release group;packages/cli/src/__tests__/workspace-vite.test.tsasserts it is not aliased.- Test-only helpers on public barrels with 0 non-test consumers:
resetColumnIdentityWarnings,resetRetiredSortSpellingReports,resetActionKeyWarnings,resetDashboardFilterWarnings,resetReferenceKeyWarnings(core),resetRuntimeConfigForTesting(app-shell),resetInflightGetsForTesting(types),__clearRecordEditableCache(plugin-detail),clearSharedDiscoveryCache(data-objectstack). @object-ui/providersexportsDataSourceProvider,MetadataProvider,ThemeProvider(+hooks), the same six names@object-ui/reactexports with different implementations; the providers trio's only non-test importer isexamples/byo-backend-console/src/App.tsx(react's: 21 files);one-authority-per-exported-name-6273.test.tscarries hand-written exemptions for the collision. Its real content isUploadProvider(450 of 617 LOC; fields 11 sites) andcreateObjectStackUploadAdapter— fetch logic outsidedata-*, against AGENTS §3.node scripts/check-i18n-dead-keys.mjsprints "391 candidate(s) … 122 CONFIRMED (no textual footprint anywhere else in the repo either), 269 NEEDS-REVIEW" (e.g.appDesigner.*20 keys,preview.changes.typeCount.*22); the script is wired to no workflow.- Root / config orphans:
scripts/eval-console.mjs(hard-coded/Users/zhuangjianguo/.copilot/...output path) andscripts/release-bump.cjsreferenced by nothing;paseo.json(0 references; itssetupteachespnpm iagainst the frozen-lockfile rule);typedoc.json+typedocdevDep +docs:api(no workflow);lazy-test.mjs(only an exemption glob incheck-lint-rule-coverage.mjs);playwright.import-harness.config.tsandplaywright.import-console.config.ts(1 spec each, no workflow);mswdeclared in root, plugin-form, plugin-grid with 0 imports pluspublic/mockServiceWorker.js;apps/consoledevDeps@dnd-kit/core|sortable|utilitiesandautoprefixerwith 0 references;docs/CONSOLE-STREAMLINING-SUMMARY.mdnames two packages that do not exist (@object-ui/routing,@object-ui/console-components).
Recommendation (each S; one PR per package or group)
- Delete the nine modules and their barrel lines (one
!changeset per package); then the per-package zero-reference batches starting with gantt, designer, collaboration, mobile. -
plugin-ai:maintainer decision — retire (package, locale block, fixed-group entry) or wire it inRuled A (6398569691): retire the package, the locale block and the fixed-group entry; tombstone the types/zod mirrors.register-plugins.tslikeplugin-markdown. -
runner:private: true, move underapps/orexamples/, drop from the fixed group. - Move the nine
reset*helpers into@object-ui/test-supportor tag them@internaland strip in the dts build. -
providers: delete the trio and the test exemptions; point the byo example at@object-ui/react; foldUploadProviderinto fields and the upload adapter into data-objectstack, then retire the package. - One PR deleting the 122 CONFIRMED dead keys from all ten packs (read each key's screen first, as the tool asks; CONFIRMED only).
- Delete the root orphans and the unused declarations listed above; update
skills/objectui/guides/testing.md, which still teaches msw.
Benefit: at least 2,200 source lines, about 1,220 translated strings, two packages out of the release group, nine public symbols, four root files and two Playwright configs. External npm consumers are 未实测; rollback is a revert per item.
Refs: objectui#11608, objectui#11616, objectui#12083, objectui#12058, objectui#12428, objectui#3530, objectui#3650.
Filed by the read-only whole-repo review session https://claude.ai/code/session_01BDtwYUWhLGyWLzYQjZ95Cf on 2026-10-24; the maintainer approved filing (「同意,创建任务」). Full evidence files sit in that session's scratchpad (objectui-review-report.md, findings-*.md). ⛔ Not a claim; for triage to grade and route. Graded; the plugin-ai bullet is ruled (see the first line).
Activity
objectstack-fleet commentedon Oct 24, 2026
Triage: first grade —
tech-debt·priority:p3·domain:ui·area:devpath·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-24T15:00Z⛔ Not a claim, ⛔ not a dispatch.
findingcomes off.PartialSchemaexport, which had no reader; a census pin keeps it gone (objectui#11608) objectui#11616 precedent:runnerset toprivate: trueand out of the fixed group;reset*ForTestinghelpers off the public barrels;providerstrio;plugin-ai's fate (retire it, or wire it inregister-plugins.ts) cuts or keeps a product surface. It goes to the maintainer, and it stays out of these PRs until ruled.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Claim: PM loop round 4 · 2026-10-25T04:45Z
Session:
session_011yfYeuX2ptMSCcYZiq61tS(card thread 「清理无人使用的导出与模块」, dispatched by thedomain:uiseat 4 sessionsession_01XWGTsmqrtrt1Zqh1ioWqsT)Account:
os-elon-muskBranch:
claude/project-thread-u9kgfd(platform-assigned)Worktree:
objectui-issue-13453Domain:
domain:uiSeat:
domain:ui#4File surface (triage
6385727878's in-scope list only; one PR per package or group is fine, all on this branch in sequence):core/src/builder/schema-builder.ts,core/src/protocols/{Dnd,Keyboard,Sharing}Protocol.ts,react/src/hooks/{useFocusManagement,useFocusTrap,usePageTransition,useSchemaPersistence}.ts,collaboration/src/LiveCursors.tsx(plus the comment mentions intypes/src/index.ts);packages/runner/package.json→private: true, and its entry out of.changeset/config.json's fixed group;reset*ForTesting-style helpers off the public barrels (core ×5, app-shell, types, plugin-detail), moved to@object-ui/test-supportor tagged@internal, whichever the repo's existing pattern is;@object-ui/providerstrio (DataSourceProvider,MetadataProvider,ThemeProvider+ hooks), the hand-written exemptions inone-authority-per-exported-name-6273.test.ts, andexamples/byo-backend-console/src/App.tsxrepointed at@object-ui/react;(Stop on breach; explain in the report.)
⛔ Not in this claim:
@object-ui/plugin-ai: retire or wire it is the maintainer's call;UploadProvider/ upload-adapter folding and retiring the providers package;clearSharedDiscoveryCacheindata-objectstack: seat 1's objectui#13442 holdspackages/data-objectstack/src/**, so it waits for that card;Container & model:
M, card thread,model: default tier (no path-derived mandate),effort: highClause-②: no (nothing added a consumer or author can target)
Metadata-protocol: none (code exports, not metadata). Removing a published export is still breaking for an npm consumer: per objectui's version policy, each changeset is
minorwith the removal named, nevermajor. Measure external consumers where you can (npm dependents); otherwise record them NOT MEASURED.Responsibility:
published barrels carry dead modules, test-only helpers and a duplicate provider trio; runner is published with no entry | delete or internalise them | every consumer reading the public API, and the release groupThread-read: 6385727878
Premise: holds as filed on HEAD
7981384. Re-measure every zero-consumer claim onmainbefore deleting, with a positive control, as the filing did.Serial constraints cleared: seat 1's objectui#13442 (
data-objectstack/src/**,core/src/actions/**, list/view/grid), security(components): the ui 'html' renderer injects schema.html unsanitised — the spec declares no html component; retire the type objectui#13449 (components/src/renderers/basic/**,types/src/data-display*) and security(core): WidgetRegistry loads a widget from source.url through new Function('url', 'return import(url)') — the runtime dynamic import AGENTS.md #6 forbids; retire the module source objectui#13450 (core/src/registry/WidgetRegistry.ts,types/src/widget.ts, cli, create-plugin) are not touched by the surface above; checktypes/src/index.tsagainst security(core): WidgetRegistry loads a widget from source.url through new Function('url', 'return import(url)') — the runtime dynamic import AGENTS.md #6 forbids; retire the module source objectui#13450 before editing it. Seat 4's console: four routed developer/system pages import no i18n at all (ApiConsolePage, PublicFormsPage, IntegrationsPage, AiPendingActionsPage) and DatasourceResourcePage has 17 English literals — 233 hard-coded strings #25916 pass 2 owns the locale packs for now.Writes: all PR, comment and label writes go only through objectstack's relay (
scripts/pm/fleet-write); never write with GitHub MCP.objectstack-fleet commentedon Oct 25, 2026
Claim amendment ·
domain:ui#4· 2026-10-25T04:58Z · amends claim6393574403resetActionKeyWarningsstays out. It lives incore/src/actions/actionKeys.tsand reaches the core barrel throughcore/src/actions/index.ts(export *), and seat 1's objectui#13442 holdscore/src/actions/**. It waits for that card, asclearSharedDiscoveryCachedoes. The other four core helpers sit incore/src/utilsand come offcore/src/index.ts.skills/objectui/guides/project-setup.mdteachesDataSourceProvider/MetadataProvider/ThemeProviderfrom@object-ui/providers, and calls@object-ui/runnera "universal runtime";skills/objectui/guides/architecture.mddoes the same.skills/**is governed, so this PR is Tier H (it waits for GOVERNED_APPROVERS). It opens from this card's branch, restarted onmain, after the code PR merges. The code PR stays Tier S and names both files under a follow-up line. An objectui merge publishes nothing until a human runs the release, so the gap between the two merges ships nothing stale.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Claim amendment 2 ·
domain:ui#4· 2026-10-25T05:27Z · amends claim6393574403and amendment6393680911The two PRs are re-cut along the governed line. The dev measured that deleting the providers trio turns
scripts/__tests__/check-skills-paths.test.tsred. The cause is.claude/skills/objectui-contributor/guides/console-development.md, which namespackages/providers/src/MetadataProvider.tsx. So whichever PR deletes the trio must also edit a governed.claude/**file.PR 1, Tier S, lands under the maintainer's standing word: the nine modules,
runnersetprivate: trueand taken out of the fixed group, and the reset helpers off the public barrels. It contains no providers change and no.claude/**orskills/**edit.PR 2, Tier H, waits for GOVERNED_APPROVERS:
.claude/skills/objectui-contributor/guides/console-development.mdsentence;skills/objectui/guides/project-setup.mdandarchitecture.md, which still teach the trio and therunner"universal runtime".It opens from this card's branch, restarted on
main, after PR 1 merges.This keeps everything that needs no governed approval from waiting on one that does. Clause-② and Metadata-protocol are unchanged (no / none).
Generated by Claude Code
docs(quick-reference): count runner among the private packages (#13453)
105 remaining items
objectstack-fleet commentedon Nov 2, 2026
domain:ui#3 · zhuangjianguo · session_01QsR2jV4dWohojjbTJTQq5m
Claim amended · 2026-11-02T18:32Z · third amendment, on the director's contract review of PR #29529 (record #29529 (comment), FAIL with one must-fix at head
681e6c7a). This adds to claim 6583164004 and amendments 6583226546 and 6584572334; branch, session, size and file surface are unchanged.Clause-②: no (narrowing)
Metadata-protocol: none
useConfirmDialogandVersionHistoryleave the entry, with no new name). Perscripts/pm/clause2-line.mjs, a bareyesdeclares a widening. The changeset line becomesClause-②: no (narrowing), the spelling refactor(ui)!: retire zero-consumer exports from @object-ui/plugin-gantt and @object-ui/plugin-designer #29388 used. The dev pushes the changeset line, and the seat patches the PR body's line.objectstack-fleet commentedon Nov 2, 2026
domain:ui#3 · zhuangjianguo · session_01QsR2jV4dWohojjbTJTQq5m
Landed (partial, one batch) · 2026-11-02T19:33Z
PR #29529 merged at 2026-11-02T19:31Z as
389de4aa(Part of #25921). The seat's ACCEPT is 6585540719, and the director's contract review PASS is 6585173672.What this batch delivered, in
@object-ui/plugin-designer:useConfirmDialogandVersionHistory. TheuseConfirmDialogmodule stays, because seven designers use it.VersionHistorymodule is deleted.CollaborationProvider.tsxand the always-null branches and chips in the page, data model, process and report designers.Spelling for later batches: a pure narrowing reads
Clause-②: no (narrowing), perscripts/pm/clause2-line.mjs.The claim is released. This card goes back to
pm:queueunassigned for its next batch. Left on it:CommentSearchResultclearSharedDiscoveryCachedesigner.versionHistorykey in the ten packs andDESIGNER_DEFAULT_TRANSLATIONSobjectstack-fleet commentedon Nov 2, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB
Claim: PM loop round 5 · 2026-11-02T20:38Z
Session:
session_01QsR2jRTYHhqj3r6SiMnrkT(card thread, os-dev); dispatched by seat sessionsession_01QsR2jQjvWkZ7is6GXbC6DBAccount:
zhuangjianguoBranch:
claude/project-thread-pgp7w2(platform-assigned to the card thread; it can push only this branch)Worktree:
objectstack-issue-25921Domain:
domain:uiSeat:
domain:ui#5Batch: retire the now-unread
designer.versionHistoryi18n key, left by seat 3's #29529 (389de4aa), which deleted theVersionHistorymodule.Part of #25921; the umbrella stays open.File surface:
ui/packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts(onedesigner.versionHistoryentry each),ui/packages/plugin-designer/src/hooks/useDesignerTranslation.ts(DESIGNER_DEFAULT_TRANSLATIONS),ui/packages/i18n/src/__tests__/dead-key-batch-retired-4730.test.tsandde-quote-pairing-3876.test.tsonly if their pins move, and a changeset (stop on breach)Container & model: S,
mode:thread,model: default tier (no Fable per the maintainer's standing rule),effort: mediumClause-②: no (narrowing)
Metadata-protocol: none
Responsibility:
a consumer of @object-ui/i18n's TranslationKeys or a translator maintaining the ten packs | a key no component reads since #29529 stays in every pack and in the designer defaults | translators and the dead-key gate, which keeps counting itThread-read: none
Premise: to prove first on current main. The dev shows by grep that the 11 definitions are the only footprints outside CHANGELOG history, with no static or composed reader and no test pin, and stops if any reader exists.
Serial constraints cleared: the dev reports any open PR on these files before editing and merges main right before pr_create.
objectstack-fleet commentedon Nov 2, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jRTYHhqj3r6SiMnrkT
os-dev-report
{ "issue": 25921, "status": "done", "branch": "claude/project-thread-pgp7w2", "pr": "https://github.com/objectstack-ai/objectstack/pull/29616", "head": "d3c179cd", "session": "session_01QsR2jRTYHhqj3r6SiMnrkT", "premise_still_valid": true, "summary": "Part of #25921, claim 6587895888. Premise held on origin/main 50e35a28: git grep versionHistory under ui (CHANGELOG excluded) found only the 11 definitions plus ui/packages/types/src/designer.ts:1416 (CollaborationConfig.versionHistory, a different symbol); no literal or composed reader, no test pin. Removed designer.versionHistory from the ten locale packs and from DESIGNER_DEFAULT_TRANSLATIONS (one line each), plus one @object-ui/i18n patch changeset with Clause-② no (narrowing), Metadata-protocol none, the ADR-0087 not-required runtime-interface-only marker and a Removed key / Replacement none table. Neither i18n pin moved. Body gated before pr_create.", "files_changed": [ ".changeset/25921-designer-version-history-key.md", "ui/packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts", "ui/packages/plugin-designer/src/hooks/useDesignerTranslation.ts" ], "line_budget": "12 files, +20 / -11 (31 changed lines, under 3000); no governed path", "tests": "check-i18n-dead-keys from ui/: main 4120 keys / 318 candidates with designer.versionHistory needs-review; head 4119 / 317, key absent, exit 0. Prereq turbo build app-shell^... 64/64. pnpm --filter @object-ui/i18n test: 95 files, 1443 passed 13 skipped, VERDICT 0. plugin-designer test: 49 files, 456 passed, VERDICT 0. defaults-maps-mirror-en-pack: 15 passed, VERDICT 0. type-check i18n 0, plugin-designer 0, app-shell 0, turbo type-check console 71/71 0. Reverse check: temporary app-shell probe on TranslationKeys designer.versionHistory gives TS2339 (type now has undo, redo, canvasMinimap); control canvasMinimap compiles; probe deleted. No ablation: one-line data deletions.", "gates": "dispatch-gates --commands at 1a4bf460: 28 commands, all exit 0 (incl. adr-0087-registration, changeset-no-major, empty-changeset, closing-keyword-parity, sdui-manifest and self-tests, published-files, nul-bytes, ui vitest scripts/ 170 passed 2 skipped files). --ran: 28 derived, 28 run, 0 NOT-MEASURED. Body gates on the final body: adr-0087, changeset-no-major, closing-keyword-parity, partof-closing-keyword exit 0. Final head d3c179cd merges 4 main commits outside the diff; derived list unchanged; changeset/adr/closing/sdui/nul gates re-ran exit 0. CI check-runs: not yet started at report time.", "dogfood_battery": "8ad4e199 · closure dogfood^... 68/68 · VERDICT command-exit 0 (held 1908 s incl. install and build) · Test Files 398/401 (3 skipped) · Tests 3280/3308 (28 skipped) · no failures. d3c179cd adds only main commits outside the diff.", "deviations": [ "Worktree objectstack-issue-25921 attaches the platform-assigned branch; the shared checkout was detached to free it.", "check-i18n-dead-keys before-reading taken from a temporary origin/main worktree with symlinked node_modules, removed after." ], "mcp_calls": "0 GitHub MCP calls; reads via gh api (search, PR files, card comments)", "api_writes": "2 (plus 3 git pushes) — fleet-write relay pr_create (#29616, read back 6201/6201 bytes identical, assignees none); post-stamped comment on #25921 (this report)", "open_questions": [ { "question": "Seat 3's unreleased changeset .changeset/25921-plugin-designer-dead-collaboration-version-history.md says the key stays in the packs for now; after this PR that sentence is stale. Amend it?", "options": [ "A: seat amends that one sentence in a follow-up or on this PR by amended claim", "B: leave it; both entries ship and this PR's entry records the removal" ], "recommendation": "A, because the CHANGELOG is the text an upgrader greps and would otherwise carry a contradiction" } ], "security_findings": "none", "out_of_scope_findings": [ "carrier: none · noted, not filed — CollaborationConfig.versionHistory (ui/packages/types/src/designer.ts:1416) is a declared boolean with no reader (zero-pull)" ] }objectstack-fleet commentedon Nov 2, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jRTYHhqj3r6SiMnrkT
os-dev-report addendum
{ "issue": 25921, "pr": "https://github.com/objectstack-ai/objectstack/pull/29616", "head": "9502086d", "addendum_to": 6589301972, "fixes": "contract review record 6589388719 must-fix: the changeset now bumps '@object-ui/plugin-designer': patch beside '@object-ui/i18n': patch (DESIGNER_DEFAULT_TRANSLATIONS is exported from src/index.tsx L51), its title reads refactor(i18n, plugin-designer)!, and one sentence says the exported map loses its designer.versionHistory row (a read now yields undefined; type Record<string, string> unchanged), naming #29529 as the predecessor. Seat 3's pending changeset untouched.", "files_changed": [".changeset/25921-designer-version-history-key.md"], "gates": "on 9502086d with the corrected title and body: check-adr-0087-registration exit 0, check-changeset-no-major exit 0, check-empty-changeset exit 0, check-closing-keyword-parity exit 0, check:pm-changeset-deadline-census exit 0, check-partof-closing-keyword exit 0. The first adr-0087 and closing-keyword runs in a fresh worktree refused (no node_modules, exit 1 / 3, nothing measured); re-run after pnpm install.", "pr_title_and_body": "not written by the dev. New title: refactor(i18n, plugin-designer)!: retire the unread designer.versionHistory key. Seat-signed corrected body: /mnt/project-files/issue-25921-b4/pr-body-v2.md (signature line, blank line, then the body).", "deviations": ["The first report's claim that the map is not exported was wrong: the export grep looked at src/index.ts, but the entry is src/index.tsx."], "mcp_calls": "0", "api_writes": "1 (this addendum) plus 1 git push" }objectstack-fleet commentedon Nov 2, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB
Landed (partial, one batch) · 2026-11-02T22:36Z
4d8095ba,Part of #25921). The seat's ACCEPT is 6589798777. The director's contract review was a FAIL (6589388719) and then a PASS on the fixed head (6589480821).designer.versionHistoryleaves all ten@object-ui/i18npacks and plugin-designer's exportedDESIGNER_DEFAULT_TRANSLATIONS. That key went unread when refactor(ui)!: retire plugin-designer's dead collaboration code, VersionHistory and the useConfirmDialog entry export #29529 deleted theVersionHistorymodule. One patch changeset covers both packages.@object-ui/plugin-designer's entry issrc/index.tsx, notindex.ts. A grep of the wrong file misreads what the package exports. That is what the review's FAIL caught.CommentSearchResult;clearSharedDiscoveryCache;pm:queuewith no assignee. A narrowing batch owes a director contract review again.