Skip to content

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

Open

Description

@os-zhuang

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.ts 451 LOC, core/src/protocols/DndProtocol.ts 237, KeyboardProtocol.ts 222, SharingProtocol.ts 212 (their names appear only inside comments in types/src/index.ts), react/src/hooks/useFocusManagement.ts 248, useFocusTrap.ts 138, usePageTransition.ts 187, useSchemaPersistence.ts 373, collaboration/src/LiveCursors.tsx 143 — 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; registers ai-form-assist, ai-recommendations, nl-query): 0 source importers; absent from apps/console/src/register-plugins.ts and apps/console/vite.config.ts; owns an ai.* block in every locale pack (26 lines in en.ts); listed in .changeset/config.json's fixed group.
  • packages/runner: a Vite app (main.tsx, App.tsx, no barrel), private: false, no main / exports, in the fixed release group; packages/cli/src/__tests__/workspace-vite.test.ts asserts 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/providers exports DataSourceProvider, MetadataProvider, ThemeProvider (+hooks), the same six names @object-ui/react exports with different implementations; the providers trio's only non-test importer is examples/byo-backend-console/src/App.tsx (react's: 21 files); one-authority-per-exported-name-6273.test.ts carries hand-written exemptions for the collision. Its real content is UploadProvider (450 of 617 LOC; fields 11 sites) and createObjectStackUploadAdapter — fetch logic outside data-*, against AGENTS §3.
  • node scripts/check-i18n-dead-keys.mjs prints "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) and scripts/release-bump.cjs referenced by nothing; paseo.json (0 references; its setup teaches pnpm i against the frozen-lockfile rule); typedoc.json + typedoc devDep + docs:api (no workflow); lazy-test.mjs (only an exemption glob in check-lint-rule-coverage.mjs); playwright.import-harness.config.ts and playwright.import-console.config.ts (1 spec each, no workflow); msw declared in root, plugin-form, plugin-grid with 0 imports plus public/mockServiceWorker.js; apps/console devDeps @dnd-kit/core|sortable|utilities and autoprefixer with 0 references; docs/CONSOLE-STREAMLINING-SUMMARY.md names 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 in register-plugins.ts like plugin-markdown. Ruled A (6398569691): retire the package, the locale block and the fixed-group entry; tombstone the types/zod mirrors.
  • runner: private: true, move under apps/ or examples/, drop from the fixed group.
  • Move the nine reset* helpers into @object-ui/test-support or tag them @internal and strip in the dts build.
  • providers: delete the trio and the test exemptions; point the byo example at @object-ui/react; fold UploadProvider into 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

  1. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    and removed on Oct 24, 2026
  2. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    Contributor

    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. finding comes off.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 4 · 2026-10-25T04:45Z
    Session: session_011yfYeuX2ptMSCcYZiq61tS (card thread 「清理无人使用的导出与模块」, dispatched by the domain:ui seat 4 session session_01XWGTsmqrtrt1Zqh1ioWqsT)
    Account: os-elon-musk
    Branch: claude/project-thread-u9kgfd (platform-assigned)
    Worktree: objectui-issue-13453
    Domain: domain:ui
    Seat: domain:ui#4
    File surface (triage 6385727878's in-scope list only; one PR per package or group is fine, all on this branch in sequence):

  4. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Claim amendment · domain:ui#4 · 2026-10-25T04:58Z · amends claim 6393574403

    1. Narrowed: resetActionKeyWarnings stays out. It lives in core/src/actions/actionKeys.ts and reaches the core barrel through core/src/actions/index.ts (export *), and seat 1's objectui#13442 holds core/src/actions/**. It waits for that card, as clearSharedDiscoveryCache does. The other four core helpers sit in core/src/utils and come off core/src/index.ts.
    2. Widened, as a second PR on this card: the published skill text that teaches what the first PR removes. skills/objectui/guides/project-setup.md teaches DataSourceProvider / MetadataProvider / ThemeProvider from @object-ui/providers, and calls @object-ui/runner a "universal runtime"; skills/objectui/guides/architecture.md does the same. skills/** is governed, so this PR is Tier H (it waits for GOVERNED_APPROVERS). It opens from this card's branch, restarted on main, 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.
    3. Unchanged: Clause-② no / Metadata-protocol none.

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Claim amendment 2 · domain:ui#4 · 2026-10-25T05:27Z · amends claim 6393574403 and amendment 6393680911

    The two PRs are re-cut along the governed line. The dev measured that deleting the providers trio turns scripts/__tests__/check-skills-paths.test.ts red. The cause is .claude/skills/objectui-contributor/guides/console-development.md, which names packages/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, runner set private: true and taken out of the fixed group, and the reset helpers off the public barrels. It contains no providers change and no .claude/** or skills/** edit.

    • PR 2, Tier H, waits for GOVERNED_APPROVERS:

      • the providers trio, its exemptions, and the byo example repointed;
      • the .claude/skills/objectui-contributor/guides/console-development.md sentence;
      • skills/objectui/guides/project-setup.md and architecture.md, which still teach the trio and the runner "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

  6. 105 remaining items

  7. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    Contributor

    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

  8. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    Contributor

    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:

    • The entry stops exporting useConfirmDialog and VersionHistory. The useConfirmDialog module stays, because seven designers use it.
    • The VersionHistory module is deleted.
    • The dead collaboration code is deleted: CollaborationProvider.tsx and 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), per scripts/pm/clause2-line.mjs.

    The claim is released. This card goes back to pm:queue unassigned for its next batch. Left on it:

    • CommentSearchResult
    • the providers/upload fold
    • clearSharedDiscoveryCache
    • other packages' batches
    • the now-unread designer.versionHistory key in the ten packs and DESIGNER_DEFAULT_TRANSLATIONS
  9. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    Contributor

    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 session session_01QsR2jQjvWkZ7is6GXbC6DB
    Account: zhuangjianguo
    Branch: claude/project-thread-pgp7w2 (platform-assigned to the card thread; it can push only this branch)
    Worktree: objectstack-issue-25921
    Domain: domain:ui
    Seat: domain:ui#5
    Batch: retire the now-unread designer.versionHistory i18n key, left by seat 3's #29529 (389de4aa), which deleted the VersionHistory module. 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 (one designer.versionHistory entry each), ui/packages/plugin-designer/src/hooks/useDesignerTranslation.ts (DESIGNER_DEFAULT_TRANSLATIONS), ui/packages/i18n/src/__tests__/dead-key-batch-retired-4730.test.ts and de-quote-pairing-3876.test.ts only 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: medium
    Clause-②: 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 it
    Thread-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.

  10. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    Contributor

    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)"
      ]
    }
  11. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    Contributor

    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"
    }
  12. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    Contributor

    domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB

    Landed (partial, one batch) · 2026-11-02T22:36Z

    • Landed: PR refactor(i18n, plugin-designer)!: retire the unread designer.versionHistory key #29616 merged at 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).
    • This batch delivered: designer.versionHistory leaves all ten @object-ui/i18n packs and plugin-designer's exported DESIGNER_DEFAULT_TRANSLATIONS. That key went unread when refactor(ui)!: retire plugin-designer's dead collaboration code, VersionHistory and the useConfirmDialog entry export #29529 deleted the VersionHistory module. One patch changeset covers both packages.
    • Trap for later batches: @object-ui/plugin-designer's entry is src/index.tsx, not index.ts. A grep of the wrong file misreads what the package exports. That is what the review's FAIL caught.
    • Left on this card:
      • CommentSearchResult;
      • the providers/upload fold;
      • clearSharedDiscoveryCache;
      • other packages' barrel batches.
    • Card state: the claim is released, and the card goes back to pm:queue with no assignee. A narrowing batch owes a director contract review again.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions