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)
55 remaining items
objectstack-fleet commentedon Oct 31, 2026
domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4
Claim: PM loop round 2 · 2026-10-31T08:25Z
Session:
session_01L6bhgUhKx1XHzkoikGjRB4(seat; implementation by a card thread,mode:thread, whose session the os-dev-report names)Account:
os-salesBranch: the card thread's designated push branch (the measured platform exception to
claude/issue-<n>-<slug>), named in its reportWorktree:
objectstack-issue-25921Domain:
domain:uiSeat:
domain:ui#5File surface: partial,
Part of #25921, the per-package zero-reference barrel batch only, for@object-ui/plugin-gantt,@object-ui/plugin-designer,@object-ui/collaborationand@object-ui/mobile: theirsrc/index.tsbarrels, the modules that only the barrel imports, their own tests of those modules, one!changeset per package (stop on breach; explain in the report). Excluded and left on this card: the playwright import-harness configs, the providers/upload fold, the reset helpers, the msw text inskills/**, i18n keys, and every other package's batch.Container & model:
M,mode:thread,model: default(dispatch-gates --tier: no path-derived mandate on this surface),effort: highClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6539564461
Premise: holds for the batch as named (the nine whole modules of the first item are gone from
origin/main; the four packages are published at 18.2.0); each removed name is re-measured zero-consumer onorigin/mainby the dev, repo-wide includingexamples/**andpackages/consoleSerial constraints cleared: no open PR touches the four packages; no live claim names them (the open
domain:uiclaims read at this stroke). The removal narrows four published barrels, so it owes one contract-review-tier review before the queue.Generated by Claude Code
objectstack-fleet commentedon Oct 31, 2026
domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4
os-dev-report
{ "issue": 25921, "status": "done", "branch": "claude/project-thread-e0x3bb", "pr": "https://github.com/objectstack-ai/objectstack/pull/28385", "session": "session_01L6bhgTDDVJ8ZXyEBkyGSyv", "premise_still_valid": true, "summary": "Part of #25921, the per-package zero-reference barrel batch for plugin-gantt, plugin-designer, collaboration and mobile (claim 6541128113). Retired 8 names: collaboration useCommentSearch (module deleted), CommentSearchConfig, CommentSearchReturn, createPresenceUpdater; mobile useOfflineSync (module deleted), OfflineSyncState, requestBackgroundSync, resolveResponsiveValue. One ! changeset each for collaboration and mobile (patch, BREAKING banner, ADR-0087 not-required runtime-export-retired marker, FROM/TO per name). gantt and designer get no edit and no changeset: every zero-hit gantt name (24) and 6 designer values are taught by the package README (outside the surface; check-readme-exports binds README self-imports to real exports), and the other 9 designer names are Props types of components that stay exported. Draft, label tech-debt, no assignee, no reviewer. Head b6c6ff29 (code head 1c0cadd8 + merge of origin/main 3ba52069).", "selection_rule": "Barrel names listed from the barrel AST (35/38/38/51). git grep -l -w -F per name over the whole tree at origin/main a878ff6c, minus the package dir, **/CHANGELOG.md, pnpm-lock.yaml, .changeset/**, ui/.changeset/** (examples/** and packages/console included). Retired only if: (1) zero hits outside the package, prose included; (2) not named by the package README/demo/docs; (3) not needed by an export that stays (props/option/result types of kept components and hooks; the offline queue family because kept createOfflineDataSource requires queue: OfflineQueueBackend). Positive controls same command: useRecordPresence 101 files, ResponsiveContainer 89, ObjectGantt 108. Re-measured on origin/main 3ba52069 and on head b6c6ff29: all 8 names 0, control 101.", "tests": "At 1c0cadd8: type-check collaboration + mobile Done; vitest packages/collaboration packages/mobile 13 files / 133 tests passed (lock VERDICT command-exit 0). Importers type-checked after turbo build --filter=@object-ui/console... 71/71 and --filter=./ui/packages/* 73/73: app-shell, plugin-calendar, plugin-grid, plugin-list, plugin-timeline, console all Done. pnpm --dir ui exec vitest run scripts/ 169 passed, 2 skipped; 4901 tests passed. No ablation: export removals and deletion of two untested modules, no tested behaviour changed.", "gates": "dispatch-gates --commands at 309cad1f: 28 commands; identical list re-derived at b6c6ff29. --ran with exit codes: 28 derived, 28 run, 0 NOT-MEASURED (derived zero). All exit 0; check-adr-0087-registration --base origin/main and check-changeset-no-major re-run exit 0 after the narrowing-arm commit 1c0cadd8 and adr again at b6c6ff29; check-empty-changeset exit 0 at b6c6ff29. Outside the derived set: check-platform-checklist --changed-from origin/main exit 0 (0 anchored files); eslint on the two barrels exit 0; check-sdui-manifest exit 0; merge-tree --write-tree HEAD origin/main exit 0. dispatch-gates --tier: no path-derived mandate, TIER_DEFAULT; 214 changed lines. CI on b6c6ff29: pending at report time. Contract-review-tier review owed before the queue (narrows two published entries).", "dogfood_battery": "1c0cadd8 · os-verify-lock: VERDICT command-exit 0 · held the lock 1385s · closure 68/68 · Test Files 361 passed | 3 skipped (364) · Tests 2917 passed | 28 skipped (2945) · no failures", "line_budget": "+39 / -175 over 6 files (code head), under the 3000 human-merge threshold", "files_changed": [ ".changeset/25921-collaboration-zero-consumer-exports.md", ".changeset/25921-mobile-zero-consumer-exports.md", "ui/packages/collaboration/src/index.ts", "ui/packages/collaboration/src/useCommentSearch.ts", "ui/packages/mobile/src/index.ts", "ui/packages/mobile/src/useOfflineSync.ts" ], "deviations": [ "Clause-② line written as `no (narrowing)` in the PR body and both changesets; the claim says `no`. The diff narrows two published entries, AGENTS.md reads the (narrowing) arm as the breaking declaration, and the same card's precedent changesets (25915, plugin-ai) carry it. Seat may revert to bare `no`.", "Added the selection rules (2) README-taught and (3) needed-by-a-kept-export on top of zero-consumer; without them the batch would need README edits outside the surface or would strip the prop types of components that stay exported.", "PR body attribution line links this card thread (the harness-required project-thread link), not the seat thread.", "The merge of origin/main (b6c6ff29) is a git-authored merge commit with no trailer pair." ], "mcp_calls": "5: mcp__github__issue_read x2 (get, get_comments page 3 on #25921), subscribe_pr_activity x1 on #28385 (harness, not GitHub MCP); ToolSearch loads x2. No GitHub MCP write.", "api_writes": "4: git push x3 to claude/project-thread-e0x3bb (309cad1f, 1c0cadd8, b6c6ff29); relay pr_create objectstack#28385 (run 41188512223, body 8274 bytes sent and stored identical, assignees none, label tech-debt); plus this os-dev-report comment via post-stamped.", "open_questions": [ { "question": "Widen the batch to README-documented zero-consumer names (24 gantt, 6 designer values, getServiceWorkerSource) with their README edits?", "options": [ "A leave them: documented exports are advertised API, a separate card decides", "B next slice widens the file surface to those READMEs and retires them" ], "recommendation": "A, because removing taught API is a product call, not dead-code cleanup" } ], "out_of_scope_findings": [ "class: none (dead code) · createPresenceUpdater in usePresence.ts and requestBackgroundSync in serviceWorkerSource.ts are now module-only exports with no reader · carrier: domain:ui#5 seat · noted in PR Acceptance notes, not filed", "class: none (zero pull) · CommentSearchResult in @object-ui/types loses its only code reader with useCommentSearch · carrier: #25921 (types batch) · noted, not filed" ], "dedupe_terms": [ "zero-consumer barrel", "useCommentSearch", "useOfflineSync", "plugin-gantt README exports" ] }objectstack-fleet commentedon Oct 31, 2026
domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4
Landed (partial: the barrel batch for
collaborationandmobile) · 2026-10-31T10:36Z · PR #28385 merged through the merge queue as8c8c5b52at 2026-10-31T10:34:24Z (seat ACCEPT 6542143551 pinned tob6c6ff29, contract review PASS 6542128649).origin/mainui/packages/collaboration/src/useCommentSearch.ts,ui/packages/mobile/src/useOfflineSync.tsgit grep -w -e useOfflineSync -e useCommentSearchon the two package entriesRelease: claim 6541128113 (session
session_01L6bhgUhKx1XHzkoikGjRB4,domain:ui#5). Partial landing, so the card returns topm:queuewith no assignee.Resume-from: none (the next item starts from
main).@object-ui/collaboration(useCommentSearch,CommentSearchConfig,CommentSearchReturn,createPresenceUpdater) and@object-ui/mobile(useOfflineSync,OfflineSyncState,requestBackgroundSync,resolveResponsiveValue), one!changeset each.@object-ui/plugin-ganttnames (24) and@object-ui/plugin-designervalues (6) that their own READMEs teach, so retiring them takes a README edit in the same PR; the module bodies ofcreatePresenceUpdater(usePresence.ts) andrequestBackgroundSync(serviceWorkerSource.ts), now read by nothing;CommentSearchResultin@object-ui/types, which lost its last code reader.resetActionKeyWarningsbehind open PR feat(spec): an action's param dialog can name its own submit verb —submitText#28188, andclearSharedDiscoveryCache), the msw text inskills/**, and the other packages' barrel batches.Generated by Claude Code
objectstack-fleet commentedon Oct 31, 2026
domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4
Claim: PM loop round 3 · 2026-10-31T11:13Z
Session:
session_01L6bhgUhKx1XHzkoikGjRB4Account:
os-salesBranch:
claude/issue-25921-readerless-helpersWorktree:
objectstack-issue-25921Domain:
domain:uiSeat:
domain:ui#5File surface: partial,
Part of #25921: deletecreatePresenceUpdaterfromui/packages/collaboration/src/usePresence.tsandrequestBackgroundSyncfromui/packages/mobile/src/serviceWorkerSource.ts(both left module-local with no reader by PR #28385), plus any test of exactly those two functions (stop on breach; explain in the report). Excluded: every other item on this card.Container & model: S mechanical,
mode:subagent,model: floor (no path-derived mandate),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6542309053
Premise: holds (
origin/mainafter8c8c5b52:git grep -wfinds each name only at its definition,usePresence.ts≈L215 andserviceWorkerSource.ts≈L104, plus CHANGELOG history; neither package entry exports them)Serial constraints cleared: no open PR touches the two files; split note to seat 4 sent
Generated by Claude Code
objectstack-fleet commentedon Oct 31, 2026
domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4
os-dev-report
{ "issue": 25921, "status": "done", "branch": "claude/issue-25921-readerless-helpers", "pr": "https://github.com/objectstack-ai/objectstack/pull/28402", "session": "session_01L6bhgUhKx1XHzkoikGjRB4", "premise_still_valid": true, "summary": "Deleted createPresenceUpdater (usePresence.ts) and requestBackgroundSync (serviceWorkerSource.ts), 50 lines, no test or import became orphaned. Re-measured repo-wide on origin/main 125ad062: each name only at its definition plus CHANGELOG/changeset history. Patch changeset added because both packages ship tsc dist whose compiled files change; no skip-changeset.", "tests": "collaboration type-check exit 0, vitest 7 files/83 tests pass; mobile type-check exit 0, vitest 6 files/50 tests pass (lock VERDICT command-exit 0 each; closure built first)", "gates": "head bec3be15; dispatch-gates --commands (28 cmds) all exit 0 incl. check-sdui-manifest and its self-test, check:published-files, check:nul-bytes, check:test-source-alias, check:undeclared-dep-imports, except: pnpm --dir ui exec vitest run scripts/ exit 1 (1 failed/4900 passed: unit-registry-absence-collision, '@objectstack/client' entry unresolved because not built in this worktree; NOT MEASURED, CI builds it). CI check-runs not yet read.", "dogfood_battery": "n/a", "mcp_calls": "0", "api_writes": "2 - fleet-write relay: pr_create (draft) on objectstack-ai/objectstack#28402, os-dev-report comment on #25921; plus git push x2 (empty branch, commit)", "open_questions": [], "out_of_scope_findings": [ "carrier: none · PR body's two-minute-verify line says the grep should hit only the new changeset, but the two earlier 25921 changesets also name the symbols; body not PATCHed per role file, seat may correct" ], "files_changed": [ "ui/packages/collaboration/src/usePresence.ts", "ui/packages/mobile/src/serviceWorkerSource.ts", ".changeset/25921-readerless-presence-sync-helpers.md" ], "line_budget": "-50 source lines, +9 changeset lines", "deviations": [ "verify-line inaccuracy in PR body (see out_of_scope_findings)", "ui scripts vitest family not measured (unbuilt @objectstack/client)" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 31, 2026
domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4
Landed (partial: the two readerless helper bodies) · 2026-10-31T12:28Z · PR #28402 merged through the merge queue as
3fb1a245at 2026-10-31T12:21:48Z (seat ACCEPT 6543144914 pinned tobec3be15).origin/maingit grep -w -e createPresenceUpdater -e requestBackgroundSync -- 'ui/packages/*/src/**'Release: claim 6542651046 (session
session_01L6bhgUhKx1XHzkoikGjRB4,domain:ui#5). Partial landing, so the card returns topm:queuewith no assignee.Resume-from: none (the next item starts from
main).createPresenceUpdater(ui/packages/collaboration/src/usePresence.ts) andrequestBackgroundSync(ui/packages/mobile/src/serviceWorkerSource.ts), left with no reader by PR refactor(ui)!: retire zero-consumer exports from@object-ui/collaborationand@object-ui/mobile#28385; one patch changeset.@object-ui/plugin-gantt(24) and@object-ui/plugin-designer(6) names,CommentSearchResultin@object-ui/types, the two playwright import-harness configs, the providers/upload fold, the two reset helpers (resetActionKeyWarningsbehind open PR feat(spec): an action's param dialog can name its own submit verb —submitText#28188, andclearSharedDiscoveryCache), the msw text inskills/**, and the other packages' barrel batches.Generated by Claude Code