Repository navigation
decision(plugin-kanban): KanbanEnhanced.tsx is published source with zero importers and a subpath that never resolved — delete it, or give it a real export? #8932
Description
Activity
- addeddomain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec laneobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lane
on Sep 10, 2026 - addeddomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatand removeddomain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec laneobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lane
on Sep 10, 2026 Triage: re-routing
domain:spec→domain:ui; typeTask,priority:p3,needs-user-decision. Half-state healed.Lane
objectui routes
domain:devx(engineering surface) anddomain:spec(contract surface) to their cross-repo lanes and everything else — the published libraries and apps — todomain:ui. Whichever way this is ruled, the change lands inpackages/plugin-kanban(the file itself, or itsexportsmap and barrel), which is a published library. ⇒domain:ui. ⛔ The filing seat's lane was the seat's own, not the fix's.Decision box, and the card is right about why
Deleting published source is a further narrowing of what the package ships, and removing a published capability is a maintainer floor — the exports map has never sanctioned that subpath, but the file has been in the published tarball for many releases and an unsanctioned deep import into
node_modulesreaches it. ⇒ ⛔ Triage does not rule it.⭐ Recording the card's own disclosure, because it is the more valuable half: the filing seat states plainly that it had said it would file this card and did not, and that the delta re-review caught the omission two rounds later. A gap that is on the record is a different thing from a gap.
⚠️ And the structural note that makes this card load-bearing:KanbanEnhanced.tsxis invisible tocheck:unreferenced-sources, which coverspackages/componentsonly. ⇒ No gate will ever surface it again. If this card is closed without a decision, the file simply stays.维护者速读
plugin-kanban这个已发布的包里,有一个文件KanbanEnhanced.tsx:它被打进了每一次发布,但没有任何正常途径能用到它 —— 包的出口清单里从来就没有它,包的入口也从没转出过它,全仓库除了一个测试之外零处引用。⇒ 它既不是活着的功能,也不是干净的死代码;它是"发出去了但谁也够不着"的源码。
- A —— 删掉它。 包从此只发它真正想发的东西。
⚠️ 唯一风险:某个用户可能绕过出口清单、直接深挖node_modules里的文件路径来引用它 —— 这条路我们从没承诺过,但它确实通,而且这个包已经发了很多个版本。 - B —— 给它一个真正的出口,让它成为包正式支持的一部分。⇒ 从此要长期维护它、为它写文档、不能随便改。而今天没有任何一个已知用户要它。
- C —— 什么都不改,只在文件里加一句"这是内部的、别用"。最省,但那个够不着的文件还在,而且没有任何自动检查会再提起它。
A / B / C?
os-decision-facets
- ① 项目长远合理性:A 让"发布出去的东西"和"我们打算支持的东西"重新相等 —— 一个包的 tarball 里不该有连自己出口清单都不认的文件。B 相反:为一个零已知用户的界面签下永久维护义务,而它当初进入发布物是因为没人拦,不是因为有人要。C 保留一个状态本身就说不清的文件(既非公开也非私有),下一个人还得重新查一遍才敢动它。
- ② 实际业务拉动:实测为零 —— 出口清单只有
.和./style.css,包入口从未转出它,非测试引用者 0,唯一引用是kanban-handler-slots-7664.test.tsx。⇒ B 的拉动今天是零;A 的拉动也不是功能,而是把发布面收干净。⚠️ 有一件事量不到:包外的用户有没有在深挖路径引用它 —— 我们看不见别人的代码。 - ③ 防 AI 犯错:
⚠️ 这一项是本卡真正的分水岭。该文件逃出了check:unreferenced-sources的覆盖范围(那个检查只管packages/components)⇒ 没有任何门禁会再发现它,这张卡是唯一会提起它的东西。A 一次性关闭;C 把它留成一个"下次有人读到会再问一遍"的谜;B 至少让它诚实。⇒ 对后来的人(含 AI)最危险的是 C:一个既在发布物里、又没有出口、也没有解释的文件,读到的人无法判断删它安不安全。 - ④ 创业阶段不扩散:A 最省,且减少一份义务。C 零成本但把债留着。B 最贵:新增一个已发布界面,从此进入版本、文档与兼容的长期账单。
推荐:A。 四棱里三棱同向,唯一的反对理由是"可能有人在用我们从未承诺过的路径"。⇒ 若担心这一点,正确的做法是在下一个 major 里删并写进发布说明,而不是把一个没人要的界面转正。
本分析看不见什么:我无法测量包外是否真有消费者深挖
node_modules引用它 —— 那需要下载遥测,或跨组织仓库搜索,而本会话的仓库作用域只有 objectstack 与 objectui,⛔ 够不到。若维护者知道有这样的消费者,A 就是一次破坏性变更,推荐应改为"B 或一个带弃用期的 A"。priority:p3: nothing is broken, no user is reachable through it, and the cost of waiting is that a file nobody can reach stays in the tarball.Triage seat ·
session_017VGfRocA8VjczSe84fgjY3· R+168 · 2026-09-10T16:13Z (timestamp taken in the same tool call that posts) · comment from the triage seat
Generated by Claude Code
- A —— 删掉它。 包从此只发它真正想发的东西。
Ruling: A — delete
KanbanEnhanced.tsx; the changeset states the removal — class-one self-adjudication (director seat, summon #22,session_01QsCVSivtpwT6ZXs5Rtvqxe(GitHubos-tesla)), 2026-09-11T11:53ZChannel: 一类自裁 (SKILL.md 〈分诊座位职责〉, the three-criterion gate; ⛔ not the four-facet 代裁 channel). Recorded in the summon #22 ledger on #12708 for the maintainer's 追认; an overturn there is executed as the new ruling.
Ruling. A: delete
packages/plugin-kanban/src/KanbanEnhanced.tsxand its sole reference (kanban-handler-slots-7664.test.tsx, deleted or rewritten to what it still pins). ⛔ Not B: it widens a published surface for a consumer nobody has named. ⛔ Not C: the file is invisible tocheck:unreferenced-sources(that gate coverspackages/componentsonly), so nothing would ever raise it again.- ① authority: ADR-0049 enforce-or-remove applied to unreachable published source; 创业阶段不扩散 「remove 优于 declare-and-maintain … 已发布零消费的能力不因沉没成本获得豁免」; measured with controls:
exportsis.and./style.cssonly, the barrel never re-exported it, non-test importers = 0. - ② one revert.
- ③ zero floors: the
exportsmap IS the package's published contract and never sanctioned the subpath, so the declared surface does not move; no security, capability or gate change. A deep import intonode_moduleswas never a promise.
Execution (
domain:uiseat): delete;patchchangeset naming the removed file for anyone deep-importing it; state in the PR whetherCardTemplate/ColumnWidthConfigare consumed or in the same condition — report, ⛔ do not delete them here.Clause-②: no— cite theexportsmap in the claim. Re-confirm on the currentmainthat PR #8865's registry-key retirement did not change the file's situation before deleting.State:
needs-user-decision→pm:queue.
Generated by Claude Code
- ① authority: ADR-0049 enforce-or-remove applied to unreachable published source; 创业阶段不扩散 「remove 优于 declare-and-maintain … 已发布零消费的能力不因沉没成本获得豁免」; measured with controls:
objectstack-fleet commented
on Sep 24, 2026 ContributorMore actionsRatified: summon #22 class-1 ruling 5634037484 (letter A — delete
KanbanEnhanced.tsx) · UI closure batch 6 item 10 · maintainer 「同意」 (chat, director seat summon #29,session_01EcrTi7s5oDYPHS4Pi7h31d) 2026-09-24T08:02ZRatified as written. Read on objectui
origin/main62597c5:packages/plugin-kanban/src/KanbanEnhanced.tsxis still present and still reachable by noexportsentry and no barrel, so the work is undone. The executing PR deletes it and its sole test reference (deleting that test, or rewriting it to what it still pins) and states the removal in the changeset.pm:queue·priority:p3·domain:uistand.
Generated by Claude Code
objectstack-fleet commented
on Sep 25, 2026 ContributorMore actionsClaim: PM loop round 4 —
domain:uiexecution seat 2
Session:session_014mXUNuFomfj24w7s1pZzhN
Branch:claude/issue-8932-retire-kanban-enhanced
Worktree:objectui-issue-8932
Domain:domain:ui
Seat:domain:ui#2
File surface:packages/plugin-kanban/src/KanbanEnhanced.tsx(deleted) and its sole test referencekanban-handler-slots-7664.test.tsx(deleted, or rewritten to what it still pins);- a retirement pin;
- any pending changeset this deletion falsifies, reconciled in the objectui#10533 form;
- one
.changeset/8932-…md(stop on breach; explain in the report). - Amended by the seat at the ACCEPT, after both rounds of review:
- five files the deletion forced:
packages/plugin-kanban/src/cardPredicateScope.test.tsx(a second test reference), thepackages/plugin-kanban/src/index.tsxtombstone comment,scripts/__tests__/one-authority-per-exported-name-6273.test.ts(the shrink-onlyKNOWN_COLLISIONSratchet), andpackages/plugin-kanban/package.jsonwithpnpm-lock.yaml(the orphaned@tanstack/react-virtual); - asked for by contract review round 1 (
5831016914): the four@object-ui/typesJSDoc passages inpackages/types/src/complex.tsandpackages/types/src/objectql.ts(comment only), and.changeset/8932-kanban-enhanced-types-jsdoc.md. git merge-treeagainst PR objectui#10595 and objectui#10518's branch is clean.
Container & model:S,mode:subagent,model: opus—dispatch-gates --tier: 「no path-derived mandate … floor sonnet · default opus · ceiling fable」; executes ruling5634037484, ratified5810258711(delete)
Clause-②: no
Thread-read: 5810258711
Serial constraints cleared: open-PR file lists read 2026-09-25T09:20Z. No open PR touchespackages/plugin-kanban/src/(objectui#8941 and the release PR touch onlypackage.json/CHANGELOG.md). This seat's objectui#8522 (PR objectui#10549) merged1434bb43. Livepm:dispatchedclaims of seats 1, 3, 4 and 5 name noplugin-kanbansource file.
- five files the deletion forced:
Clause-②: no—@object-ui/plugin-kanban'sexportsmap is.and./style.cssonly, and the barrel never re-exportedKanbanEnhanced, so the declared surface does not move (the ruling's ③). The changeset still names the file for anyone deep-importing it.
Generated by Claude Code
objectstack-fleet commented
on Sep 25, 2026 ContributorMore actionsos-dev-report
{
"issue": 8932,
"status": "done",
"branch": "claude/issue-8932-retire-kanban-enhanced",
"pr": "#10588",
"session": "session_014mXUNuFomfj24w7s1pZzhN — mode:subagent, the dispatching seat's session id",
"premise_still_valid": true,
"summary": "Executed ruling 5634037484 (ratified 5810258711): packages/plugin-kanban/src/KanbanEnhanced.tsx is deleted in draft PR #10588 (head a843148, base d22b37b). A new pin (kanbanEnhancedRetired-8932.test.ts) is red on base+pin and green on head. The patch changeset names the removed file, the dist/KanbanEnhanced.d.ts(.map) typings (the only part of the module ever shipped; the component was never in dist/index.js or index.umd.cjs), the three style.css rules that leave (border-border/50, text-yellow-500, shadow-xl; 65 to 62 rules), and the dropped @tanstack/react-virtual dependency. H1 confirmed with lit controls. H2 FALSIFIED: there were two test references, kanban-handler-slots-7664.test.tsx (an unread vi.mock recorder, removed; all 7 legs kept) and cardPredicateScope.test.tsx (a direct import: the KanbanEnhanced positive leg removed, the fail-soft and objectui#5741 legs moved to KanbanBoard). Beyond the claimed file surface, the deletion forced five more files: cardPredicateScope.test.tsx, the index.tsx tombstone (comment only), the shrink-only KNOWN_COLLISIONS ratchet (ConditionalFormattingRule loses its deleted third site, proven by ablation), and packages/plugin-kanban/package.json plus pnpm-lock.yaml (react-virtual's only consumer was the deleted module, so check-unused-dependencies went red at 2165ee4). H3: CardTemplate is consumed by CardTemplates.tsx; ColumnWidthConfig has 0 readers (a declaration, a Zod mirror and 3 re-exports). Neither is in KanbanEnhanced's condition, because both are reachable through the '.' export. Not deleted. H4: two pending changesets (8802-8257-8008, 6172) reconciled in the objectui#10540 form, with frontmatter md5-identical. The PR assignee write was refused by the permission classifier; see deviations.",
"tests": "All at final head a843148 unless noted, run from the repo root under os-verify-lock. (1) pnpm exec vitest run --maxWorkers=2 packages/plugin-kanban/ gives 'Test Files 62 passed (62) / Tests 413 passed (413)', VERDICT command-exit 0. (2) pnpm exec vitest run --maxWorkers=2 scripts/ gives 'Test Files 177 passed | 2 skipped (179) / Tests 5303 passed | 2 skipped (5305)', VERDICT command-exit 0. At 2165ee4 (deletion without the dependency removal) the same suite had 1 failed: check-unused-dependencies.test.ts 'is green: every gated declaration has a consumer', with @tanstack/react-virtual declared-without-consumer. (3) Verbose run of the 4 touched test files at 2165ee4: 27 passed, each leg listed by name. (4) pnpm --filter @object-ui/plugin-kanban type-check ('tsc --noEmit && tsc -p tsconfig.test.json') exits 0. tsc -p tsconfig.test.json --listFiles lists kanbanEnhancedRetired-8932.test.ts, cardPredicateScope.test.tsx and kanban-handler-slots-7664.test.tsx. (5) pnpm type-check:scripts TC-SCRIPTS-EXIT=0. pnpm --filter @object-ui/plugin-kanban lint: 0 errors, 234 existing no-explicit-any warnings, PKG-LINT-EXIT=0. eslint on the edited scripts test SCRIPT-LINT-EXIT=0. (6) Build at 5a9a73d exits 0. Compared with the base build, dist loses exactly KanbanEnhanced.d.ts and KanbanEnhanced.d.ts.map, dist/index.d.ts is byte-identical (cmp exit 0), and KanbanEnhanced appears 0 times in dist/index.js and index.umd.cjs. The index.css delta was measured by running build-css with and without the module: 12.66 kB / 65 rules to 12.03 kB / 62 rules, and the worktree was clean afterwards. PIN red-then-green: at 76265df (base + pin only) 'Tests 2 failed (2)': 'expected { retired: true, live: true } to deeply equal { retired: false, live: true }', and the specifier list was ['tests/kanban-handler-slots-7664.test.tsx', 'cardPredicateScope.test.tsx'] after its control toContain('index.tsx') passed. Both tests pass on head. ABLATION of the KNOWN_COLLISIONS edit, via objectstack scripts/ablation-replace.mjs on the committed tree: anchor x1 to x0, blob 0a8b7933d98f to d610bed3eea6. The test 'declares no name twice outside the named, shrinking baseline' went red with 'KNOWN_COLLISIONS lists collisions that no longer exist' naming packages/plugin-kanban/src/KanbanEnhanced.tsx (1 failed | 10 passed). Restore: blob == HEAD (0a8b7933d98f), git diff HEAD empty. The trap was set and the worktree was clean afterwards.",
"gates": [
"check-changeset-presence exit 0: '5 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s): .changeset/8932-retire-kanban-enhanced.md'",
"check-changeset-no-major exit 0: 'No changeset declares a major bump'",
"check-changeset-fixed exit 0",
"check:pending-changeset-literals exit 0: 'No test source names a pending changeset'",
"check-changeset-claims exit 0 (report-only): flags 6939-kanban-column-cards.md (a measurement anchored at 78a3cc2, left) and 6349-types-internal-name-collisions-batch-1.md (its '43 entries to 40' is that change's count; the entry count is unchanged here). Self-contradiction reading: 'Every package declared across those 3 body(ies) is either not negated'",
"check-changeset-overwrite exit 0 (report-only): 2 modified changesets. 'declared at base' equals 'declares now' for both, which is case 2, an intentional correction",
"check:new-line-citations exit 0: 'VERDICT new-cross-file-line-citations: 0 new citation(s)'",
"check:control-bytes exit 0: OK",
"check-vi-mock-specifiers, check-vi-mock-inherit, check-vi-mock-override-shape, check-test-path-roots: each exit 0, OK",
"check:handler-key-reads exit 0: OK. check:unreferenced-sources exit 0: OK",
"check:unused-deps exit 0: 'Every gated declaration has a consumer'. check:phantom-deps exit 0",
"check:lockfile-integrity exit 0: 'VERDICT clean'. check:lockfile-dedupe exit 0: 'VERDICT deduped'",
"check:published-tsconfig-exclude exit 0. check:installed-spec-pin-claims exit 0",
"check-governed-queue-guard --test over the 11 changed paths: 'NOT GOVERNED'",
"NOT MEASURED: check:sdui-registration-pins, reason: exit 2 PREREQUISITE (needs a console build); this diff changes no registration",
"NOT MEASURED: check:readme-exports, reason: needs every package built; dist/index.d.ts is byte-identical, so no export moved",
"Consumer sweep not owed: the entry's published typings are byte-identical"
],
"files_changed": [
"D packages/plugin-kanban/src/KanbanEnhanced.tsx",
"A packages/plugin-kanban/src/tests/kanbanEnhancedRetired-8932.test.ts (pin)",
"M packages/plugin-kanban/src/tests/kanban-handler-slots-7664.test.tsx (KanbanEnhanced vi.mock recorder removed; 0 assertions moved or removed)",
"M packages/plugin-kanban/src/cardPredicateScope.test.tsx (removed: 'KanbanEnhanced binds the ambient predicate scope alongside the card'; moved to KanbanBoard: 'a scope-gated condition fails SOFT (no style) outside the provider', 'a bare-field condition no longer binds the card (objectui#5741)'; kept: the KanbanBoard scope leg and 4 relation-field legs)",
"M packages/plugin-kanban/src/index.tsx (kanban-enhanced tombstone comment only)",
"M scripts/tests/one-authority-per-exported-name-6273.test.ts (KNOWN_COLLISIONS ConditionalFormattingRule: 3 sites to 2)",
"M packages/plugin-kanban/package.json (@tanstack/react-virtual removed from dependencies)",
"M pnpm-lock.yaml (the plugin-kanban importer loses 3 lines; no resolution moves)",
"M .changeset/8802-8257-8008-kanban-gantt-family-retirement.md (scoped 'at this change' plus a dated note; frontmatter md5 equal)",
"M .changeset/6172-markdown-kanban-one-authority.md (scoped 'at this change' plus a dated note; frontmatter md5 equal)",
"A .changeset/8932-retire-kanban-enhanced.md ('@object-ui/plugin-kanban': patch)"
],
"deviations": [
"PR assignee NOT set: 'node scripts/pm/label-write.mjs --repo objectstack-ai/objectui --issue 10588 --assign os-elon-musk' was refused by the Claude Code auto mode classifier, reason '[External System Writes]'. Not retried and not rerouted; the seat sets it. The card assignee was not touched.",
"File-surface breach, five files beyond the claim, each forced by the deletion: cardPredicateScope.test.tsx (imported the module); packages/plugin-kanban/src/index.tsx (comment: its tombstone said the file stays); scripts/tests/one-authority-per-exported-name-6273.test.ts (the shrink-only ratchet reds on a stale site, shown by ablation); packages/plugin-kanban/package.json and pnpm-lock.yaml (check-unused-dependencies reds on the orphaned @tanstack/react-virtual). The claim's file surface needs the seat to extend it.",
"Conflict named, not chosen silently: the dispatch order says 'Stop on any other breach'. The role file (which prevails) says a falsified mechanism hypothesis is reported and re-routed per the ruling's intent. H2 and the expected landing points were falsified by forced consequences of the ruled deletion, so I followed the role file and re-routed instead of stopping.",
"Serial overlap: draft PR #8941 (the lucide-react bump, 2026-09-20) edits the adjacent lucide-react line in packages/plugin-kanban/package.json and the same importer block in pnpm-lock.yaml. Whichever PR lands second meets a textual conflict, cleared by merging main and re-running pnpm install. No other open PR (10566, 10562, 10561, 10558, 10556, 10278) touches any file in this diff.",
"Commit trailers: my first local commit carried a model-named Co-Authored-By copied from the harness reminder. I amended it to the model-free pair before its first push; that commit was never pushed. All pushed commits carry 'Claude-Session' plus 'Co-authored-by: Claude'.",
"Acceptance notes only (no class a/b/c, no carrier): comments that still describe KanbanEnhanced as a live board: packages/types/src/complex.ts and objectql.ts JSDoc (shipped in @object-ui/types typings; correcting them needs an @object-ui/types changeset), and test docblocks in columnCollapsedHonoured-9628, schema-catalog kanban-column-cards-6939, object-kanban-columns-declared-8913 and one-authority-6273."
],
"mcp_calls": "0",
"api_writes": "2 — (1) pr_create through the fleet-write relay: POST /repos/objectstack-ai/objectstack/dispatches (HTTP 204, request fw-20260925T102126Z-3f6a3e, run 36123535876 success), executed as POST /repos/objectstack-ai/objectui/pulls (draft) and producing #10588; (2) this os-dev-report comment through post-stamped: POST /repos//issues/8932/comments. The label-write (POST /repos//issues/10588/assignees) was refused locally by the classifier before any request, so 0 writes. git push is not REST: 5 pushes (the empty branch, 76265df, 2165ee4, 5a9a73d, a843148).",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commented
on Sep 25, 2026 ContributorMore actionsos-dev-report
{
"issue": 8932,
"status": "done",
"round": "rework after contract review 5831016914 (FAIL on a843148)",
"branch": "claude/issue-8932-retire-kanban-enhanced",
"pr": "#10588",
"head": "313ca6321",
"session": "session_014mXUNuFomfj24w7s1pZzhN — mode:subagent, the dispatching seat's session id",
"premise_still_valid": true,
"summary": "Both review fixes are done, and nothing the review judged correct was touched. (1) False prose: I independently re-measured published 17.6.0 with npm pack. exports is '.' only; the tarball has no CSS; dist has KanbanEnhanced.d.ts(.map) and no KanbanEnhanced.js; index.js carries a KanbanEnhanced chunk export bound to the minified function ct and 'kanban-enhanced' twice; index.umd.cjs carries it; index.d.ts types kanbanComponents['kanban-enhanced'] from './KanbanEnhanced'. I rewrote .changeset/8932-retire-kanban-enhanced.md to match. Through 17.6.0 the component shipped inlined, reachable through the kanban-enhanced key and the kanbanComponents map, and it leaves the bundle in this release with the objectui#8257 / #8802 retirement (the 8802-8257-8008 entry). This change removes the source file, dist/KanbanEnhanced.d.ts(.map) and the orphaned @tanstack/react-virtual. style.css first ships in this release and does not carry the three rules. 'the only part ... ever shipped' and 'never in dist/index.js / index.umd.cjs' are gone. The index.tsx tombstone comment I wrote in round 1 carried the same false clause ('since the bundle never contained it'); it is corrected the same way. (2) The four present-tense @object-ui/types JSDoc passages (KanbanCard; KanbanColumn.cards; ObjectKanbanSchema.columns twice) now name KanbanImpl as the one board. The objectui#6939 counts and the two-board read-set count are dated and name objectui#8932, and I re-measured that KanbanImpl alone reads id/title/cards/limit/className/collapsed. The past-tense passages were left alone. Comment-only (git diff -w shows only lines starting with ''). The new changeset is .changeset/8932-kanban-enhanced-types-jsdoc.md ('@object-ui/types': patch, one sentence). Running check-changeset-claims on the new head also surfaced pending 8913-object-kanban-columns-declared.md, which says in the present tense 'exactly the members the two board implementations read' and 'before either board implementation sees one'. This deletion makes both false, so I reconciled the entry in the objectui#10540 form (frontmatter md5 equal). That file is inside the claim's declared surface ('any pending changeset this deletion falsifies'). 6172-kanban-trio-rename is added to 'read and left'. The PR body is not patched; the full replacement is in pr_body_replacement. Main at 50e41f7 had not touched any branch file; merge-tree exit 0; no merge commit.",
"tests": "At final head 313ca63, from the repo root (pnpm -C worktree exec) under os-verify-lock: (1) vitest run --maxWorkers=2 packages/types/ packages/plugin-kanban/ gives 'Test Files 298 passed (298) / Tests 5636 passed (5636)', VERDICT command-exit 0 (the same result at abda7fc). (2) vitest run --maxWorkers=2 scripts/ gives 'Test Files 177 passed | 2 skipped (179) / Tests 5303 passed | 2 skipped (5305)', VERDICT command-exit 0. (3) pnpm --filter @object-ui/types type-check ('tsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json', run in /home/user/objectui-issue-8932/packages/types) VERDICT command-exit 0 at abda7fc; the types source is unchanged since. (4) Comment-only proof: git diff -w -U0 over packages/types/src/complex.ts, packages/types/src/objectql.ts and packages/plugin-kanban/src/index.tsx, filtered to +/- lines not starting with '', returns nothing (grep exit 1). (5) 17.6.0 measurement: npm pack @object-ui/plugin-kanban@17.6.0 shows exports ['.']; 0 css files; dist lists KanbanEnhanced.d.ts and KanbanEnhanced.d.ts.map; index.js KanbanEnhanced=1, kanban-enhanced=2, react-virtual=1; index.umd.cjs KanbanEnhanced=1, kanban-enhanced=2; index.d.ts KanbanEnhanced=2; control: KanbanImpl=1 in index.js. (6) Lane-member re-measurement at head: KanbanImpl.tsx reads column.id, .title (5), .cards (12), .limit (2), .className (1) and .collapsed (5); cardSubtitle 3, cardFieldCells 5, coverImage 8, colorStyle 1. The round-1 pin, ablation and red-then-green evidence are unchanged; see comment 5830840374.",
"gates": [
"all at 313ca63 unless noted",
"check-changeset-presence exit 0: '7 source file(s) of 2 released package(s) changed, and this change declares 2 changeset(s): .changeset/8932-kanban-enhanced-types-jsdoc.md, .changeset/8932-retire-kanban-enhanced.md'",
"check-changeset-no-major exit 0: 'No changeset declares a major bump'",
"check-changeset-fixed exit 0",
"check-changeset-claims exit 0 (report-only): 29 pending entries name a touched file. The self-contradiction reading gives 'Every package declared across those 5 body(ies) is either not negated'. Read: 8913 was falsified and is reconciled here. 6939, 9628, 7322, 8801, 8990 and 9606 have no present-tense claim about KanbanEnhanced or plural boards. The rest name complex.ts or objectql.ts for members this branch does not touch.",
"check-changeset-overwrite exit 0 (report-only): 3 modified entries (6172-markdown, 8802, 8913). 'declared at base' equals 'declares now' for each. Frontmatter md5 for 8913: ecedb10c5189 base == head",
"check:pending-changeset-literals exit 0: 'No test source names a pending changeset'",
"check:new-line-citations exit 0: 'VERDICT new-cross-file-line-citations: 0 new citation(s)'",
"check:control-bytes exit 0: 'OK (scanned 8659 tracked text file(s)'",
"git merge-tree --write-tree origin/main(50e41f7) HEAD exits 0. git diff --name-only d22b37b origin/main over every branch file is empty, so no merge was needed",
"Not re-run this round (not reached by comment/changeset-only edits): the vi-mock gates, test-path-roots, handler-key-reads, unreferenced-sources, unused-deps, phantom-deps and the lockfile gates, all green at a843148; the plugin-kanban type-check and build, green in round 1"
],
"files_changed": [
"M .changeset/8932-retire-kanban-enhanced.md (rewritten against 17.6.0)",
"A .changeset/8932-kanban-enhanced-types-jsdoc.md ('@object-ui/types': patch)",
"M packages/types/src/complex.ts (JSDoc: KanbanCard, KanbanColumn.cards)",
"M packages/types/src/objectql.ts (JSDoc: ObjectKanbanSchema.columns, two passages)",
"M packages/plugin-kanban/src/index.tsx (tombstone comment: the false 'bundle never contained it' clause corrected)",
"M .changeset/8913-object-kanban-columns-declared.md (scoped 'at this change' plus a dated note; frontmatter md5 equal)"
],
"deviations": [
"Beyond the two named fixes, one sentence: the round-1 index.tsx tombstone said 'the only part of the module that was ever published, since the bundle never contained it'. That is the same false claim as fix 1, in my own diff, so I corrected it in the same commit (comment-only).",
"Beyond the two named fixes, one reconciliation: pending 8913-object-kanban-columns-declared.md, which this deletion falsifies ('the two board implementations read'). It is inside the claim's declared surface and in the same form as the 8802/6172 reconciliations the review accepted. Surfaced by the check-changeset-claims re-read the coordinator asked for.",
"The PR body is NOT patched (per instruction). The full replacement is in pr_body_replacement; the seat applies it.",
"The refused PR-assignee write was not retried; PR #10588 assignees are still empty.",
"Observation, not filed (no class a/b/c): the pending 8802-8257-8008 entry does not mention that the published kanbanComponents map narrows (17.6.0 typings included 'kanban-enhanced'). That is objectui#8257 / #8802's, not this PR's. It is in the Acceptance notes of pr_body_replacement."
],
"mcp_calls": "0",
"api_writes": "1 this round — this os-dev-report comment through post-stamped (fleet-write relay): POST /repos//issues/8932/comments. git push is not REST: 2 pushes this round (abda7fc, 313ca63). Reads: GET the issue comment 5831016914 (the review), and an npm registry tarball read (npm pack @object-ui/plugin-kanban@17.6.0).",
"open_questions": [],
"out_of_scope_findings": [],
"pr_body_replacement": "Fixes #8932\n\nClause-②: no\n\n@object-ui/plugin-kanban'sexportsmap has no./KanbanEnhancedentry. The published 17.6.0 map is.only; this release's in-repo map is.and./style.css. The entry point does not export the component by name, so the declared surface does not move (the ruling's ③). The changeset still names the file for anyone who deep-imported it.\n\nExecutes ruling5634037484, ratified5810258711(maintainer: 「同意」): A — deletepackages/plugin-kanban/src/KanbanEnhanced.tsxand its test references. PM claim5830002817. Rework round after contract review5831016914. Implemented by theos-devrun in sessionhttps://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN.\n\n## What changes\n\n-packages/plugin-kanban/src/KanbanEnhanced.tsxis deleted.\n- Where the component was. I read the published 17.6.0 tarball withnpm pack:\n -dist/index.jsanddist/index.umd.cjscarry the component inlined (aKanbanEnhancedexport of the chunk, bound to the minified functionct). It was reachable through thekanban-enhancedregistry key and the entry'skanbanComponentsmap.\n -dist/index.d.tsreferences./KanbanEnhanced.\n - Theexportsmap is.only. The tarball contains no CSS file.\n - The component leaves the bundle in this release with the objectui#8257 / objectui#8802 key retirement (the pending8802-8257-8008entry), not with this PR. Building the base (d22b37bd8, after #8865) and this branch,dist/index.jsanddist/index.umd.cjscontainKanbanEnhanced0 times on both sides (control:KanbanImplis found indist/index.js).\n- What this PR removes from the published package, measured by building@object-ui/plugin-kanbanon the base and on the branch:\n -dist/KanbanEnhanced.d.tsanddist/KanbanEnhanced.d.ts.map. Nothing else leaves thedist/listing.\n -dist/index.d.tsis byte-identical (cmpexit 0).\n -@tanstack/react-virtualleaves the plugin'sdependencies. The deleted module was the only file in the package that imported it, andcheck-unused-dependenciesfails without this change.pnpm-lock.yamlloses just this importer's three lines.@object-ui/plugin-gridstill declares the package, so no resolution moves.\n-style.css. The stylesheet first ships in this release (pending4929-plugin-published-stylesheets.md). Built after this deletion, it does not carry three utility rules that only the deleted module used:border-border/50,text-yellow-500andshadow-xl. Building with the module keeps 65 rules; building without it keeps 62.\n-@object-ui/typesJSDoc (comment only). Four present-tense passages that namedKanbanEnhancedas a live reader now nameKanbanImplas the one board. The two past counts are dated and name objectui#8932 rather than being deleted:\n -KanbanCard: "whatKanbanImplreads back".\n -KanbanColumn.cards: "measured at objectui#6939: 12 lines inKanbanImpl, and 8 inKanbanEnhanceduntil objectui#8932 deleted it".\n -ObjectKanbanSchema.columns, twice: "whatKanbanImplconsumes", and "counted when there were two board implementations …KanbanImplalone still reads all six members". I re-measured that last claim:KanbanImpl.tsxreadsid,title,cards,limit,classNameandcollapsedoff the lane.\n - The past-tense passages onKanbanColumn.collapsed, on the retiredcolormember, and on the retired lane-collapse key stay as they were.\n -git diff -wover the two files shows only lines starting with*.\n- Changesets:\n -.changeset/8932-retire-kanban-enhanced.md('@object-ui/plugin-kanban': patch) states how the component left the bundle, what this change removes, the deep-import and dependency notes, and thatstyle.cssships without the three rules.\n -.changeset/8932-kanban-enhanced-types-jsdoc.md('@object-ui/types': patch) is one sentence on the JSDoc.\n\n## Premise re-checked on the currentmain(d22b37bd8)\n\nH1: confirmed for the source tree, with lit controls.\n\n- The in-repoexportskeys are.and./style.css.\n- The entry has noimportorexportline that namesKanbanEnhanced(grep exit 1). Control: the same grep finds theReact.lazyimport of./KanbanImpl.\n- A module-specifier grep over the whole tree (from/import(/require(/vi.mock() findsKanbanEnhancedtwice, both times in tests. Non-test importers: 0. Control: the same pattern forKanbanImplfinds the production import inpackages/plugin-kanban/src/index.tsx.\n-⚠️ Corrected in this rework: the first round built only the base and the branch, both after #8865, and wrongly concluded the component was never bundled. The published 17.6.0 package does bundle it (see "Where the component was" above).\n- PR #8865's registry-key retirement did not change the file's situation.kanban-enhancedis unregistered and pinned bykanban-family-registry-keys-retired-8257.test.ts. The file was still on disk at the base.\n\nH2: falsified. The module had two test references, not one:\n\n-src/__tests__/kanban-handler-slots-7664.test.tsx: avi.mocktarget whose prop recorder no leg read.\n-src/cardPredicateScope.test.tsx: a direct import. This is the reference theindex.tsxtombstone itself named.\n\nI handled both as the ruling's intent directs: each test is deleted, or rewritten to what it still pins.\n\n## Test files: every assertion kept, removed or moved\n\nkanban-handler-slots-7664.test.tsx: theKanbanEnhancedprop recorder and itsenhancedlog are removed. All legs are kept verbatim, because every probe records theKanbanImplchunk. Thelogparameter type narrows tokeyof typeof recorded. A docblock paragraph records the removal.\n\ncardPredicateScope.test.tsx:\n\n- Removed: "KanbanEnhanced binds the ambient predicate scope alongside the card". ItsKanbanBoardtwin stays and pins the same verdict on the one registered board.\n- Moved, subjectKanbanEnhanced→KanbanBoard:\n - "a scope-gated condition fails SOFT (no style) outside the provider". It is now the negative control for the live positive leg, which had none of its own.\n - "a bare-field condition no longer binds the card (objectui#5741)". Its canonical-spelling control moved with it.\n- Kept unchanged: "KanbanBoard (impl) binds the ambient predicate scope alongside the card" and the four relation-field legs (objectui#3501).\n\n## Other files the deletion forced\n\n-packages/plugin-kanban/src/index.tsx(comment only). Thekanban-enhancedtombstone said the file "stays". It now records the deletion, names the new pin, and says that through 17.6.0 the component was also bundled behind thekanban-enhancedkey.\n-scripts/__tests__/one-authority-per-exported-name-6273.test.ts: inKNOWN_COLLISIONS,ConditionalFormattingRuledrops its third site, the deleted file. This baseline is shrink-only and fails on a stale site.\n - Ablation on the committed tree: I put the three-site entry back withablation-replace(anchor 1 → 0, blob0a8b7933d98f→d610bed3eea6).\n - Result: "declares no name twice outside the named, shrinking baseline" goes red with "KNOWN_COLLISIONS lists collisions that no longer exist", naming the deleted path.\n - Restore: blob equals HEAD, andgit diff HEADis empty.\n-packages/plugin-kanban/package.jsonandpnpm-lock.yaml: the dependency removal described above.\n\n## Pending changesets (H4)\n\nThree pending changesets are reconciled in the objectui#10533 / #10540 form: the sentence is scoped to "at this change" and a dated note is added. The frontmatter stays byte-identical: the md5 of each file's frontmatter block is equal on base and head, andcheck-changeset-overwriteprints the same "declared at base" and "declares now" lines.\n\n-8802-8257-8008-kanban-gantt-family-retirement.md: "KanbanEnhanced.tsxhas zero non-test importers. ⛔ The file is deliberately left in place".\n-6172-markdown-kanban-one-authority.md: "both files now re-point at it".\n-8913-object-kanban-columns-declared.md: "exactly the members the two board implementations read" and "before either board implementation sees one".check-changeset-claimssurfaced this entry once the branch editedobjectql.ts.\n\nRead and left as they are:\n\n-6939-kanban-column-cards.md: a measurement anchored at78a3cc238.\n-9628-kanban-column-collapsed-honoured.md: describes the reader as it was before objectui#9628.\n-6172-kanban-trio-rename.md: it names thekanban-enhancedregistry key among "four registered kanban renderers". That went stale with the objectui#8257 / #8802 key retirement, not with this file deletion.\n-6349-types-internal-name-collisions-batch-1.md: flagged for naming the ratchet file. Its "43 entries → 40" is that change's own count, and this PR does not change the entry count.\n- The other pending entries flagged because they namecomplex.tsorobjectql.tsdescribe members this PR does not touch. The edits in those files are comment-only on the four kanban passages above.\n\n##CardTemplate/ColumnWidthConfig: report only, not deleted\n\nNeither type is inKanbanEnhanced's condition. Both are exported through.(the entry'sexport typeline from./types), and the deleted module named neither of them (0 hits).\n\n-CardTemplateis consumed.CardTemplates.tsximports it for itstemplatesprop and itsonSelectsignature, andCardTemplatesis itself exported from the entry. Importers of theCardTemplatescomponent inapps/,packages/,examples/,content/andskills/, other than its own file and the entry: 0.\n-ColumnWidthConfighas no reader. 5 non-test source files name it: its declaration inpackages/types/src/complex.ts, its Zod mirror, and three re-exports. That matches the reading objectui#8522 recorded.\n- Control on the same query:KanbanCardis named by the consumersKanbanImpl.tsxanduseQuickAddReorder.ts.\n\n## Pin (H5): red on the base, green on the head\n\npackages/plugin-kanban/src/__tests__/kanbanEnhancedRetired-8932.test.tsfollows thechart-primitives-removed-7397file-removal shape (existsSyncwith a lit control) and this package'suseColumnWidthsRetired-8522naming. It pins two things:\n\n- The file is absent fromsrc/. Control:KanbanImpl.tsxin the same directory reads present.\n- No file undersrc/names the module as a specifier (static or dynamic import, re-export,require,vi.mock/vi.doMock). Firing control: the same walk and pattern find the live board's lazy import inindex.tsx.\n\nRed on76265dfdc(the base plus the pin alone): 2 failed. The first reported{ retired: true, live: true }. The second listed__tests__/kanban-handler-slots-7664.test.tsxandcardPredicateScope.test.tsx, after its control assertion passed. Green on the head.\n\n## Verification (final head313ca6321)\n\nTest runs, all from the repo root under the shared verify lock:\n\n-pnpm exec vitest run --maxWorkers=2 packages/types/ packages/plugin-kanban/: 298 files and 5636 tests passed.\n-pnpm exec vitest run --maxWorkers=2 scripts/(the root-level suite, which is outside the package graph): 177 files passed, 2 skipped, 5303 tests passed.\n - At2165ee472(the deletion without the dependency removal) the same suite had 1 failure:check-unused-dependencies.test.ts› "is green: every gated declaration has a consumer", with@tanstack/react-virtual/declared-without-consumer.\n\nType-check, lint and build:\n\n-pnpm --filter @object-ui/types type-check(tsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json): exit 0 (atabda7fc09; the types source is unchanged since).\n-pnpm --filter @object-ui/plugin-kanban type-check: exit 0.--listFileson the test program lists the pin and both rewritten tests.\n-pnpm type-check:scripts: exit 0.\n-pnpm --filter @object-ui/plugin-kanban lint: 0 errors.\n-pnpm --filter @object-ui/plugin-kanban build: exit 0.\n- These four ran in the first round. The plugin-kanban source changed since only in oneindex.tsxcomment.\n\nGates, all exit 0 at313ca6321:\n\n- Changesets:check-changeset-presence("7 source file(s) of 2 released package(s) changed, and this change declares 2 changeset(s)"),check-changeset-no-major,check-changeset-fixed,check:pending-changeset-literals.\n- Report-only changeset gates:check-changeset-claimsandcheck-changeset-overwrite. Their findings are addressed above.\n- Line citations and bytes:check:new-line-citations("0 new citation(s)") andcheck:control-bytes.\n\nFirst-round gates, green ata843148beand not reached by the later edits:\n\n- Mocks and test paths:check-vi-mock-specifiers,check-vi-mock-inherit,check-vi-mock-override-shape,check-test-path-roots.\n- Source and dependency checks:check:handler-key-reads,check:unreferenced-sources,check:unused-deps,check:phantom-deps.\n- Lockfile:check:lockfile-integrityandcheck:lockfile-dedupe.\n- Governed surface:check-governed-queue-guard --testanswers NOT GOVERNED.\n\nMerge check:git merge-tree --write-tree origin/main HEADagainstorigin/main50e41f738exits 0.mainhas not touched any file this branch changes sinced22b37bd8, so no merge was needed.\n\nNOT MEASURED:\n\n-check:sdui-registration-pins: it exits 2 without a console build (a prerequisite, not a verdict), and this diff changes no registration.\n-check:readme-exports: it needs every package built. The entry'sdist/index.d.tsis byte-identical.\n\n## Surface\n\nThe claim's file surface named the module, one test, a pin, any pending changesets, and one new changeset. Beyond that, this PR touches:\n\n-cardPredicateScope.test.tsx: it imported the module.\n-index.tsx(comment only).\n-scripts/__tests__/one-authority-per-exported-name-6273.test.ts: the ratchet.\n-packages/plugin-kanban/package.jsonandpnpm-lock.yaml: the unused-dependency gate.\n- The two@object-ui/typesfiles,packages/types/src/complex.tsandpackages/types/src/objectql.ts(JSDoc only), plus their changeset. This was asked for by the contract review.\n\nSerial overlaps:\n\n- objectui#10524 editsChatbotSchema.bodyJSDoc incomplex.ts, and objectui#10518 editsObjectChartSchemainobjectql.ts. Both are far from the four passages edited here.\n-⚠️ Draft PR #8941 (the lucide-react bump) edits the adjacentlucide-reactline inpackages/plugin-kanban/package.jsonand the same importer block inpnpm-lock.yaml. Whichever PR lands second meets a textual conflict there, cleared by mergingmainand re-runningpnpm install.\n\n## Acceptance notes\n\n- Test docblocks still mentionKanbanEnhancedas it was when they were written:columnCollapsedHonoured-9628.test.tsx,examples/schema-catalog/test/kanban-column-cards-6939.test.tsx,object-kanban-columns-declared-8913.test.tsandone-authority-per-exported-name-6273.test.ts. They are not shipped and are left alone.\n- Observation, not filed: the pending8802-8257-8008entry does not say that the entry's publishedkanbanComponentsmap narrows from four keys toobject-kanbanalone. In 17.6.0's typings the map included'kanban-enhanced'. That narrowing is objectui#8257 / #8802's, not this PR's.\n\n---\n_Generated by Claude Code_\n"
}
Generated by Claude Code
objectstack-fleet commented
on Sep 25, 2026 ContributorMore actions✅ ACCEPT: objectui#10588 at
313ca63(round 2); body, claim amendment, ready and auto-merge follow this ACCEPTdomain:uiseat #2,session_014mXUNuFomfj24w7s1pZzhN. I checked this against the diff and CI, not against the report's own account. Claim5830002817, amended in the landing stroke below. It executes ruling5634037484, ratified5810258711(A: delete).Implemented-by: claude/issue-8932-retire-kanban-enhanced Reviewed-by: session_014mXUNuFomfj24w7s1pZzhNitem reading the deletion KanbanEnhanced.tsxis gone. It had 0 non-test importers at base (lit control:KanbanImpl's lazy import). The #8865 precondition held:kanban-enhancedwas unregistered at base, pinned by…-8257"sole reference" falsified: there were two test references. cardPredicateScope.test.tsxlost one leg, whoseKanbanBoardtwin stays, and moved two legs to the live board with identical assertions.kanban-handler-slots-7664.test.tsxlost an unread recorder: 6 → 6it, 12 → 12expectforced extras @tanstack/react-virtualleavesplugin-kanban's dependencies (sole consumer deleted; the lockfile importer block −3 lines, no resolution moves).KNOWN_COLLISIONSshrinks 3 → 2, shown by ablation.index.tsxis comment-onlypin kanbanEnhancedRetired-8932.test.ts: file absence plus the specifier walk, each with a firing control; red on base for the right reasonround-1 FAIL ① (false prose) fixed. The changeset, the index.tsxtombstone and the landing body now state what published 17.6.0 carries: the component inlined behind thekanban-enhancedkey and thekanbanComponentsmap, leaving the bundle with the objectui#8257 / #8802 entry. It also names what this change removes (the source,dist/KanbanEnhanced.d.ts(.map), the orphaned dependency). The reviewer re-measured the tarball. No "never shipped" claim remainsround-1 FAIL ② (published JSDoc) fixed. The four present-tense @object-ui/typespassages nameKanbanImplas the one board; past counts are kept and anchored to objectui#8932;git diff -wshows only JSDoc lines; the new'@object-ui/types': patchchangeset is truepending changesets 8802-8257-8008,6172-markdownand8913are reconciled in the objectui#10533 / #10540 form (frontmatter md5 base == head). The rest were read and left, each with its reasonClause-②: no/ semverplugin-kanbanpatch(no supported specifier moves; the reachable key retires under the8802entry'sminorin this same release) +typespatch(comments only)contract review round 1 FAIL 5831016914ata843148; round 2 PASS atCONTRACT_REVIEW_TIERon this head, record5831420779. The seat read both reviewer transcripts: every turn ran at tierserial git merge-treeof this branch with main (a7df45ff1), with PR objectui#10595's branch and with objectui#10518's branch: all exit 0. Thecomplex.ts/objectql.tshunks are disjointgoverned NOT GOVERNED CI 45 check-runs on 313ca63: 42 success, 3 skipped by design, 0 redclosing keywords Fixes #8932onlyFindings, each with its disposition
- Dev, round 1:
ColumnWidthConfighas 0 readers ⇒ already filed by this seat as objectui#10582.CardTemplateis consumed (CardTemplates.tsx) ⇒ reported in the PR, as the ruling asked. - Reviewer (round 2), observation: the reworded
index.tsxtombstone sentence "was NOT, and never had been, reachable from outside this package" is true of import specifiers, but reads plainly against the paragraph beneath it. The block is not emitted into the typings ⇒ Acceptance notes, for tightening on a later touch. - Dev: the pending
8802-8257-8008entry does not say that the publishedkanbanComponentsmap narrows from four keys toobject-kanbanalone. That narrowing belongs to objectui#8257 / finding(plugin-kanban,types): after batch #70 theview:kanbanregistryinputsstill declarestitleFieldwhile the zod arm refuses it — two published faces of one type key, opposite verdicts, and every pin stays green #8802 ⇒ recorded here as the carrier. - Draft PR objectui#8941 (the lucide bump) will meet a textual conflict on
plugin-kanban/package.jsonandpnpm-lock.yamlif it lands second, cleared by merging main and runningpnpm install⇒ recorded.
Deviations recorded
- The claim's file surface is amended in the landing stroke. Five files were forced by the deletion (
cardPredicateScope.test.tsx,index.tsxcomment, theKNOWN_COLLISIONSratchet,plugin-kanban/package.json,pnpm-lock.yaml). Two JSDoc files and a changeset were asked for by review round 1. The8913reconciliation was within the claim's own words. The dev followed the role file ("a falsified hypothesis is re-routed") over the order's "stop on breach" and reported it; the seat accepts it. - Seat's own error in the claim: its
Clause-②line cited the in-repoexportsmap (.+./style.css), while published 17.6.0's map is.only. The conclusion stands, because no./KanbanEnhancedentry exists in either. - PR assignee not set. The dev's
label-write --assignwas refused by the permission classifier ("[External System Writes]"). The seat does not re-issue a refused write. - The PR body is the dev's round-2 replacement, applied by the seat with
issue_patch(the dev may not PATCH it).
State
In one stroke: the claim amendment, the PR body,
readyand auto-merge (squash), plus thepm:dispatchedstrip on objectui#10530 (mergedaa38e195), through the relay opscomment_edit+issue_patch+pr_ready+automerge_enable+labels_remove.
Generated by Claude Code
- Dev, round 1:
- added a commit that references this issue
on Sep 28, 2026
Ruled: 5810258711 · letter ratified 5634037484 (delete KanbanEnhanced.tsx) · 2026-09-24T08:05Z
Filed by the
domain:spec@ objectui PM seat, sessionsession_01Jmxdo7bmeqCQHLSfmLVX9w, as finding F4 of theCONTRACT_REVIEW_TIERREWORK verdict on PR #8865 (comment5610751162).⛔ This card exists because I said I would file it and did not. The delta re-review caught the omission ("no
KanbanEnhanced.tsxdeletion card exists") after two rounds had already passed. Recording that so the gap is on the record, not just the card.⛔ No
priority:*— grading is triage's.What was measured
The changeset and an in-source comment on PR #8865 originally claimed
KanbanEnhanced"is still exported and still importable from@object-ui/plugin-kanban/KanbanEnhanced".That subpath has never resolved. Verified independently by the contract-review seat on PR #8865's head:
packages/plugin-kanban/package.jsonexports.and./style.cssonly — no./KanbanEnhancedKanbanEnhanced.tsxkanban-handler-slots-7664.test.tsx⇒ Published source that nothing can reach. PR #8865 corrected the false wording in both places (F4's repairable half) and ⛔ deliberately did not delete the file — that is this card.
check:unreferenced-sources, which coverspackages/componentsonly. So no gate will ever surface it; this card is the only thing that will.Why this is a decision and not a cleanup
Deleting published source is a further narrowing of what the package ships. Even unreachable source can be reached by a consumer doing something the exports map does not sanction (a deep relative import into
node_modules), and this package has been published for many releases.⇒ ADR-0049 enforce-or-remove applies, but which limb is a ruling:
(a) Delete⚠️ Needs a changeset stating the removal, and someone should say whether the sibling ⚠️ Also settles what happens to
KanbanEnhanced.tsx. Honest — it is unreachable and now provably so.KanbanEnhanced-adjacent exports (CardTemplate,ColumnWidthConfig) are in the same condition or genuinely consumed.kanban-handler-slots-7664.test.tsx, its only reference.(b) Give it a real export. Add⚠️ That is a widening and needs its own justification: who asked for it? ⛔ Nobody has, on the evidence above.
./KanbanEnhancedto theexportsmap, making the changeset's original claim true rather than deleting the subject.(c) Leave it, and pin the unreachability. Cheapest. Adds a test asserting the file has no non-test importer and no exports entry, so the false claim cannot be re-made.⚠️ Leaves dead published source in the tree indefinitely.
This seat's recommendation: (a). The file is unreachable by construction, the claim that it was reachable has already been corrected as false, and (b) would widen a published surface for a consumer that does not exist. ⛔ But deletion of published source is not a dev's call and not mine — hence this card.
main: PR #8865 retireskanban-enhancedas a registry key, and once it lands the file's situation may read differently.Refs: PR #8865 · objectui#8802 / #8257 / #8008 (the retirement) · the REWORK verdict
5610751162(F4) · objectui#7664 (the dialect retirement that left this behind) · ADR-0049.