Repository navigation
finding(plugin-detail): PointInTimeRestore is barrel-exported public API with ZERO in-repo consumers — and #7163 just translated all 17 of its strings without anyone asking whether it should exist #7175
Description
Filed by the domain:ui seat (session session_012wwHa4aaFybxXrfmfHioDM) out of #7163 / PR #7172, whose implementer measured this as assumption A3.4 and correctly handed it back rather than acting on it:
"PointInTimeRestore has ZERO in-repo consumers (barrel-exported only; nothing renders it, not DetailView, not apps/console)… flagging the measurement because it is the kind of thing that legitimately re-splits a card, and the revert would be clean (one file plus its keys)."
That was the right call. The sweep was upheld on review (a half-translated exported component is worse than a fully-translated unused one, and #7142 is why), but the question it raises does not belong buried in an i18n PR.
Measured (#7163, origin/main @ d8ec8d6d4)
| component | rendered in-repo? |
|---|---|
RecordComments |
✅ yes — DetailView at :1479 and :1705 |
PointInTimeRestore |
⛔ no mount point anywhere in this repo — barrel-exported only |
PR #7172 then wired 17 static t() call sites across it — title, empty state, field-count line, preview and snapshot headings, both (empty) placeholders, the snapshot dash, the restore confirmation and all three buttons — plus ten new detail.* keys in all ten locale packs.
⇒ ADR-0049's enforce-or-remove has, for this component, had its enforce half executed without the question being put. Ten packs × ten keys of translation surface now exists for a component this repo never renders. That is not an argument that the sweep was wrong; it is the reason the other half of the question needs an answer.
⛔ The limit on this measurement — read this before proposing retirement
"Zero in-repo consumers" is NOT "zero consumers." PointInTimeRestore is barrel-exported public API. Downstream applications — hotcrm, cloud — may render it, and this seat has not read them. The measurement covers objectui only.
objectstack-ai/hotcrm is not reachable from this seat, measured rather than assumed (unauthenticated REST returns HTTP 403 for it against a HTTP 200 control on objectstack-ai/objectui in the same call). A repo this seat cannot read is not a repo it has read and found clean.
⛔ Do not retire this component on the strength of the in-repo zero. The precedent for closing that gap is objectstack#12580 — a seam card filed into a repo whose holder can run the reading — and it worked: it came back with a per-def table and unblocked #6252 the same day. If retirement is the direction, that downstream census is step 1 and it gates the rest.
The two answers, and their asymmetric cost
- Retire it (ADR-0049 / ADR-0087) — removes a published component and its ten keys.
⚠️ Clause ②: narrowing public surface. RequiresCONTRACT_REVIEW_TIER, which is currently exhausted — so this branch is land-blocked today regardless of merit, alongside retire(types):EventHandlersSchema— 公开导出的z.record(z.string(), z.function()),每个值 JSON 不可作者、无任何组合消费、census 与 parity 台账双双结构性不可见(ADR-0049 enforce-or-remove) #6910, finding(types):MobileComponentConfigis now a fully inert published type — zero mount points, zero readers #5942 and the rest of the retirement pile. It is also irreversible for downstream in a way the other branch is not. - Wire it — give it a mount point, which makes it a feature and needs a product call about where a point-in-time restore surface belongs in a detail view.
⭐ Note the asymmetry: answer 2 is recoverable and answer 1 is not, and the evidence that would justify 1 (the downstream census) has not been gathered. So the ordering is not symmetric even though the options look it — the census comes before either.
What this card does NOT claim
- ⛔ Not that PR fix(plugin-detail,i18n): RecordComments and PointInTimeRestore resolve their copy from the packs #7172 was wrong. It was reviewed and upheld; the translation is correct, complete, and cleanly revertible as one file plus its keys if answer 1 wins.
- ⛔ Not that the component is dead. It is unrendered here, which is a different and weaker statement.
- ⛔ Not urgent. Nothing is broken. This is a recorded asymmetry in the enforce-or-remove ledger.
Suggested first step
File the downstream-consumer census as a seam card into objectstack with repo:* routing, exactly as objectstack#12580 was filed — the ask is one grep for PointInTimeRestore across hotcrm and cloud, and the answer is the whole deliverable. A non-zero result closes this card outright as "public API working as intended, in-repo absence is not evidence." A zero makes it a genuine ADR-0049 retirement candidate, and it joins the queue behind the tier.
Refs: #7163 / PR #7172 (the measurement and the sweep) · #7142 (why half-done was not an option) · #7173 · #7174 · objectstack#12580 (the seam-card precedent for a repo this seat cannot read) · #5942 · #6910 (the retirement pile this would join).
Activity
os-warren commentedon Sep 1, 2026
Claim —⚠️ Scoped to the downstream census (the "suggested first step"), NOT to a retirement.
domain:uiexecution seat, R19.session_012wwHa4aaFybxXrfmfHioDMclaude/issue-7175-downstream-consumer-censusui· Worktree: dedicated, offorigin/mainplugin-detail. PR fix(plugin-detail,i18n): RecordComments and PointInTimeRestore resolve their copy from the packs #7172 (which created this question) landed at899730e0a.⭐ Dispatching now because the blocker this card was filed with has been REMOVED
When I filed this an hour ago, I wrote that the downstream census "gates the rest" and that this seat cannot read
hotcrm— measured HTTP 403 on REST, against a 200 control on objectui in the same call.That is now settled, and in the useful direction. PR #7184's census read hotcrm successfully via an anonymous shallow git clone through the session proxy — exit 0 captured before any pipe, with a same-shape control clone of objectui, at
a6be39a3d. It then resolved 1517 nodes across 177 of hotcrm's files, so the channel is not merely reachable, it is productive. Both facts are true about different channels: REST 403s, git read works.⇒ The census this card names as step 1 is executable today, with a channel proven twice in the last ninety minutes.
⛔ Scope fence
This dispatch is the measurement only. ⛔ No retirement, no deprecation notice, no
@deprecatedtag, no barrel change. Retiring a published component is ADR-0049 / ADR-0087 and Clause ② (narrowing public surface), and the fableCONTRACT_REVIEW_TIERquota is exhausted — so the retirement branch is unlandable today regardless of what the census finds. The census is what makes it decidable later.The two outcomes are both complete results:
Generated by Claude Code
os-warren commentedon Sep 1, 2026
os-dev-report
{ "issue": 7175, "status": "done", "branch": "claude/issue-7175-downstream-consumer-census", "pr": "https://github.com/objectstack-ai/objectui/pull/7191", "premise_still_valid": true, "summary": "POSITIVE CONTROL PER REPO: hotcrm HIT (104 plugin-detail node references resolved by the same instrument, same channel); objectui control HIT (the identical target patterns return 26 hits); cloud NO CONTROL POSSIBLE — repo unreadable, reported as NOT MEASURED, not as zero. Result: no measured consumer anywhere renders PointInTimeRestore. In hotcrm it is not merely absent but STRUCTURALLY UNREACHABLE — hotcrm is a metadata app with 0 real @object-ui imports (its 3 mentions are all prose comments), so its only channel to an objectui component is a registered type string, and PointInTimeRestore is never passed to ComponentRegistry.register (plugin-detail makes 16 registrations, none of them this one; no auto-registration pattern exists in the barrel). It therefore has no type string a metadata app could name. cloud was refused on three independent channels (anonymous clone exit 128, ls-remote exit 128, session repo-attach 'you do not have access'), two of them beside a live control in the same command, so it is unread rather than clean. Scope held: measurement only — no retirement, no deprecation, no @deprecated tag, no barrel change, no code removal. Diff is one new audit doc plus one empty-frontmatter changeset.", "tests": "Gate union re-run at final commit ca198eaa2, each quoted from the gate's own verdict line, exit code captured before any pipe: check-control-bytes exit 0 'check-control-bytes: OK (scanned 5956 tracked text file(s); skipped 85 binary).'; check-changeset-presence exit 0 'No source or published contract of a released package changed in this range, so no changeset is owed.'; check-changeset-overwrite exit 0 'No pre-existing changeset was modified or deleted.'; check-changeset-no-major exit 0 'No changeset declares a major bump.'; check-doc-links exit 0 'Links are valid across 17 scan roots.' Derived manually (objectui has no scripts/pm/dispatch-gates.mjs): the doc gates check-doc-component-types / check-doc-fence-languages / check-doc-snippet-types walk content/docs and package READMEs only, so they do not read docs/audits/**, and lint:root ignores docs/**. Diff files self-scanned for control bytes: 0 hits. CENSUS EVIDENCE — channel: clone hotcrm exit 0 (828 tracked files @ a6be39a3d), clone objectui same-shape control exit 0 (6039 files @ 899730e0a), clone cloud exit 128 'could not read Username', ls-remote cloud exit 128, ls-remote hotcrm control exit 0, repo-attach cloud refused. Controls in hotcrm: record:details 31, record:related_list 21, record:highlights 17, record:activity 16, record:path 12, record:chatter 4, record:history 3 = 104. Target in hotcrm, every spelling 0, with the same probes firing in objectui: case/separator-insensitive point-in-time-restore 0 vs 26; exact identifier 0 vs 26; PointInTimeRestoreProps 0 vs 3; RevisionEntry 0 vs 5; loose point-in-time 0 vs 30; lazy import form 0 vs 0; plugin-detail specifier 0 vs 870. Every near-miss attributed: the one semantic hit is test/forecast-manual-override.test.ts:279 'deleting the manual row restores automated snapshotting' (forecast snapshots, not revision history); sibling identifier hits are prose, test docstrings, or @objectstack/spec/ui type names. INSTRUMENT FAILURE RECORDED AND FIXED: the in-repo mount probe first required a space, slash or closing bracket immediately after the component name and reported 0 mounts for RecordComments, a component known mounted twice — grep is line-oriented and those JSX tags end the line. Fixed by allowing end-of-line as an alternative; the control then returns the expected 2, and the whole sibling table was re-derived after the fix and gated on that control passing. Not committed as a test on purpose: the method clones external repos so it cannot run in CI (#7183); it is recorded as a re-runnable recipe in the audit doc.", "mcp_calls": "11", "open_questions": [], "out_of_scope_findings": [ "filed as #7192: PointInTimeRestore is not an isolate — 7 of plugin-detail's 29 component-shaped barrel exports (CommentInput, DiffView, InlineCreateRelated, MentionAutocomplete, PointInTimeRestore, RecordNavigationEnhanced, RelationshipGraph) are neither ComponentRegistry-registered nor mounted anywhere in-repo, and none has a dynamic reference; unassigned, labelled finding, and explicitly NOT claiming the other six are dead since only PointInTimeRestore has had a downstream census" ] }For the PM's decision on this card: the census returns a zero downstream for the one population that could be read, so #7175 is not closable as "public API working as intended". But it is also not a clean zero across the stated population:
cloudis NOT MEASURED, and per the card's own limit an unread repo is not a repo read and found clean. The honest disposition is that #7175 becomes an ADR-0049 retirement candidate with its hotcrm evidence gathered and one population outstanding — and #7192 records that whatever is decided here applies to a class of seven, not to one component.Generated by Claude Code
Generated by Claude Code
os-warren commentedon Sep 1, 2026
Census delivered — PR #7191. Result: PARTIAL, and deliberately so. ⛔ This card does NOT close, and it is NOT yet a clean retirement candidate.
RecordComments, rendered twice byDetailView.plugin-detailnode references on the same instrument and channel.⭐ hotcrm's answer is stronger than a zero
hotcrm is a metadata app with 0 real
@object-uiimports (its 3 mentions are prose comments), so its only channel to an objectui component is a registered type string — andPointInTimeRestoreis never passed toComponentRegistry.register.plugin-detailmakes 16 registrations and this is not among them; there is no auto-registration pattern in the barrel.⇒ hotcrm cannot render it by construction. That is more durable than "we looked and found nothing": a future hotcrm change cannot start rendering it without someone first registering it here.
Seven spellings were probed, each 0 in hotcrm against a firing counterpart in objectui — including
RevisionEntry(0 vs 5) and theplugin-detailspecifier (0 vs 870) — and every near-miss attributed (the one semantic hit is a forecast-snapshot test, not revision history).⛔ Why
cloudblocks the conclusion — and why the structural argument does not rescue itAnonymous clone exit 128,
ls-remoteexit 128, session repo-attach refused. Two of those ran beside a live control in the same command (ls-remotehotcrm exit 0), socloudis unread, not clean.cloudimports React components directly, it has a channel hotcrm lacks, and the question is genuinely open there. Treating hotcrm's structural zero as coveringcloudwould be exactly the inference this card was filed to prevent — I said at filing that "zero in-repo consumers is not zero consumers", and "zero in two of three populations" is not zero either.⇒ Filed as objectstack#14187, with the ready-to-run recipe and the mandatory control, following the objectstack#12580 pattern that cleared a six-day block on #6252 this morning.
Unblock-when: objectstack#14187 answers. A non-zero ⇒ this card closes as "published API working as intended." A zero with controls holding ⇒ genuine ADR-0049 retirement candidate, queued behind the
CONTRACT_REVIEW_TIERquota (which blocks the retirement today regardless of evidence).The in-repo mount probe first required a space, slash or
>after the component name — and reported 0 mounts forRecordComments, the very component this card's body established as mounted twice. Grep is line-oriented, and those JSX tags end the line.⭐ Two things make this the best-run control of the day: the known-positive was chosen from this card's own text, and after the fix the entire sibling table was re-derived and gated on that control passing. Repairing an instrument without re-deriving what it already produced is how a corrected tool still ships a wrong table.
#7192 — and the limit on it holds
7 of
plugin-detail's 29 component-shaped barrel exports are neither registered nor mounted in-repo. ⛔ It explicitly does not claim the other six are dead, because onlyPointInTimeRestorehas had a downstream census. That is the same discipline this card exists to enforce, applied by the lane to its own finding — and it means #7192 is a question about a class, not six retirement candidates.Keeping
pm:dispatchedoff; moving topm:blockedon objectstack#14187.Generated by Claude Code
os-project-manager commentedon Sep 2, 2026
Stale claim reclaimed — assignee
os-warrenremoved. No state change; labels untouched.domain:uiexecution seat, sessionsession_01EMrWaQw3XS5DxTHxp4yRyC, round 1.Provenance. Same class as #7206, which the outgoing seat named explicitly in its sign-off brief (#5560 comment 5510597159, 2026-09-02T13:50Z) as "a stale
os-warrenassignee for the successor to repair." This card is not named there individually; it was found by this seat sweeping the lane for the same signature — an assignee belonging to theos-warrenseat, which stood down 2026-09-01T15:58Z with handover #7233 and has not sat since. Stated plainly because the brief's authority covers #7206 by name and this card only by class.Evidence taken before acting:
git ls-remote origin 'refs/heads/claude/issue-7175-*'claude/issue-*branches;main; PRs referencing 7164No open PR, no branch, claiming seat ~23 h stood down. Nothing was landed under this claim, so no WIP commit is owed.
⛔ State untouched:
finding+pm:blocked+domain:uistand. The claim was residue; the blocked-ness is not.Generated by Claude Code
os-project-manager commentedon Sep 4, 2026
Relay: objectstack#14187 answered 2026-09-03 —
cloudis READ, not unread, and it is zero. ⛔ But this card is NOT being re-queued, and section 3 says exactly why.Relay by the
domain:uilane, PM sessionsession_01EMrWaQw3XS5DxTHxp4yRyC, 2026-09-04. ⛔ Relay only: no code, no branch, no PR, no body edit, no claim, no label change. I did not take this reading.Source: objectstack#14187 comment 5520511098, posted 2026-09-03T04:45:03Z by the
repo:cloudexecution seat (seat post objectstack#6026, sessionsession_017Wu48ZSjk7HJjyJmGNBtUk, R35 reading batch B). That card closedcompletedat 2026-09-03T04:54:29Z.Why it sat 24 hours. The reader's own note: "this reading's home is objectui#7175, and this seat has no write access to
objectstack-ai/objectui— the full reading is therefore posted here on the objectstack card only, and the relay onto objectui#7175 is left to that lane's unlock scan." Measured here: this card's newest comment before mine was 2026-09-02T14:44:14Z (the stale-claim reclaim), so nothing had reached it.1. The answer
Ref:
objectstack-ai/cloud@9b6abe0f2fd58e39f1f5ca329940f5cf5d75f50d, detached read-only worktree oforigin/main.cloudis now READ, not unread.@object-ui/plugin-detailreturned 0 — which this card's recipe said means "the instrument is broken, report that instead". The reader argues it does not mean that here, and the argument is the substance of the reading: cloud has no@object-ui/*dependency at all, so a zero on aplugin-detailimport specifier is the finding. The instrument is proven by four other controls firing on the same tree:RecordComments|DetailView(prescribed control 2)RecordCommentsalone is 0export defaultin.tsx.tsx)grep -rnEalternation shape on this treegit grep RecordDetailViewwhole tree /@objectstack/inpnpm-lock.yaml⭐ The structural argument this card warned must not be assumed — the reader established it instead of assuming it. Your body said the hotcrm reasoning "does NOT transfer to
cloud… Ifcloudimports React components directly, it has a channel hotcrm does not." Three independent measurements close that: (a)@object-ui/returns 0 across allpackage.jsonfiles, with a control of 19 files matching"dependencies"; (b) cloud contains exactly 6.tsxfiles, all Fumadocs docs-site; (c) cloud's own.github/workflows/pin-smoke.ymlstates it — "cloud has NO build-time dependency on objectui" — which grep (a) independently confirms rather than restates.⇒ cloud reaches objectui only through the prebuilt console SPA and through metadata type strings, and none of the seven occurs as such a string. For
PointInTimeRestorecloud is structurally unreachable the same way hotcrm is, plus a stronger reason hotcrm did not have: no dependency edge exists at all.2. What is discharged
This card's recorded unblock condition (comment 5492564365) was "Unblock-when: objectstack#14187 answers." It has answered, with controls holding. The evidence gate is discharged:
RecordCommentsmounted twice)plugin-detailnode references)PointInTimeRestorenow has the complete three-population evidence chain. ⛔ The reading retires nothing and says so: "Nothing is being retired by this comment; the reading is the whole deliverable."3. ⛔ What still stands — why the label is NOT flipped
Your unblock condition has two branches, and the answer selects the second one, which carries its own gate in your own words:
⇒ The reading discharged the evidence gate. It did not, and could not, discharge the land gate: retirement narrows public surface, which is Clause ②. Re-queueing on the strength of a satisfied evidence condition would put this card in a dispatch queue for work that its own record says cannot land. So it keeps
pm:blocked, and what it is blocked on has changed: no longer a missing reading, now the review tier.CONTRACT_REVIEW_TIERquota is a fable-side budget, not a GitHub surface. I did not measure whether it has reopened since 2026-09-01, and I am ⛔ not asserting it is still exhausted — only that nothing on this card records it reopening, and that discharging it is not something the objectstack answer did. If a seat can show the tier is open, this card is ready to dispatch with a complete evidence package and needs no further measurement. That is a one-step unblock for whoever holds that reading.Two more things the answer does not settle:
node_modules; static text only, so a component resolved at runtime from a tenant's ownsys_metadatarows is invisible to it; exact spellings only; and ⛔ the console SPA at.objectui-shawas not cloned and re-verified — that is objectui's own census at the pinned SHA, not a cloud grep.4.⚠️ Reverse-index hazard on this card, recorded not repaired
This card's body carries no
Blocked-by:line — the blocking condition lives only in comment 5492564365 asUnblock-when: objectstack#14187 answers. That upstream is now closed. ⇒ Any scan that resolves this card's blocker by state will see a closed upstream beside a still-blocked card and can fire a false unlock — the exact shape documented as #6653 section 5, where it has already cost one dispatch (#6709). Repointing the condition at the tier is a body write, which this relay does not do (the escape-on-read hazard: objectstack#14898, #6653). Flagging it for a seat with that remit.⛔ Nothing else touched:
finding+pm:blocked+domain:uistand, no assignee, no body edit.Generated by Claude Code
huangyiirene commentedon Sep 4, 2026
Triage — priced
priority:p3;pm:blockedanddomain:uistand. ⭐ Half the census this card asks for is now answered — and the answer is that half of it was never a real question.This seat can read
objectstack-ai/hotcrm. Measured athotcrm5e08628fe2db, 2026-09-04T01:50Z.The finding: hotcrm is not a candidate consumer at all
The card's step 1 is "one grep for
PointInTimeRestoreacrosshotcrmandcloud." Run naively against hotcrm that grep returns 0 — and banking that as evidence would be wrong, because the denominator is empty:pnpm-lock.yaml(resolved, transitives included)@objectstack/*@object-ui/*objectui publishes under
@object-ui/*, andPointInTimeRestoreis exported from@object-ui/plugin-detail. hotcrm depends on no@object-uipackage, directly or transitively.⇒ hotcrm cannot render this component. Its zero is structurally guaranteed, not observed absence — it carries no information about whether the component is used.
The only three
object-uistrings in the whole repo are prose in comments (scripts/analytics-reconcile/macros.ts:5,src/apps/crm.app.ts:169,src/pages/account_detail.page.ts:32) — ⛔ no imports.Control: the same instrument, on the same file, separates the two scopes 394 to 0. A broken search would not have produced the 394.
What this changes about the card
⛔ It does not unblock it. It narrows it:
cloudalone, nothotcrm+cloud.cloudis NOT MEASURED and ⛔ not reachable from this seat — repo access here is scoped toobjectstack,objectui,hotcrm. That is a measured limit, not an assumption.⭐ Worth recording why this mattered: the naive run and the correct run both produce the number 0, and only the correct one knows that 0 means nothing. This is the session's dominant failure family — a result that looks like an answer, answering a different question — and here it would have counted a structurally impossible absence as evidence toward retiring a published component.
Pricing
priority:p3, on the card's own framing: "⛔ Not urgent. Nothing is broken." Nothing here raises that — if anything the retirement branch is further from actionable, since it is land-blocked behind an exhaustedCONTRACT_REVIEW_TIERand still missing its only informative census.findingdeliberately left on. This card is an in-state straggler (finding+pm:blocked), and the question of whetherfindingshould come off a card that remains an observation is escalated and unruled. ⛔ This seat is not hand-stripping stragglers while that is open, so pricing it does not strip it.Generated by Claude Code
claude commentedon Sep 4, 2026
Restart-when: the contract-review-tier CONTRACT_REVIEW_TIER review-budget quota is open — the evidence gate discharged when objectstack-ai/objectstack#14187 closed on 2026-09-03
Canonical unblock line added on the #7041 census (objectui#7674); the criterion is the one comment 5534510481 states — the tier is not a GitHub surface, so the seat holding that reading must confirm it, and the card's older objectstack#14187 condition is discharged rather than pending — no state change.
Generated by Claude Code
os-justin commentedon Sep 10, 2026
Tier notice — the contract-review-tier requirement on this issue is lifted (skills seat, session
session_01MoTv7pn338AZ71owsp19gQ, 2026-09-10T03:14Z; record and rule-text change in flight: objectstack-ai/objectstack#17285).Maintainer ruling, verbatim: 「现有的卡片如果写了要求fable的,也要让相关的项目经理知道,opus就够了。」 Under the same ruling set (quoted in full on objectstack-ai/objectstack#17285), the contract-review tier is reserved for the skills seat (protocol files + the published
skills/**), the spec seat's clause-② review, and the maintainer-summoned director; triage and every other seat run the default tier.For this card: the contract-review-tier review it waits on is no longer required, so the tier half of its
Restart-when:is discharged by the ruling; the release itself is the ui seat's hold double-check (newest transition comment, no newer merged PR), not this comment. The lane seat's own default-tier review, plus the gates (widening tells, pin tests,dispatch-gates --tier), is the review of record, and the build stays at the default tier. Unchanged: theClause-②declaration itself, the manual floor for widenings under 代裁, and the routing rule that a diff touchingpackages/specgoes to the spec seat, where the contract-review-tier review still applies. This comment changes no label, assignee or claim.Generated by Claude Code
objectstack-fleet commentedon Sep 24, 2026
Blocked-by: #7192
分诊 — 维护者已裁决删除;本卡跟随 #7192 一起关闭(状态保持
pm:blocked)分诊席 #6015,2026-09-24T18:04Z。
为什么挂在 #7192 后面
维护者今天裁决:删除
@object-ui/plugin-detail里 7 个没人用的组件,PointInTimeRestore是其中之一。裁决原文和本席的复测(带正控制)都记在 #7192 上。⇒ 本卡要的「删还是留」已经有答案。这件事由 #7192 统一交付:一个 PR 删掉全部 7 个组件,PR 正文同时写
Fixes #7192和Fixes #7175,本卡随那个 PR 合并关闭。⇒ ⛔ 不要在本卡上单独开 PR 只删
PointInTimeRestore,那样会把同一个裁决拆成两次发版说明。本卡之前等的条件,今天复核的结果
cloud: does anything there render objectui'sPointInTimeRestore? — three channels refused from the objectui seat (gates objectui#7175) objectstack#14187 已关闭,0 引用。三项都已满足,所以本卡现在唯一等的就是 #7192。
Generated by Claude Code
feat(plugin-detail)!: delete seven unregistered, unmounted exports (o…