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
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    domain:uiDomain lane — seat card indexed by label:pm:seat
    on Oct 24, 2026
  2. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    pm:queueReady for the PM dispatch loop
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Oct 24, 2026
  3. 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

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 25, 2026
  5. 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):

  6. 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

  7. 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

  8. 289 remaining items

  9. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    Contributor

    domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr

    Landed · 2026-11-08T04:12Z

    Reading Value
    PR #31348 (batch 15) MERGED 2026-11-08T04:03Z, merge commit d0512c2fbec9e0abd2f7fbd09986e4fdab73211d on main
    PR #31352 (batch 16) MERGED 2026-11-08T04:12Z, merge commit 8b9044204cc8a26680a0a2fa43228e3290292390 on main
    #25921 still open (both PRs say Part of #25921), as intended

    Delivered: RegisteredAction and deepFreeze are gone from the @object-ui/core root entry (contract review PASS 6716763440). deriveHexBadgePalette, HexBadgePalette and UrlCellRenderer are gone from the @object-ui/fields root entry; the palette helpers now live in the in-package module hexBadgePalette.ts and UrlCellRenderer stays behind the standard map's url entry (contract review PASS 6716827120).

    Release: claims 6716004841 (batch 15) and 6716009586 (batch 16), domain:ui#1 · 2026-11-08T04:12Z · both batches merged, card back to pm:queue with no assignee
    Resume-from: none (the next batch starts from main with a fresh census)

    Still on this card:

    • the seven Spec* aliases in @object-ui/types index.ts, which wait on the predicate-2 ruling (amendment 6697494793);
    • FieldValidationFunction (with the unexported FieldConstraints), held by three prose readers (amendment 6714801527, option B);
    • UploadedFileMetadata, which a fields release note teaches as the host-stored value shape (option C, unmeasured host use);
    • DrawerClose, whose outside hits are JSX text in an eslint rule comment and fixture (amendment 6714859776);
    • LocationCellRenderer and AddressCellRenderer in @object-ui/fields, held out by amendment 6716064637;
    • @object-ui/core has no retirable zero-consumer name left after batch 15; the core hold-outs (hasConflictingColumnIdentity, evaluatePlainCondition, meetsContrastLevel) stay because prose counts (amendment 6716057610);
    • the 1–2 retirable names per package left in plugin-gantt, plugin-designer, collaboration and mobile (/mnt/project-files/pm-orders/ui/25921-b14-census.md).
  10. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Nov 8, 2026
  11. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 8, 2026
  12. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    Contributor

    domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr

    Claim: PM loop round 4 · 2026-11-08T04:16Z · one retirement batch (batch 17)
    Session: session_01FEkQ5nWyzhAwmEiL7EqVPH (card thread, dev) · seat session_01FEkQ5nLA7wiVY5YWjT9Svr
    Account: os-project-manager
    Branch: claude/project-thread-18lura
    Worktree: objectstack-issue-25921-b17
    Domain: domain:ui
    Seat: domain:ui#1 (batches 15 and 16 landed as PR #31348 and PR #31352, Landed note 6717103288; no other batch runs)
    File surface: ONE batch, the leftover single names of the batch 14 census in the root entries of @object-ui/plugin-gantt (parseHHMM), @object-ui/plugin-designer (Minimap), @object-ui/collaboration (CollaborationTranslate) and @object-ui/components (MobileDialogContentProps), their in-package readers, tests and prose, one changeset. ⛔ The mobile fences (isInAppRoute, offline-queue/native exports) and README-taught names stay. ⛔ components/src/ui/ shadcn module files stay byte-identical. ⛔ Every other package.
    Rules: the batch 8–12 rules as written in claim 6703671714 (zero consumers in either repo, prose counts; not taught; not reached by a kept export's signature; homonyms resolved; a positive control in the same module; no subpath reachability; one ! patch changeset with BREAKING, FROM/TO and runtime-export-retired FROM spans 1:1). ⛔ No edit to a pending 25921-* changeset without a seat ruling. ⛔ types/src/ai.ts tombstones, ⛔ subpath entries (#30598), ⛔ packages/**.
    Census first: the thread writes /mnt/project-files/pm-orders/ui/25921-b17-census.md and proposes one group (≤ ~20 names); the seat names it in an amendment before any code moves.
    Container & model: M, mode:thread, model: default, effort: high
    Clause-②: no (narrowing). One CONTRACT_REVIEW_TIER review is owed before the queue, plus the full dogfood battery on the final head.
    Metadata-protocol: none
    Responsibility: zero-consumer names on a public @object-ui/* barrel | none | every author reading the barrel and every release carrying the unused surface; measured repo-wide on the card
    Thread-read: 6717103288
    Premise: holds for the batch the census picks on origin/main; the dev re-runs the census there before the first edit.
    Serial constraints cleared: no other batch of this card is in flight; no open PR is Part of #25921.

    Order: /mnt/project-files/pm-orders/ui/order-25921-b17.md. The PR says Part of #25921. Summons: the maintainer's 「devxUI 任务很多为什么不派发,并发5」 (this project, 2026-11-07T23:53Z).

  13. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    Contributor

    domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr

    席位核对 · Amendment · 2026-11-08T04:21Z · claim 6717134663 batch 17 named

    Census: /mnt/project-files/pm-orders/ui/25921-b17-census.md (origin/main 8b904420, hotcrm 6961ab1).

    Batch 17 is two type names that leave their package entries:

    1. CollaborationTranslate (@object-ui/collaboration). Drop type CollaborationTranslate, from the re-export in ui/packages/collaboration/src/index.ts. The declaration in useCollaborationTranslation.ts keeps its module export for its in-package readers, CommentThread.tsx and PresenceAvatars.tsx.
    2. MobileDialogContentProps (@object-ui/components). Drop type MobileDialogContentProps, from the unpublished sub-barrel ui/packages/components/src/custom/index.ts, which the root entry reaches only through export * from './custom'. components/src/ui/ is untouched.

    Seat check. git grep -lw on origin/main:

    • CollaborationTranslate hits only four files in ui/packages/collaboration/src/.
    • MobileDialogContentProps hits only custom/index.ts and custom/mobile-dialog-content.tsx.
    • hotcrm: 0 for both.

    Dropped from the expected four:

    • parseHHMM is README-taught: plugin-gantt README.md:200 lists it in the public import.
    • Minimap is README-taught: plugin-designer README.md:138 imports it from the entry.

    The b14 "homonym-only" label counted outside hits only and missed these in-package README lines. Both packages are exhausted under the current rules.

    Changeset. One ! patch, .changeset/25921-collaboration-components-leftover-types.md, covering both packages. It carries BREAKING, FROM/TO, runtime-export-retired ×2 (FROM spans 1:1), Clause-②: no (narrowing) and Metadata-protocol: none.

    Everything else in claim 6717134663 stands. Code may move now.

  14. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    Contributor

    domain:ui#1 · os-project-manager · session_01FEkQ5nWyzhAwmEiL7EqVPH
    os-dev-report

    {
    "issue": 25921,
    "status": "done",
    "branch": "claude/project-thread-18lura",
    "pr": "#31387",
    "head": "94d09d50",
    "session": "session_01FEkQ5nWyzhAwmEiL7EqVPH",
    "premise_still_valid": true,
    "summary": "Batch 17 (claim 6717134663, amendment 6717181444): CollaborationTranslate leaves the @object-ui/collaboration entry and MobileDialogContentProps leaves the @object-ui/components entry. Each declaration keeps its module export for its in-package readers; only the re-export lines go (collaboration/src/index.ts, and the unpublished sub-barrel components/src/custom/index.ts). Two of the four expected names drop: parseHHMM (plugin-gantt README.md:200) and Minimap (plugin-designer README.md:138) are README-taught, which the b14 outside-hit counter could not see. One ! patch changeset 25921-collaboration-components-leftover-types.md with BREAKING, FROM/TO and runtime-export-retired x2. Census: /mnt/project-files/pm-orders/ui/25921-b17-census.md.",
    "tests": "HEAD 94d09d5. Build of both packages' closures + type-check of both under the lock: VERDICT command-exit 0. pnpm --dir ui exec vitest run --maxWorkers=2 packages/collaboration/ packages/components/ under the lock: VERDICT command-exit 0, Test Files 484 passed | 1 skipped (485), Tests 4656 passed | 24 skipped (4680). Reverse probe: TS checker export lists collaboration 31 -> 30, components 354 -> 353, exactly the two gone; a probe compiled against both built dist/index.d.ts answers TS2724 x2 and nothing on the control line (useCollaborationTranslation, COLLAB_DEFAULT_TRANSLATIONS, MobileDialogContent). No ablation: type-only unexport, no tested behaviour changed.",
    "gates": "dispatch-gates --commands on 94d09d5 (base 8b90442): 30 derived, all run stdin closed, all exit 0 (check-adr-0087-registration verified both operands; ui vitest scripts/ 170 passed | 2 skipped files, 4996 tests). --ran: 30 derived, 30 run, 0 NOT-MEASURED. Extra: check-platform-checklist --changed-from origin/main exit 0 (no anchored file); ui check:new-line-citations exit 0 (0 new). CI check-runs on PR #31387: not yet read at report time (in_progress). Record /mnt/project-files/pm-orders/ui/25921-b17-gates-ran.txt",
    "line_budget": "3 files, +26 / -5 = 31 changed lines (changeset 25 lines, two re-export edits)",
    "files_changed": [
    ".changeset/25921-collaboration-components-leftover-types.md",
    "ui/packages/collaboration/src/index.ts",
    "ui/packages/components/src/custom/index.ts"
    ],
    "dogfood_battery": "94d09d50 · os-verify-lock VERDICT command-exit 0 (held 31m45s) · Test Files 437 passed | 3 skipped (440) · Tests 3618 passed | 41 skipped (3659) · no failure",
    "mcp_calls": "5 reads (issue_read get_comments x5); 0 writes",
    "api_writes": "2 relay writes: pr_create (fleet-write run 42450770178, PR #31387, draft, body read back identical 7142 bytes, no assignees, no labels) and this os-dev-report comment via post-stamped.mjs; plus one git push of the harness branch (not REST). Write budget spent: 3 of 3",
    "deviations": [
    "os-dev.md rule 2 says pr_create carries assignees; the order and AGENTS.md say none, so none were sent",
    "no labels on pr_create: the order named none and the diff ships (changeset, not skip-changeset); the first dry-run refused an empty labels array, so the key was dropped",
    "shared checkout detached so the designated branch could live in worktree objectstack-issue-25921-b17",
    "census correction: it first quoted isInsidePopperLayer as a positive control; that name sits in the same module but left the entry in an earlier batch, so it is a grep control only (noted in the census file)",
    "branch not merged with origin/main (e2e6ec7 moved after the base); the merge queue rebuilds on main"
    ],
    "open_questions": [],
    "security_findings": "none",
    "out_of_scope_findings": [
    "carrier: #25921 · parseHHMM (plugin-gantt) and Minimap (plugin-designer) are README-taught and stay; with them, plugin-gantt, plugin-designer, collaboration and components hold no further free, untaught, zero-hit entry name · noted, not filed"
    ]
    }


    Generated by Claude Code

  15. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    Contributor

    domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr

    ACCEPT → PR #31387 comment 6717986505 · 2026-11-08T05:59Z · head 41d59d94 (batch 17: CollaborationTranslate and MobileDialogContentProps leave their package entries; 31 lines, not governed, Part of #25921). Landing through the merge queue.

  16. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    Contributor

    domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr

    Landed · 2026-11-08T06:22Z

    Reading Value
    PR #31387 (batch 17) MERGED 2026-11-08T06:22Z, merge commit 96b5dab128806d094dc1dce9fdc58c194dd4ea18 on main
    #25921 still open (Part of #25921), as intended

    Delivered: CollaborationTranslate is gone from the @object-ui/collaboration entry, and MobileDialogContentProps from the @object-ui/components entry. Both declarations keep their module export (contract review PASS 6717815459, delta PASS 6717856176).

    Release: claim 6717134663 (batch 17), domain:ui#1 · 2026-11-08T06:22Z · batch merged, card back to pm:queue with no assignee. ui seat 1 goes off shift on the maintainer's word, so the next batch belongs to whichever ui seat claims it.
    Resume-from: none (the next batch starts from main with a fresh census)

    Still on this card:

    • the seven Spec* aliases in @object-ui/types index.ts, which wait on the predicate-2 ruling (amendment 6697494793);
    • FieldValidationFunction (with the unexported FieldConstraints), held by three prose readers (amendment 6714801527, option B);
    • UploadedFileMetadata, which a fields release note teaches as the host-stored value shape (option C, unmeasured host use);
    • DrawerClose, whose outside hits are JSX text in an eslint rule comment and fixture (amendment 6714859776);
    • LocationCellRenderer and AddressCellRenderer in @object-ui/fields, held out by amendment 6716064637.

    Exhausted under the current rules: @object-ui/core (after batch 15), plugin-gantt and plugin-designer (parseHHMM and Minimap are README-taught), collaboration and components (after this batch; census /mnt/project-files/pm-orders/ui/25921-b17-census.md).

  17. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Nov 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:uiDomain lane — seat card indexed by label:pm:seatpm:queueReady for the PM dispatch looppriority:p3tech-debt

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions