Repository navigation
fix(plugin-kanban): delete KanbanEnhanced.tsx, the module no export or barrel reached (objectui#8932) - #10588
Conversation
…ng names it Red on the base: the file is present, and two test files still name it as a module specifier (a direct import and a vi.mock target). Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN Co-authored-by: Claude <noreply@anthropic.com>
…r barrel reached Executes the objectui#8932 ruling (delete). The package `exports` map is `.` and `./style.css` only and the entry point never re-exported the component, so nothing supported moves; the published package loses the `dist/KanbanEnhanced.d.ts` typings, the only part of the module it shipped. - cardPredicateScope.test.tsx: the KanbanEnhanced positive leg goes (the KanbanBoard leg pins the same verdict); its fail-soft and bare-field legs now run on KanbanBoard. - kanban-handler-slots-7664.test.tsx: the unread KanbanEnhanced prop recorder goes; no assertion moves. - index.tsx: the kanban-enhanced tombstone no longer says the file stays. - one-authority collision baseline: ConditionalFormattingRule loses the deleted third site (shrink direction). - two pending changesets scoped to "at this change" with a dated note. Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN Co-authored-by: Claude <noreply@anthropic.com>
… was KanbanEnhanced.tsx The deleted module was the one file in @object-ui/plugin-kanban that imported it, so the declaration had no consumer left and check-unused-dependencies went red on the previous commit. The lockfile loses only this importer's three lines; @object-ui/plugin-grid still declares the package. The objectui#8932 changeset says so for anyone who got it transitively. Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN Co-authored-by: Claude <noreply@anthropic.com>
Measured by rebuilding dist/index.css with and without the module: 65 rules kept becomes 62, and the three that leave are border-border/50, text-yellow-500 and shadow-xl. Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN Co-authored-by: Claude <noreply@anthropic.com>
|
changeset-claim-re-read
|
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contract reviewServed-tier: ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: FAIL — (1) rewrite Generated by Claude Code |
…no longer names KanbanEnhanced as a reader Contract review of a843148 (PR comment 5831016914): - The changeset said the component was never in dist/index.js or the UMD bundle. Published 17.6.0 inlines it behind the kanban-enhanced key and exports `.` only. The entry now says the component left the bundle with the objectui#8257 / objectui#8802 key retirement, lists what this change removes (the source file, dist/KanbanEnhanced.d.ts(.map), the orphaned react-virtual dependency), and says style.css first ships in this release without the three rules. The index.tsx tombstone carried the same false clause and is corrected the same way. - Four present-tense JSDoc passages in @object-ui/types (KanbanCard, KanbanColumn.cards, ObjectKanbanSchema.columns twice) named KanbanEnhanced as a live reader; KanbanImpl is now the one board, and the past counts are dated. Comment-only, with an @object-ui/types patch changeset. Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
…o its own change check-changeset-claims asked for this paragraph to be re-read because the branch now edits objectql.ts. The pending objectui#8913 entry says, in the present tense, that the lane members are exactly what "the two board implementations read". With KanbanEnhanced deleted, that is no longer true of what ships. The sentence is now scoped to "at this change", with a dated note in the objectui#10540 form. The frontmatter is byte-identical. Claude-Session: https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contract reviewServed-tier: ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
…te` for the verdict (objectui#10524) (objectstack-ai#10595) Fixes objectstack-ai#10524 Clause-②: no Wording only, on published text: a help string in `@object-ui/cli` and six comments in five `@object-ui/types` files. No export, type, schema or accept set moves. `check` itself is unchanged: objectui#6318 recorded its behaviour as deliberate, and whether it should parse the files it admits is that card's open question, not this one. The house wording is the one PR objectui#10523 used for the two docs pages: `check` sweeps a project's JSON files and recognises a file whose root carries a structural key (`children`, `className`, `body`, …) by that key alone, without parsing it against the schema (it is still read as JSON). Only a file with none of those keys is parsed against the schema. It is listed by name when its root `type` names a registered component but the document does not validate, and that list is advisory: `check` exits non-zero on unreadable JSON only. The verdict is `objectui validate`'s. ## What changed | file | change | | --- | --- | | `packages/cli/src/cli.ts` | H1. The `check` command's description changes from "Validate schema files" to "Advisory JSON file sweep; run objectui validate for a verdict" (61 characters; the longest sibling description has 57). The line count does not change. | | `packages/types/src/complex.ts` | H2. In the `ChatbotSchema.body` tombstone docblock, the root-parse parenthetical now names only `objectui validate`. A new sentence says `check` does not deliver the refusal: `body` is a structural root key, and `check` never parses a file it recognised that way against the schema. One line changed and three added. `body?: never` and every other line are byte-identical. | | `packages/types/src/layout.ts` | H3 hit. The `SemanticElementSchema` docblock said the document "was refused by `objectui check`". It now says `objectui validate`, whose refusal it was. One word changed. | | `packages/types/src/zod/layout.zod.ts` | H3 hit. The same sentence in the zod mirror's docblock ("REFUSED by `objectui check` … stop trusting the validator") now names `objectui validate`. One word changed. | | `packages/cli/src/__tests__/cli-bin.test.ts` | H5 pin, 2 cases. `check --help` must not lead with the verb "validate", and it must name `objectui validate`. Both are red on the base and green at the head (evidence below). | | `packages/types/src/zod/objectql.zod.ts` | Rework-round hits (contract review, comment 5831281522). The `ObjectGanttSchema.gantt` comment ("reaches the CLI's `validate`/`check` … refused at authoring time") and the `ObjectCalendarSchema` `sort` comment ("reaches the CLI's `validate` / `check` — `sort: 'name asc'` …") now name `validate` alone. These are `//` comments, and they ship in `dist/zod/objectql.zod.js`. Two lines changed; `git diff -w` shows no code line. | | `packages/types/src/objectql.ts` | Rework-round hit, the source twin of `.changeset/6475`. The `ObjectGanttSchema.gantt` comment ("therefore the CLI's `validate` / `check` commands") now reads "the CLI's `validate` command". One comment line changed, and it is source-only (a `//` comment on an interface member is dropped from `.d.ts`). The seat decided to fix it here; this seat's other PRs edit this file far from this line. | | `.changeset/10524-check-promise-text.md` | new: `'@object-ui/cli': patch`, `'@object-ui/types': patch`. The rework rounds tightened it: `check` skips the parse against the schema, not the JSON parse; it names the three objectql comments; and its headline counts six comment sites. | | 11 pending `.changeset/*.md` | H4 reconciliations, listed below. Front matter md5 is identical before and after for every file. | ## Measurement on the base `6ea68e63e` The CLI's dependency closure was built with `pnpm --workspace-concurrency=2 --filter "@object-ui/cli..." build`. `objectui --help` listed `check Validate schema files`, and `objectui check --help` printed `Validate schema files`. Probe documents, one directory each: | document | `objectui validate` | `objectui check` over its directory | | --- | --- | --- | | `{ "type": "chatbot", "messages": [], "body": { "tenant": "acme" } }` | exit 1: `REFUSED (objectui#8572, ADR-0049)`, `Path: body` | exit 0. The file is not mentioned, and the run ends with `✓ All checks passed`. | | `{ "type": "chatbot", "messages": "not-an-array" }` (control, no structural key) | exit 1 | exit 0. The file is listed as `carries a registered ObjectUI component type but did not validate`. | So the card's premise holds at the base. `check` admits `chatbot-body.json` by its `body` key and never parses it against the schema. In `check`'s own output, `objectui validate FILE` stands for the angle-bracket placeholder the CLI prints, because GitHub's body sanitizer deletes that shape. ## H5: the pin is red on the base and green at the head I committed the fix first (`dbbd2506e`). For the base leg, `scripts/ablation-replace.mjs` (from the objectstack checkout, in wrap mode, with a `trap … EXIT INT TERM` restore as a second guard) put the base description back into `cli.ts`. It reported anchor `x1 -> x0`, replacement `x0 -> x1` and blob `3b73365ae916 -> 165ca5b`. Then the leg rebuilt `@object-ui/cli` and grepped `dist/cli.js`: new text 0 hits, base text 1 hit. - Base leg: `Tests 2 failed | 38 passed (40)`. The failures were `expected 'Validate schema files' not to match /^\s*validates?\b/i` and `expected 'Validate schema files' to contain 'objectui validate'`. - Restore: the blob equals HEAD's `3b73365ae916` and `git diff HEAD` is empty. After a rebuild, `dist/cli.js` has 1 hit for the new text and 0 for the base text. - Head leg: `Test Files 1 passed (1)`, `Tests 40 passed (40)`, and both `check --help does not present ... (objectui#10524)` cases pass. `git status --porcelain` shows 0 lines. The JSDoc edits carry no pin. They are comments, and I checked them in the built output instead: `dist/complex.d.ts` has 1 hit for "`objectui check` does not deliver it", `dist/layout.d.ts` has 1 for "refused by `objectui validate`", `dist/zod/layout.zod.d.ts` has 1 for "REFUSED by `objectui validate`", and the two layout files have 0 remaining hits for `objectui check`. After the rework round, `dist/zod/objectql.zod.js` has 0 hits for `validate` / `check` in either spelling. Its positive control, "reaches the CLI's `validate` — `sort: 'name asc'`", has 1 hit. ## H4: pending changesets that name `check` I read every paragraph in `.changeset/` that names `check`: the literal "objectui check", plus `check` in backticks and mentions wrapped across a line break. The test I applied: does the sentence tell an author that `check` gives a verdict (refuses, fails, delivers the refusal)? A sentence that only says `check` calls `safeValidateSchema` or answers green is true, so it stands. **Reconciled (11).** Each file now names `objectui validate` for the verdict and gains a `⚠️ **Dated note, 2026-09-25 — … — objectui#10524.**` saying what `check` does. Round 3 tightened every note: `check` "never parses against the schema" a file whose root carries a structural key, because it still reads that file as JSON and fails the run when the JSON is unreadable. Front matter is byte-identical in all 12 changesets this PR touches: - `10478-filter-condition-value-protocol-rule.md`: "now fails `safeValidateSchema`, `objectui check` and `objectui validate`". Its "answered green" sentence stays true of `check`, and the note says so. - `6475-gantt-block-face-declared.md`: the heading's "validate/check time" and "the CLI's `validate` and `check` commands … **refused**, naming the missing field". - `7694-chart-series-chart-type-alias-refusal.md`: "Authors meet it … through the CLI's `objectui check` and `objectui validate` commands". Because this file was touched anyway, its five cross-file `path:line` citations became file names (AGENTS.md objectstack-ai#11). The "Before" bullet stands. - `8466-calendar-color-allday-fields.md`: "refused … through `safeValidateSchema`, the path the CLI's `validate` / `check` take". - `8499-node-slot-registered-arms.md`: "renders correctly in the browser and is refused by `objectui check`". Its "Downstream" paragraph is about the advisory list and stands. - `8505-grid-columns-breakpoint-narrowing.md`: "the JSON authoring face — `os-ui validate` / `check` … now refuses `{ xxl: 6 }`". The command's name is also corrected to `objectui validate` in the same clause. - `8572-chatbot-body-retired.md`: "(`tsc`, `objectui validate`, `objectui check`, …)". This is the changeset twin of the H2 docblock. - `9239-object-calendar-data-array-arm.md`: "reached by `safeValidateSchema` and so by the CLI's `validate` / `check` … refused AT the key". - `9511-record-id-is-a-string.md`: its "Delivery surface" paragraph listed `objectui check` on the parse-time side. - `9559-filter-operator-schema-protocol-set.md`: "(and `objectui check` / `objectui validate`) refused filters". - `9746-render-path-not-a-validation-door.md` (empty front matter): "the three doors that do validate (…; `objectui validate` / `objectui check`; …)". Here the objectui#10533 "at this change" scoping is used, because the section did say that at that change. The note records the later correction by objectui#10416. A deviation from H4 as dispatched: for the other ten I did not use "at this change" scoping. Those sentences were never true of `check`, so scoping them would assert a false history. The sentence is corrected instead, and the dated note records the correction. **Read, and left as they are.** Each of these is either true of `check` or is not a verdict claim: - `6074`: "judges, skips and prints exactly what it did before". - `6075`: recognition by validation, and the advisory report. - `6320`: the glob ignore list. - `7004`: `.success` used as a boolean recogniser. - `7113` ("the `chart: 2` entry in `objectui check`'s 28-file census") and `6939` ("`objectui check` counts four for this row"): both are counts of the advisory list. In the filter-builder case, the four leaf fixtures carry no structural key and `search-interface.json` carries `children` and `className`, so the count is right. - `6051`, `7664`, `8344`: `check` calls `safeValidateSchema`. That is true of the validity arm, and none of these three attributes a refusal to `check`. - `8516`: `check` "was passing documents `tsc` rejects", which is true. - `8802` ("will NOT flag either namespaced spelling"), `9641` and `unknown-component-type-case-suggestion-5247`: they describe the unknown-type warning for recognised files. - `check-schema-positive-marker-and-skip-count`: the marker gate. - `6724`: `ctx.check` is the permissions API, not the CLI. - `10393`, `8760`, `9533`: these describe the unknown-type warning, not a validation verdict, so H4 does not cover them. Their bare-document examples are the finding below. ## Other places that make the same promise (H3), swept again in the rework round The first sweep of package sources used only the literal `objectui check`, so it missed three sentences written as the CLI's `validate`/`check`. The rework sweep ran over `packages/cli` and `packages/types` sources, excluding tests and CHANGELOGs, with three passes: 1. `git grep` for the literal `objectui check`, backticked `check`, `/ check`, `check command(s)` and `'check'`. 2. `git grep` for `check` within 40 characters of `validate`, `CLI` or `refus`. 3. A node scan across line breaks, for `validate` / `check` pairs wrapped over a comment line, and `CLI's … check`. On the head, pass 3 has 0 hits. Its positive control is the pre-fix blobs of `objectql.zod.ts` and `objectql.ts`, which give 2 and 1 hits. Every hit I read, with its verdict: | hit | verdict | | --- | --- | | `zod/objectql.zod.ts`, the `ObjectGanttSchema.gantt` comment ("`validate`/`check` … refused at authoring time") | changed: names `validate` alone | | `zod/objectql.zod.ts`, the `ObjectCalendarSchema` `sort` comment ("`validate` / `check` — `sort: 'name asc'` … refused at authoring time") | changed: names `validate` alone | | `objectql.ts`, the `ObjectGanttSchema.gantt` comment ("the CLI's `validate` / `check` commands … refused at authoring time") | changed: names `validate` alone | | `complex.ts`, the `ChatbotSchema.body` docblock | this PR's own sentence ("`objectui check` does not deliver it") | | `layout.ts` and `zod/layout.zod.ts`, the `SemanticElementSchema` docblocks | changed in round 1 | | `data-display.ts` `BarChartSchema` ("`objectui check` reports it as unrecognised") and `zod/data-display.zod.ts` ("could only report it") | stands: describes the advisory list, not a verdict | | `form.ts` `CodeEditorSchema` ("the validator `objectui validate` and `objectui check` read") | stands: `check` reads `AnyComponentSchema` as its recogniser | | `strict-authoring-face.ts` (wiring `objectui check` "is ruled to come after") | stands: future wiring, no present claim | | `zod/complex.zod.ts` (`safeValidateSchema`, `objectui check` and `objectui validate` "answered green") | stands: true of `check`; the file is held by another seat and not touched | | `packages/cli/README.md`, the heading "`objectui check`, `objectui doctor`, …" | stands: defers to `objectui --help` | | `packages/cli/src/cli.ts`, `.command('check')` | the command registration; its description is the H1 line | | `check.ts`: "`objectui check` judged every root `type`", "the reason `check` reports a third bucket", "the `objectui check` command passes", "`objectui check` exited 1 in any TypeScript project" | stand: the marker gate's history, the advisory bucket, the `cwd` parameter, and the JSONC parse arm, all true | | `known-schema-types.ts` ("`objectui check` uses it", "reports an unrecognised type as a warning and never fails the run") | stands: true | | `known-type-case-suggestion.ts` ("Did you mean for `objectui check`", "`check` still reports `Page` as an unknown schema type", "the suggestion clause `objectui check` appends") | stands for this card: the unknown-type warning, not a validation verdict. It has the same recognised-files-only boundary as the finding below. It is an internal comment. | | `union-arm-diagnostics.ts` ("a DIFFERENT surface (`objectui check`)") | stands: names the surface | | `index.ts` `name:'check'`, `layout.ts` "`check`, `arrow-right`", `zod/layout.zod.ts` `icon:'check'` (four lines) | not the CLI: the lucide glyph name | | `data-protocol.ts` "PRE-CHECK", `strict-authoring-face.ts` "such a check can only ADD refusals", `zod/complex.zod.ts` "the type check (`id: 42` now refuses)", `zod/objectql.zod.ts` "`.check()` refusing `kanban.groupBy`" and "Until this check" | not the CLI: refinements and value checks | ## Gates ### Round 3, head `882c5e13e` (changeset text only) `git diff --stat 1da91cb..882c5e1` lists 12 `.changeset/*.md` files, 12 insertions and 12 deletions, and nothing else. Front matter md5 is identical before and after for all 12. `git merge-tree --write-tree HEAD origin/main` (main at `ab7751321`) exits 0 with tree `dab078939`. None of main's moved files is a file this PR touches. | gate | verdict line | exit | | --- | --- | --- | | `node scripts/check-changeset-presence.mjs` | `✅ 7 source file(s) of 2 released package(s) changed, and this change declares 1 changeset(s): .changeset/10524-check-promise-text.md.` | 0 | | `node scripts/check-changeset-overwrite.mjs` (report-only) | `⚠️ This change touches 11 changeset(s) it did not add`, with all 11 declared-at-base / declares-now pairs identical | 0 | | `node scripts/check-changeset-fixed.mjs` | `✅ All workspace packages are in the changeset fixed group.` | 0 | | `node scripts/check-changeset-claims.mjs` (report-only) | `✅ Every package declared across those 11 body(ies) is either not negated …`. It lists 43 pending changesets naming a touched file; none is about `check`, the gantt block refusal or the calendar `sort` clause. | 0 | | `node scripts/check-new-cross-file-line-citations.mjs` | `VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0` | 0 | | `node scripts/check-control-bytes.mjs` | `✅ check-control-bytes: OK (scanned 8669 tracked text file(s); skipped 85 binary).` | 0 | ### Package gates, head `1da91cb5e` (no package file has changed since) | gate | verdict line | exit | | --- | --- | --- | | `pnpm --filter "@object-ui/cli..." build` (closure, under the verify lock) | `dist/cli.js` has 1 hit for the new text and 0 for the base text | 0 | | `pnpm --filter @object-ui/types type-check` (`tsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json`) | no diagnostics | 0 | | `pnpm --filter @object-ui/cli type-check` (`tsc --noEmit`) | no diagnostics | 0 | | `pnpm exec vitest run packages/types/` | `Test Files 236 passed (236)` · `Tests 5223 passed (5223)` | 0 | | `pnpm exec vitest run packages/cli/` | `Test Files 20 passed (20)` · `Tests 279 passed (279)` | 0 | | `node scripts/check-changeset-no-major.mjs` | `✅ No changeset declares a `major` bump.` | 0 | At that head, `git merge-tree` exited 0 against main (`a7df45ff1`), against PR objectstack-ai#10588's head `313ca6321`, and against `claude/issue-10518-object-chart-axis-config`. Round-1 readings that the rework does not move stand at `bf809e6c5`: the red-then-green pin (`cli.ts` and `cli-bin.test.ts` are unchanged since then), the lint subset, `pnpm check`, the installed-pin and pending-literal gates, the disk-reading tests, and the governed-surface guard. ## Acceptance notes These are not filed. - Some test comments still say `check` refuses or validates: the header of `node-slot-registered-arms-8499.test.ts`, one comment in `filter-builder-mirror-6939.test.ts`, and the headers of `filter-condition-value-protocol-rule-10478.test.ts` and `chart-data-model-7113.test.ts`. Tests are not published, and no assertion depends on those comments. - `7546-chart-series-keys-declared.md` counts `objectui check` among the consumers of the parse output. `check` reads only `.success`, so it loses nothing. That sentence does not claim a verdict. - `7773-kanban-adapter-groupfield-write.md` names `os check` / `os validate`, which is not this CLI. It was not measured. - `8516-8556-mirror-partial-record-narrowing.md` spells the CLI as `os-ui validate`, and the bin is `objectui`. Its `check` clause is true. - In `check.ts`, the inline comment "Schema validation: check for ObjectUI schema patterns" is a code comment that ships in no user-facing output. It is outside this file surface. ## For the seat - File surface: `layout.ts`, `zod/layout.zod.ts`, `objectql.ts` and `zod/objectql.zod.ts` are H3 hits inside `@object-ui/types`. `objectql.ts` is here by seat decision. Each edit is confined to its comment lines, away from the lines PR objectstack-ai#10588 and the objectui#10518 branch edit. `git merge-tree --write-tree` of this head against PR objectstack-ai#10588's head `313ca6321` exits 0, and against `claude/issue-10518-object-chart-axis-config` it also exits 0. The claim comment's surface names only the `complex.ts` docblock, so it needs these four paths appended. - A finding outside this card: `.changeset/8760-unfulfilled-chart-stubs.md` says `{ "type": "line-chart" }` makes `objectui check` report `Unknown schema type "line-chart"`, and `.changeset/9533-dashboard-bare-key-converge-plugin-namespace.md` says the same for `{ "type": "view:dashboard" }`. On the base, `check` over those exact bare documents prints `Skipped 2 files with a root "type" that no ObjectUI recogniser admitted.` and exits 0, with no unknown-type line. The control `{ "type": "line-chart", "className": "h-64" }` prints `⚠️ Unknown schema type "line-chart" in line-chart-structural.json`. `10393-retire-bare-map-key.md`'s "so the check now flags it" has the same boundary. This is a claim about how far a diagnostic reaches, not a verdict claim, so the contract review graded it a different family with its own card; the seat filed it as objectui#10606. That card can reuse PR objectui#10523's recognition-gate wording. Written by the dispatched dev for the `domain:ui` seat 2, session `https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN`. --- _Generated by [Claude Code](https://claude.ai/code/session_014mXUNuFomfj24w7s1pZzhN)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
Fixes #8932
Clause-②: no
@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.Executes ruling
5634037484, 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.What changes
packages/plugin-kanban/src/KanbanEnhanced.tsxis deleted.npm pack: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.dist/index.d.tsreferences./KanbanEnhanced.exportsmap is.only. The tarball contains no CSS file.8802-8257-8008entry), not with this PR. Building the base (d22b37bd8, after feat(types,plugin-kanban,plugin-gantt)!: retire the barekanban/ganttnode keys and thekanban-ui/kanban-enhancedregistrations #8865) and this branch,dist/index.jsanddist/index.umd.cjscontainKanbanEnhanced0 times on both sides (control:KanbanImplis found indist/index.js).@object-ui/plugin-kanbanon the base and on the branch:dist/KanbanEnhanced.d.tsanddist/KanbanEnhanced.d.ts.map. Nothing else leaves thedist/listing.dist/index.d.tsis byte-identical (cmpexit 0).@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.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.@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:KanbanCard: "whatKanbanImplreads back".KanbanColumn.cards: "measured at objectui#6939: 12 lines inKanbanImpl, and 8 inKanbanEnhanceduntil objectui#8932 deleted it".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.KanbanColumn.collapsed, on the retiredcolormember, and on the retired lane-collapse key stay as they were.git diff -wover the two files shows only lines starting with*..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..changeset/8932-kanban-enhanced-types-jsdoc.md('@object-ui/types': patch) is one sentence on the JSDoc.Premise re-checked on the current
main(d22b37bd8)H1: confirmed for the source tree, with lit controls.
exportskeys are.and./style.css.importorexportline that namesKanbanEnhanced(grep exit 1). Control: the same grep finds theReact.lazyimport of./KanbanImpl.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.kanban/ganttnode keys and thekanban-ui/kanban-enhancedregistrations #8865, and wrongly concluded the component was never bundled. The published 17.6.0 package does bundle it (see "Where the component was" above).kanban/ganttnode keys and thekanban-ui/kanban-enhancedregistrations #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.H2: falsified. The module had two test references, not one:
src/__tests__/kanban-handler-slots-7664.test.tsx: avi.mocktarget whose prop recorder no leg read.src/cardPredicateScope.test.tsx: a direct import. This is the reference theindex.tsxtombstone itself named.I handled both as the ruling's intent directs: each test is deleted, or rewritten to what it still pins.
Test files: every assertion kept, removed or moved
kanban-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.cardPredicateScope.test.tsx:KanbanBoardtwin stays and pins the same verdict on the one registered board.KanbanEnhanced→KanbanBoard:Other files the deletion forced
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.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.ablation-replace(anchor 1 → 0, blob0a8b7933d98f→d610bed3eea6).git diff HEADis empty.packages/plugin-kanban/package.jsonandpnpm-lock.yaml: the dependency removal described above.Pending changesets (H4)
Three 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, and
check-changeset-overwriteprints the same "declared at base" and "declares now" lines.8802-8257-8008-kanban-gantt-family-retirement.md: "KanbanEnhanced.tsxhas zero non-test importers. ⛔ The file is deliberately left in place".6172-markdown-kanban-one-authority.md: "both files now re-point at it".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.Read and left as they are:
6939-kanban-column-cards.md: a measurement anchored at78a3cc238.9628-kanban-column-collapsed-honoured.md: describes the reader as it was before objectui#9628.6172-kanban-trio-rename.md: it names thekanban-enhancedregistry key among "four registered kanban renderers". That went stale with the 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 key retirement, not with this file deletion.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.complex.tsorobjectql.tsdescribe members this PR does not touch. The edits in those files are comment-only on the four kanban passages above.CardTemplate/ColumnWidthConfig: report only, not deletedNeither type is in
KanbanEnhanced's condition. Both are exported through.(the entry'sexport typeline from./types), and the deleted module named neither of them (0 hits).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.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.KanbanCardis named by the consumersKanbanImpl.tsxanduseQuickAddReorder.ts.Pin (H5): red on the base, green on the head
packages/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:src/. Control:KanbanImpl.tsxin the same directory reads present.src/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.Red on
76265dfdc(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.Verification (final head
313ca6321)Test runs, all from the repo root under the shared verify lock:
pnpm exec vitest run --maxWorkers=2 packages/types/ packages/plugin-kanban/: 298 files and 5636 tests passed.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.2165ee472(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.Type-check, lint and build:
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).pnpm --filter @object-ui/plugin-kanban type-check: exit 0.--listFileson the test program lists the pin and both rewritten tests.pnpm type-check:scripts: exit 0.pnpm --filter @object-ui/plugin-kanban lint: 0 errors.pnpm --filter @object-ui/plugin-kanban build: exit 0.index.tsxcomment.Gates, all exit 0 at
313ca6321: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.check-changeset-claimsandcheck-changeset-overwrite. Their findings are addressed above.check:new-line-citations("0 new citation(s)") andcheck:control-bytes.First-round gates, green at
a843148beand not reached by the later edits:check-vi-mock-specifiers,check-vi-mock-inherit,check-vi-mock-override-shape,check-test-path-roots.check:handler-key-reads,check:unreferenced-sources,check:unused-deps,check:phantom-deps.check:lockfile-integrityandcheck:lockfile-dedupe.check-governed-queue-guard --testanswers NOT GOVERNED.Merge 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.NOT MEASURED:
check:sdui-registration-pins: it exits 2 without a console build (a prerequisite, not a verdict), and this diff changes no registration.check:readme-exports: it needs every package built. The entry'sdist/index.d.tsis byte-identical.Surface
The claim's file surface named the module, one test, a pin, any pending changesets, and one new changeset. Beyond that, this PR touches:
cardPredicateScope.test.tsx: it imported the module.index.tsx(comment only).scripts/__tests__/one-authority-per-exported-name-6273.test.ts: the ratchet.packages/plugin-kanban/package.jsonandpnpm-lock.yaml: the unused-dependency gate.@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.Serial overlaps:
ChatbotSchema.bodyJSDoc incomplex.ts, and objectui#10518 editsObjectChartSchemainobjectql.ts. Both are far from the four passages edited here.lucide-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.Acceptance notes
KanbanEnhancedas 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.8802-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 / 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's, not this PR's.Generated by Claude Code